You are on page 1of 56

c  c 


     
 
     
 c
var n:byte;
function suma(p,u:byte):integer;{p-pozitia primului element din sirul p..u, u-pozitia ultimului element din sirul
p..u}
var m:byte;s1,s2:integer;
begin
if(p=u) then suma:=p {daca sirul are un singur element suma este egala cu valoarea elementului}
else begin
m:=(p+u)div 2;{gasim pozitia elementului din mijloc}
s1:=suma(p,m);{s1-suma elementelor din prima parte a sirului}
s2:=suma(m+1,u);{s2-suma elementelor din cea de-a doua parte a sirului}
suma:=s1+s2;{suma elementelor din sirul p..u este suma celor elementelor din cele 2 subsiruri}
end;
end;
begin
write('n=');readln(n);
writeln('suma=',suma(1,n));{primul element se afla pe pozitia 1 iar ultimul pe pozitia n}
end.
cc
var n:byte;s:integer;
procedure suma(p,u:byte; var s:integer);{p-pozitia primului element, u-pozitia ultimului element din sirul p..u;
s-suma elementelor din sir}
var m:byte;s1,s2:integer;
begin
if(p=u) then s:=p {daca sirul are un singur element suma elementelor din sir este egala cu valoarea elementului}
else begin
m:=(p+u)div 2;{gasim pozitia elementului din mijloc}
suma(p,m,s1);{s1-suma elementelor din prima parte a sirului p..u}
suma(m+1,u,s2);{s2-suma elementelor din a doua parte a sirului p..u}
s:=s1+s2;{suma elementelor din sir este egala cu suma dintre cele 2 rezultate ale subsirurilor}
end;
end;
begin
write('n=');readln(n);
s:=0;{initializam suma cu 0}
suma(1,n,s);{primul element se afla pe pozitia 1, ultimul element se afla pe pozitia n}
writeln('suma=',s);
end.

    


    
 c
var a:array[1..10]of integer;
n:byte;
function suma(p,u:byte):integer;{p-pozitia primului element din sir, u-pozitia ultimului element din sir}
var m:byte;
begin
if(p>u) then suma:=0 {aceasta conditie nu este obligatorie. Daca se intampla una stfel de caz, functia returneaza
valoarea 0 deoarece s-au terminat de adunat toate elementele din subsir}
else if (p=u) then suma:=a[p] {daca avem un singur element suma elementelor din sir este egala cu
valoarea elementului}
else begin
m:=(p+u)div 2;{gasim pozitia elementului din mijloc}
suma:=suma(p,m)+suma(m+1,u);{pentru a afla rezultatul trebuie sa adunam rezultatele
obtinute pentru cele 2 subsiruri}
end;
end;
procedure citire;{citirea datelor de intrare}
var i:byte;
begin
write('n=');readln(n);
for i:=1 to n do
begin
write('a[',i,']=');readln(a[i]);
end;
end;
begin
citire;
writeln('suma=',suma(1,n));{primul element se afla pe pozitia 1 iar ultimul se afla pe pozita n}
end.
cc
var a:array[1..10]of integer;
n:byte;s:integer;
procedure suma(p,u:byte;var s:integer);{p-pozitia primului element, u-pozitia ultimului element, s-suma
elementelor de pe pozitiile p..u}
var m:byte;s1,s2:integer;
begin
if(p=u) then s:=a[p] {daca avem un singur element atunci suma elementelor din sir este egala cu aceasta
valoare}
else begin
m:=(p+u)div 2;{gasim pozitia elementului de la mijloc}
suma(p,m,s1);{s1-suma elementelor aflate pe primele pozitii din sir}
suma(m+1,u,s2);{s2-suma elementelor aflate in cea de-a doua parte a sirului}
s:=s1+s2;{suma elementelor din sir se gaseste adunand cele 2 rezultate ale celor 2 subsiruri}
end;
end;
procedure citire;{citim datele de intrare}
var i:byte;
begin
write('n=');readln(n);
for i:=1 to n do
begin
write('a[',i,']=');readln(a[i]);
end;
end;
begin
citire;
s:=0;{initializam suma elementelor din sir}
suma(1,n,s);{primul element se afla pe pozitia 1, ultimul pe pozitia n}
writeln('suma=',s);
end.

    


   !   
 c
var a:array[1..100]of integer;
n:integer;
procedure citire;{citirea datelor de intrare}
var i:byte;
begin
write('n=');readln(n);
For i:=1 to n do
begin
write('a[',i,']=');readln(a[i]);
end;
end;
function minim(p,u:integer):integer; {p-pozitia primului element, u-pozitia ultimului element}
var m:byte;m1,m2:integer;
begin
if(p=u) then minim:=a[p] {daca sirul are un singur element atunci valoarea minima este egala cu valoarea
elementului}
else begin
m:=(p+u)div 2;{gasim pozitia elementului din mijloc}
m1:=minim(p,m);{m1 - valoarea minima din prima parte a sirului}
m2:=minim(m+1,u);{m2-valoarea minima din cea de-a doua parte a sirului}
if (m1>m2) then minim:=m2 {verificam care dintre cele 2 valori este mai mica. min - valoarea minima
rezultata in urma comparatiei (rezultatul problemei)}
else minim:=m1;
end;
end;
begin
citire;
write('valoarea minima=',minim(1,n));{primul element se afla pe pozitia 1, ultimul element se gaseste pe pozitia
n}
end.
cc
var a:array[1..100]of integer;
n,min:integer;
procedure citire;{citirea datelor de intrare}
var i:byte;
begin
write('n=');readln(n);
For i:=1 to n do
begin
write('a[',i,']=');readln(a[i]);
end;
end;
procedure minim(p,u:integer;var min:integer);{p-pozitia primului element din sir,u-pozitia ultimului element din
sir, min-valoarea minima rezultata}
var m:byte;m1,m2:integer;
begin
if(p=u) then min:=a[p] {daca sirul are un singur element atunci valoarea minima este egala cu valoarea acestui
element}
else begin
m:=(p+u)div 2;{gasim pozitia elementului din mijloc}
minim(p,m,m1);{m1-valoarea minima din prima parte a sirului}
minim(m+1,u,m2);{m2-valoarea minima din cea de-a doua parte a sirului}
if (m1>m2) then min:=m2 {rezultatul problemei min - valoarea minima dintre cele 2 valori rezultate}
else min:=m1;
end;
end;
begin
citire;
min:=a[1];{initializam valoarea minima}
minim(1,n,min);{primul element din sir se gaseste pe pozitia 1 iar ultimul se gaseste pe pozitia n}
write('valoarea minima=',min);
end.

  "



Se dau trei tije notate a, b, c si n discuri de diamtre diferite.
Initial, pe tija a se gasesc toate discurile pus in ordine crescatoare a diamtrelor lor (cel c u diametrul cel mai mare
este pus la baza).
Sa se mute toate discurile de pe tija a pe tija b, folosind tija c ca tija intermediara, respectand urmatoarele
conditii:
- de fiecare data se muta un singur disc
- un disc se poate pune numai deasupra unui disc cu diametru mai mare.
Daca avem un singur disc, mutam discul pe tija b si problema este rezolvata. (a ->b)
Daca avem doua discuri: mutam primul disc pe tija c, al doilea disc pe tija b, apoi discul de pe tija c il mutam pe
tija b.
(a->c,a->b,b->c)
Daca n>2 problema se complica, in sensul ca trebuie mult mai multe mutari de efectuat.
Pentru rezolvare vom folosi metoda Divide et impera.
Conform algoritmului general avem:
Imparte. Se descompune problema in 2 subprobleme: prima va contine n-1 discuri iar a doua un singur disc.
Stapaneste. Mutam cele n-1 discuri de pe tija a pe tija c folosind tija intermediara b prin apeluri succesive ale
subprogramului recursiv.
Se muta discul ramas pe b, apoi se muta discurile de pe tija c pe tija b prin intermediul tijei a.
Combina. Combinarea solutiilor nu este necesara datorita faptului ca prin mutarea discurilor se realizeaza si
secventa de rezolvare a problemei initiale.
functia muta are structura:
muta(numar discuri,de pe discul, pe discul,prin intermediul discului)
var n:byte;
procedure muta(n:byte;a,b,c:char);{muta n discuri de pe a pe b prin intermediul tijei c}
begin
if(n=1)then writeln(a,'->',b) {mutam discul ramas pe tija a pe tija b}
else begin
muta(n-1,a,c,b);{mutam n-1 discuri de pe a pe c prin intermediul tijei b}
writeln(a,'->',b);{mutam discul ramas pe tija a pe dija b}
mutaxx(n-1,c,b,a);{mutam cele n-1 discuri de pe tija c pe tija b prin intermediul tijei a }
end;
end;
begin
write('n=');readln(n);
muta(n,'a','b','c');{mutam n discuri de pe tija a pe tija b prin intermediul tijei c; ,#, sunt numele discurilor}
end.

c$%&%& ' 

         (
  
   
  
     ! 
Observam ca valoarea elementului minim de pe fiecare coloana este 1 iar valoarea elementului maxim este m.
Elementul x[k] poate fi adaugat la solutie indiferent de elementele aflate pe pozitiile 1...k -1 din solutie.
Avem solutie daca numarul de elemente din vectorul solutie este egal cu numarul multimilor (n).
var x:array[1..50]of byte;
k,n,m:byte;valid:boolean; f:text;
procedure posibil(k:integer;var valid:boolean);{nu exista restrictii la adaugarea elementului x[k]}
begin
valid:=true;
end;
function solutie(k:integer):boolean;{avem solutie daca numarul de elemente din vectorul solutie este egal cu
numarul multimilor (n)}
begin
if(k=n) then solutie:=true
else solutie:=false;
end;
procedure afisare(k:integer);{afisarea vectorului solutie}
var i:byte;
begin
for i:=1 to k do write(f,x[i],' ');
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=0;{intializam cu valoarea elementului minim-1}
while(k>0) do begin
valid:=false; {x[k] nu e valid pentru a fi adaugat in solutie}
while(not valid)and(x[k]<m) do {cat timp nu s-a gasit un element x[k] valid pentru solutie si mai sunt
valori pe care le poate avea x[k]}
begin
x[k]:=x[k]+1; {trecem la verificarea urmatoarei valori pentru x[k]}
posibil(k,valid);
end;
if(not valid) then k:=k-1 {daca s-au verificat toate valorile pe care le paote avea x[k] si nu am gasit un
element valid ne intoarcem la pozitia elementului anterior si continuam cautarea de aici}
else if(solutie(k)) then afisare(k) {daca avem solutie o afisam}
else begin {daca am gasit un element x[k] valid si nu am ajuns la o solutie}
k:=k+1;
x[k]:=0;
end;
end;
end;
begin
write('numarul de multimi=');readln(n);
write('numarul de elemente din fiecare multime=');readln(m);
assign(f,'prod.txt');
rewrite(f);
back;
close(f);
end.

  



  )
# 
(
*
+
Observam ca:
- valoarea elementului minim este 1 iar valoarea elementului maxim este n
- elementul x[k] nu poate fi adaugat la solutie daca a mai aparut in solutie pe vreuna din pozitiile 1...k -1
(elementul nu se repeta)
- avem solutie cand am reusit sa asezam cele n obiecte
var x:array[1..50]of byte;
k,n:byte;valid:boolean; f:text;
procedure posibil(k:integer;var valid:boolean);
var i:integer;
begin
valid:=true; {presupunam ca x[k] poate fi adaugat la solutie}
for i:=1 to k-1 do {verificam repetitia elementului x[k]: daca a mai aparut in sir x[k] nu poate fi adaugat la
solutie}
if(x[k]=x[i])then valid:=false;
end;
function solutie(k:integer):boolean;
begin
if(k=n) then solutie:=true {avem solutie daca s-au adaugat la solutie n elemente}
else solutie:=false;
end;
procedure afisare(k:integer);
var i:byte;
begin {afisam vectorul solutie}
for i:=1 to k do write(f,x[i],' ');
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=0;
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<n) do
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=0;
end;
end;
end;
begin
write('numarul de obiecte=');readln(n);
assign(f,'perm.txt');
rewrite(f);
back;
close(f);
end.


# 
   

  ) !   
# *
)
+
Observam ca:
- valoarea minima este 1 si valoarea maxima este n
- avem solutie daca aranjam m obiecte
- x[k] poate fi adaugat la solutie daca nu a mai fost adaugat (elementele din solutie nu se repeta)
var x:array[1..50]of byte;
k,n,m:byte;valid:boolean; f:text;
procedure posibil(k:integer;var valid:boolean);
var i:integer;
begin
valid:=true; {elementele nu se repeta}
for i:=1 to k-1 do
if(x[k]=x[i])then valid:=false;
end;
function solutie(k:integer):boolean;
begin {avem solutie daca au fost aranjate m obiecte}
if(k=m) then solutie:=true
else solutie:=false;
end;
procedure afisare(k:integer);
var i:byte;
begin {afisam vectorul solutie}
for i:=1 to k do write(f,x[i],' ');
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=0;
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<n) do
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=0;
end;
end;
end;
begin
write('numarul de obiecte=');readln(n);
write('m=');readln(m);
assign(f,'aranj.txt');
rewrite(f);
back;
close(f);
end.


# 
 (
   

#  )
#          
 
Observam ca:
- valoarea elementului minim este 1; valoarea elementului maxim este n
- elementele din solutie nu se repeta
- pentru a nu se repeta multimile de elemente (adica solutia 1 2 3 este aceiasi cu 2 1 3, 1 3 2...) elementele sunt
introduse in solutie in ordine crescatoare/descrescatoare. Alegem varianta in care elementele sunt in ordine
crescatoare.
- avem solutie cand am introdus in solutie m elemente
var x:array[1..50]of byte;
k,n,m:byte;valid:boolean; f:text;
procedure posibil(k:integer;var valid:boolean);
var i:integer;
begin
valid:=true;
{elementele din solutie nu se repeta}
for i:=1 to k-1 do
if(x[k]=x[i])then valid:=false;
{multimile de solutii nu se repeta: elementele sunt in ordine crescatoare}
if(k>1) then if(x[k]<x[k-1]) then valid:=false;
end;
function solutie(k:integer):boolean;
begin {avem solutie daca au fost introduse in vectorul solutie m elemente}
if(k=m) then solutie:=true
else solutie:=false;
end;
procedure afisare(k:integer);
var i:byte;
begin {afisam vectorul solutie}
for i:=1 to k do write(f,x[i],' ');
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=0;
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<n) do
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=0;
end;
end;
end;
begin
write('numarul de obiecte=');readln(n);
write('m=');readln(m);
assign(f,'comb.txt');
rewrite(f);
back;
close(f);
end.

  


#  "   

     
 
Aceasta problema este de fapt problema de generare a permutarilor, insa, de data aceasta, vom afisa o schema a
tablei de sah pentru a arata pozitiile unde se gasesc turele.
2 ture se pot se ataca daca sunt pe aceiasi linie sau pe aceiasi coloana.
Datorita faptului ca vom completa pe rand liniile de pe tabla de sah, punand pe fiec are linie cate o tura, nu este
nevoie sa punem conditii pentru a nu a aprea 2 ture pe aceiasi linie.
x[k] reprezinta coloana de pe linia k ocupata de tura.
Nu este gresit nici daca afisarea se face ca si la permutari insa este greu de urmarit pozitia turel or pe tabla.
In plus, la aceasta problema vom numara si solutiile.
Numarul de solutii pentru n=5 este de 120.
Observam ca numarul minim este 1 (prima coloana) si numarul maxim este n(ultima coloana).
Datorita faptului ca vom completa liniile succesiv, acestea nu au cum sa se repete, prin urmare singura conditie
este sa nu se repete coloanele.
Avem solutie daca s-au asezat pe tabla toate cele n ture.
var x:array[1..50]of byte;
k,n,nr:byte;valid:boolean; f:text;
procedure posibil(k:integer;var valid:boolean);
var i:integer;
begin
valid:=true;
for i:=1 to k-1 do
if(x[k]=x[i])then valid:=false;/*2 ture nu se pot afla pe aceiasi coloana*/
end;
function solutie(k:integer):boolean;
begin /*avem solutie cand am asezat toate cele n ture*/
if(k=n) then solutie:=true
else solutie:=false;
end;
procedure afisare(k:integer);
var i,j:byte;
begin
nr:=nr+1;
writeln(f,'solutia ',nr);
for i:=1 to k do
begin
for j:=1 to k do
if (x[i]=j) then write(f,'T ') /*daca pe linia i este completata coloana j, vom specifica acest lucru*/
else write(f,'* ');
writeln(f);
end;
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=0;
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<n) do
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=0;
end;
end;
end;
begin
write('numarul de linii si coloane=');readln(n);
assign(f,'ture.txt');
rewrite(f);
nr:=0;
back;
close(f);
end.

  # 


#  "   

    
Vom aseza, pe rand, cate un nebun pe linie, prin urmare liniile nu se repeta.
x[k] - coloana ocupata pe linia k de catre un nebun.
2 nebuni se pot ataca unul pe altul daca ei se gasesc pe aceiasi diagonala. Putem gasi formula pentru diagonala
punand pe axa XOY pe x[k], x[i], i, k care reprezinta de fapt, coloanele si respectiv liniile pe care se afla cei 2
nebuni. Vom schita astfel pe OX coloanele x[k], x[i] si pe OY liniile k si i. Vom avea astfel 4 situatii si vom
deduce ca cei 2 nebuni se gasesc pe aceiasi diagonala daca abs(x[k]-x[i])=abs(k-i). Remintim ca functia abs se
foloseste pentru calcularea modulului.
Observam ca valoarea minima este 1 (prima coloana) si valoarea maxima este n (ultima coloana).
Avem solutie cand au fost asezati toti cei n nebuni, fiecare pe cate o linie.
2 nebuni nu se pot ataca daca se gasesc pe aceiasi diagonala.
var x:array[1..50]of byte;
k,n,nr:byte;valid:boolean; f:text;
procedure posibil(k:integer;var valid:boolean);
var i:integer;
begin
valid:=true;
for i:=1 to k-1 do
if(abs(x[k]-x[i])=abs(k-i))then valid:=false; /*cei doi nebuni nu trebuie sa se atace - nu trebuie sa fie pe
aceiasi diagonala*/
end;
function solutie(k:integer):boolean;
begin /*avem solutie cand am asezat pe tabla cei n nebuni*/
if(k=n) then solutie:=true
else solutie:=false;
end;
procedure afisare(k:integer);
var i,j:byte;
begin
nr:=nr+1;
writeln(f,'solutia ',nr);
for i:=1 to k do
begin
for j:=1 to k do
if (x[i]=j) then write(f,'N ')
else write(f,'* ');
writeln(f);
end;
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=0;
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<n) do
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=0;
end;
end;
end;
begin
write('numarul de linii si coloane=');readln(n);
assign(f,'nebuni.txt');
rewrite(f);
nr:=0;
back;
close(f);
end.

  * +


#  "   

     

 
Problema este o combinatie intre problema turelor (prima problema de pe pagina) si problema nebunilor (cea
de-a doua problema de pe pagina).
2 dame nu se pot ataca daca nu se gasesc pe aceiasi linie, coloana sau diagonala.
Punand damele pe rand, cate una pe o line k=1...n nu e nevoie sa verificam daca damele se gasesc pe aceiasi
linie.
2 dame se gasesc pe aceiasi coloana daca exista i=1...k-1 astfel incat x[k]=x[i].
2 dame se gasec pe aceiasi diagonala daca exista i=1...k-1 astfel incat abs(x[k]-x[i])=abs(k-i).
Observam ca valoarea minima este 1(prima coloana) si valoarea maxima este n (ultima coloana).
Avem solutie cand s-au depus toate cele n dame.
In functia posibil vom trata cazurile in care prin depunerea unei regine pe linia k in pozitia x[k] exista
posibilitatea ca pe tabla de sah sa fie 2 dame care sa se poata ataca una pe alta.
var x:array[1..50]of byte;
k,n,nr:byte;valid:boolean; f:text;
procedure posibil(k:integer;var valid:boolean);
var i:integer;
begin
valid:=true;
for i:=1 to k-1 do
if(abs(x[k]-x[i])=abs(k-i))or(x[i]=x[k])then valid:=false; /*2 dame nu pot sa se afle pe aceiasi coloana sau pe
aceiasi diagonala*/
end;
function solutie(k:integer):boolean;
begin /*am ajuns la o solutie cand s-au depus pe tabla toate cele n dame*/
if(k=n) then solutie:=true
else solutie:=false;
end;
procedure afisare(k:integer);
var i,j:byte;
begin /*afisam solutia*/
nr:=nr+1;
writeln(f,'solutia ',nr);
for i:=1 to k do
begin
for j:=1 to k do
if (x[i]=j) then write(f,'D ')
else write(f,'* ');
writeln(f);
end;
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=0;
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<n) do
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=0;
end;
end;
end;
begin
write('numarul de linii si coloane=');readln(n);
assign(f,'dame.txt');
rewrite(f);
nr:=0;
back;
close(f);
end.

     


Observam ca:
- valoarea minima este 1 si valoarea maxima este n
- avem solutie cand suma elementelor din vectorul solutie este egala cu n
- adaugam elementul x[k] la solutie daca suma elementelor din solutie nu depaseste n.
Observatie: Algoritmul urmator poate fi imbunatatit
- sa nu se repete multimile de elemente
- daca x[k] nu este valid nici urmatoarele elemente de la x[k]+1...n nu sunt valide.
var x:array[1..50]of byte;
k,n:byte;valid:boolean; f:text;
procedure posibil(k:integer;var valid:boolean);
var i,s:integer;
begin
valid:=true; /*x[k] poate fi adaugat la solutie doar daca prin adaugarea lui suma elementelor din vectorul solutie
nu depaseste n*/
s:=0;
for i:=1 to k do s:=s+x[i];
if s>n then valid:=false;
end;
function solutie(k:integer):boolean; /*avem solutie daca suma elementelor din solutie este egala cu n*/
var i,s:integer;
begin
s:=0;
for i:=1 to k do s:=s+x[i];
if(s=n) then solutie:=true else solutie:=false;
end;
procedure afisare(k:integer);/*afisam solutia*/
var i,j:byte;
begin
for i:=1 to k do
write(f,x[i],' ');
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=0;
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<n) do
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=0;
end;
end;
end;
begin
write('n=');readln(n);
assign(f,'suma.txt');
rewrite(f);
back;
close(f);
end.

    


Spre deosebire de problema precedenta avem solutie daca suma elementelor din solutie este n si numarul de
elemente din solutie este m.
var x:array[1..50]of byte;
k,n,m:byte;valid:boolean; f:text;
procedure posibil(k:integer;var valid:boolean);
var i,s:integer;
begin
valid:=true;/*adaugam pe x[k] la solutie daca si numai daca prin adaugare suma elementelor din solutie nu
depaseste n*/
s:=0;
for i:=1 to k do s:=s+x[i];
if s>n then valid:=false;
end;
function solutie(k:integer):boolean;/*avem solutie daca numarul de elemente din solutie este m si suma
elementelor din solutie este n*/
var i,s:integer;
begin
s:=0;
for i:=1 to k do s:=s+x[i];
if(s=n)and(k=m) then solutie:=true else solutie:=false;
end;
procedure afisare(k:integer);/*afisam solutia*/
var i,j:byte;
begin
for i:=1 to k do
write(f,x[i],' ');
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=0;
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<n) do
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=0;
end;
end;
end;
begin
write('n=');readln(n);
write('m=');readln(m);
assign(f,'suma.txt');
rewrite(f);
back;
close(f);
end.

     


Observam ca valoarea minima este 1 si valoarea maxima poate fi n (daca n este numar prim). Aceast
rationament poate fi optimizat.
Avem solutie daca suma elementelor din vectorul solutie este n.
Putem adauga elementul x[k] la solutie daca este prim si daca prin adaugarea lui suma elementelor din vectorul
solutie nu depaseste valoarea n. (puteti modifica algortimul astfel: in cazul in care x[k] este numar sa se verifice
daca prin adaugarea lui la vectorul solutie suma elementelor din vectorul solutie nu depaseste n.
var x:array[1..50]of byte;
k,n,m:byte;valid:boolean; f:text;
function prim(n:integer):boolean;/*functia pentru a verifica daca un numar este prim - functia poate fi
optimizata*/
var i:integer;
begin
prim:=true;
if(n<=1) then prim:=false;
for i:=2 to n div 2 do
if n mod i=0 then prim:=false;
end;
procedure posibil(k:integer;var valid:boolean);
var i,s:integer;
begin
valid:=true;
if not prim(x[k]) then valid:=false;/*verificam daca x[k] este numar prim*/
s:=0;
for i:=1 to k do s:=s+x[i];
if s>n then valid:=false;/*adaugam pe x[k] la solutie daca prin adaugarea lui x[k] suma elementelor din vectorul
solutie nu depaseste n*/
end;
function solutie(k:integer):boolean;
var i,s:integer;
begin /*avem solutie daca suma elementelor din vectorul solutie este egala cu n*/
s:=0;
for i:=1 to k do s:=s+x[i];
if(s=n)then solutie:=true else solutie:=false;
end;
procedure afisare(k:integer);/*afisam solutia*/
var i,j:byte;
begin
for i:=1 to k do
write(f,x[i],' ');
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=0;
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<n) do
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=0;
end;
end;
end;
begin
write('n=');readln(n);
assign(f,'suma.txt');
rewrite(f);
back;
close(f);
end.

c !
 #  
     *,-+
  

#   
           
   
  
Vom codifica cu 0 leii si cu 1 tigrii. Acest mod de codificare nu este unic!
Observam ca:
- valoarea minima este 0 iar valoarea maxima este 1
- avem solutie daca numarul de tigrii este m si numarul de lei este n
- x[k] poate face parte din solutie daca:
* in cazul in care x[k] reprezinta codul unui tigru x[k-1] trebuie sa reprezinte codul unui leu
*din cusca nu se pot scoate mai multi de n lei si mai multi de m tigrii.
var x:array[1..50]of integer;
k,n,m:integer;valid:boolean; f:text;
procedure posibil(k:integer;var valid:boolean);
var i,tig,lei:integer;
begin
valid:=true; /*numaram leii si tigrii din solutie*/
tig:=0;lei:=0;
for i:=1 to k do
if(x[i]=0) then lei:=lei+1
else tig:=tig+1;
if(tig>m)or(lei>n) then valid:=false; /*nu putem scoate din cusca mai multi de n lei si mai multi de m tigrii*/
if(k>1)and(x[k-1]=1)and(x[k]=1) then valid:=false; /*nu putem scoate din cusca 2 tigrii unul dupa altul*/
end;
function solutie(k:integer):boolean;
var i,tig,lei:integer;
begin /*avem solutie daca in vectorul solutie numarul de tigrii este m si numarul de lei este n*/
tig:=0;lei:=0;
for i:=1 to k do
if(x[i]=0) then lei:=lei+1
else tig:=tig+1;
if(tig=m)and(lei=n) then solutie:=true
else solutie:=false;
end;
procedure afisare(k:integer);
var i,j:byte;
begin /*Afisam solutia gasita*/
for i:=1 to k do
if(x[i]=0) then
write(f,'leu ')
else write(f,'tigru ');
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=-1;/*initializam cu valoarea minima=0 -1*/
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<1) do /*valoarea maxima este 1*/
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=-1;/*initializam cu valoarea minima -1*/
end;
end;
end;
begin
write('nr lei=');readln(n);
write('nr tigrii=');readln(m);
if(m>n) then begin write('eroare');halt;end; /*daca avem mai multi tigrii decat lei rezolvarea problemei este
imposibila*/
assign(f,'leitig.txt');
rewrite(f);
back;
close(f);
end.

  



#   " 

Codificam parantezele astfel:
( cu 0 si ) cu 1.
Pentru n=6 solutiile sunt:
((()))
(()())
(())()
()(())
()()()
Observam ca valoarea minima este 0 si valoarea maxima este 1.
Avem solutie daca numarul de paranteze inchise este n/2 si numarul de paranteze deschise este n/2.
Adaugam elementul x[k] la solutie daca:
- in cazul in care este primul element din sir trebuie sa fie (
- numarul de paranteze deschise trebuie sa fie mai mare sau egal cu numarul de paranteze inchise
- numarul de paranteze inchise si numarul de paranteze deschise nu pot depasi n>2.
Observatie: pentru a putea construi sirul de paranteze n trebuie sa fie numar par.
var x:array[1..50]of integer;
k,n,m:integer;valid:boolean; f:text;
procedure posibil(k:integer;var valid:boolean);
var i,pd,pi:integer;
begin
valid:=true;
pd:=0;pi:=0;
for i:=1 to k do
if(x[i]=0) then pd:=pd+1
else pi:=pi+1;
if(pd>n div 2)or(pi>n div 2) then valid:=false;/*numarul de paranteze inchise si numarul de paranteze inchise nu
pot depasi n/2*/
if(pd<pi) then valid:=false;/*numarul de paranteze deschise trebuie sa fie mai mare sau egal cu numarul de
paranteze inchise*/
if(k=1) then if(x[k]=1) then valid:=false;/*prima paranteza trebuie sa fie deschisa*/
end;
function solutie(k:integer):boolean;
var i,pi,pd:integer;
begin /*avem solutie daca numarul de paranteze inchise si numarul de paranteze deschise este n/2*/
pd:=0;pi:=0;
for i:=1 to k do
if(x[i]=0) then pd:=pd+1
else pi:=pi+1;
if(pd=n div 2)and(pi=n div 2) then solutie:=true
else solutie:=false;
end;
procedure afisare(k:integer);
var i,j:byte;
begin /*afisam solutia*/
for i:=1 to k do
if(x[i]=0) then
write(f,'(')
else write(f,')');
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=-1;/*initializam x[k] cu valoarea minima-1*/
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<1) do /*valoarea maxima este 1*/
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=-1;/*initializam cu valoarea minima -1*/
end;
end;
end;
begin
write('n=');readln(n);
assign(f,'paran.txt');
rewrite(f);
if(n mod 2=1) then begin write('imposibil');halt;end;
back;
close(f);
end.

#  
     

  

#  
    #   .
!
#  

      
!#  
   #   

Exemplu:
n=4 si m=3
Avem 4 cuburi. Pentru fiecare citim culoarea si dimensiunea laturii.
rosu 4
galben 3
rosu 2
verde 3
Se va afisa:
1(rosu 4) 2(galben 3)
1(rosu 4) 4(verde 3)
2(galben 3) 3(rosu 2)
2(galben 3) 4(verde 3)
4(verde 3) 2(galben 3)
4(verde 3) 3(rosu 2)
dupa modelul numar_cub(culoare dimensiune)
Observam ca:
- valoarea minima este 1 si valoarea maxima este n (cuburile sunt numeroate de la 1...n)
- avem solutie cand in vectorul solutie avem m cuburi
- respectam conditiile din enunt. In plus, un cub nu poate fi pus de doua ori in acelasi turn.
var x:array[1..50]of integer;
k,n,m:integer;valid:boolean; f:text;
cul:array[1..50]of string;
dim:array[1..50]of byte;
procedure posibil(k:integer;var valid:boolean);
var i,pd,pi:integer;
begin
valid:=true; /*cuburile nu se repeta*/
for i:=1 to k-1 do
if(x[i]=x[k]) then valid:=false;
if(k>1) then if(cul[x[k-1]]=cul[x[k]]) then valid:=false;/*nu pot fi puse unul peste altul 2 cuburi de aceiasi
culoare*/
if(k>1) then if(dim[x[k-1]]<dim[x[k]]) then valid:=false;/*un cub cu latura mai mare nu poate fi pus peste un
cub cu dimensiunea laturii mai mica*/
end;
function solutie(k:integer):boolean;
var i,pi,pd:integer;
begin /*avem solutie cand am pus in turn m cuburi*/
if k=m then solutie:=true
else solutie:=false;
end;
procedure afisare(k:integer);
var i,j:byte;
begin
for i:=1 to k do
write(f,x[i],'(',cul[x[i]],' ',dim[x[i]],') ');
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=0;
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<n) do
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=0;
end;
end;
end;
procedure citire;
var i:byte;
begin
write('n=');readln(n);
write('m=');readln(m);
for i:=1 to n do begin
write('culoarea cubului ',i,':');readln(cul[i]);
write('dimensiunea laturii pentru cubul ',i);readln(dim[i]);
end;
end;
begin
citire;
assign(f,'turn.txt');
rewrite(f);
if(n mod 2=1) then begin write('imposibil');halt;end;
back;
close(f);
end.

   


     
   

Observam:
- valoarea minima este 0 si valoarea maxima este 9.
- avem solutie daca numarul de elemente din solutie este cel mult n, prin urmare, dupa ce afisam o solutie
cautam urmatoarele elemente pe care le putem adauga solutiei pentru a gasi si alte solutii.
- x[k] face parte din solutie daca:
* prima cifra din numar nu trebuie sa fie 0 (acest caz poate fi optimizat in rezolvarea problemei)
* cifrele sunt numere pare
*cifrele nu se repeta
var x:array[1..50]of integer;
k,n,m:integer;valid:boolean; f:text;
procedure posibil(k:integer;var valid:boolean);
var i,pd,pi:integer;
begin
valid:=true; /*cifrele nu se repeta*/
for i:=1 to k-1 do
if(x[i]=x[k]) then valid:=false;
if(x[k]mod 2=1) then valid:=false; /*cifrele sunt numere pare*/
if(k=1)and(x[k]=0) then valid:=false;/*prima cifra e diferita de 0*/
end;
function solutie(k:integer):boolean;
var i,pi,pd:integer;
begin /*Avem solutie daca in vectorul solutie avem cel mult n cifre*/
if k<=n then solutie:=true
else solutie:=false;
end;
procedure afisare(k:integer);
var i,j:byte;
begin
for i:=1 to k do
write(f,x[i],' ');
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=-1;/*initializam cu valoarea minima -1*/
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<9) do
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then begin afisare(k); /*trecem la cautarea unei alte solutii pornind de la cea
gasita*/
k:=k+1;
x[k]:=-1;
end
else begin /*trecem la urmatorul element din vectorul solutie*/
k:=k+1;
x[k]:=-1;
end;
end;
end;
begin
write('n=');readln(n);
assign(f,'nr.txt');
rewrite(f);
back;
close(f);
end.

  



#  
   /
   .
! 
  #0

 0
0  0 0 # 
!
  
!
  )

  # 

Codificam culorile:
1 galben
2 portocaliu
3 rosu
4 visiniu
5 verde
6 albatru
Observam ca valoarea minima este 1 si valoarea maxima este 6.
Avem solutie cand am reusit sa depunem 3 culori.
In procedura posibil tratam restrictiile din enunt.
var x:array[1..50]of integer;
k,n:integer;valid:boolean; f:text;s:string;
procedure posibil(k:integer;var valid:boolean);
var i,pd,pi:integer;
begin
valid:=true; /*culorile nu se repeta*/
for i:=1 to k-1 do
if(x[i]=x[k]) then valid:=false;
if(k=2) then if(x[k]=1)or(x[k]=3) then valid:=false; /*in mijloc nu poate fi galben sau rosu*/
end;
function solutie(k:integer):boolean;
var i,pi,pd:integer;
begin /*Avem solutie cand am reusit sa facem un steag cu 3 culori*/
if k=3 then solutie:=true
else solutie:=false;
end;
procedure afisare(k:integer);
var i,j:byte;
begin
for i:=1 to k do
if(x[i]=1)then write(f,'galben ')
else if(x[i]=2) then write(f,'portocaliu ')
else if(x[i]=3) then write(f,'rosu ')
else if(x[i]=4) then write(f,'visiniu ')
else if(x[i]=5) then write(f,'verde ')
else write(f, 'albastru ');
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=0;
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<6) do
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=0;
end;
end;
end;
begin
assign(f,'steaguri.txt');
rewrite(f);
back;
close(f);
end.

    
%c
 
 (   .
!
   
!
 1   
 (
Observam ca valoarea minima este 1 (melodia cu numarul de cod 1) si valoarea maxima este n (melodia cu
codul n).
Avem solutie cand am inscriptionat cele n melodii.
Cand inscriptionam, trebuie sa avem grije ca:
- melodia 2 sa nu fi fost inscriptionata inaintea melodii 1
- melodiile sa nu se repete
var x:array[1..50]of integer;
k,n:integer;valid:boolean; f:text;
procedure posibil(k:integer;var valid:boolean);
var i,pd,pi:integer;
begin
valid:=true; /*melodiile nu trebuie sa se repete*/
for i:=1 to k-1 do
if(x[i]=x[k]) then valid:=false;
if (x[k]=1) then /*daca trebuie sa inscriptionam melodia 1 trebuie sa vedem da ca inainte a fost inscriptionata
melodia 2*/
for i:=1 to k-1 do
if(x[i]=2) then valid:=false;
end;
function solutie(k:integer):boolean;
var i,pi,pd:integer;
begin /*avem solutie cand s-au inscriptionat cele n melodii*/
if k=n then solutie:=true
else solutie:=false;
end;
procedure afisare(k:integer);
var i,j:byte;
begin
for i:=1 to k do
write(f,x[i],' ');
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=0;
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<n) do
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=0;
end;
end;
end;
begin
write('n=');readln(n);
assign(f,'melodii.txt');
rewrite(f);
back;
close(f);
end.

     


  
    
Problema se reduce la generarea permutarilor a n obiecte. In acest caz n este lungimea sirului iar elementele
sirului sunt codificate cu numere de la 1..n, numere ce reprezinta pozitia initiala a elementelor in sir.
s[x[k]] - elementul aflat in sir pe pozitia x[k]; x[k] reprezinta pozitia elementului in sirul initial (observatie: in
algoritmul pe care o sa-l prezentam o sa ne rezumam la afisare fara a schimba structura sirului).
Obsrvam ca:
- elementul maxim este 1 si cel minim este n (codurile=indicii elementelor din sir)
- elementele din solutie nu trebuie sa se repete
- vom afisa caracterul de pe pozitia corespunzatoare
- avem solutie cand s-au introdus in vectorul solutie toate cele n elemente
var x:array[1..50]of integer;
k,n:integer;valid:boolean; f:text;s:string;
procedure posibil(k:integer;var valid:boolean);
var i,pd,pi:integer;
begin
valid:=true; /*elementele nu trebuie sa se repete*/
for i:=1 to k-1 do
if(x[i]=x[k]) then valid:=false;
end;
function solutie(k:integer):boolean;
var i,pi,pd:integer;
begin /*avem solutie cand s-au introdus in vectorul solutie toate cele n elemente*/
if k=n then solutie:=true
else solutie:=false;
end;
procedure afisare(k:integer);
var i,j:byte;
begin /*Afisam caracterul corespunzator fiecare pozitii*/
for i:=1 to k do
write(f,s[x[i]],' ');
writeln(f);
end;
procedure back;
begin
k:=1;
x[k]:=0;
while(k>0) do begin
valid:=false;
while(not valid)and(x[k]<n) do
begin
x[k]:=x[k]+1;
posibil(k,valid);
end;
if(not valid) then k:=k-1
else if(solutie(k)) then afisare(k)
else begin
k:=k+1;
x[k]:=0;
end;
end;
end;
begin
write('dati sirul=');readln(s);
n:=length(s);
assign(f,'sir.txt');
rewrite(f);
back;
close(f);
end.
 



 23 


3   4 3 30

 #

#include<iostream.h>
#include<stdlib.h>
int a[100],n,k;
void citire()
{
cout<<"nr de elemente n=";cin >>n;
for(int i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";cin >>a[i];
}
cout<<"k=";cin>>k;
if(k<1||k>n) {cout<<"stergerea nu se poate efectua";exit(0);}
}
void afisare()
{
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
}
void sterge(int k)
{
for(int i=k;i<n;i++)
a[i]=a[i+1];
n--;
}
void main()
{
citire();
sterge(k);
afisare();
}

 
  335
 3   2  3  2.
a) media aritmetică a cifrelor pare;
b) produsul cifrelor impare
#include<iostream.h>
long unsigned int n;
void medie(long unsigned int n)
{ int u;
int c=0,s=0;
while(n!=0)
{
u=n%10;
n=n/10;
if(u%2==0){c++;s=s+u;}
}
cout<<"media aritmetica a cifrelor pare="<<(float)s/c<<endl;
}
void produs(long unsigned int n)
{
int p=1,u;
while(n!=0)
{
u=n%10;
n=n/10;
if(u%2==1)p=p*u;
}
cout<<"produsul cifrelor impare="<<p<<endl;
}
void main()
{
cout<<"n=";cin>>n;
medie(n);
produs(n);
}

 2  335   (666


 3  #  333   
 0

 #

#include<iostream.h>
#include<stdlib.h>
long unsigned int n;
void palindrom()
{ int u;
long unsigned int x=n,m=0;
while(n!=0)
{
u=n%10;
n=n/10;
m=m*10+u;
}
if(m==x) cout<<"palindrom\n"; else cout<<"nu e palindrom";
}
void main()
{
cout<<"n=";cin>>n;
if(n<1000){cout<<"numarul trebuie sa fie >=1000\n";exit(0);}
palindrom();
}

 2  335


 3  #  33  0

 #

3 3    

 3 
   (
#include<iostream.h>
#include<stdlib.h>
int n;
void perfect()
{
int s=0;
for(int i=1;i<=n/2;i++)
if(n%i==0)s=s+i;
if(s==n) cout<<"numar perfect\n";
else cout<<"numarul nu e perfect\n";
}
void main()
{
cout<<"n=";cin>>n;
perfect();
}

 2  335


 3   2  3  2  


 2 3  

#include<iostream.h>
#include<stdlib.h>
long unsigned int n;
void divizori()
{
int s=0;
int c=0;
for(int i=2;i<=n/2;i++)
if(n%i==0){s=s+i;c++;}
cout<<"suma divizorilor proprii="<<s<<"nr de div proprii="<<c;
}
void main()
{
cout<<"n=";cin>>n;
divizori();
}

 2  33  


 3   2  3  23
 3.(7(817(818/7(818/8977(818
#include<iostream.h>
int n;
void suma()
{float s=0,p=1;
for(int i=1;i<=n;i++)
{p=p*i; s=s+p;}
cout<<"s="<<s<<endl;
}
void main()
{
cout<<"n=";cin>>n;
suma();
}

 2  33  


 3   2  3  23
 3.(7(:*(81+7(:*(818/+77(:*(818/88+
#include<iostream.h>
int n;
void suma()
{float s=0,p=1;
for(int i=1;i<=n;i++)
{p=p*i; s=s+1/p;}
cout<<"s="<<s<<endl;
}
void main()
{
cout<<"n=";cin>>n;
suma();
}

% 

 2 




5 .
+3 

 3
   
  ;
#+3    <   
  



 = 
#include<iostream.h>
int a[100],n;
void citire()
{
cout<<"nr de elemente n=";cin >>n;
for(int i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";cin >>a[i];
}
}
void afisare()
{
for(int i=1;i<=n;i++) cout<<a[i]<" ";
cout<<endl;
}
void sortare()
{ int aux;
for(int i=1;i<=n-1;i++)
for(int j=i+1;j<=n;j++)
if(a[i]>a[j])
{aux=a[i];a[i]=a[j];a[j]=aux;}
}
void permutare_stanga()
{
int aux=a[1];
for(int i=1;i<n;i++) a[i]=a[i+1];
a[n]=aux;
}
void main()
{citire();
afisare();
sortare();
cout<<"dupa sortare\n";
afisare();
cout<<"dupa permutare\n";
permutare_stanga();
afisare();
}

 2 




5 
.
+3     
   3 4 3;
#+3 5
  3   
   
   3
     

#include<iostream.h>
int a[100],n;
void citire()
{
cout<<"nr de elemente n=";cin >>n;
for(int i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";cin >>a[i];
}
}
void afisare(int a[100],int n)
{
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
}
void elimina_nule()
{ int b[100];
int j=0;
for(int i=1;i<=n;i++)
if(a[i]!=0) {j++;b[j]=a[i];}
cout<<"fara elemente nule\n";
afisare(b,j);
}
void inlocuire()
{ float b[100];
for(int i=1;i<=n;i++)
{
b[i]=0;
for(int j=1;j<=n;j++)
if(j!=i) b[i]=b[i]+a[j];
b[i]=b[i]/(n-1);
}
cout<<"dupa inlocuire";
for(i=1;i<=n;i++) cout<<b[i]<<" ";
cout<<"\n";
}
void main()
{citire();
cout<<"elementele citite\n";
afisare(a,n);
elimina_nule();
inlocuire();
}

32 4 5 


3       <(>
#include<iostream.h>
int x[100],n;
void citire()
{
cout<<"nr de elemente n=";cin >>n;
for(int i=1;i<=n;i++)
{cout<<"x["<<i<<"]=";cin >>x[i];
}
}
void afisare(int a[100],int n)
{
for(int i=1;i<=n;i++) cout<<x[i]<<" ";
cout<<endl;
}
void cauta()
{int i=n;int gasit=0;
while(gasit==0&&i>0)
{ if(x[i]>15 && x[i]%2==1) gasit=1;
else i--;
}
if(i>0)cout<<x[i];
else cout<<"nu s-a gasit niciun element impar mai mare ca 15\n";
}
void main()
{citire();
cauta();
}

3   
.
+ 2 


 
#+2   
  3

 = 3?
#include<iostream.h>
#include<stdlib.h>
int a[100],n,k;
void citire()
{
cout<<"nr de elemente n=";cin >>n;
for(int i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";cin >>a[i];
}
cout<<"k=";cin>>k;
if(k<1||k>n) {cout<<"stergerea nu se poate efectua";exit(0);}
}
void afisare()
{
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
}
void sterge(int k)
{
for(int i=k;i<n;i++)
a[i]=a[i+1];
n--;
}
void main()
{
citire();
sterge(k);
afisare();
}

3    
 3     3 
 ! 



#
*
3 = +
#include<iostream.h>
#include<stdlib.h>
int a[100],n,k;
void citire()
{
cout<<"nr de elemente n=";cin >>n;
for(int i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";cin >>a[i];
}
}
void afisare()
{
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
}
float medie_pare()
{
float s=0;
int c=0;
for(int i=1;i<=n;i++)
if(a[i]%2==0){c++;s=s+a[i];}
if(c!=0)cout<<"media elementelor pare="<<s/c<<endl;
else cout<<"nu exista elemente pare\n";
}
void main()
{
citire();
medie_pare();
}

 2  33  2  5 


.
+ 

 =  
#+   3 

  
#include<iostream.h>
#include<stdlib.h>
int a[100],n,k;
void citire()
{
cout<<"nr de elemente n=";cin >>n;
for(int i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";cin >>a[i];
}
}
void afisare()
{
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
}
float medie_pozitive()
{
float s=0;
int c=0;
for(int i=1;i<=n;i++)
if(a[i]>0){c++;s=s+a[i];}
if(c!=0)cout<<"media elementelor pare="<<s/c<<endl;
else cout<<"nu exista elemente pare\n";
}
void suma()
{
int s=0;
for(int i=1;i<=n;i++)
if(a[i]%2==0&&i%2==1)s=s+a[i];
cout<<"suma elementelor pare de pe pozitii impare="<<s<<endl;
}
void main()
{
citire();
medie_pozitive();
suma();
}

 2  33  2  5 


 3  2<  
= 2    *  

 #

# 33   +
#include<iostream.h>
#include<stdlib.h>
int a[100],n,k;
void citire()
{
cout<<"nr de elemente n=";cin >>n;
for(int i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";cin >>a[i];
}
}
void afisare()
{
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
}
int prim(int n)
{
if(n<2)return 0;
int i=2;
while(i<=n/2)
if(n%i==0) return 0; else i++;
return 1;
oid cate_prime()
{
int c=0;
for(int i=1;i<=n;i++)
if(prim(a[i]))c++;
cout<<"nr elemente prime="<<c<<endl;
}
void main()
{
citire();
cate_prime();
}

 2  33  2  5 


 3  23  = 52   3    3
#include<iostream.h>
#include<stdlib.h>
int a[100],n,k;

void citire()
{
cout<<"nr de elemente n=";cin >>n;
for(int i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";cin >>a[i];
}
cout<<"k=";cin>>k;
}
void afisare()
{
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
}
void nr_aparitii()
{
int c=0;
for(int i=1;i<=n;i++)
if(a[i]==k)c++;
cout<<k<<" apare de "<<c<<" ori\n";
}
void main()
{
citire();
nr_aparitii();
afisare();
}

 2  33  2  5 


 3  2 
  3 2 02 3  3 = 5 2   
#include<iostream.h>
#include<stdlib.h>
int a[100],n,k;
void citire()
{
cout<<"nr de elemente n=";cin >>n;
for(int i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";cin >>a[i];
}
}
void afisare()
{
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
}
int min()
{
int m;
m=a[1];
for(int i=1;i<=n;i++)
if(m>a[i])m=a[i];
return m;
}
void cate_min()
{
int m=min();
int c=0;
for(int i=1;i<=n;i++)
if(m==a[i]) c++;
cout<<"nr de elemente minime="<<c<<endl;
}
void main()
{
citire();
cout<<"val min="<<min();
cate_min();
}

 2 




 
3 5
  3   ?   
   
@(

? 3  3*?,+
#include<iostream.h>
#include<stdlib.h>
int a[100],n,k;
void citire()
{
cout<<"nr de elemente n=";cin >>n;
for(int i=1;i<=n;i++)
{cout<<"a["<<i<<"]=";cin >>a[i];
}
cout<<"k=";cin>>k;
if(k<1||k>=n) {cout<<"date incorecte";exit(0);}
}
void afisare()
{
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
}
void inlocuieste()
{
for(int i=n-k+1;i<=n;i++) a[i]=-1;
}
void main()
{
citire();
afisare();
inlocuieste();
afisare();
}
    35 <3   3  (/
 3   2  3  2<  !  2 3 
 
#include<iostream.h>
#include<stdlib.h>
long unsigned int n;
void perfect()
{
long unsigned int s=0;
for(int i=1;i<=n/2;i++)
if(n%i==0)s=s+i;
if(s==n) cout<<"numar perfect\n";
else cout<<"numarul nu e perfect\n";
}
void main()
{
cout<<"n=";cin>>n;
perfect();
}

  

 2  3 <


3  23   =    <  2 
 3 23

    <
#include<iostream.h>
#include<string.h>
#include<conio.h>
void main()
{int i;
char s[100];
cout<<"s=";cin.get(s,100);
cout<<"Sirul are: "<<strlen(s)<<" caractere"<<endl;
strlwr(s);
for(i=0;i<strlen(s);i++)
if(s[i]=='a'||s[i]=='e'||s[i]=='i'||s[i]=='o'||s[i]=='u')
strcpy(s+i,s+i+1);
cout<<"sirul fara vocale="<<s;
}

    312  


3    3  *  +33 
# 5   2     
#include<iostream.h>
#include<string.h>
#include<conio.h>
char s1[100],s2[100];
void citire()
{
cout<<"primul sir: ";cin.get(s1,100);cin.get();
cout<<"al doilea sir ";cin.get(s2,100);
}
void compara()
{int x;
x=stricmp(s1,s2);
strlwr(s1);strlwr(s2);
//transformam cele doua siruri in siruri numai cu litere mici
if(x>0) cout<<"Primul sir este mai mare\n ";
else if(x==0) cout<<"Siruri sunt egale\n ";
else cout<<"Al doilea sir este mai mare decat primul \n ";
}
void main()
{citire();
compara();
}

2   4
= 4          
.
+3  2 *  +   
 ;
#+3  2
   4
#include<iostream.h>
#include<string.h>
#include<fstream.h>
#include<io.h>
ifstream f("litere.txt");
int n;
char a[100];
void citire()
{int i;
i=0;
f>>a[i];
while(!f.eof())
{cout<<a[i];
i++;
/*pt nu a avea surprize ca fisierul sa nu aiba decat majuscule
transformam sirul in majusculele*/
strupr(a);
f>>a[i];
}
n=i;
f.close();
}
void maxim()
{
int b[50];
cout<<"\n numarul de caractere="<<n<<"\n";
int k=0;
for(char c='A';c<='Z';c++){
b[k]=0;
for(int j=0;j<n;j++)
if(c==a[j]) b[k]++;
k++;
}
int max=b[0];
for(int i=1;i<k;i++)
if(max<b[i])max=b[i];
cout<<"caracterele cu numar maxim de aparitii="<<max<<endl;
for(i=0;i<k;i++)
if(b[i]==max)cout<<char(65+i)<<" ";
}
void vocale()
{char voc[]="AEIOU";
cout<<"\nvocalele din text\n";
for(int i=0;i<n;i++)
for(int j=0;j<strlen(voc);j++)
if(a[i]==voc[j])cout<<a[i]<<" ";
cout<<"\n";
}
void main()
{citire();
maxim();
vocale();
}
 245!
  # 3   0       = 
.
+ 3  2  5
  # 3;
#+ 3     9
   
#include <iostream.h>
#include <conio.h>
#include <string.h>
char cuv[10][10];
int n;
void sortare()
{ char aux[10];int x;
for(int i=1;i<n;i++)
for(int j=1+i;j<=n;j++)
{x=strcmp(cuv[i],cuv[j]);
if(x>0){
strcpy(aux,cuv[i]);
strcpy(cuv[i],cuv[j]);
strcpy(cuv[j],aux);
}
}
for(i=1;i<=n;i++)cout<<cuv[i]<<" ";
cout<<endl;
}
int nrvocale(char s[10])
{char vocale[]="aeiou";int c;int nr=0;
strlwr(s);
for(int i=0;i<strlen(vocale);i++)
{ c=0;
for(int j=0;j<strlen(s);j++)
if(vocale[i]==s[j])c++;
if(c!=0)nr++;
}
if (nr>=4)return 1;
else return 0;
}
void vocale4()
{
for(int i=1;i<=n;i++)
if(nrvocale(cuv[i])==1)cout<<cuv[i]<<" ";
cout<<"\n";
}
int main()
{char a[100],*p,separator[]=" ";
int i=0,nr=0;
cout<<"Dati sirul:";cin.get(a,100);
strcpy(p,a);
p=strtok(p,separator);
while (p)
{strcpy(cuv[++nr],p);
p=strtok(NULL,separator);}
cout<<"Sunt "<<nr<<" cuvinte:"<<endl;
for (i=1;i<=nr;i++) cout<<cuv[i]<<endl;
n=nr;
sortare();
vocale4();
return 0;
}

 (
ý 2         <      2 
.
+3  3    2 ;
#+3  2  5

 3
#     = 5   2   
#include<iostream.h>
#include<string.h>
#include<fstream.h>
ifstream ff("date.in");
int n;
char a[100][100];
void citire()
{int i;
i=1;
ff>>a[1];
while(strcmp(a[i],"")!=0)
{i++;
ff>>a[i];strlwr(a[i]);//transformam majusculele in litere mici
}
n=i-1;
}
void cuvinte()
{
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<"\n numarul de cuvinte="<<n<<"\n";
cout<<"cuvintele care incep cu vocala\n";
for (i=1;i<=n;i++)
if ((a[i][0]=='a')||(a[i][0]=='e')||(a[i][0]=='i')||(a[i][0]=='o')||(a[i][0]=='u'))
cout<<a[i]<<" ";
}
void main()
{citire();cuvinte();}

2   4
= 4          
.
+3  2 *  +   
 ;
#+3  2
   4
#include<iostream.h>
#include<string.h>
#include<fstream.h>
#include<io.h>
ifstream f("litere.txt");
int n;
char a[100];
void citire()
{int i;
i=0;
f>>a[i];
while(!f.eof())
{cout<<a[i];
i++;
/*pt nu a avea surprize ca fisierul sa nu aiba decat majuscule
transformam sirul in majusculele*/
strupr(a);
f>>a[i];
}
n=i;
f.close();
}
void maxim()
{
int b[50];
cout<<"\n numarul de caractere="<<n<<"\n";
int k=0;
for(char c='A';c<='Z';c++){
b[k]=0;
for(int j=0;j<n;j++)
if(c==a[j]) b[k]++;
k++;
}
int max=b[0];
for(int i=1;i<k;i++)
if(max<b[i])max=b[i];
cout<<"caracterele cu numar maxim de aparitii="<<max<<endl;
for(i=0;i<k;i++)
if(b[i]==max)cout<<char(65+i)<<" ";
}
void vocale()
{char voc[]="AEIOU";
cout<<"\nvocalele din text\n";
for(int i=0;i<n;i++)
for(int j=0;j<strlen(voc);j++)
if(a[i]==voc[j])cout<<a[i]<<" ";
cout<<"\n";
}
void main()
{citire();
maxim();
vocale();
}

2   (42  14


=  0< <  5
  # 3
3 
   3 2   /4 3
= 3
    
3 2 05
 
 # 3
#include<iostream.h>
#include<io.h>
#include<string.h>
#include<fstream.h>
ifstream f1("cuv1.txt");
ifstream f2("cuv2.txt");
ofstream f("cuv3.txt");
char a[100][10],b[100][10],c[200][10];
int n,m;
void citire_f1()
{
n=0;
while(!f1.eof())
{f1>>a[n];
n++;}
f1.close();
}
void afisare_f1()
{
cout<<"\nfisierul cuv1.txt are "<<n<<" cuvinte\n";
for(int i=0;i<n;i++) cout<<a[i]<<"\n";
}
void citire_f2()
{
m=0;
while(!f2.eof())
{f2>>b[m];
m++;}
f2.close();
}
void interclasare()
{
int x,k;
int i=0,j=0;
while(i<n&&j<m)
{x=strcmp(a[i],b[j]);
if(x>0){f<<b[j]<<endl;j++;}
else {f<<a[i]<<endl;i++;}
}
//daca nu s-au afisat toate sirurile din a
if(i<n)
for(k=i;k<n;k++){f<<a[k]<<endl;}
//daca nu s-au afisat toate sirurile din b
if(j<m)
for(k=j;k<m;k++){f<<b[k]<<endl;}
f.close();
}
void afisare_f2()
{
cout<<"\nfisierul cuv2.txt are "<<m<<" cuvinte\n";
for(int i=0;i<m;i++) cout<<b[i]<<"\n";
}
void main()
{citire_f1();
afisare_f1();
citire_f2();
afisare_f2();
interclasare();
}

 2  # 
44 A6 
.
+ 3    
  2 ;
#+ 
4 3  
2 
 =   3
#include<iostream.h>
#include<io.h>
#include<fstream.h>
ifstream f("bingo.txt");
int a[90],n;
void citire()
{n=0;
while(!f.eof()) f>>a[++n];
n--;
f.close();
}
void afisare()
{
cout<<"\nin fisier sunt "<<n<<" numere\n";
for(int i=1;i<=n;i++)cout<<a[i]<<" ";
cout<<"\n";
}
int cmmdc(int a,int b)
{
while(a!=b)
if(a>b)a=a-b;
else b=b-a;
return a;
}
void cmmdcn()
{
int c=cmmdc(a[1],a[2]);
for(int i=3;i<=n;i++) c=cmmdc(c,a[i]);
cout<<"cmmdc="<<c<<endl;
}
void maxim()
{
int max=a[1];
for(int i=1;i<=n;i++)
if(max<a[i]) max=a[i];
cout<<"max="<<max<<endl;
cout<<"pozitiile: ";
for(i=1;i<=n;i++)
if(a[i]==max) cout<<i<<" ";
cout<<endl;
}
void main()
{
citire();
afisare();
cmmdcn();
maxim();
}

 1

ý 2  41   3   3  0,(666


3   5 2  1      =      <0 

     =    
#include<iostream.h>
#include<io.h>
#include<string.h>
#include<fstream.h>
ifstream f1("a2.in");
ofstream f2("a2.out");
int n;
int prim(int n)
{
if(n<2) return 0;
for(int i=2;i<=n/2;i++)
if(n%i==0) return 0;
return 1;
}
void citire()
{
f1>>n;
f1.close();
}
void afisare()
{
for(int i=2;i<=n;i++)
if(prim(i)==1)f2<<i<<" ";
f2<<endl;
if(n>0){
int k=1;
f2<<2<<" ";
i=3;
while(k<n)
{if(prim(i)==1){f2<<i<<" ";k++;}
i+=2;}
}
f2.close();
}
void main()
{
citire();
afisare();
}

c  2   4     3   0  

0 
3
          0 3=   = 
3  
  


 2  
 


2  3  25 2  0 <
  
#include<iostream.h>
#include<io.h>
#include<string.h>
#include<fstream.h>
ifstream f1("matrice.txt");
ofstream f2("rez.dat");
int a[50][50],n,m;
void citire()
{ int x;
f1>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
f1>>a[i][j];
f1.close();
}
void afisare()
{
f2<<"Matricea este:\n";
for(int i=1;i<=n;i++)
{for(int j=1;j<=m;j++)
f2<<a[i][j]<<" ";
f2<<endl;
}
}
void produs()
{
float p;
for(int j=1;j<=m;j++)
{
if(j%2==1)
{p=1;
for(int i=1;i<=n;i++)
if(a[i][j]%2==0)p=p*a[i][j];
f2<<"produsul numerelor pare de pe coloana "<<j<<" este "<<p<<endl;
}
}
}
void suma()
{
float s;
for(int j=1;j<=m;j++)
{
if(j%2==0)
{s=0;
for(int i=1;i<=n;i++)
if(a[i][j]%2==1)s=s+a[i][j];
f2<<"suma numerelor impare de pe coloana "<<j<<" este "<<s<<endl;
}
}
}
void main()
{
citire();
afisare();
produs();
suma();
f2.close();
}

2   


=    53 = 2   
  ! = 
.
+3 

 # 
 5  5 2 ;
#+3  253 =   

#include<iostream.h>
#include<io.h>
#include<string.h>
#include<fstream.h>
ifstream f("date.in");
char nume[100][20];
int n;
float inalt[100];
void citire()
{
n=0;
while(!f.eof())
{n++;
f>>inalt[n]>>nume[n];
}
f.close();
}
void afisare()
{
for(int i=1;i<=n;i++)
cout<<inalt[i]<<" "<<nume[i]<<endl;
}
void sortare()
{
char aux[20];
float aux1;
int x;
for(int i=1;i<n;i++)
for(int j=i+1;j<=n;j++)
{x=strcmp(nume[i],nume[j]);
if(x>0)
{strcpy(aux,nume[i]);
strcpy(nume[i],nume[j]);
strcpy(nume[j],aux);
aux1=inalt[i];
inalt[i]=inalt[j];
inalt[j]=aux1;
}
}
}
void media()
{float s=0;
for(int i=1;i<=n;i++) s=s+inalt[i];
cout<<"media inaltimilor="<<(float)s/n;
}
void main()
{
citire();
cout<<"datele citite\n";
afisare();
sortare();
cout<<"numele in ordine alfabetica \n";
afisare();
media();
}

  

 2
   2 

2  5 
.
+3         ;
#+3       
#include<iostream.h>
int a[30][30],n,m;
void citire()
{int i,j;
cout<<"n=";cin>>n;
cout<<"m=";cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{cout<<"a["<<i<<"]["<<j<<"]";
cin>>a[i][j];
}
}
void minim_linie()
{int min;
for(int i=1;i<=n;i++)
{min=a[i][1];
for(int j=1;j<=m;j++)
if(min>a[i][j])min=a[i][j];
cout<<"min pe linia "<<i<<":"<<min<<endl;
}
}
void perimetru()
{
int nr=0;
for(int j=1;j<=m;j++)
if(a[1][j]%2==0){cout<<a[1][j]<<" ";nr++;}
for(int i=2;i<=n;i++)
if(a[i][m]%2==0){cout<<a[i][m]<<" ";nr++;}
for(j=1;j<=m-1;j++)
if(a[n][j]%2==0){cout<<a[n][j]<<" ";nr++;}
for(i=2;i<=n-1;i++)
if(a[i][1]%2==0){cout<<a[i][1]<<" ";nr++;}
cout<<"nr="<<nr;
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}}
void main()
{
citire();
afisare();
minim_linie();
perimetru();
}

 2
 33  42  5 
.
+3  2   
    3;
#+3 
 
     5
 


#include<iostream.h>
int a[30][30],n,m;
void citire()
{int i,j;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{cout<<"a["<<i<<"]["<<j<<"]";
cin>>a[i][j];
}
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
int prim(int n)
{
if(n<=1) return 0;
int i=2;
while(i<=n/2)
if(n%i==0) return 0;
else i++;
return 1;
}
void diagonala()
{
cout<<"elementele prime de pe diagonala principala\n";
for(int i=1;i<=n;i++)
if(prim(a[i][i]))cout<<a[i][i]<<" ";
cout<<endl;
}
void vector()
{int b[900],i,j;
cout<<"parcurgerea matricii pe coloane\n";
int nr=0;
for(j=1;j<=n;j++)
for (i=1;i<=n;i++)
b[++nr]=a[i][j];
for(i=1;i<=nr;i++)
cout<<b[i]<<" ";
cout<<"\n";}
void main()
{
citire();
afisare();
diagonala();
vector();
}

 2
   2 

 
.
+3 
 
5 
=   4  

3  ;
#+3 

 
 
  
#include<iostream.h>
int a[30][30],n,m,b[30];
void citire()
{int i,j;
cout<<"n=";cin>>n;
cout<<"m=";cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{cout<<"a["<<i<<"]["<<j<<"]";
cin>>a[i][j];
}
}
void maxim_linie()
{int max;
for(int j=1;j<=m;j++)
{max=a[1][j];
for(int i=1;i<=m;i++)
if(max<a[i][j])max=a[i][j];
b[j]=max;
cout<<"max pe coloana "<<j<<max<<endl;
}
}
void sortare()
{int aux;
cout<<"elementele sortate\n";
for(int i=1;i<=m-1;i++)
for(int j=i+1;j<=m;j++)
if(b[i]>b[j])
{aux=b[i];b[i]=b[j];b[j]=aux;}
for(i=1;i<=m;i++)cout<<b[i]<<" ";
cout<<endl;
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}}
void main()
{
citire();
afisare();
maxim_linie();
sortare();
}

3
 40  2 

0 5 
3  3  
   ,192  3    
  
     
#include<iostream.h>
int a[30][30],n,m;
void citire()
{int i,j;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{cout<<"a["<<i<<"]["<<j<<"]";
cin>>a[i][j];
}
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
void afis_deasupra_diagonala_principala()
{
for(int i=1;i<=n-1;i++)
{ for(int j=i+1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
void contor()
{int c=0;
for(int i=1;i<=n-1;i++)
{ if(i%2==0)
for(int j=i+1;j<=n;j++)
if(a[i][j]<24)c++;
}
cout<<"c="<<c<<endl;
}
void main()
{
citire();
cout<<"matricea este\n";
afisare();
cout<<"elementele de deasupra diagonalei principale\n";
afis_deasupra_diagonala_principala();
contor();
}

  1

3
 40  2 


3  4   



#include<iostream.h>
int x[30][30],n,m;
void citire()
{int i,j;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{cout<<"x["<<i<<"]["<<j<<"]";
cin>>x[i][j];
}
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<"\n";
}
}
void maxim_coloana_p()
{
int p;
cout<<"nr coloanei p="; cin>>p;
int max=-1;
for(int i=1;i<=n;i++)
if(x[i][p]%2==0)
if(x[i][p]>max) max=x[i][p];
if(max>-1)cout<<"max="<<max<<endl;
else cout<<"nu exista nr pare pe coloana p\n";
}
void main()
{
citire();
cout<<"matricea este\n";
afisare();
maxim_coloana_p();
}


 3
   2 

0     5 
3      


303  3
#include<iostream.h>
int x[30][30],n,m;
void citire()
{int i,j;
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{cout<<"x["<<i<<"]["<<j<<"]";
cin>>x[i][j];
}
}
void afisare()
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<"\n";
}
}
void minim_coloana_p()
{
int c;
cout<<"nr coloanei c="; cin>>c;
int min=x[1][c];
for(int i=1;i<=m;i++)
if(x[i][c]%2==0)
if(x[i][c]<min) min=x[i][c];
cout<<"min="<<min<<endl;
}
void main()
{
citire();
cout<<"matricea este\n";
afisare();
minim_coloana_p();
}

 23 


3 
 
= .
!  3   
    3;
! 
 
3 5 0 3
= 3 
6
#include<iostream.h>
int a[30][30],n,lin;
int nr_cifre(int n)
{
int nr=0;
while(n!=0)
{nr++;n=n/10;}
return nr;
}
void matrice_cu_0()
{lin=nr_cifre(n);
for(int i=1;i<=lin;i++)
for(int j=1;j<=lin;j++)
a[i][j]=0;
}
void diagonala(int n)
{int nr=0;
while(n!=0)
{nr++;
a[nr][nr]=n%10;
n=n/10;
}
}
void afisare()
{
for (int i=1;i<=lin;i++)
{for(int j=1;j<=lin;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
void main()
{cout<<"n=";cin>>n;
matrice_cu_0();
diagonala(n);
afisare();
}

 2
   2 

0 5 
3   " #
3   (  1*+05 0

 #

#include<iostream.h>
int x[30][30],n,m;
void citire()
{int i,j;
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{cout<<"x["<<i<<"]["<<j<<"]";
cin>>x[i][j];
}
}
void afisare()
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<"\n";
}
}
void interschimbare_linii()
{
int l1,l2,aux;
cout<<"linia l1=";cin>>l1;
cout<<"linia l2=";cin>>l2;
for(int i=1;i<=n;i++)
{
aux=x[l1][i];
x[l1][i]=x[l2][i];
x[l2][i]=aux;}
}
void main()
{
citire();
cout<<"matricea este\n";
afisare();
interschimbare_linii();
afisare();
}

  /

 
  3
 3 
 
 3   2  3  2.
+ 
 
;
#+  
 
    3
#include<iostream.h>
int x[30][30],n,m;
void citire()
{int i,j;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{cout<<"x["<<i<<"]["<<j<<"]";
cin>>x[i][j];
}
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<"\n";
}
}
void suma()
{ int s=0;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
s=s+x[i][j];
cout<<"suma elementelor din matrice="<<s<<endl;
}
void suma_diagonala_principala()
{
int s=0;
for(int i=1;i<=n;i++)
s=s+x[i][i];
cout<<"suma de pe diagonala principala="<<s<<endl;
}
void main()
{
citire();
cout<<"matricea este\n";
afisare();
suma();
suma_diagonala_principala();
}

 
  3
 33
  5 
 3   2  2.
+  
  
     ;
#+  
 # 
  3
#include<iostream.h>
int x[30][30],n,m;
void citire()
{int i,j;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{cout<<"x["<<i<<"]["<<j<<"]";
cin>>x[i][j];
}
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<"\n";
}
}
void deasupra_dp()
{
int s=0;
for(int i=1;i<=n-1;i++)
{for(int j=i+1;j<=n;j++)
{cout<<x[i][j]<<" ";s=s+x[i][j];}
cout<<endl;
}
cout<<"suma elementelor de deasupra diagonalei principale="<<s<<endl;
}
void sub_ds()
{int s=0;
for(int i=2;i<=n;i++)
{for(int j=n-i+2;j<=n;j++ )
{cout<<x[i][j]<<" ";s=s+x[i][j];}
cout<<endl;
}
cout<<"suma elementelor de sub diagonala secundara="<<s<<endl;
}
void main()
{
citire();
cout<<"matricea este\n";
afisare();
cout<<"deasupra diagonalei principale\n";
deasupra_dp();
cout<<"sub diagonala secundara\n";
sub_ds();
}

 
  3
   2 

 5 
 3   2  3  2   
     * 3     3
,-+
B  ,
"C
#include<stdlib.h>
int x[30][30],n,m;
void citire()
{int i,j;
cout<<"m=";cin>>m;
cout<<"n=";cin>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{cout<<"x["<<i<<"]["<<j<<"]";
cin>>x[i][j];
}
}
void afisare()
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
cout<<x[i][j]<<" ";
cout<<"\n";
}
}
void minim_l()
{
int l,min;
cout<<"linia l=";cin>>l;
if(l<1||l>m){cout<<"eroare";exit(0);}
min=x[l][1];
for(int i=1;i<=n;i++)
if(x[l][i]<min)min=x[l][i];
cout<<"min="<<min;
}
void main()
{
citire();
cout<<"matricea este\n";
afisare();
minim_l();
}

 

D
 = # 34 3  2    3032 

.
+3  3 2 
c ;
#+3 

2  3

#include<iostream.h>
#include<string.h>
#include<conio.h>
typedef struct
{char marca[20],culoare[20],med[20];
int nr;}masina ;
masina a[20];
int n,x,k;
void citire()
{int i;
cout<<"n=";cin>>n;
for (i=1;i<=n;i++)
{cout<<"a[i].marca: ";cin>>a[i].marca;
cout<<"a[i].culoare: ";cin>>a[i].culoare;
cout<<"a[i].numar: ";cin>>a[i].nr;
}
}
void nr_dacia()
{ int i;
int nr=0;
for (i=1;i<=n;i++)
{x=strcmp(a[i].marca,"dacia");
if (x==0) nr=nr+1;}
cout<<"numarul de masini Dacia este "<<nr<<"\n";
}
void sortare()
{ int i,j;masina aux;

for (i=1;i<=n-1;i++)
for (j=i+1;j<=n;j++)
{x=strcmp(a[i].culoare,a[j].culoare);
if(x>0)
{aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}
for (i=1;i<=n;i++)
cout<<a[i].culoare<<" "<<a[i].marca<<" "<<a[i].nr<<endl;
}
void main()
{
citire();
nr_dacia();
sortare();
}
 =
 

  !
 0  2
 33
 

= .
 
   0 0= 
   %  =  
= 

 
2  2= 

  
= * 
  4 E3
 
      <>66
F ((5
+
 2= 
    =3  
#include<iostream.h>
#include<string.h>
#include<conio.h>
typedef struct
{int cod,c,p,pret;
char den[20];}produse;
produse a[20];
int n,i,c,p;
void citire()
{
cout<<"Dati numarul de produse ";cin>>n;
for (i=1;i<=n;i++)
{cout<<"codul produsului ";cin>>a[i].cod;
cout<<"pretul produsului ";cin>>a[i].pret;
cout<<"denumirea produsului ";cin>>a[i].den;}
}
void rezolvare()
{
for (i=1;i<=n;i++)
if(a[i].cod<500) a[i].pret=7;
else a[i].pret=11;
for (i=1;i<=n;i++)
cout<<"pretul "<<a[i].den<<" este "<<a[i].pret<<"\n";
cout<<endl;
for (i=1;i<=n;i++)
if(a[i].pret==11) cout<<a[i].den<<"\n";
}
void main()
{
citire();
rezolvare();
}

    3 2   3  


 3  2  
5
   3


#include<iostream.h>
#include<string.h>
typedef struct elev{
char nume[50];
float medie;
};
elev a[100],aux;
int n;
void citire()
{int i;
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{cout<<"a[i].nume: ";cin>>a[i].nume;
cout<<"a[i].medie: ";cin>>a[i].medie;
}
}
void sortare()
{int i,j;
for(i=1;i<n;i++)
{for(j=i+1;j<=n;j++)
if(a[i].medie<a[j].medie)
{aux=a[i];
a[i]=a[j];
a[j]=aux;
}
}
}
void afisare()
{int i;
for(i=1;i<=n;i++)
cout<<a[i].nume<<" "<<a[i].medie<<endl;
}
void main()
{citire();
cout<<"lista de elevi\n";
afisare();
sortare();
cout<<"dupa sortare\n";
afisare();
}

 


Se citeşte un număr natural n.
Să se determine cifra maximă din număr, folosind un subprogram.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class numar
{
int n;
public numar()
{
Console.WriteLine("dati numarul ");
this.n = int.Parse(Console.ReadLine());
}
public void maxcifra()
{
int u;
int max = 0;
/*impartim numarul in cifre si reinitializam maximul de cate ori gasim o cifra mai mare decat maximul*/
while (n != 0)
{
u = n % 10;
n = n / 10;
if (max < u) max=u;
}
Console.WriteLine("cifra maxima="+ max);
}
static void Main(string[] args)
{
numar x = new numar();
x.maxcifra();
Console.ReadKey();
}
}

 
  335
 3   2  3  2.
+   3 
;
#+
   
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class numar
{
int n;
public numar()
{
Console.WriteLine("dati numarul ");
this.n = int.Parse(Console.ReadLine());
}
public void medie()//media cifrelor pare
{
int u;
int nn=n;
int s = 0;
while (n != 0)
{
u = n % 10;
n = n / 10;
if (u%2==0) s=s+u;
}
Console.WriteLine("suma cifrelor pare=" + s);
n = nn;
}
public void produs()//produsul cifrelor impare
{
int u;
int nn = n;
int p = 1;
while (n != 0)
{
u = n % 10;
n = n / 10;
if (u % 2 == 1) p = p * u;
}
Console.WriteLine("produsul cifrelor impare=" + p);
n = nn;
}
static void Main(string[] args)
{
numar x = new numar();
x.medie();
x.produs();
Console.ReadKey();
}
}

 2  335   (666


 3  #  333   
 0

 #

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class numar
{
int n;
public numar()
{
Console.WriteLine("dati numarul ");
this.n = int.Parse(Console.ReadLine());
}
public void palindorm()
{
int u;
int nn = n;/*retinem valoarea lui n*/
int m = 0;
/*construim numarul oglindit*/
while (n != 0)
{
u = n % 10;
n = n / 10;
m = m * 10 + u;
}
if (nn == m) Console.WriteLine("palindrom");
else Console.WriteLine("Numarul nu e palindrim");
}
static void Main(string[] args)
{
numar x = new numar();
x.palindorm();
Console.ReadKey();
}
}

 2  335


 3  #  33  0

 #

3 3    

 3 
   (
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class numar
{
int n;
public numar()
{
Console.WriteLine("dati numarul ");
this.n = int.Parse(Console.ReadLine());
}
void perfect()
{
int s = 0;
for(int i=1;i<=n/2;i++)
if (n%i==0)s=s+i;
if(n==s)Console.WriteLine("numar perfect");
else Console.WriteLine("Nu e numar perfect");
}
static void Main(string[] args)
{
numar x = new numar();
x.perfect();
Console.ReadKey();
}
}

 2  335


 3   2  3  2  


 2 3  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class numar
{
int n;
public numar()
{
Console.WriteLine("dati numarul ");
this.n = int.Parse(Console.ReadLine());
}
void divizori()
{
int s = 0;
int nr = 0;
for(int i=2;i<=n/2;i++)
if (n % i == 0) { s = s + i; nr++; }
Console.WriteLine("suma divizorilor proprii="+s);
Console.WriteLine("numarul de divizori proprii=" + nr);
}
static void Main(string[] args)
{
numar x = new numar();
x.divizori();
Console.ReadKey();
}
}

 2  33  


 3   2  3  23
 3.(7(817(818/7(818/8977(818
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class numar
{
int n;
public numar()
{
Console.WriteLine("dati numarul ");
this.n = int.Parse(Console.ReadLine());
}
void suma()
{
int s = 0;
int p = 1;
for (int i = 1; i <= n; i++)
{
p = p * i;
s = s + p;
}
Console.WriteLine("valoarea expresiei ="+s);
}
static void Main(string[] args)
{
numar x = new numar();
x.suma();
Console.ReadKey();
}
}

 2  33  


 3   2  3  23
 3.(7(:*(81+7(:*(818/+77(:*(818/88+
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class numar
{
int n;
public numar()
{
Console.WriteLine("dati numarul ");
this.n = int.Parse(Console.ReadLine());
}
void suma()
{
double s = 0;
double p = 1;
for (int i = 1; i <= n; i++)
{
p = p * i;
s = s + 1/p;
}
Console.WriteLine("valoarea expresiei =" + s);
}
static void Main(string[] args)
{
numar x = new numar();
x.suma();
Console.ReadKey();
}
}

You might also like