Sunteți pe pagina 1din 5

Probleme propuse

1. Scrieţi specificaţia problemelor enunţate mai jos.


a. Găsiţi prima poziţie pe care se află o valoare dată într-un vector X.
b. Găsiţi numărul de poziţii din vectorul X pe care se află o valoare dată.
c. Găsiţi numărul de poziţii din vectorul X pe care se află valoarea maximă
a componentelor vectorului X.
d. Găsiţi toate poziţiile din vectorul X pe care se află valoarea maximă a
componentelor sale.
e. Ordonaţi descrescător componentele unui vector.
f. Eliminaţi din vectorul X toate valorile care se află în afara intervalului
[a,b].
g. Eliminaţi din vectorul X toate valorile care se repetă.
h. Găsiţi cea mai mică componentă a vectorului X mai mare decât a.
i. Decideţi dacă toate componentele vectorului X sunt sau nu sunt distincte
între ele.
j. Verificaţi dacă componentele vectorului X sunt sau nu sunt în progresie
geometrică.
k. Dacă vectorii X şi Y au componentele ordonate crescător, deci x1< x2<
<xm, respectiv y1< y2< <yn, depuneţi în vectorul Z toate componentele
distincte din vectorii X şi Y, astfel ca z1< z2< <zk.
l. Decideţi dacă componentele vectorului X sunt sau nu sunt o permutare a
componentelor vectorului Y.
m. Decideţi dacă fiecare componentă comună a vectorilor X şi Y apare de
acelaşi număr de ori în cei doi vectori.
n. Calculaţi diferenţa a două mulţimi.
o. Calculaţi produsul a două matrice.
p. Calculaţi suma a două polinoame.
q. Determinaţi inversa unei permutări.
r. Determinaţi cifrele reprezentării numărului natural n în baza p.
s. Să se determine reprezentarea unui număr natural în baza q, cunoscând
reprezentarea sa în baza p.
1
t. O matrice pătrată cu componente numere întregi se poate reprezenta pe
vectorul X[0..n2], punând ordinul n al matricei în X[0] şi celelalte n2
componente în ordinea liniilor. Calculaţi produsul a două matrice
reprezentate astfel pe vectorii X şi Y, punând rezultatul în vectorul Z, cu
aceeaşi reprezentare.
u. O matrice simetrică cu componente numere întregi se poate reprezenta
pe vectorul X[0..k], k=n*(n+1)/2, punând ordinul n al matricei în X[0]
şi elementele de pe şi de sub diagonală în ordinea coloanelor în X[1..k].
Calculaţi produsul a două matrice reprezentate astfel pe vectorii X şi Y,
punând rezultatul în vectorul Z, cu aceeaşi reprezentare.

2. Demonstraţi prin metoda lui Floyd corectitudinea (parţială sau totală)


sau incorectitudinea următorilor algoritmi în raport cu specificaţiile
însoţitoare, date prin comentarii.

a. Subalgoritmul căutare(a,n,X,p) este: {X–vector cu n componente}


{ϕ : (x1≤a<xn) ∧ (x1≤ x2≤
≤xn)}
Fie s:=1; d:=n;
Câttimp s<d execută
m:=(s+d)/2;
Dacă a≤X[m]
atunci d:=m
altfel s:=m+1
sfdacă
sfcât
Fie p:=m;
{ψ: (1≤p<n) ∧ (xp≤a<xp+1)}
sfcăutare

b.
Subalgoritmul PUTERE4(x,y,z) este: {x,y numere naturale date}
{ϕ: (x>0) ∧ (y≥ 0) }
Fie z:=1; u:=x; v:=y;

Câttimp 0<v execută


2
Dacă v este par
atunci u:=u*u; v:=v/2;
altfel v:=v-1; z:=z*u;
sfdacă
sfcât
{ψ: z = xy}
sfPUTERE

c.
Funcţia ESTEPRIM(n) este: {n număr natural}
{ϕ : (n>1) }
Fie i:=2;
Câttimp i≤n/2 execută
Dacă n mod i = 0
atunci ESTEPRIM:=False
altfel ESTEPRIM:=True
sfdacă
Fie i:=i+1;
sfcât
{ψ: Dacă n e prim atunci ESTEPRIM =True
altfel ESTEPRIM=False.}
sfESTEPRIM

d.
Subalgoritmul MAXMAT(n,A,max) este: {max := Max(ai,j, i,j=1,n)}
{φ: n>1}
i:=1; j:=1; max:=; ai,j
Câttimp i≤n execută
Câttimp j≤n execută
Dacă max< ai,j atunci max:= ai,j sfdacă
j:=j+1
sfcât
i:=i+1
sfcât {ψ: max=val. maximă din A}
sf-MAXMAT

e.
Subalgoritmul PRODUS(x,y,z) este: {x,y – nr. naturale
date}
3
{ϕ: True }
Fie z:=0; u:=x; v:=y;
Câttimp v>0 execută
Câttimp v este par execută
u:=u+u; v:=v/2;
sfcât
v:=v-1; z:=z+u;
sfcât {ψ: z = x*y}
sf-PRODUS

f.
Funcţia RADICAL(n) este: { ϕ::= n>1 }
{RADICAL:=partea întreagă din radical din n}
(r,t) := (0,n);
Câttimp t≠ r+1 execută
m:=(r+t) div 2;
Dacă m2≤n
atunci r:=m
altfel t:=m
sfdacă
sfcât
RADICAL:=r { ψ::= r2 ≤ n < (r+1)2 }
sf-RADICAL

g.
Subalgoritmul SUMAPOL(P,S) este: {Pşi S = polinoame date.
P.grad notează gradul, iar P.coef notează }
{vectorul coeficienţilor polinomului P}
{ϕ: True}
Dacă S.grad<P.grad atunci
Fie i:=S.grad;
Câttimp i≤P.grad execută
S.coef[i] :=0;
Fie i:=1+1;
sfcât
sfdacă
Câttimp i>0 execută
Fie i:=i-1;
S.coef[i]:= S.coef[i]+P.coef[i]
sfcât
4
{ψ: S este suma polinoamelor date la}
{intrarea în subalgoritm, S şi P}
sfSUMAPOL

3 Secificaţi şi dezvoltaţi subalgoritmi corecţi pentru următoarele


probleme:
a. Efectuează câtul şi restul împărţirii întregi prin scăderi repetate.
b. Să se calculeze partea întreagă a radicalului din n, n∈N.
c. Să se calculeze produsul a două numere naturale prin înmulţiri repetate.
d. Să se calculeze x la puterea y prin înmulţiri repetate.
e. Determină dacă valoarea a apare în vectorii X şi Y de acelaşi număr de
ori şi falsă în caz contrar.
f. Determină dacă vectorul X are cel puţin trei componente nule.
g. Determină dacă fiecare componentă a vectorului X apare pe cel puţin
două poziţii.
h. Determină de câte ori apare valoarea maximă în vectorul X.
i. Determină poziţiile pe care apare valoarea minimă în vectorul X.
j. Şterge din vectorul X toate componentele egale cu a.
k. Determină valoarea minimă din tabloul X[1..n].
l. Determină toate poziţiile pe care se află valoarea maximă în tabloul
X[1..n]. Depuneţi în tabloul Y toate valorile distincte din tabloul X[1..n].
m. Elimină din tabloul X[1..n] toate valorile negative.
n. Verifică dacă n este prim.
o. Verifică dacă tabloul X[1..n] are toate componentele în intervalul [a,b].
p. Verifică dacă tabloul X[1..n] are componentele ordonate crescător.

S-ar putea să vă placă și