bacalaureat informatica 2007 varianta 14

PROBLEME REZOLVATE BACALAUREAT 2007

VARIANTA 14

SUBIECTUL III

1. Pe prima linie a fisierului text numere.txt se afla o valoare naturala (0<n<=100) iar pe urmatoarea linie se afla exact n valori naturale distinctre de cel mult 4 cifre fiecare, valori despartite prin cate un spatiu. Scrieti programul c++ care afiseaza pe ecran toate numerele prime de pe a doua linie a fisierului, in ordine crescatoare a valorii lor. Numerele vor fi afisate pe cate o linie separate prin spatiu.

#include<fstream.h>
#include<math.h>
ifstream f(“numere.txt”);
int b[101],i,j,n,a[101],aux;
int prim(int x)
{
if(x==1)
return 0;
else
{

for(i=2;i<=sqrt(x);i++)
if(x%i==0)
return 0;
}
return 1;
}

void citire()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>a[i];
}
}
void main()
{
citire();

for( int k=1;k<=n;k++)
if(prim(a[k]))
{
j++;
b[j]=a[k];
}
for(i=1;i<j;i++)
for(k=i+1;k<=j;k++)
if(b[i]>b[k])
{
aux=b[i];
b[i]=b[j];
b[j]=aux;
}
for(i=1;i<=j;i++)
cout<<b[i]<<” “;
}

2. Scrieti un program eficient din punct de vedere al timpului de executare si al spatiului de memorie, care citeste de la tastatura un numar natural n (n<=1000) si afiseaza pe ecran cel de-al n-lea termen al sirului: 1, 1,2,2, 1,2,3,3,3, 1,2,3,4,4,4,4, …construit astfel: prima grupa este formata din 1, a doua grupa este formata din 1 urmat de 2 de doua ori etc

#include<iostream.h>
int n,i,s1,s2,gr;
void f()
{
cin>>n;
for(i=1;i<=n;i++)
if(i%2==1)
{
gr++;
s2+=i;
if(s2>=n)
{    
s1=s2-i;
i=n+1;
}
}

if(n-s1<(float)(s2-s1)/2)
cout<<n-s1;
else
cout<<gr;
}
void main()
{
f();
}

3. Scrieti un program c++ care construieste in memorie o matrice patratica cu n linii si n coloane formata astfel:elementele de pe diagonala principala sunt toate nule;elementele de pe linia i (1<=i<=n) , aflate deasupra diagonalei principale au valoarea egala cu i; elementele de pe coloana i (1<=i<=n) aflate sub diagonala principala au valoarea egala cu i. Valaorea lui n ( numar natural, 2<n<=50) se citeste de la tastura, iar matricea construita se afiseaza pe ecran.

#include<iostream.h>
int a[51][51],i,j,n;
void matrice(int x)
{
for(i=1;i<=x;i++)
for(j=1;j<=x;j++)
if(i==j)
a[i][j]=0;
else
if(i<j)
a[i][j]=i;
else
if(i>j)
a[i][j]=j;
}
void afis()
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<” “;
cout<<endl;
}
}
void main()
{
cin>>n;
matrice(n);
afis();
}

varianta 12 bacalaureat informatica 2007

1) Fisierul text bac.txt contine prenumele elevilor unei clase, cate un prenume pe o linie a fisierului.Scrieti un program eficient care afiseaza pe ecran numarul de caractere ale celui mai lung prenume prcum si numarul prenumelor cu aceasta lungime.

#include<fstream.h>
#include<string.h>
ifstream f(“bac.txt”);
char c[20];
int max,nr;
void citire()
{
nr=1;
max=0;
while(f>>c)
{
if(strlen(c)==max)
nr++;
if(strlen(c)>max)
{
nr=1;
max=strlen(c);
}
}
}
void main()
{
citire();
cout<<max<<” “<<nr;
}

2)Se citesc de la tastatura 2 valori naturale m si n (m,n ;=100) si apoi m*n numere intregi mai mici de 32000 reprezentand elementele unei matrici cu m linii si n coloane.Se cere sa se determine valorile maxime de pe fiecare linie a matricii si sa se scrie pe ecran suma lor.

#include<iostream.h>
int m,n,i,j,a[101][101],suma,s[101];
void main()
{
cin>>m>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(a[i][j]>s[i])
s[i]=a[i][j];
for(i=1;i<=m;i++)
suma+=s[i];
cout<<suma;
}

3)O lista liniara simla alocata dinamic contine in fiecare nod al sau, in campul info o valoare reala, iar in campul adr, adresa urmatorului nod din lista.Definiti tipurile de date corespunzatoare listei si scrieti apoi definitia completa a subprogramului modif, care primeste ca parametru adresa primului nod al unei liste cu minimum doua elemente, si care insereaza intre oricare doua noduri consecutive din lista, un nou nod care va contine in campul info, media aritmetica a valorilor memorate in nodurile vecine.De exemplu, daca lista cintine initial, in ordine, valorile 5 9 12 6, dupa prelucrare lista va contine, in ordine, valorile 5 7 9 10.5 12 9 6.

#include<iostream.h>
struct nod {
float info;
nod *adr;
};
nod *p,*q,*u,*q2;
int n;
void creare()
{
p=new nod;
cout<<“dati inf: “;cin>>p->info;
p->adr=NULL;
u=p;
for(int i=2;i<=n;i++)
{
q=new nod;
cout<<“dati inf: “;cin>>q->info;
u->adr=q;
q->adr=NULL;
u=q;
}
}
void adaugi(int val,float med)
{
nod *r=p;
while(r->adr->info != val)
r=r->adr;
q=new nod;
q->info=med;
q->adr=r->adr;
r->adr=q;
}

void modif()
{
for(q=p;q->adr!=NULL;q=q->adr)
{
float nr;
nr=(q->info+q->adr->info)/2;
adaugi(q->adr->info,nr);
}
}    

void afis()
{
for(q=p;q;q=q->adr)
cout<<q->info<<” “;
}
void main()
{
cin>>n;
creare();
afis();
cout<<endl;
modif();
afis();
}

probleme rezolvate bacalaureat informatica

PROBLEME REZOLVATE BACALAUREAT INFORMATICA C++

probleme rezolvate bacalaureat informatica partea a 2-a

probleme rezolvate bacalaureat informatica partea a 3-a

 

-)Scrieti programul C sau C++ care construiete în memorie o matrice p cu n linii si n coloane formata numai din valori 1 si 2 astfel încât elementele de pe diagonala secundara si cea principala sa fie egale cu 1, iar restul elementelor din matrice sa fie egale cu 2

#include<iostream.h>
int n,i,j,a[23][23];
void matrice(int x)
{
for(i=1;i<=x;i++)
for(j=1;j<=x;j++)
if(i==j || i==x-j+1)
{
a[i][j]=1;
}
else
{
a[i][j]=2;
}
}
void afis()
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<” “;
cout<<endl;
}
}

{module orizontal600}

void main()
{
cout<<“dati n: “;cin>>n;
matrice(n);
afis();
}

-)Realizati urmatoarele cerinte utilizând limbajul C/C++:
a) Scrieti definitia completa a unui subprogram sub cu doi parametri care:
· primeste prin intermediul parametrilor a si b doua numere naturale formate fiecare din cel mult 8 cifre;
· elimina cifra unitatilor numarului continut de parametrul a, mutând-o la sfârsitul numarului continut de parametrul b;
· returneaza prin intermediul parametrilor a si b noile numere obtinute.
De exemplu, pentru valorile 1234 si 56 ale parametrilor a si b, în urma executarii subprogramului sub valorile returnate prin intermediul parametrilor vor fi 123 si 564.
b) Scrieti programul care citeste de la tastatura un numar natural n cu cel mult 8 cifre si care verifica daca numarul n este un palindrom, folosind apeluri ale subprogramului sub. Programul va afisa pe ecran mesajul DA daca numarul este palindrom, altfel va afisa mesajul NU. (Un numar natural n este palindrom daca este egal cu numarul obtinut prin scrierea cifrelor numarului n în ordine inversa.)
De exemplu, daca n=12321 atunci se va afisa pe ecran mesajul DA, iar daca n=124321 atunci se va afisa pe ecran mesajul N

#include<iostream.h>
long n;
void sub(long &x,long &y)
{
y=y*10+x%10;;
x=x/10;
}
void main()
{
cin>>n;
long a=n;
long b=0;
while(a!=0)
{
sub(a,b);
}
if(n==b)
cout<<“DA”;
else
cout<<“NU”;
}

-)Scrieti programul C sau C++ care citeste de la tastatura un sir de cel mult 30 de litere ale alfabetului englez si creeaza fisierul text BAC.TXT ce contine sirul de caractere dat si toate prefixele acestuia de lungime cel putin 1, fiecare pe câte o linie, în ordinea descrescatoare a lungimii prefixelor. De exemplu, daca se citeste sirul: proba, atunci BAC.TXT va contine:
proba
prob
pro
pr
p

#include<fstream.h>
#include<string.h>
ofstream g(“bac.txt”);
char c[30];
void main()
{
int t,k,i,j;
cin>>c;
t=strlen(c);
k=t;
for(i=0;i<t;i++)
{
for(j=0;j<k;j++)
{
g<<c[j];

}
g<<endl;
k–;
}
}

-) Scrieti programul C sau C++ care construieste în memorie o matrice patratica cu n linii si n coloane formata numai din valori 0,1 si 2 astfel încât elementele de pe diagonala secundara si cea principala sa fie egale cu 0, elementele situate între diagonalele matricei, în partea superioari inferioara acesteia, sa fie egale cu 1, iar restul elementelor din matrice sa fie egale cu 2. Valoarea lui n (numar natural, 2<n<23) se citeste de la tastatura, iar matricea se va afisa pe ecran, câte o linie a matricei pe câte o linie a ecranului, cu spatii între elementele fiecarei linii (ca în exemplu).
De exemplu, pentru n=5 se construieste în memorie si se afiseaza matricea:
0 1 1 1 0
2 0 1 0 2
2 2 0 2 2
2 0 1 0 2
0 1 1 1 0

#include<iostream.h>
int a[24][24],i,j,n;
void matrice(int x)
{
for(i=1;i<=x;i++)
for(j=1;j<=x;j++)

if(i>j && x-i+1>j)
a[i][j]=2;
else
if(i>j && x-i+1<j)
a[i][j]=1;

else
if(i<j && x-i+1>j)
a[i][j]=1;
else
if(i<j && x-i+1<j)
a[i][j]=2;
else
if(i==j || i==x-j+i)
a[i][j]=0;
}
void afis()
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<a[i][j]<<” “;
cout<<endl;
}
}
void main()
{
cout<<“dati n: “;cin>>n;
matrice(n);
afis();
}

probleme rezolvate bacalaureat informatica partea a 2-a

probleme rezolvate bacalaureat informatica partea a 3-a