SUBIECTE SI REZOLVARI C++ PENTRU EXAMENUL DE ATESTAT LA INFORMATICĂ

25.Se citeşte de la tastatura un număr natural nenul n care are cel mult 9 cifre. Sa se afişeze in fişierul Date.out numărul k, natural, astfel încât produsul 1*2*…*(k-1)*k sa aibă o valoare cat mai apropiata de numărul n. De exemplu, daca se citeşte numărul n=25 fişierul Date.out are următorul conţinut: 4. iar daca se citeşte numărul n=119 fişierul Date.out are următorul conţinut: 5

#include<iostream.h>

#include<fstream.h>

void main()

{int k,p,r,n;

cout<<"n=";cin>>n;

k=1;

fstream g("date.out",ios::out);

p=1;

while(p<=n)

{p=p*k;

k++;}

p=p/(k-1);

r=p*k;

if((n-p)<=(r-n))

g<<"numarul k este "<<k-2;

else

g<<"numalul k este "<<k-1;

g.close();

}

27.Scrieţi un program care citeşte un număr natural n>1 cu maximum 9 cifre, si afişează valoarea celui mai mic divizor prim a lui n, precum si puterea la care acest divizor apare in descompunerea in factori primi a numărului n.

#include<iostream.h>

int n,p,c;

void cmmd(int n)

{int gasit=0,d=2;

while((d<n/2)&&(gasit==0))

{if(n%d==0)

{c=d;

gasit=1;}

else

d++;}

p=0;

while(n%c==0)

{n=n/c;

p=p+1;}}

void main()

{cout<<"n=";cin>>n;

cmmd(n);

cout<<c<<" la puterea "<<p;

}

28.Să se scrie un program care să calculeze şi să afişeze pe ecran produsul cifrelor pare şi suma cifrelor impare a unui număr natural n citit de la tastatură.

#include<iostream.h>

unsigned int n, s, p=1, c;

void main()

{

cin>>n;

while(n)

{

c=n%10;

if(c%2==0)

p=p*c;

else

s=s+c;

n=n/10;

}

cout<< p <<" "<< s;

}

29.Sa se verifice daca doua cuvinte introduse de la tastatura (cuvintele având maxim 50 de caractere fiecare) sunt rime, adică ultimele p caractere ale celor doua cuvinte coincid, unde p (2<=p<=10) este dat.

#include<iostream.h>

#include<string.h>

char s1[51], s2[51];

int p, x, y, ok=0;

void main()

{

cin>> s1>>s2>>p;

x=strlen(s1)-1;

y= strlen(s2)-1;

for( int i=1;i<=p && ok==0 ;i++)

{

if(s1[x]!=s2[y])

ok=1;

x--;

y--;

}

if(ok)

cout<<"Nu sunt rime";

else

cout<<"Sunt rime";

}

30.Scrieţi un program care construieşte o matrice pătrată de ordin n formată din valorile 1 si 2 astfel încât elementele de pe diagonala principala si secundară sa fie egale cu 1 iar restul elementelor cu 2. Valoarea lui n se citeşte de la tastatură: n număr natural (2<23), iar matricea se va afişa pe ecran, cate o linie a matricei pe fiecare rând pe ecran cu spatii intre elementele fiecărei linii.

Exemplu: Fie n=5. Se va afişa:

1 2 2 2 1

2 1 2 1 2

2 2 1 2 2

2 1 2 1 2

1 2 2 2 1

#include<iostream.h>

int a[10][10], i, j, n;

void main()

{

cin>>n;

for(int i=1;i<=n;i++)

for(int j=1;j<=n;j++)

if(i==j || i+j==n+1)

a[i][j]=1;

else

a[i][j]=2;

for(i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

cout<< a[i][j];

cout<< endl;

}

}

31.Scrieţi un program care citeşte de la tastatură un sir de cel mult 50 de caractere si construieşte fişierul atestat.txt ce conţine şirul si prefixele acestuia de lungime cel puţin 1, fiecare pe cate o linie, in ordinea descrescătoare a lungimii prefixelor.

Exemplu: Daca se citeşte şirul ‘proba’ atunci atestat.txt va conţine:

proba

prob

pro

pr

p

#include<fstream.h>

#include<string.h>

char s[51];

int n;

void main()

{

cin>>s;

ofstream f("atestat.txt");

n=strlen(s);

while(n>=0)

{

for(int i=0; i< n; i++)

f << s[i];

f<< endl;

n--;

}

f.close();

}

32.Să se scrie un program care să numere cuvintele dintr-un text citit din fişierul ”cuvinte.txt”. Textul conţine cuvintele separate numai printr-un spaţiu, fără semne de punctuaţie, singurul semn de punctuaţie este ‘.’ de la sfârşitul textului. Numărul de cuvinte se va afişa pe ecran.

Exemplu: Fişierul ”cuvinte.txt” conţine textul: Ana are mere. se afişează: 3

#include<fstream.h>

#include<string.h>

void main()

{

ifstream f("cuvinte.txt");

char s[100];

int k=1,n;

f.getline(s,100);n=strlen(s);

for(int i=0;i< n;i++)

if(s[i]==' '&& s[i+1]!=' ')

k++;

cout<< k;

f.close();

}

33.Scrieţi programul care citeşte de la tastatură o valoare naturală n (2≤n≤100), construieşte in memorie si apoi afişează pe ecran o matrice a cu n linii si n coloane, numerotate de la 1 la n, car conţine numerele naturale, in ordine crescătoare, de la 1 la n2, dispuse pe coloane, in ordine crescătoare. Astfel coloana 1 va conţine numerele de la 1 la n, coloana 2 numerele de la n+1 la 2*n, coloana 3 de la 2*n+1 la 3*n si aşa mai departe, ca in exemplu. Matricea se va afişa pe ecran, cate o linie a matricei pe cate o linie a ecranului, elementele fiecărei linii fiind separate intre ele prin cate un spaţiu.

Exemplu: pentru n = 4 se va afişa matricea:

1 5 9 13

2 6 10 14

3 7 11 15

4 8 12 16

#include<iostream.h>

int a[10][10], k=1,s,n;

void main()

{

cout<<"n=";

cin>>n;

for(int j=1;j<=n;j++)

for(int i=1;i<=n;i++)

{

a[i][j]=k;

k++;

}

for(int i=1;i<=n;i++)

{

for(j=1;j<=n;j++)

cout<< a[i][j]<<" ";

cout<< endl;

}

}

34.Se dă n număr natural. Să se afişeze cel mai apropiat număr prim fată de n. Programul va conţine cel puţin un subprogram.

Exemplu: n=24 se va afişa 23, pentru n=26 se va afişa 29

#include<iostream.h>

int prim(int x)

{

if(x==0 || x==1) return 0;

for(int i=2;i<=x/2;i++)

if(x%i==0)

return 0;

return 1;

}

void main()

{

unsigned n, x, y;

cout<< "n=";

cin>>n;

x=n+1;

y=n-1;

while(prim(x)==0) x++;

while(prim(y)==0) y--;

if(x-n>n-y)

cout<< y;

else

cout<< x;

}

35.Se considera un vector cu n (1< n<100) componente numere naturale. Sa se determine componentele vectorului cu cei mai mulţi divizori. Se va folosi un subprogram pentru citirea vectorului si unul pentru calculul numărului de divizori ai unui număr.

#include<iostream.h>

int n, a[100];

void citire ()

{  int i;

for(i=1;i<=n;i++)

cin>>a[i];

}

int div(int x)

{   int i, nr=0;

for(i=2;i<=x;i++)

if(x%i==0)    nr++;

return nr;

}

void main()

{    int i,max=0;

cin>>n;

citire();

for(i=1;i<=n;i++)

if(div(a[i])>max)

max=div(a[i]);

for(i=1;i<=n;i++)

if(div(a[i])==max)

cout<< a[i]<<" ";

}

36.Se consideră un şir de n numere întregi. Să se verifice dacă o valoare x, citită de la tastatură, apare sau nu în vector. În caz că se află printre valorile din vector se va preciza şi în ce poziţie apare. În caz contrar se va afişa mesajul NU.

#include<iostream.h>

void main()

{    int n, v[100], i, x, p=0;

cin>>n>>x;

for(i=1;i<=n;i++)

{ cin>>v[i];

if(v[i]==x)p=i;

}

if(p==0)     cout<<"nu";

else

cout<< "Valoarea "<< x<< "apare in pozitia "<< p;

}



Comments (4)
  • Mihai
    avatar
    #include iostream.h
    #include fstream.h
    int main()
    {
    int n, i=1, j, aux, v[50], a;
    ifstream f("cifre.in");
    cin>>n;
    a=n;
    while(a>0)
    {
    v[i]=a%10;
    a=a/10;
    i++;
    }
    a=i-1;
    for(i=1;i < =a;i++)
    for(j=i;j < =a;j++)
    if(v[i] < v[j])
    {
    aux=v[i];
    v[i]=v[j];
    v[j]=aux;
    }
    for(i=1;i < =a;i++)
    cout < < v[i];
    return 0;
    }
  • Mihai
    avatar
    #include
    #include
    int main()
    {
    int n, i=1, j, aux, v[50], a;
    ifstream f("cifre.in");
    cin>>n;
    a=n;
    while(a>0)
    {
    v[i]=a%10;
    a=a/10;
    i++;
    }
    a=i-1;
    for(i=1;i
  • oana  - rezolvati si aceasta problema va rog
    avatar
    Scrieţi un program care citeşte din fişierul cifre.in un număr natural nenul de maximum 50 de cifre. Să se afişeze în cifre.out numărul maxim care se poate forma cu cifrele numărului.
    Exemplu:
    cifre.in
    1928192229
    cifre.out
    9998222211
  • Mihai
    avatar

    #include
    #include
    int main()
    {
    int n, i=1, j, aux, v[50], a;
    ifstream f("cifre.in");
    ofstream g("cifre.out")
    f>>n;
    a=n;
    while(a>0)
    {
    v[i]=a%10;
    a=a/10;
    i++;
    }
    a=i-1;
    for(i=1;i
Scrieti comentariu
Your Contact Details:
Gravatar enabled
Comentarii: