PROBLEME REZOLVATE BACALAUREAT INFORMATICA C++

probleme rezolvate bacalaureat informatica partea a treia

-)Realizati urmatoarele cerinte utilizând limbajul C/C++:
a) Scrieti definitia completa a unei functii nr cu doi parametri, functie care:
· primeste prin intermediul parametrilor a si b doua numere reale pozitive;
· returneaza numarul de numere întregi cuprinse între valorile parametrilor a si b, inclusiv.
De exemplu, pentru valorile 10.5 si 7 ale parametrilor a si b, functia va returna valoarea 4 deoarece între valorile 7 si 10.5 sunt 4 numere întregi: 7, 8, 9 si 10.
b) Scrieti programul în care se citesc de la tastatura numerele naturale nenule a si k (a apartine[1000,9999], 4 mai mic egal k mai mic egal 9) si în care se determincâte numere naturale de câte k cifre se divid cu a, folosind apeluri ale subprogramului nr. Programul va afisa pe ecran numarul de numere determinat.
De exemplu, daca a=2007 si k=4, atunci numarul afisat este 4, deoarece sunt 4 numere de 4 cifre care se divid cu 2007 (2007, 4014, 6021, 8028).
Observatii: Conceptia prelucrarilor de la a) si b) trebuie sa aiba în vedere criteriul de eficienta privind timpul de executare; daca se rezolva corect cerinta b) fara a se utiliza apeluri ale functiei definite la a), se va acorda un punctaj partial.

#include<iostream.h>
#include<math.h>
int max(float x,float y)
{
if(x>=y)
return x;
else return y;
}
int min(float x,float y)
{
if(x<y) return x;
else return y;
}
int nr(float a,float b)
{
int i;
int ok=0;
a=a*10;
b=b*10;
for(i=(int)min(a,b);i<=(int)max(a,b);i++)if(i%10==0)
ok++;return ok;
}
void main()
{int a,k;
float m,n;
cout<<"dati a: ";cin>>a;
cout<<"dati k: ";cin>>k;
m=pow(10,k-1)/a;
n=(pow(10,k)-1)/a;
cout<<nr(m,n);
}

-)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 sufixele acestuia de lungime cel putin 1, fiecare pe câte o linie, în ordinea crescatoare a lungimii sufixelor, aliniate la stânga. De exemplu, daca se citeste sirul teste, atunci BAC.TXT va contine:
e
te
ste
este
teste

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

3.III.1.Scrieti programul C/C++ care construieste în memorie o matrice patratica 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, elementele situate între diagonalele matricei, în partea superioara si 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:

1 1 1 1 1
2 1 1 1 2
2 2 1 2 2
2 1 1 1 2
1 1 1 1 1

#include<iostream.h>
int a[24][24],i,j,n;
void matrice(int n)
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i>j && n-i+1>j)
a[i][j]=2;
else
if(i<j && n-i+1<j)
a[i][j]=2;
else
a[i][j]=1;
}
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();
}

3.III.3.Scrieţi programul C sau C++ care citeşte din fişierul BAC.TXT un şir s de cel mult un milion de numere naturale, fiecare num r având cel mult patru cifre, i care determin în mod eficient din punctul de vedere al timpului de executare i al spa iului de memorie folosit, num rul de componente ale irului ob inut prin eliminarea din cele dou extremit i ale lui s a unui num r minim de componente, astfel încât şirul rezultat să înceapă şi să se termine cu câte un număr par. Fişierul BAC.TXT cortine cel puţin un num r par iar numerele din fi ier sunt separate printr-un singur spa iu. Programul va afi a pe ecran num rul de componente ale irului ob inut.
De exemplu, dac fi ierul BAC.TXT con ine numerele:
1 245 22 67 34 29 345 8 354 11 7 34 12 45 39 41 26 67 89 1011
se va afişa pe ecran numărul: 15, deoarece sunt eliminate numerele subliniate iar şirul rezultat este format din 15 numere.

#include<fstream.h>
ifstream f("bac.txt");
void citire()
{
int pi=0,pf=0,i=0,x,ok=1;
while(!f.eof() && ok==1)
{
f>>x;
i++;
if(x%2==0)
{
ok=0;
pi=i;
}
}
while(!f.eof())
{
f>>x;
i++;
if(x%2==0)
pf=i;
}
cout<<pf<<" "<<pi;
}
void main()
{
citire();
}

probleme rezolvate bacalaureat informatica partea a treia