Culegere de Probleme Rezolvate in C C

download Culegere de Probleme Rezolvate in C C

of 76

  • date post

    13-Oct-2015
  • Category

    Documents

  • view

    232
  • download

    22

Embed Size (px)

description

Un set de probleme rezolvate in C

Transcript of Culegere de Probleme Rezolvate in C C

  • NECIU ILEANA

    CULEGERE DE PROBLEME REZOLVATE C/C++

    ISBN 978-606-577-575-6 Editura Sfntul Ierarh Nicolae 2011

  • 1

    Recomandare

    Cartea cu titlul Culegere de probleme rezolvate C/C++ pune n eviden importana pregtirii

    practice a elevilor din punct de vedere informatic. La finalizarea cursurilor liceale, elevii au de ntocmit i susinut o lucrare de specialitate, lucrare care s scoat n eviden nsuirea i aplicarea tuturor noiunilor

    teoretice i practice de informatic acumulate de-a lungul celor 4 ani colari. Totodat, pentru a promova proba digital din cadrul examenului de bacalaureat, elevii i dezvolt, n cadrul orelor de informatic, TIC, .a., competene digitale. Toate aptitudinile i abilitile de conducere a calculatorului deprinse de elevi se formeaz treptat, n timp, n urma unei activiti consecvente.

    Culegerea este bine structurat i aranjat, astfel nct, parcurgnd toate paginile, elevii s gseasc un sprijin real n rezolvarea tuturor problemelor informatice care pot apare n viaa liceal de zi

    cu zi i nu numai.

    Tocmai de aceea, autoarea i-a propus ca, prin cele 110 probleme enunate i rezolvate, elevii s aib o viziune de ansamblu asupra limbajelor de programare.

    Este o culegere util pentru elevii claselor de matematic-informatic, de aceea recomand cartea pentru publicare.

    18.05.2011

    Colegiul Tehnic Anghel Saligny Roiorii de Vede

    prof.gr.I dr.ing. Costache Florentina-Flori

  • 2

    Prefa

    Culegerea cuprinde probleme rezolvate n limbajul de programare C/C++ , probleme care au

    fost propuse la proba practic pentru examenul de atestat profesional la informatic n judeul

    Teleorman, de a lungul anilor 2006-2011 i se adreseaz tuturor elevilor de liceu, de la clasele de

    matematic-informatic.

    Culegerea se poate dovedi util att n pregatirea de zi cu zi la informatic, ct i n pregtirea

    pentru examenele de atestat profesional sau de bacalaureat.

    Toate programele din carte au fost verificate cu ajutorul mediului de programare Borland C.

    mi exprim sperana ca aceast lucrare s fie de un real folos celor interesai.

    Autoarea

  • 3

    ATESTAT 2006 TELEORMAN

    SUBIECTE C++

    1. S se calculeze:

    S= 1-1*2+1*2*3- (-1)n+1 *1*2**n #include #include #include main() {int s,p,i,n; coutn; s=0;p=1; for(i=1;i

  • 4

    #include #include main() {int i,j,n; coutn; for(i=n;i>=1;i--) {for(j=i;j>=1;j--) cout

  • 5

    #include #include main() {int i,j,n; coutn; for(i=1;i

  • 6

    {int x,y,z; coutx; couty; while((x!=12)&& (y!=12)) { cout

  • 7

    cin>>x; while(x!=0) {patrat=x*x;cout

  • 8

    {float x[100]; float y[100]; int n,i,s,a; coutn; for(i=1;i

  • 9

    coutn;min=0; for(i=1;i

  • 10

    int m,k,i,j,x,n=0; while(f.get(c,100)){ n=n+1;m=strlen(c); f.get();} m=m-m/2; cout

  • 11

    cin>>n; coutm; for(i=1;i

  • 12

    fstream g("fisier2.txt",ios::in); fstream n("fisier3.txt",ios::app); while(g>>resetiosflags(ios::skipws)>>ch) n

  • 13

    else j=j+1;} if(ok) {//cout

  • 14

    #include main() {fstream f("fractii.in",ios::in); fstream g("fractii.out",ios::out); int i,j,x,y; while(f>>i>>j) {x=i;y=j; while(x!=y) if(x>y)x=x-y; else y=y-x; if(x==1)g

  • 15

    {cout

  • 16

    if(s==x) {i=i+1; cout

  • 17

    char clasa; Nod*adr_urm;}; int n,i; Nod *v; void adaug(Nod*&v) {Nod *c=new Nod; cout=7) {cout

  • 18

    if((a[nod][k]==1)&& (s[k]==0))df(k);} int conex() {int gasit=0,i; df(1); for(i=1;i

  • 19

    ATESTAT 2009 TELEORMAN SUBIECTE C++

    26. S se afieze toate numerele ntregi, mai mici sau egale cu x, a cror sum a cifrelor este impar.

    #include #include void main() {int x,s,i,n; cout

  • 20

    {ninv=ninv*10+inv%10; inv=inv/10;} final=x*pow(10,nr-k+1)+c*pow(10,poz)+ninv; cout

  • 21

    {a3=a2+a1; v[i]=a3; a1=a2; a2=a3;} cout

  • 22

    gasit=0; for(i=1;i

  • 23

    if(x) cout

  • 24

    getch();}

    36. Se citete o matrice cu n linii i m coloane. S se memoreze ntr-un vector sumele elementelor de pe fiecare linie a matricei.

    #include #include void main() {int a[10][10],i,j,n,m,v[10],s; coutn; coutm; cout

  • 25

    coutn; s=0; for( i=1;i

  • 26

    cin>>x;} cout

  • 27

    43. S se determine toi divizorii primi ai unui numr natural dat.

    #include #include void main () { int n,i; coutn; i=2; while(n!=1) {if(n%i==0) {cout

  • 28

    ATESTAT 2010 TELEORMAN SUBIECTE C++

    44. Scriei un program Pascal/C++ care citete de la tastatur un cuvnt format din cel mult 20 de caractere, doar litere mici ale alfabetului englez. Programul determin transformarea cuvntului citit prin nlocuirea fiecrei vocale a cuvntului cu litera mare corespunztoare, restul literelor nemodificndu-se. Programul afieaz pe ecran cuvntul obinut. Se consider vocale literele din mulimea {a,e,i,o,u}.

    Exemplu: pentru cuvntul anotimp se va afia AnOtImp.

    #include #include #include #include void main() { char s[21], v[]="aeiou"; int i, n; cin.get(s,21); n=strlen(s); for(i=0;i

  • 29

    if(s[i-1]==' '&& s[i]!=' ') s[i]=toupper(s[i]); coutn; for(i=1;i

  • 30

    x=min; y=max; while (x!=y) if (x>y) x=x-y; else y=y-x; cout

  • 31

    if ( x[0]==0 && y[0]==0) cout

  • 32

    else cout

  • 33

    {int n,inv,ninv,k,k1; coutn; k=0;k1=0;inv=0;ninv=0; while(n) {if(n%2==0) inv=inv*10+n%10; else inv=inv*10; n=n/10;k=k+1;} while(inv) {ninv=ninv*10+inv%10; inv=inv/10;k1=k1+1;} if(k==k1) cout

  • 34

    56. S se afiseze al n-elea termen al irului lui Fibonacci, folosind o funcie recursiv. irul are primii 2 termeni egali cu 1 i fiecare din urmtorii termeni este egal cu suma dintre termenul precedent i termenul anteprecedent.

    #include #include int n; int fib(int n) {if(!n) return 0; else if(n==1)return 1; else return fib(n-1)+fib(n-2);} main() {coutn; cout

  • 35

    cin>>n; v[1]=n; j=2; for(int i=n/2;i>=2;i--) if(n%i==0) { v[j]=i; j++;} k=j; v[k]=1;s=0; for(int i=1; i

  • 36

    60. S se determine numrul total de descompuneri ale unui numr natural, care nu pot fi obinute una din alta prin permutarea termenilor.

    Ex: 4=1+1+1+1 4=1+1+2 4=1+3 4=2+2 4=4

    #include #include int sol[100],n,i,s; void back(int k) {if(s==n) {for(i=1;i

  • 37

    int dx[]={-2,-1,1,2,2,1,-1,-2}; int dy[]={1,2,2,1,-1,-2,-2,-1}; int t[100][100],st[100][2],i,j,n,xc,yc,xr,yr,k,lin,col; int solutie(int k) { int ok=0; for(j=1;j1&&st[k][0]==xc&&st[k][1]==yc&&ok==1) return 1; else return 0; } void tipar(int k) { cout

  • 38

    62. Se citete un numr ntreg de la tastatur. Scrieti o funcie care calculeaz numrul de cifre ale lui n. Folosind aceast funcie stabilii dac n se gsete n intervalul [100,10000).(Nu se va compara numarul n cu 100 i nici cu 10000).

    #include #include int numar (int n) {int x=0; while(n!=0) {x=x+1; n=n/10; } return x;} void main() {int n; coutn; if (numar (n)>=3 && numar (n)i>>j) a[i][j]=a[j][i]=1; f.close();} void df(int nod) {int k; s[nod]=1; for (k=1;k

  • 39

    {citire("graf.txt",a,n); df(1); if(gasit) cout

  • 40

    int st[20],n,k,a[10][10],i,j,m; int valid(int k) {for(int i=1;i

  • 41

    cin>>a[i][j]; cout

  • 42

    coutn; s=0; nr=n; while(nr) {s=s+nr%10; nr=nr/10;} x=n-s; if(x>=0) {cout

  • 43

    {nod* c; if(v==0) {v=new(nod); v->info=val; v->adr=0; sf=v;} else {c=new (nod); sf->adr=c; c->info=val; c->adr=0; sf=c;}} void listare(nod*v) {nod*c=v; while(c) {coutadr;} cout

  • 44

    nod* v;nod* sf; int i; void adaugare(nod*&v, nod*&sf, int val) {nod* c; if(v==0) {v=new(nod); v->info=val; v->adr=0; sf=v;} else {c=new (nod); sf->adr=c; c->info=val; c->adr=0; sf=c;}} void listare(nod*v) {nod*c=v; while(c) {coutadr; if (c->info%2==0)nr=nr+1; } while(c->adr!=0); cout

  • 45

    {int info; nod* adr;}; nod* v;nod* sf; int i; void adaugare(nod*&v, nod*&sf, int val) {nod* c; if(v==0) {v=new(nod); v->info=val; v->adr=0; sf=v;} else {c=new (nod); sf->adr=c; c->info=val; c->adr=0; sf=c;}} void listare(nod*v) {nod*c=v; while(c) {coutadr=c->adr; c->adr=d; if(d->adr==0)sf=d;} void sterg(nod* &v) {nod*man; man=v; v=v->adr; delete man;} main() { int n,p,val,val1; coutn; for(i=1;i>p; adaugare(v,sf,p);};

  • 46

    listare(v); coutval; coutval1; inserare_dupa(v,sf,val,val1); listare(v); coutinfo=val; c->adr=v; sf=c;}} void listare(nod*v) {nod*c=v;cout

  • 47

    { int n,p; coutn; for(i=1;iinfo=val; c->adr=v; v=c; }} void listare(nod*v) {nod*c=v; cout

  • 48

    int p; coutx; while(x!=0) {p=x%10; adaugare(v,sf,p); x=x/10;}; listare(v); getch();}

    75. Fiind dat o list liniar dublu nlnuit, s se determine maximul cheilor din list.

    #include #include struct Nod {int info; Nod *next,*back; }; Nod *prim, *ultim; void creare_lista() {Nod *c; c=new Nod; coutc->info; if(!prim) {prim=c; prim->next=0; prim->back=0; ultim=prim; } else {ultim->next=c; c->back=ultim; ultim=c; ultim->next=0; } } void listare_stanga_dreapta() {Nod *c; c=prim; while(c) {cout