Informatică, întrebare adresată de TeodoraEnciu, 9 ani în urmă


Poate cineva sa ma ajute cu explicatii detaliate la o tema pentru informatica ? Simularea pentru bac emisa in 2014. Multumesc pentru atentia si ajutorul acordat!

Anexe:

uleiaalex: problema are errori la exercitiul 2 de la subiectul I
uleiaalex: si in barem scrie ca afiseaza doar 1, ci defapt afiseaza 1 si 2

Răspunsuri la întrebare

Răspuns de blindseeker90
1
Vad ca nu a inceput nimeni sa raspunda, asa ca o sa iti dau solutiile la o parte din problemele de acolo.
Imaginile atasate sunt pentru Subiectul II ex1) si subiectul II ex2) La ambele raspunsul e 4 cum este explicitat in imagini

//Subiectul I exercitiul 2
#include <iostream>
using namespace std;

int main(){

int x,y,p,a;
//citeste x
cin>>x;
int nr=0;
//treci prin toate cifrele de la 0 la 9
for(a=0;a<=9;a++){
//salveaza valoarea citita in y
y=x;
//nr de aparitii initial al cifrei este 0
p=0;
//cat timp nu am terminat de citit cifrele numarului
do{
//daca cifra curenta din numarul citit este egala cu cifra a
if(y%10==a){
//atunci mareste cu 1 nr de aparitii
p=p+1;
}
//treci la urmatoarea cifra
y=y/10;
}while(y>0);
//daca nr de aparitii e mai mare decat 1, atunci arata cifra
if(p>1){
cout<<a<<" ";
}
}

return 0;
}

//Subiectul 2 exercitiul 3
#include <iostream>
using namespace std;


//structura e urmata de ; si are definitia intre {}
struct Carte{
double pret;
int nr_pagini;
char titlu[50];
};

int main(){
//pentru a declara o carte, scrii tipul inainte precum in cazul tipurilor de valori
Carte manual;
//pentru a apela un camp din interior, doar pui . dupa variabila de structura
cout<<"Scrieti titlul cartii dorite:";
cin>>manual.titlu;
cout<<"Cate pagini are cartea: ";
cin>>manual.nr_pagini;
cout<<"Cat costa cartea: ";
cin>>manual.pret;
cout<<"Ati cumparat cartea "<<manual.titlu<<" cu pretul "<<manual.pret<<" si numar de pagini: "<<manual.nr_pagini;
return 0;
}

//Subiectul 2 exercitiul 4
#include <iostream>
#include <string.h>
using namespace std;

int main(){
//iei toate caracterele de la a la z
//daca un caracter se afla in cuvantul informatica, atunci afiseaza-l
//programul va duce practic la ordonarea alfabetica a tuturor literelor din informatica
//adiica: acfimnort
for(char i='a';i<='z';i++){
if(strchr("informatica",i)!=NULL){
cout<<i;
}
}

return 0;
}

//subiectul 2 exercitiul 5
#include <iostream>
using namespace std;

int main(){
//limitele la matrice sunt 26 pentru ca avem 
//indici de la 1 la 25
int m,n,a[26][26],i,j;
cin>>n>>m;
//ultima linie este plina de 1
for(j=1;j<=m;j++){
a[n][j]=1;
}
//ultima coloana este plina de 1
for(i=1;i<=n;i++){
a[i][m]=1;
}
//incepem din coltul dreapta jos, facem sume 2 cate 2 si scoatem ultima cifra
for(i=n-1;i>=1;i--){
for(j=m-1;j>=1;j--){
//a[1+1][j] este urmatorul element de pe linia dedesubt
//a[i][j+1] este urmatorul element de pe aceeasi linie
a[i][j]=(a[i+1][j]+a[i][j+1])%10;
}
}
//afisare matrice
for(i=1;i<n;i++){
for(j=1;j<=m;j++){
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}

//exercitiul 3 subiectul 2
#include <iostream>
using namespace std;

// argumentul x reprezinta exponentul puterii lui 2
//observi ca de fiecare data cand x este par, se inmulteste cu el insusi la jumatate
//ar cand x este impar se inmulteste cu 2
//astfel, daca ai x=5, devine F(5)=2*F((5-1)/2)*F((5-1)/2)=2*F(2)^2
//acum trebuie aflat F(2) acum x=2, deci x par formula devine
//F(2)=F(1)*F(1)=f(1)^2
//iarasi avem x impar, x=1 deci avem atunci
//F(1)=2*F((1-1)/2)*F((1-1)/2)=2*F(0)*F(0)=2*F(0)^2
//dar f(0) vedem mai jos ca este 1 si atunci avem
//F(1)=2^1
//F(2)=2*F(1)=2*2=2^2
//F(5)=2*F(2)^2=2*(2^2)^2=2*(2^4)=2^5
//deci vezi ca acum F(x)=2^x
//in cazul nostru F(11)=2^11=2048
int F(int x){

//cout<<"F("<<x<<")="<<F(x)<<endl;
if(x==0) return 1;
if(x%2==0){
return F(x/2)*F(x/2);
}
return 2*F((x-1)/2)*F((x-1)/2);
}

int main(){
int a=F(11);
cout<<a;
return 0;
}

//exercitiul 3 subiectul 4
#include <iostream>
#include <fstream>
#include <limits>
#define MIN_PROB -999999999
using namespace std;

//cea mai simpla metoda si eficienta este sa salvezi mereu
//in 2 variabile, sa zicem a si b cele mai mari numere pare la acel moment
//si sa citesti cate un nr din fisier si sa il compari cu cele 2 si daca este mai mare
//sa il schimbi cu unul dintre ele. Initial variabilele vor avea cea mai mica valoare posibila
//cu 9 cifre negativa. Metoda este eficienta pentru ca foloseste doar 2 variabile ca memorie, in loc
//de un vector petnru sortare, si este rapida pentru ca parcurge numerele din fisier o singura data
int main(){
ifstream fin("numere.txt");
long int a=MIN_PROB,b=MIN_PROB,nr;
//cat timp citesti un nr nou
while(fin>>nr){
//daca nr este par
if(nr%2==0){
//daca nr este mai mare decat valoarea a
if(nr>a){
//daca valoarea a este mai mare decat b, o va inlocui
if(a>b){
b=a;
}
//iar nr il inlocuieste pe a
a=nr;
}
//altfel, comparam cu valoarea b si o inlocuim cu aceasta
else if(nr>b){
b=nr;
//aici nu mai verificam daca b este mai mare decat a. Daca ar fi asa,
//atunci nr fiind mai mare decat b, si nr ar fi mai mare decat a, si s-ar
//duce pe cealalta ramura a comparatiei
}

}
}
cout<<a<<" "<<b;
return 0;
}
Anexe:
Alte întrebări interesante