PROBLEME BPC
1) CALCULAREA SUMEI ELEMENTETOR UNUI VECTOR REAL INTRODUS DE
LA TASTATURA
Intreg i, n;
Real v[100], s;
Read(n);
Do_for i=0,n-1,1 Read(v[i]); End_do; ///citire vector
S=0; //initializare suma cu 0
Do_for i=0,n-1,1
S = s + v[i];
End_do;
2) Suma elementelor impare ale unui vector
Real v[100]; Intreg n, i;
Read(n); si citim si vectorul cu do for si end do;
S=0; i=1;
While ( i < n )
Do { s = s + v[i];
i=i+2; } end while;
write (“Suma este: “, s); Stop;
-alta variante: citirea se face la fel
S=0;
Do _for i=1,n-1,2
S=s+ v[i];
End_do;
3) Suma elementelor strict positive ale unui vector
Real v[100],s; Intreg n, i;
Se citeste n si vectorul v;
S=0;
Do_for i=0,n-1,1
If ( v[i] >0 ) then s = s+ v[i];
End if; end do;
If ( s>0) then write suma este: , s; else write “suma nu are elemente positive”;
End if; stop;
4) Determinarea primei aparitii a unei valori dintr-un vector neordonat
Real v[100], a; Intreg I, n;
Read (n) si se citeste si vectorul cu do_for; read (a);
I=0;
While (( i<n) && (v[i]!= a))
Do i = i+1;
End while;
If ( i == n) then write (“val cautata nu exista in vector”)
Else write (“prima aparitie a lui “a” este pe pozitia: “, i), end if , stop;
5) Interschimmbarea elementelor egal departate de capetele unui vector si
afisarea vectorului obtinut
Intreg x[50], i, aux, n; Read(n) si vectorul;
Do_for i=0,(n/2)-1,1
{ aux = x[i];
x[i] = x(n-i-1);
x(n-i-1) = aux; }
end_do;
afisare: do_for i=0, n-1, 1 write (x[i]); end do, stop;
6) Produsul scalar dintre 2 vectori de dimensiunea n
Real x[100], y[100], ps;
Intreg i, n;
Read(n);
Do_for i=0, n-1, 1
Read (x[i]);
End do; si la fel se citeste si vectorul y
Ps=0;
Do_for i=0,n-1, 1
Ps = ps + x[i]* y[i];
End_do;
Write (ps);
Stop;
7) Produsul vectorial dintre 2 vectori de dimensiunea n
Real v[50], y[50], pv[50];
Intreg i, n;
Read(n); si se citesc si cei 2 vectori cu do_for;
Do_for i=0, n-1, 1
Pv = x[i]*y[i]
End_do;
Afisarea se face cu do_for si se afiseaza pv + stop;
8) Determinarea elementului maxim si memorarea aparitiilor sale
Real x[100], max; Intreg poz[100], I, n, k;
Read(n) si se citeste si vectorul cu do for
Max = x[0]; //pp ca primul element e maximul din vector
Do_for i=1, n-1, 1
If ( x[i] > max) then max = x[i] //parcurgem vectorul si comparam
End if; end do;
// construim vectorul cu pozitiile pe care se afla maxim
K=0;
Do for i=0, n-1, 1
If ( x[i] == max) then { poz[k] = i; k = k+1; }
End if; end do;
Write “maximult este: “, max “ pe pozitiile: “ ;
Do for I =0, k-1, 1;
write (poz[i]);
end do;stop;
1) Sortarea interschimbare
Real x[100], aux; Intreg , i, p;
Read(n); + citire vector cu do for
P=1; //p = contor
While (p==i) do { p=0;
do_for i=0, n-2, 1
If (x[i] > x[i+1]) //comparam primul element cu al doilea
Then { aux = x[i]; //stocam primul element in auxiliar
X[i] = x[i+1]; //primul element il egalam cu al doilea pt a-i lua locul
X[i+1] = aux; //stocam al doilea element in aux
P=1;
End_if; end_do; } end_while;
Write (“Vectorul sortat este: “); si se parcurge vectorul pt a se scrie;
End do, stop;
2) Sortarea prin selectie
Real x[100], aux; Intreg i, j, n;
Do_for i=0, n-1,1
Read(x[i]); end_do;
Do_for i=0, n-2, 1
Do_for j = i+1, n-1, 1 //atribuim valoarea 2 al vectorului x in j
If ( x[i] > x[j] ) then { aux = x[i]; x[i] = x[j]; x[j] = aux; } //comparam si atribuim
End_ if, end_do, end_do;
Write (“vectorul sortat este: ”);
Do_for i=0, n-1, 1
Scrie(x[i]); enddo Stop;
3) Progresie aritmetica
Intreg n, i; Real x[100];
Read (“Scrie dimensiunea vectorului n = “);
Citeste(n);
If (n<3) then write (“Vectorul are putine elemente pt a verifica progresia aritm”)’
Else { do_for i=0, n-1,1
Citeste (x[i]);
endDo;
i=1;
while ( (i<n-1) && (x[i] ==(x[i-1] + x[i+1])/2)) do i = i+1;
endwhile;
if (I == n-1) then scrie (“Elementele sunt in progresie aritmetica”);
else scrie (“Elementele nu sunt in progresie aritmetica”);
endif; STOP
4) Fie un vector, sa se scrie program care insereaza media arit a 2 valori
consecutive
Intreg n, i, j, k; Reak x[100];
Citeste (n); si se citeste si vectorul cu do for;
k=n; //dimensiunea vector dupa adaugarea mediei
i=0;
while (i<k-1)
do { do_For (j = k, j > i+1, j = j-1)
x[j] = x[j-1];
end do;
x[j] = (x[i] +x[i+1])/2;
I = i+2;
K=k+1; }
End while;
Se scrie vectorul parcurgandu- cu do_for; end do; stop;
5) Cel mai mare divizor comun din vector nr nenule naturale
Intreg d, imp, r, x[50], n, i;
Citeste (n) si se parcuge si vectorul cu do for;
D=x[0]; R=0; I=1;
While ( (r!=1) && (i<n) )
Do { imp = x[i] ; do {
R =d% imp; d= imp; Imp = r; }
Until (r<=1);
Enddo;
I = i+1; }
Endwhile;
If ( r!= 1) then scrie (“CMMDC = ”, d)
Else scrie (“Numerele nu sunt prime intre ele”);
End if; stop;
6) Amplitudinea unui sir de nr din vector real
Intreg i, n;
Real x[10], max, min;
Citeste (n); si se citeste si x[i] cu do for;
Min = x[0]; max = x[0];
Do_for i=0, n-1, 1
If ( x[i] < min) then min = x[i];
Else { if ( x[i] > max) then max = x[i];
End if; endif; enddo;
Scrie (“amplitudinea este:” max - min);
Stop;
7) Sa se calculeze produsul numerelor perfecte dintr un vector cu numere int
Intreg n, i, j, x[100], s, p, nr;
Citeste n si vectorul cu do for;
P=1; >>> p = produs si trebuie intilizat cu 1
Nr =0; >>>> nr este sirul de numere perfecte
Do_for i =0, n-1,1
{ s=0;
Do_for j =1, x[i]/2, 1
If (x[i] % j == 0) then s = s + j; endif;
Enddo;
If ( s==x[i] ) then { p = p* x[i]; nr = nr+1; }
Endif; } enddo;
If (nr!=0) then scrie (“prousul nr perfc este”, p);
Else scrie nu exista nr in sir;
End if; stop;
8) Compactarea unui vector
Intreg n, i, j, k, p; Real x[100];
Scrie (“Introduceti dimensiunea vectorului n=”);
Citeste (n); si se citeste si x cu do for;
K = -1;
Do_for i=0, n-1, 1
Do for j = i+1, n-1,1
If (x[i] ==x[j]) then { do for k = j, n-2, 1
X[k] = x[k+1]; enddo;
N=n-1 si j = j-1 }
endif; enddo; enddo;
Scrierea se parcurge cu do_for si se scrie vectorul x[i]; STOP
9) Anagrama
Intreg n, m, i, j, ok;
Real x[100], y[100], aux;
Write “dimensiunea primul sir”;
Read(n); si apoi se citeste si vectorul x;
La fel se face si cu vectorul y si se citeste m elemente;
Ok=1; //contor
If (n!=m) then ok =0;
Else { do for i =0, n-2, 1
Do for j = i+1, n-1, 1
{ if x[i] > x[j] then { aux = x[i]; x[i] = x[j]; x[j] = aux; } Endif;
If ( y[i] > y[j] ) then { aux =y[i]; y[i] = y[j]; y[j] = aux; } end if; } end do; enddo;
Do for i=0, n-1, 1
If x[i]!= y[i]) then ok = 0; end if; end do; } end if;
If (!ok) then scrie :cele doua siruri nu sunt anagrame; else scrie invers;
Endif, stop;
10) NOTE STUDENT
Intreg i, k, n;
Real note[5], total, min, max, medie;
Write “introduceti nr de note:”; read(n);
write "introduceti notele:\n” si se citeste vectorul note cu do for;
total = 0; min = note[0]; max = note [0];
do for i=0, n-1, 1
if { (note[0] > max) then max = note[i]; } endif; //det max prin comparare si atribuire
if { (note[0] <min) then min = note[i]; } endif; //det min prin comparare si atribuire
enddo;
k=0;
do for i=0, n-1, 1
if ((note[i]!= max) && (note[i]!=min))
then { total = total + note[i]; //se calculeaza numarul de note ca suma adica punctaj
k = k+1; } endif; enddo;
if (k!=0) then { media = total/k;
write (“punctajul este: “, media); } endif; stop;
11) PERMUTARI
Intreg n, I, a[100], b[100], c[100];
Write “introduceti gradul permutarilor: “ ); Read(n);
Write “introduceti elementele primei permutari:\n”; si se citeste vectorul a, la fel si b cu do
for;
Algortim: do for i=0, n-1, 1
c[i] = a[b[i]-1]; end do;
write rezultatul compunerii permutarilor este:\n
do for i=0, n-1, 1
write (i+1);
end do;
write (“\n”);
do for i=0, n-1, 1
write c[i]; end do; stop;
12) PERMUTARE IDENTICA
Intreg n, I, a[100];
Write “introduceti gradul permutarilor:”;
Read (n);
Write “elementele permutarii:\n”;
Do for i=0, n-1, 1
Read a[i]; enddo;
Do for ( i=0, i < n && a[i] == i+1,1)
End do;
If ( i==n ) then scrie (“Permutare identica.\n”);
Else scrie (“Nu este permutare identica.\n”);
Endif;
Do for i=0, n-1, 1
Write(i+1); end do;
Write (“\n”);
Do for i=0, n-1, 1
Write (a[i]);
End do; stop;
13) PERMUTARE TRANSPOZITIE
Intreg n, i, a[100], dif, poz;
Write (“Introduceti gradul permutarii: ”); read(n); si apoi se citeste si vectorul a
Dif= 0;
Do for i=0, n-1, 1
If (a[i] != i+1) then { dif =dif +1; poz = i+1; }
End if; enddo;
If (dif != 2) then scrie ("Permutarea nu este transpozitie.\n");
ELSE SCRIE ("Permutarea este transpozitie: ", poz); ENDIF;
DO-FOR i = 0, n-1, 1
WRITE (i+1); //pozitii permutare ENDDO;
WRITE ("\n");
DO-FOR i = 0, n-1,1
WRITE (a(i)); //valori permutare ENDDO; STOP.
14) Inversa unei permutari
Intreg n, I, a[100], b[100];
Write (“introduceti gradul permutarii: ”);
Read(n);
Write (“Elementele permutarii: \n”); si se citeste a[i] cu do for, end do;
Do for i=0, n-1, 1
b[a[i]-1] = i+1; end do;
write (“Elementele inversei permutari:\n”, i+1);
do for I =0, n-1, 1 write (i+1); end do;
write(“\n”);
do for i=0, n-1, 1 write (b[i]); end do; stop;
15) PALINDROM
Intreg n, m, x[100], y[100], i, nr, inv, c;
Citeste(n) si cu do for se citeste si x[i];
Nr=0;
Do for i=0, n-1, 1
{ inv=0;
M=x[i]*12;
While (m) do { inv= inv*10 + m% 10;
M=m/10;
C=inv; } endwhile;
If(c==x[i]*12) then { y[nr] = I;
Nr = nr+1; } endif; } enddo;
If (nr)
THEN { SCRIE ("Persoanele a caror varsta exprimata in luni formeaza un palindrom sunt:\n");
DO-FOR i = 0,nr-1,1 SCRIE (y[i]+1); ENDDO; }
ELSE SCRIE ("Nu exista niciun palindrom"); ENDIF; STOP
16) REUNIUNE
Intreg n, m, p, I, j;
Real x[50], y[80], z[130];
Read (m); dimensiunea pt x si cu do for se citeste x
Read(n); dimensiunea pt y si cu do for se citeste y;
P=0; do for i=0, m-1, 1
{ z[p] = x[i];
P=p+1; } end do;
Do for j=0, n-1, 1
{ i=0; end do;
While ((i<p) && y[j] != z[i])) do I = i+1; End while;
If ( i==p) then { z[p] = y[j];
P = p+1; } endif; } enddo;
Write (“Reuniunea celor 2 multimi este:”);
Do for i=0, p-1, 1
Write (z(i)); end do; stop;
17) INTERSECTIE
INTREG n,m,p,i,j;
REAL x[80],y[50], z[50];
READ (m); // Nr. de elemente ale primei multimi
DO-FOR i=0,m-1,1
READ (x[i]); ENDDO;
READ (n); // "Nr. de elemente ale celei de-a doua multimi:");
DO-FOR i=0,n-1,1
READ (y[i]); ENDDO;
p=0;
DO-FOR i = 0, m-1, 1 { j=0;
WHILE ((j<n) && (x[i]!=y[j])) DO j=j+1
ENDWHILE;
IF (j<n) THEN { z[p]= x[i]; p = p+1; } ENDIF; } ENDDO;
IF (p>0) THEN
{ WRITE ("Intersectia celor doua multimi este:");
DO-FOR i=0,p-1,1 WRITE (z[i]); ENDDO; }
ELSE WRITE ("Intersectia este multimea vida!");
STOP;