Sunteți pe pagina 1din 29

4.

Subprograme
4.1. Subprograme nerecursive

4.1.1. Teste gril ( Pascal | C / C++ )


1. Subprogramul f returneaz prin intermediul parametrului s suma cifrelor numrului natural n transmis ca parametru. Care dintre urmtoarele variante este antetul corect al unui astfel de subprogram?
a procedure f(n,s:integer) b procedure f(n:real; var s:integer) c procedure f(n:integer; var s:integer) d procedure f(n,s:real) a void f(int n, int s) b void f(float n, int &s) c void f(int n, int &s) d void f(float n, float s)

2. a.

Parametri utilizai la apelul unui subprogram, se numesc: parametri actuali b. parametri locali c. parametri globali d. parametri formali

3. Care dintre urmtoarele reprezint un antet corect folosit la definirea subprogramului P, astfel nct programul principal alturat s afieze valorile 1 9? Var a,b : integer; void main() Begin {int a=1,b=5; a:=1; b:=5; P(a,b); P(a,b); cout<<a<< <<b; write (a, ,b) /printf(%d %d,a,b); end. }
a Procedure P(a,b:integer); b Function P(a,b:integer); c Function P(var x:integer; y:integer); d Procedure P(x:integer; var y:integer); . a void P (int a,int b) b int P (int a,int b) c int P (int &x,int y) d void P(int x,int &y)

4.

Funcia f cu parametrii x i y determin numrul de numere ntregi pare din intervalul [x,y], (x<y). Care din urmtoarele expresii este adevrat pentru orice numere x i y care nu au aceiai paritate? 143

a f(x,y)=y-x b f(x,y)=(y-x+1)DIV 2 c f(x,y)=(y-x)DIV 2 d f(x,y)=f(x,y+1) 5.

a f(x,y)==y-x b f(x,y)==(y-x+1)/2 c f(x,y)==(y-x)/2 d f(x,y)==f(x,y+1)

Subprogramul S returneaz n parametrii d i m, cel mai mare divizor comun i respectiv cel mai mic multiplu comun a dou numere ntregi transmise prin parametrii a i b. Antetul corect al subprogramului S este: a . b . c . d . a . b . c . d . function S(a,b,d,m:integer):integer; procedure S(a,b:integer;var d,m:integer); procedure S(a,b:integer;var d,var m:integer); function S(a:integer, b:integer):real; int S(int a,int b,int d, int m) void S(int a,int b,int &d,int &m) void S(int a,b,int &d,&m) float S(int a,b)

Varianta Pascal

Varianta C/C++

6.

tiind c funcia cmmdc, cu doi parametri ntregi a i b, returneaz valoarea celui mai mare divizor comun al numerelor a i b, stabilii care dintre urmtoarele variante atribuie variabilei m valoarea celui mai mare divizor comun al numerelor a,b i c. a m:=cmmdc(cmmdc(a,b),c) b m:=cmmdc(a,b)*c c m:=cmmdc(a,b,c) d m:=cmmdc(a,b) div c a m=cmmdc(cmmdc(a,b),c); b m=cmmdc(a,b)*c; c m=cmmdc(a,b,c); d m=cmmdc(a,b)/c;

144

7.

Subprogramul maxim(x,y)returneaz cea mai mare valoare dintre x i y. Care dintre apelurile urmtoare ale funciei maxim NU returneaz valoarea absolut a numrului real x ? a maxim(x,0) b maxim(x,maxim(-x,0)) c maxim(x,-x) d maxim(-x,maxim(x,0))

8. Subprogramul complement schimb cifrele unui numr natural n, astfel nct fiecare cifr x devine egal cu 9-x. Care este antetul corect al unui astfel de subprogram?
a procedure complement (var n:longint); b procedure complement (n: real); c procedure complement (var n:float); d procedure complement(n:longint); a . b . c . d . void complement (long &n) void complement (float n) void complement (real &n) void complement(long n)

9. Subprogramul cifmax(i) returneaz cea mai mare cifr a numrului i. Stabilii valoarea expresiei: cifmax(cifmax(173)+cifmax(18)): a 8 b 7 c 15 d 5

10.

Subprogramul nrcif(i) returneaz numrul de cifre pe care le are numrul natural i. Stabilii valoarea expresiei nrcif( nrcif(173) + nrcif(18) ) d 1 a 5 b 10 c 2 . Subprogramul f are urmtorul antet:
type vector=array[0..99]of integer; procedure f(x:vector; i:integer); void f(int x[100], int i)

11.

Care dintre urmtoarele apeluri este corect, tiind c variabila a este declarat astfel: int a[100]; var a:vector; a f(a,a[0]); b f(a,a); c f(a[100],a[0]); d f(a[100],a);

145

12.

Subprogramul verif(i) returneaz cea mai mic cifr a numrului i care apare de cel puin dou ori n scrierea lui i sau valoarea -1 dac numrul i este format din cifre distincte. Stabilii valoarea expresiei verif(verif(275772) + verif(1929)) b 11 c 0 d 2

a 1 . 13.

Subprogramul nrap(s,c) returneaz numrul apariiilor caracterului c n irul s. Dac a i b sunt dou iruri de caractere formate doar din litere mici ale alfabetului englez, cu ce expresie trebuie nlocuite punctele de suspensie din secvena urmtoare astfel nct, dup executarea ei, variabila de tip ntreg k s aib valoarea 1 dac mulimea format din literele distincte ale irului a este egal cu mulimea format din literele distincte ale irului b sau valoarea 0 n caz contrar? k:=1; for c:='a' to 'z'do if ..... then k:=0 a . b . c . d . k=1; for(c='a';c<='z';c++) if(.....) k=0;
or (nrap(b,c)>0 and

(nrap(a,c)>0) and nrap(b,c)=0) nrap(a,c)=0) nrap(a,c)>0 and nrap(b,c)=0 nrap(a,c)=1 and nrap(b,c)=0

Variant a Pascal

(nrap(a,c)>0) and (nrap(b,c)=0) and and (nrap(a,c)=0)

(nrap(b,c)>0)

a (nrap(a,c)>0 && nrap(b,c)==0) ||(nrap(b,c)>0 && . nrap(a,c)==0) Variant b nrap(a,c)>0 && nrap(b,c)==0 a . C/C++ c nrap(a,c)==1 && nrap(b,c)==0 . && nrap(b,c)==0 && nrap(b,c)>0 && d nrap(a,c)>0 . nrap(a,c)==0 14. Subprogramul nrap(s,c) returneaz numrul apariiilor caracterului c n irul s. tiind c irul a conine doar litere mici ale alfabetului englez i variabila c este de tip char, stabilii n care dintre urmtoarele secvene de program i se atribuie variabilei k valoarea 1 dac i numai dac irul a este format din litere mici distincte sau valoarea 0 n caz contrar. a k:=1; . for c:='a' to 'z'do if(nrap(a,c)>=2) then k:=0 a k=1; . for(c='a';c<='z';c++) if(nrap(a,c)>=2)k=0;

146

b k:=0; . for c:='a' to 'z' do

b k=0; . for(c='a';c<='z';c++)

if(nrap(a,c)<=1) then k:=1 for c:='a' to 'z' do if(nrap(a,c)>=2)then k:=0 else k:=1; d k:=1; . for c:='a' to 'z' do if(nrap(a,c)=1) then k:=0
c .

if(nrap(a,c)<=1)k=1; for(c='a';c<='z';c++) c if(nrap(a,c)>=2)k=0; . else k=1; d k=1; . for(c='a';c<='z';c++) if(nrap(a,c)==1)k=0;

15.

Subprogramul dpm(n,m) returneaz cel mai mare divizor prim al numrului natural n, divizor mai mic sau egal cu m (2mn). Stabilii care dintre urmtoarele expresii este adevrat dac i numai dac numrul n este prim (n3): a dpm(n,n)==n . b dpm(n,n-1)==2
.

a dpm(n,n)=n . b dpm(n,n-1)=2
. c .

dpm(n,n)=2

d dpm(n,n/2)=n div 2 . 16.

c dpm(n,n)==2 . d dpm(n,n/2)==n/2 .

Subprogramul invers(v,p,q) inverseaz ordinea elementelor din tabloul unidimensional v aflate pe poziiile p,p+1,,q-1,q (se presupune c p<=q). Stabilii care dintre urmtoarele secvene de program inverseaz doar ordinea elementelor v[p] i v[q]: b invers(v,p,q); invers(v,p+1,q+1); d invers(v,p-1,q-1); invers(v,p,q);

a invers(v,p,q); . invers(v,p-1,q+1); c invers(v,p,q); . invers(v,p+1,q-1); 17.

Subprogramul divmax(n) returneaz cel mai mare divizor prim al numrului n. De exemplu divmax(13) returneaz valoarea 13, iar divmax(28) returneaz valoarea 7. Stabilii valoarea expresiei: divmax(divmax(17)+divmax(51)); a 17 b 68 c 2 d 34 .

18. tiind c iniial, variabilele ntregi x i y au valorile 12 i respectiv 20, stabilii ce se va afia n urma executrii secvenei de instruciuni
aplic(x,x); write(',',x,','y); aplic(x,x); cout<<","<<x<<","<<y; /printf(",%d, %d",x,y);

147

procedure aplic(x:byte; var y:byte); begin x:=x+3;y:=y-2; write(x,',',y) end; a. 13,13,13,13 b. 15,13,13,13

void aplic(int x,int &y) { x+=3;y-=2; cout<<x<<","<<y; /printf("%d,%d",x,y); } d. 15,10,15,20

c. 15,10,10,20

19. Antetul corect al unui subprogram care are ca parametri de intrare dou numere ntregi a, b i returneaz prin parametrii M i P, media aritmetic i respectiv produsul celor dou numere, este :
Varianta Pascal a. b. c. d. a. b. c. d. function calcul(a,b:integer;var P:integer):integer; procedure calcul(a,b:integer;P:integer;M:real); procedure calcul(a,b:integer;var P:integer;var M:real); function calcul(a,b:integer):real; int calcul(int a, int b, int & P); void calcul(int a, int b, float M, int P ); void calcul(int a, int b, float &M, int &P ); float calcul(int a, int b);

Varianta C/C++

20. Dac iniial a=3 i b=7, ce se va executa n urma executrii secvenei de instruciuni:
f(b,b); write(a,b); procedure f(var a:integer;b:integer); begin a:=a-1; b:=a+1; write(a,b) end; f(b,b); cout<<a<<b; /printf("%d%d",a,b); void f(int &a,int b) { a=a-1;b=a+1; cout<<a; /printf("d",a); cout<<b; /printf("d",b); }

a.

6736

b.

6767

c.

6737

d.

2828

21. Subprogramul putere(n) returneaz 10x-1, unde x reprezint numrul de cifre ale numrului n primit ca parametru (n>99). Atunci expresia n div putere(n) reprezint: a. prima cifr a numrului n b. ultima cifr a numrului n c. numrul obinut prin eliminarea d. numrul obinut prin eliminarea ultimei cifre a numrului n primei cifre a numrului n 22. Funcia numar(a), unde a este numr ntreg, returneaz cel mai mic ntreg mai mare dect a, dac a are cifra unitilor egal cu cifra zecilor sau cel mai mare ntreg mai mic dect a n caz contrar. Dou valori x i y pentru care funcia numr returneaz acelai rezultat sunt: a 155,156 b 100,101 c 12,11 d 124,122

148

23. Subprogramul divizori(x,y) returneaz numrul de divizori comuni a numerelor naturale x i y. Fracia

a , cu a,b numere naturale i b 0, este b

ireductibil dac este satisfcut condiia:


a divizori(a,b) = 0 Varianta Pascal b divizori(a,b)/divizori(b,a)<>1 c divizori(a,divizori(b)) = 0 d divizori(a,b) = 1 a divizori(a,b) == 0 Varianta C/C++ b divizori(a,b) / divizori(b,a) != 1 c divizori(a,divizori(b)) == 0 d divizori(a,b) == 1

24. Subprogramul max(n) returneaz cea mai mare cifr a numrului natural n. Pentru n numr natural, format din 3 cifre, expresia
Varianta Pascal Varianta C/C++

max(n div 10 mod 10)+max(n mod 10)+ max(n div 100) max(n/10%10)+max(n%10)+max(n/100)

reprezint: a Cifra unitilor numrului n c Numrul cifrelor numrului n b Cifra maxim a numrului n d Suma cifrelor numrului n

25. Care succesiune de instruciuni este corect, tiind c se folosete subprogramul Pascal cu antetul procedure f(a:integer,var b:integer),
respectiv C/C++: void f(int a, int &b)?

a. b. c. d.

a:=1; b:=1; f(a,b) b:=1; f(b,1) a:=1; f(a,1) a:=1;b:=1;write(f(a,b))

a. b. c. d.

a=1; b=1; a=1; a=1;

b=1; f(a,b); f(b,1); f(a,1); b=1; cout<<f(a,b); / printf(%d,f(a,b));

149

26. Fie subprogramul f definit alturat i variabilele a i b de tip integer/int , cu valorile a=1 i b=2. Ce valori vor avea variabilele a i b n urma apelului f(a,b+1)? procedure f(var x:integer;y:integer); void f(int &x,int y) begin { x=x+y; x:=x+y; y:=x-y; x:=x-y y=x-y; x=x-y; end; } a a=2,b=1 b a=3,b=2 c a=1,b=2 d a=2,b=2 27. Pentru a calcula aria unui triunghi cu lungimile laturilor memorate de variabilele reale a, b i c, se utilizeaz funcia arie cu definiia urmtoare. function arie(a,b,c:real):real; var p:real; begin p:=(a+b+c)/2; arie:=sqrt(p*(p-a)*(p-b)*(p-c)) end; Care dintre urmtoarele instruciuni nu este corect? a a:=arie(a,b,c); b write(arie(a,b,c)); c if (arie(a,b,c)>10)then a:=arie(a,b,c); arie:=arie(a,b,c); d 28. Fie funcia f definit mai jos: function f(var a,b:integer):integer; begin while (a <>b) do if (a>b) then a:=a-b else b:=b-a; f:=a end; int f(int &a, int &b) { while (a !=b) if (a>b) a=a-b; else b=b-a; return a;} a a=arie(a,b,c); b printf(%f ,arie(a,b,c)); / cout<<arie(a,b,c); c if (arie(a,b,c)>10) a=arie(a,b,c); arie=arie(a,b,c); d } float arie(float a,float b, float c) { float p; p=(a+b+c)/2; return sqrt(p*(p-a)*(p-b)*(p-c));

Ce se afieaz ca urmare a executrii secvenei urmtoare?

150

a:=4; b:=18; write(f(a,b));write(a); write(b) a 2 2 2 b 2 4 4

a=4; b=18; printf(%d,f(a,b)); /cout<<f(a,b); printf(%d %d,a,b); /cout<<a<<b; c 4 18 2 d 2 4 18

29. Subprogramul p realizeaz permutarea circular a numerelor reinute de parametri de tip int x,y i z cu o poziie spre dreapta, noile valori fiind trasmise tot prin intermediul parametrilor. De exemplu pentru x=1, y=2, z=3, n urma apelului p(x,y,z) obinem x=3, y=1, z=2. Dac valorile iniiale ale variabilelor de tip int x, y i z sunt : x=1, y=2, z=3, atunci dup executarea apelurilor succesive : p(y,z,x); p(z,y,x); noile valori memorate de variabilele x, y, z vor fi: a 1,2,3 b 3,1,2 c 1,3,2 d 3,2,1

30. Subprogramul med(a,b) returneaz media aritmetic a numerelor reale primite prin intermediul parametrilor a i b. Pentru x,y,z i t, variabile de tip real, selectai instruciunea care atribuie variabilei x suma dintre media aritmetic a valorilor y i z i media aritmetic a valorilor z i t. a x:=(y+z+t)/2; a x=(y+z+t)/2; b x:=med(med(y,z),t); c x:=med(z,y)+med(y,t); d x:=med(t,y)+z; 31. Funcia urmtoare: function max(a,b:integer):integer; int max(int a, int b) returneaz maximul dintre valorile variabilelor a i b. Cu ce instruciune se nlocuiesc punctele de suspensie astfel nct la finalul executrii secvenei alturate s se afieze maximul dintre elementele vectorului v, care are 20 de elemente ntregi? t:=max(v[1],v[2]); for i:=3 to 20 do ............... ; writeln(t);
a . t:=max(v[i],v[i+1]);

b x=med(med(y,z),t); c x=med(z,y)+med(y,t); d x=med(t,y)+z;

t=max(v[0],v[1]); for(i=2;i<20;i++) ............... ; cout<<t; / printf(%d,t);


a t=max(v[i],v[i+1]); .

151

b . c . d .

t:=max(max(v[i],v[1]),v[i+1] ); t:=max(t,v[i]); t:=max(v[1],v[i]);

b t=max(max(v[i],v[0]),v[i+1]); . c t=max(t,v[i]); . d t=max(v[0],v[i]); .

32. Subprogramul Sub are urmtorul antet:


function Sub( v: vector; n, k: integer):real ; float Sub(float v[50],int n,int k)

Considernd urmtoarele declarri:


var x:vector; y,z:real; a,b,c:integer; float x[50],y,z; int a,b,c;

care variant reprezinta o apelare corect a subprogramului Sub? a z:= Sub(x,a,b); b x:= Sub(x,y,z); c x:= Sub(x,a,b); d y:= Sub(a,b,c); 33. n subprogramul alturat, y este: function f(x:real):integer; var y:integer; begin if x>0 then y:=1 else y:=-1; f:=y end; a variabil local . c parametru formal . int f(float x) {int y; if(x>0)y=1; else y=-1; return y; } b . d . variabil global numele funciei a z=Sub(x,a,b); b x=Sub(x,y,z); c x=Sub(x,a,b); d y=Sub(a,b,c);

34. Ce se va afia n urma executrii programului alturat?

152

procedure F(var a:integer; b: integer); begin b:= b + a; a:= a * b; Write(a, ' ', b, ' ') end; var x, y : integer; begin x := 5; y := 7; F(x, y); write(x, ' ', y) end.

#include <stdio.h> / #include <iostream.h> void F(int &a, int b) { b = b + a; a = a * b; printf("%d %d ",a,b); / cout<<a<<" "<<b<<" "; } void main() { int x = 5, y = 7; F(x, y); printf("%d %d", x, y); / cout<<x<<" "<<y; }

a 12 60 5 7 b 60 12 5 7

c 60 12 60 7 d 60 12 60 12

35. Se consider subprogramul f al crui antet este:


Procedure f(var a:matrice; n,m,i,j:integer); void f(int a[100][100], int n,int m,int i,int j);

Subprogramul realizeaz interschimbarea elementelor liniilor i i j ale tabloului transmis prin parametrul a, care are n linii i m coloane. Pentru a ordona cresctor numerele de pe coloana a 3-a a tabloului a, functia f se apeleaz n timpul executrii secvenei alturate de instruciuni: for i:=1 to n-1 do for j:=i+1 to n do if(a[i,3]>a[j,3]) f(a,n,m,i,j); a de m ori c o dat for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i][3]>a[j][3]) f(a,n,m,i,j); b de n ori . n(n - 1) d de cel mult ori . 2

4.1.2. Probleme (limbaj pseudocod, Pascal | C/C++)

153

1. Se consider programul pseudocod alturat, n care mult(n,a)semnific puterea maxim la care apare numrul natural a n descopunerea n factori a lui n, iar max(x,y) semnific maximul numerelor naturale x i y. 1) 2) 3) 4) Care este valoarea afiat dac se citesc valorile m=10 i n=3?

citete m,n (m,n N,prime ntre ele) z max(mult(n,2),mult(n,5)) r 10*m pentru i=1,z execut r r%n*10 dac r0 atunci scrie D altfel scrie N

Dac m=9, precizai o valoare pentru variabila n astfel nct s se afieze N. Dac m=10, atunci cte cifre pot fi introduse ca valoare pentru n astfel nct s se afieze D? Scriei programul Pascal/C/C++ corespunztor algoritmului dat. 2. Se consider programul pseudocod alturat: Se consider funcia max(x,y) care calculeaz maximul dintre numere ntregi x i y. 1) 2) Ce se va afia pentru n=5 i V1=4, V2=-8, V3=5, V4=10, V5=2. Rescriei algoritmul modificnd un numr minim de linii din algoritmul iniial astfel nct acesta s afieze valoarea maxim din vectorul V.
citete n (numr natural nenul) pentru i=1,n execut citete Vi m V1; i 3 ct timp i<= n execut m max(m, Vi) i i+2 scrie m

3) 4)

Scriei n limbajul Pascal/C/C++ definiia complet a funciei max(x,y). Scriei programul Pascal/C/C++ corespunztor cu algoritmul dat. citete k,n (numere naturale nenule, k<n) p 1 pentru i=k,n execut p p * f(i) scrie p

3. Se consider programul pseudocod alturat: Se consider funcia f(n) care calculeaz suma primelor n numere naturale. ( f(n)=1+2+3+...+n ) 1) 1. 2) 2. 3) 3. Ce se va afia pentru k=3 i n=5?

Dai un exemplu de valori pentru k i n astfel nct s se afieze 3150. Scriei n limbajul Pascal/C/C++ definiia complet a funciei f(n). 4) Scriei programul Pascal/C/C++ corespunztor cu algoritmul dat. 4. 154

4. Se consider alturat:

programul

pseudocod

Se consider subprogramul interschimb(x,y) care realizeaz interschimbarea valorilor variabilelor ntregi x i y (dac x=2 i y=7, dup apelul interschimb(x,y) rezult x=7 i y=2) 1) 2) Ce se va afia pentru a=10, b=3, c=6? Ce relaie matematic trebuie s existe ntre valorile citite pentru a, b, c astfel nct programul pseudocod s nu efectueze niciun apel al subprogramului interschimb?

citete a,b,c (numere ntregi) dac a>b atunci interschimb(a,b) dac a>c atunci interschimb(a,c) dac b>c atunci interschimb(b,c) scrie a, b, c

3) 4) 5.

Scriei n limbajul Pascal/C/C++ definiia complet a subprogramului interschimb(x,y). Scriei programul Pascal/C/C++ corespunztor algoritmului dat. Se spune despre un numr natural c este superprim dac att el ct i toate prefixele lui sunt numere prime. De exemplu, numrul 313 este un numr superprim pentru c 313 este prim i prefixele: 3, 31 sunt numere prime. Scriei un program Pascal/C/C++ care citete de la tastatur un numr natural n cu cel mult opt cifre i care verific dac n este superprim. Programul afieaz pe ecran mesajul DA dac numrul este superprim, altfel va afia mesajul NU. Realizai urmtoarele cerine utiliznd limbajul Pascal/C/C++ : a) Scriei definiia complet a unui subprogram sub cu doi parametri care: primete prin intermediul parametrilor a i b dou numere naturale formate fiecare din cel mult 8 cifre; elimin cifra unitilor numrului coninut de parametrul a, mutnd-o la sfritul numrului coninut de parametrul b; returneaz prin intermediul parametrilor a i b noile numere obinute.

6.

De exemplu, pentru valorile 1234 i 56 ale parametrilor a i b, n urma executrii subprogramului sub valorile returnate prin intermediul parametrilor vor fi 123 i 564. (4p.) b) Scriei programul care citete de la tastatur un numr natural n cu cel mult 8 cifre i care verific dac numrul n este un palindrom, folosind apeluri ale subprogramului sub. Programul va afia pe ecran mesajul DA dac numrul este palindrom, altfel va afia mesajul NU. (Un numr natural n este palindrom 155

dac este egal cu numrul obinut prin scrierea cifrelor numrului n n ordine invers.) De exemplu, dac n=12321 atunci se va afia pe ecran mesajul DA, iar dac n=124321 atunci se va afia pe ecran mesajul NU. (6p.) 7. Realizai urmtoarele cerine utiliznd limbajul Pascal/C/C++: a) Scriei definiia complet a unei funcii nr cu doi parametri, funcie care: primete prin intermediul parametrilor a i b dou numere reale pozitive; returneaz numrul de numere ntregi cuprinse ntre valorile parametrilor a i b, inclusiv.

De exemplu, pentru valorile 10.5 i 7 ale parametrilor a i b, funcia va returna valoarea 4 deoarece ntre valorile 7 i 10.5 sunt 4 numere ntregi: 7, 8, 9 i 10. b) Scriei programul n care se citesc de la tastatur numerele naturale nenule a i k (a [1000,9999], 4 k 9) i n care se determin cte numere naturale de cte k cifre se divid cu a, folosind apeluri ale subprogramului nr. Programul va afia pe ecran numrul de numere determinat. De exemplu, dac a=2007 i k=4, atunci numrul afiat este 4, deoarece sunt 4 de numere de 4 cifre care se divid cu 2007 (2007, 4014, 6021, 8028). 8. tiind c sunt definite subprogramele: S1 care primete prin intermediul parametrului n un numr natural de cel mult 8 cifre i care returneaz numrul de cifre ale numrului n; S2 cu doi parametri, care primete prin intermediul parametrului n un numr natural de cel mult 4 cifre i prin intermediul parametrului k o cifr. Subprogramul dubleaz fiecare apariie a cifrei k n numrul n i returneaz numrul nou format prin intermediul parametrului n. (De exemplu, pentru n=1232 i k=2 valoarea returnat este 122322, iar pentru n=1232 i k=4 valoarea returnat este 1232.) a) Scriei numai antetul fiecruia dintre cele dou subprograme. b) Scriei n limbajul Pascal/C/C++ programul n care se citesc de la tastatur un numr natural n de cel mult 4 cifre i dou cifre distincte a i b. Programul va determina i va afia cte dintre cifrele numrului n sunt diferite att de a ct i de b, fr a accesa cifrele numrului n, folosind apeluri ale subprogramelor S1 i S2. Programul va afia pe ecran numrul determinat. De exemplu, dac n=1215, a=3 i b=2, atunci numrul determinat este 3, deoarece n are trei cifre diferite de 3 i de 2. 9. Realizai urmtoarele cerine utiliznd limbajul Pascal/C/C++: a) Scriei definiia complet a unei funcii produs cu un parametru, funcie care: 156

primete prin intermediul parametrului a un numr natural cu cel mult 8 cifre (a>1); returneaz produsul divizorilor primi ai valorii parametrului a.

De exemplu, pentru valoarea 300 a parametrului a, funcia va returna valoarea 30 deoarece a=22*3*52 i 2*3*5=30. b) Scriei programul n care se citesc de la tastatur numerele naturale nenule a,b i c de cel mult 8 cifre fiecare (a>1, b>1, c>1) i n care se verific dac numerele citite au exact aceiai factori n descompunerea lor n factori primi , folosind apeluri ale subprogramului produs. Dac cele trei numere au exact aceiai factori (exponenii lor putnd s difere), programul va afia pe ecran mesajul DA, n caz contrar va afia mesajul NU. De exemplu, dac a=300, b=1500 i c=30, atunci se va afia mesajul DA, iar pentru numerele a=300, b=700 i c=140, se va afia mesajul NU. 10. Se definete subprogramul sub cu doi parametri, subprogram care primete prin intermediul parametrului n un numr natural de cel mult opt cifre i prin intermediul parametrului k o cifr. Subprogramul determin eliminarea primei apariii a cifrei k n numrul n i returneaz numrul obinut prin intermediul parametrului n. De exemplu, pentru valorile n=152422 i k=2 ale parametrilor, n urma apelului subprogramului sub, parametrul n va returna valoarea 15422. Dac cifra k nu apare n scrierea numrului n, atunci valoarea lui n nu se modific. a) Scriei definiia complet a subprogramului sub. (4p.) b) Scriei n limbajul Pascal/C/C++ programul n care se citesc de la tastatur dou numere naturale a i b cu cel mult opt cifre. Programul va determina i va afia pe ecran numrul de cifre distincte ce intr att n scrierea lui a ct i n scrierea lui b, fr a accesa cifrele numerelor a i b, folosind apeluri ale subprogramului sub. De exemplu, pentru valorile a=1237248 i b=1245823 programul va determina afiarea pe ecran a valorii 5 deoarece sunt cinci cifre distincte ( 1,2,3,4 i 8) ce apar att n scrierea lui a ct i n scrierea lui b. (6p.) 11. Se consider subprogramele putere i maxim. Subprogramul putere primete ca parametru un numr natural n (n 9) i returneaz valoarea 10 n . Subprogramul maxim primete prin intermediul parametrului n un numr natural cu cel mult 9 cifre i returneaz prin intermediul parametrului max cifra sa maxim, iar prin intermediul parametrului k, poziia primei apariii a acesteia n numrul n (numrnd de la dreapta spre stnga, cifra unitilor fiind pe poziia 0). Exemplu: dac n=328785 cifra sa maxim este 8, iar poziia primei apariii este 1. a) Scriei definiia complet a subprogramului maxim i numai antetul subprogramului putere. 157

b) Scriei un program care citete de la tastatur un numr natural n cu cel mult 9 cifre toate nenule i, apelnd subprogramele putere i maxim, construii cel mai mare numr care se poate forma din cifrele numrului n i afiai rezultatul. Exemplu: dac n=4898721 se va afia 9887421. 12. a) Scriei n limbajul Pascal/C/C++ definiia complet a subprogramului f care primete prin intermediul parametrului n un numr natural de cel mult 8 cifre iar prin intermediul parametrului k un numr prim cu cel mult 8 cifre. Subprogramul returneaz prin parametrul p numrul care reprezint puterea la care apare k n descompunerea n factori primi a numrului n i prin parametrul n ctul obinut prin mprirea numrului n la numrul kp. Exemplu. Dac n i p sunt variabile ntregi iar n reine iniial valoarea 500, n urma apelului f(n,5,p) n va primi valoarea 4 iar p va primi valoarea 3. b) Scriei un program Pascal/C/C++ care citete de la tastur un numr natural nenul n cu cel mult opt cifre i care folosind apeluri ale subprogramului definit la punctul a) determin o valoare minim b care verific relaia n = a2 b, a,b N* Exemple : pentru n=21560 se afieaz 110 deoarece 21560=142110 ; exist i alte posibiliti de a-l scrie pe 21560 sub forma cerut, dar n acestea valoarea lui b este mai mare dect 110 (de exemplu, 21560 =72440) 13. a) Scriei definiia complet a unui subprogram care primete prin parametru n un numr natural par (4n2.000.000.000) i care returneaz prin intermediul parametrilor p1 i p2 cel mai mare numr prim mai mic dect n i respectiv cel mai mic numr prim mai mare dect n. De exemplu, pentru n=16 subprogramul va returna numerele 13 i 17. b) Realizai un program n limbajul Pascal/C/C++ care pentru un numr natural k (4k200)citit de la tastatur afieaz pe ecran, separate printr-un spaiu, cele mai mici k numere naturale pare care au proprietatea c sunt ncadrate de dou numere prime; spunem c un numr natural p este ncadrat de dou numere prime dac numerele p-1 i p+1 sunt ambele prime. Programul va apela n mod util subprogramul definit la punctul a). Exemplu: pentru k=4 se vor afia:4 6 12 18 14. Se consider subprogramul NRDIV, cu 3 parametri, care: - primete prin intermediul parametrului n un numr natural nenul, 2n10000; - returneaz prin intermediul parametrilor d1 i d2 cel mai mic, respectiv cel mai mare divizor prim al su (1<d1d2n). Pentru n=6, se obin d1=2 i d2=3, pentru n=8, se obin d1=2 i d2=2, iar pentru n=7 se obin d1=7 i d2=7. 158

a) Scriei definiia complet a subprogramului NRDIV (6 p.) b) Scriei un program C/C++ care citete dou numere naturale a i b, de cel mult 4 cifre fiecare, i determin prin apeluri utile ale subprogramului NRDIV toate numerele naturale cuprinse n intervalul [a,b] cu proprietatea c toi divizorii lor primi au exact dou cifre. Numerele determinate vor fi afiate pe ecran, cu spaii ntre ele. Exemplu: dac a=120, b=200 se vor afia numerele: 121 143 169 187 (4 p.) 15. a) Scriei definiia complet a subprogramului ncif care primete un numr natural de cel mult 9 cifre prin intermediul parametrului n i returneaz prin intermediul parametrului c numrul de cifre ale lui n. b) Scriei programul Pascal/C/C++ care rezolv urmtoarea problem: n fiierul text DATE.TXT se afl 100000 de valori naturale de cel mult 8 cifre fiecare; valorile sunt separate prin cte un spaiu. S se afieze pe ecran cte valori din fiier au un numr maxim de cifre. Se vor folosi apeluri ale subprogramului ncif. Alegei o metod eficient din punctul de vedere al gestionrii memoriei. 16. Subprogramul panta primete prin intermediul singurului parametru n un numr natural de cel mult 9 cifre i returneaz diferena dintre cea mai mare cifr i cea mai mic cifr a numrului n . De exemplu, pentru n=23498 subprogramul returneaz valoarea 7, iar pentru n=222 subprogramul returneaz 0. a) Scriei definiia complet a subprogramului panta. b) Se citete de la tastatur un numr natural k format din cel mult 9 cifre distincte. Scriei declarrile de date i programul principal n care se verific, folosind apeluri ale subprogramului panta, dac numrul natural k, este format din cifre consecutive, aflate n orice ordine. Programul va afia pe ecran mesajul DA n caz afirmativ i mesajul NU altfel. De exemplu, pentru k=25436 se va afia DA (fiind format din cifrele consecutive 2,3,4,5,6), iar pentru k=2364 se va afia NU (lipsind cifra 5). 17. a) Scriei definiia complet pentru un subprogram care primete prin singurul su parametru un numr natural nenul de maximum 4 cifre i care returneaz valoarea 1 dac numrul transmis ca parametru are un numr impar de divizori i 0 dac acesta are un numr par de divizori. Alegei o metod eficient de rezolvare. (4p.) b) Pe prima linie a fiierului text BAC.TXT se afl un numr natural n de cel mult 6 cifre; a doua linie a fiierului conine n valori naturale de cel mult 3 cifre fiecare, cu spaii ntre ele. Scriei un program C/C++ care determin valorile de pe a doua linie a fiierului care au un numr impar de divizori i afieaz, cu 159

exact dou zecimale, media aritmetic a valorilor determinate. Dac nu exist nicio valoare cu proprietatea cerut, se va afia mesajul NU EXISTA. n program se vor folosi n mod util apeluri ale subprogramului definit la a). De exemplu, dac fiierul BAC.TXT are urmtorul coninut: 6 prima linie 1 10 3 14 196 90 a doua linie programul va afia valoarea 98.50 deoarece pe a doua linie a fiierului se afl dou numere care au un numr impar de divizori i anume 1 i 196, iar media lor aritmetic este 98.5 . 18. a) Scriei definiia complet pentru un subprogram cu trei parametri: - x , o matrice ptrat cu elemente reale, avnd maximum 10 linii numerotate de la 0 la 9 i 10 coloane numerotate de la 0 la 9; - n , numr natural ce reprezint numrul efectiv de linii i de coloane ale matricei x; - p , numr natural, 0pn-1; Subprogramul va returna suma elementelor aflate pe linia p a matricei x. (4p.) b) S se scrie un program care rezolv urmtoarele cerine: - citete de la tastatur o valoare natural reprezentnd numrul de linii i numrul de coloane ale unei matrice ptratice, apoi citete tot de la tastatur elementele reale ale acestei matrice; - utiliznd apeluri ale subprogramului definit la punctul a), scrie n fiierul text BAC.OUT elementele din matrice aflate pe linia care are proprietatea c suma elementelor de pe respectiva linie este maxim. n fiierul text valorile vor fi scrise pe o singur linie, separate printr-un spaiu. Dac exist mai multe linii care au aceeai sum maxim, se vor scrie elementele uneia dintre ele. 19. a) Scriei definiia complet pentru un subprogram cu un parametru n, numr natural nenul cu cel mult 6 cifre, care returneaz valoarea expresiei: 1 1 1 1 1+ + + +...+ (5p.) 2 3 4 n b) S se scrie un program care, utiliznd apeluri ale subprogramului definit la cerina a), rezolv urmtoarea problem: se citete de pe prima linie a fiierului bac.in o valoare natural nenul n, (1n100000, n impar); s se scrie n fiierul bac.out, cu exact trei zecimale, valoarea expresiei: 1 1 1 1 1 1 + +...+ 2 3 4 n -1 n Exemplu: bac.in bac.out 5 0,817 20. Funcia count are trei parametri: - x un vector de 2500 de elemente reale distincte sortate cresctor; 160

- a i b doi parametri reali; Funcia returneaz numrul de elemente din vectorul x care se afl n intervalul nchis determinat de valorile a i b ([a,b] dac a<b sau [b,a] dac ba). a.) scriei definiia complet a funciei count implementnd un algoritm eficient din punct de vedere al timpului de executare pentru calculul valorii pe care funcia trebuie s o returneze; b.) facei o descriere n limbaj natural a algoritmului implementat la cerina a.) explicnd n ce const eficiena acestui algoritm. 21. Subprogramul interval primete prin parametru x o valoare real iar prin parametri a i b dou valori ntregi (-9999a,b9999). Subprogramul returneaz valoarea 1 dac x aparine intervalului nchis determinat de a i b i 0 n caz contrar. Intervalul nchis determinat de a i b este [a,b] dac a<b sau [b,a] dac ba. a) Scriei definiia complet a subprogramului interval; b) Fiierul numere.in conine pe prima linie, separate printr-un spaiu, numere reale. Scriei un program care citete de la tastatur dou valori ntregi a i b, fiecare dintre ele avnd cel mult patru cifre i scrie n fiierul numere.out toate numerele din fiierul numere.in care aparin intervalului nchis determinat de valorile a i b. n fiierul numere.out valorile vor fi scrise cu exact dou zecimale, cu spaii ntre ele. Exemplu: dac fiierul numere.in conine valorile 3.41532 -10.1217 8 1234.5678 1.9111 -2.3108 i de la tastatur se citesc pentru a i b valorile 10 i respectiv -3 atunci fiierul numere.out va avea urmtorul coninut: 3.41 8.00 1.91 -2.31 sau 3.42 8.00 1.91 -2.31 22. Scriei un subprogram vocal care are ca parametru un ir de caractere s format din cel mult 50 de litere ale alfabetului englez i returneaz numrul de vocale (a,e,i,o,u) din irul respectiv. 23. Scriei definiia complet a unui subprogram matdiag care primete prin intermediul primului parametru, n, un numr natural nenul mai mic sau egal dect 20 i prin intermediul celui de-al doilea parametru, a, un tablou bidimensional cu n linii i n coloane, format din numere ntregi din intervalul [100,100] i care returneaz valoarea 1 dac pe fiecare linie elementul corespunztor diagonalei principale este mai mare sau egal cu suma celorlalte elemente de pe linia respectiv sau returneaz valoarea 0 n caz contrar. 24. Scriei definiia complet a unui subprogram vect01 care primete prin intermediul primului parametru, n, un numr natural nenul mai mic sau egal cu 20, prin intermediul celui de-al doilea parametru, v, un tablou unidimensional cu n elemente format din numere ntregi din intervalul [-100,100] i care returneaz valoarea 1 dac tabloul este format din n-1 valori egale cu 0 i o 161

singur valoare egal cu 1; n orice alt caz subprogramul returneaz valoarea 0. 25. Considerm definit un subprogram nrap care are doi parametri: un ir de caractere s de lungime cel mult 100 i un caracter c. Subprogramul nrap ntoarce numrul apariiilor caracterului c n irul s. a) Scriei numai antetul subprogramului nrap. b) Scriei un program care citete de la tastatur dou iruri de caractere formate fiecare din cel mult 100 de litere ale alfabetului englez i, apelnd subprogramul nrap descris mai sus, verific dac cele dou iruri sunt formate din exact aceleai caractere, eventual n alt ordine. n caz afirmativ programul va afia pe ecran mesajul "DA", altfel va afia "NU". 26. Scriei definiia complet a unui subprogram sumazec cu trei parametri care primete prin intermediul primului parametru a un numr natural nenul avnd maxim 8 cifre, prin intermediul celui de-al doilea parametru n un numr natural nenul format dintr-o singur cifr i returneaz prin intermediul celui de-al treilea parametru s suma primelor n zecimale ale numrului real a-1. De exemplu, sumazec(4,3,s) va returna prin intermediul parametrului s valoarea 7 deoarece 4-1=1/4=0.25000 i suma primelor 3 zecimale este 2+5+0=7. 27. Considerm definite urmtoarele dou subprograme: pozmax cu doi parametrii: v (un tablou unidimensional format din n (1 n 100) numere ntregi de cel mult 3 cifre fiecare) i p (un numr natural cuprins ntre 1 i n); subprogramul returneaz poziia valorii maxime din secvena v[1],...,v[p]. schimb cu doi parametri: a i b (numere ntregi formate din cel mult trei cifre fiecare); subprogramul interschimb valorile a dou variabile transmise prin intermediul parametrilor a i b. a) Scriei numai antetul fiecruia dintre cele dou subprograme. b) Scriei un program care citete de la tastatur un numr natural n (1 n 100) i apoi cele n elemente (numere ntregi formate din cel mult 3 cifre fiecare) ale unui tablou unidimensional, sorteaz cresctor tabloul apelnd subprogramele descrise mai sus i apoi l afieaz pe ecran, pe o singur linie, elementele tabloului fiind desprite prin cte un spaiu. 28. a) Scriei numai antetul subprogramului divizor, care primete prin intermediul parametrului n un numr natural (n>1) cu maximum 9 cifre i returneaz prin intermediul parametrului d valoarea celui mai mic divizor prim al lui n, iar prin intermendiul parametrului p puterea la care acest divizor apare n descompunerea n factori primi a numrului n. b) Scriei programul Pascal/C care citete de la tastatur dou numere naturale n,x (x,n>1) cu maximum 9 cifre i verific dac n este divizibil cu 2x , folosind apeluri ale funciei divizor definit la punctul a). Programul afieaz DA n caz afirmativ i NU n caz contrar.

162

29. Subprogramul maxim primete prin intermediul parametrului A un vector cu cel mult 100 de numere reale i prin intermediul parametrului n numrul de elemente din vector. El returneaz valoarea celui mai mare element din vector, terge toate apariiile acestui element din vector i modific corespunztor valoarea lui n. a) Scriei numai antetul subprogramului maxim. (3p.) b) Scriei programul Pascal/C care citete de la tastatur un vector V de maximum 100 de numere reale i afieaz, n ordine strict descresctoare, separate prin spaiu, numerele care apar n vector. Se vor folosi apeluri ale subprogramului maxim definit la punctul a). De exemplu, pentru vectorul 2,3,1,1,6,2,7,6,1 se afieaz 7 6 3 2 1. (7p.) 30. Se consider o funcie f care are ca parametrii un vector a cu maximum 50 de elemente ntregi, numrul de elemente al vectorului n, numr natural (n50) i un numr ntreg x. Funcia va returna numrul de elemente din vectorul a care sunt strict mai mici dect x. a) Scriei definiia complet a funciei f. b) Scriei un program care citete un vector a cu n elemente ntregi (n50) i utiliznd apeluri utile ale funciei f numr i afieaz pe ecran cte elemente diferite de 0 sunt n vectorul a. 31. a) Scriei definiia complet a unui subprogram inter care interschimb coninutul a dou variabile reale transmise prin parametrii a i b. (4p.) b) Scriei declarrile necesare i definiia complet a unui subprogram circ care, folosind doar interschimbri de elemente, permut circular cu o poziie spre stnga componentele unui vector cu n componente reale (0<n<100). Parametrii subprogramului sunt: vectorul v i numrul efectiv de elemente ale acestuia, n. De exemplu, pentru n=5 i v=(8,1,10,6,8), n urma apelului circ(v,n), coninutul lui v devine v=(1,10,6,8,8). Interschimbrile se vor realiza utiliznd doar apeluri ale subprogramului inter. (6p.)

163

32. Subprogramul majuscula primete prin parametrul c un caracter pe care l transform n liter mare dac este liter mic, n caz contrar lsndu-l nemodificat. Subprogramul returneaz valoarea 1 dac parametrul c este o vocal (a,e,i,o,u,A,E,I,O,U) i 0 altfel. a) Scriei doar antetul subprogramului majuscula. (2p.) b) Fiierul bac.in conine un rnd de text format din maximum 1000 de caractere (litere mari sau mici). Scriei programul Pascal/C/C++ care citete textul din fiierul bac.in i l scrie n fiierul bac.out modificat, prin apeluri ale subprogramului majuscula, astfel: toate caracterele din text s fie litere mari i dup fiecare vocal s apar caracterul semnul exclamrii ( !). Exemplu: Fiierul bac.in conine: EasdujHIrtoua Fiierul bac.out va conine:E!A!SDU!JHI!RTO!U!A! (8p.) 33. a) Scriei o funcie care primete prin intermediul parametrului v un vector cu cel mult 50 elemente numere reale i prin parametrul n o valoare natural (2n50). Funcia returneaz valoarea 1 dac primele n elementele ale vectorului sunt n ordine strict cresctoare, 2 dac primele n elementele ale vectorului sunt n ordine strict descresctoare i 0 dac primele n elemente ale vectorului nu sunt nici n ordine strict cresctoare, nici n ordine strict descresctoare. b) Scriei un program Pascal/C/C++ care citete de la tastatur un numr natural p (1<p<50) i apoi cele p elemente reale ale unui vector i care afieaz pe ecran numrul de elemente ale celei mai lungi secvene din vector care ncepe cu primul element i are toae elementele ordonate (strict cresctor sau strict descresctor). O secvena din vector este format din elemente aflate pe poziii consecutive. Pentru rezolvarea cerinei se vor folosi apeluri ale funciei de la punctul a). De exemplu, pentru p=10 i irul: 56 47 34 32 12 4 1 6 11 4 se va afia 7 deoarece primele 7 elemente din vector sunt n ordine strict descrectoare. 34. Scriei definiia complet a unui subprogram care creeaz n memorie un vector v cu elemente numere ntregi, obinute prin parcurgerea n ordine a coloanelor unei matrice a ncepnd de la prima pn la ultima, pe fiecare coloan elementele fiind parcurse de jos n sus. Subprogramul va avea ca parametri: numerele ntregi n i m ce reprezint numrul de linii, respectiv de coloane ale matricei date, matricea a i vectorul v ce se va construi. Exemplu : pentru n=3, m=5 i matricea :

atunci v :(-9,4,1,2,7,4,1,-7,-5,-1,-6,0,-2,3,-7) 164

35. Subprogramul trans are un singur parametru, notat c, de tip char; subprogramul va returna tot prin parametrul c o valoare obinut astfel: - dac c este liter mic a alfabetului englez, litera mare corespunztoare; - dac c este liter mare a alfabetului englez, litera mic corespunztoare; - dac c nu este liter a alfabetului englez, valoarea lui c nemodificat. a) Scriei doar antetul subprogramului trans; (2p.) b) Scriei un program care citete de la tastatur un ir de maxim 100 de caractere i transform irul citit nlocuind toate literele mici ale alfabetului englez cu literele mari corespunztoare i toate literele mari ale alfabetului englez cu literele mici corespunztoare, utiliznd apeluri ale subprogramului trans, apoi afieaz irul rezultat. Exemplu: irul citit este: Ana-Maria are 3 frati. irul afiat va fi aNA-mARIA ARE 3 FRATI. (8p.)

36. a) Scriei un subprogram f cu doi parametrii: un ir de caractere s cu maxim 50 de caractere i un numr natural k, 1 k 50. Subprogramul va afia pe ecran primele k caractere din irul s. Dac lungimea irului s este mai mic dect k, subprogramul va afia mesajul nu este posibil. De exemplu: f(abracadabra, 5) va afia abrac. f(abracadabra, 15) va afia nu este posibil. (6p.) b) Scriei un program care citete de la tastatur n iruri de maxim 50 de caractere (n 50) i le afieaz pe ecran utiliznd funcia f astfel: pe primul rnd, primul caracter din primul ir, pe al doilea rnd, primele dou caractere din al doilea ir, ..., pe al n lea rnd, primele n caractere din al n -lea ir; acolo unde irul e mai scurt dect indicele liniei pe care se afl, se va afia mesajul nu este posibil. Exemplu: Dac n=5 i se citesc irurile de caractere ionel, aurel, turcu, pop, trasca se va afia: i au tur nu este posibil trasc

(4p.)

37. Se consider subprogramul elimin cu doi parametri s i t, iruri de caractere cu maximum 100 de caractere, care primind prin intermediul parametrului s un ir de caractere format numai din literele mici ale alfabetului englez, ntoarce prin intermediul parametrului t irul obinut din s prin eliminarea tuturor vocalelor (a, e, i, o, u). 165

a) Scriei definiia complet a subprogramului elimin. b) Fiierul bac.txt conine pe fiecare linie cte un ir de maximum 100 de caractere, litere mici ale alfabetului englez. Scriei un program care afieaz pe cte o linie a ecranului fiecare ir citit din fiier precum i cel obinut din acesta prin eliminarea vocalelor, separate printr-un spaiu. Programul va folosi apeluri utile ale subprogramului elimin definit anterior. De exemplu dac fiierul bac.txt conine: iepure oaie bcd Se va afia: iepure pr oaie bcd bcd

38. a) Scriei definiia unui subprogram sub care primete prin intermediul parametrului x un ir de caractere cu cel mult 200 caractere i prin intermediul parametrului c un caracter; subprogramul determin modificarea irului x, eliminnd toate apariiile caracterului c i returnez numrul tergerilor efectuate. De exemplu: pentru irul de caractere x=alexandrina i caracterul c=a subprogramul transform irul astfel x=lexndrin i returnez valoarea 3 (s-au efectuat trei eliminri) b) Scriei un program Pascal/C/C++ care citete de la tastatur dou iruri de caractere cu cel mult 200 de caractere fiecare i care afieaz pe ecran toate caracterele comune celor dou iruri, folosind apeluri ale subrogramului sub. Fiecare caracter se va afia o singur dat, caracterele afindu-se separate printr-un spaiu. De exemplu pentru irurile: matrice i principal se va afia: r i c a nu n mod obligatoriu n aceast ordine. 39. Subprogramul ordalfa primete prin parametrul formal a un ir cu maximum 255 de caractere i returneaz valoarea 1, dac irul a este ordonat alfabetic (are caracterele n ordine cresctoare a codurilor ASCII), sau 0 n caz contrar. a) Scriei definiia complet a subprogramului ordalfa. b) Fiierul bac.txt conine pe primul rnd o valoare natural n (n 10), iar pe urmtoarele n rnduri, n iruri de caractere (cte unul pe fiecare rnd), cu maximum 127 caractere fiecare. Scriei programul Pascal/C/C++ care determin numrul de perechi de iruri de caractere (x,y), aflate pe rnduri consecutive n fiierul bac.txt, i care au proprietatea c irul obinut din concatenarea (lipirea) lui y la x, sau a lui x la y este ordonat lexicografic. Exemplu: pentru fiierul bac.txt, din caseta alturat, se va tipri 2, deoarece urmtoarele perechi respect proprietatea: 4 adgl rs mop vnu 166

(adgl,rs) i (mop,rs).

40. Se consider subprogramul max_diviz care are doi parametri, a i b (numere naturale avnd maximum 9 cifre fiecare) i care returneaz cel mai mare divizor dintre divizorii comuni de cte dou cifre ai numerelor a i b. Dac cele dou numere nu au un astfel de divizor, subprogramul va returna 1. a) Scriei definiia complet a subprogramului max_diviz. b) Scriei programul Pascal/C/C++ care citete de la tastatur un numr natural nenul a cu maximum 9 cifre, i determin, folosind apeluri ale subprogramului max_diviz, cel mai mare numr de dou cifre care divide pe a. Se va afia pe ecran numrul astfel determinat sau mesajul: NU exista divizor de 2 cifre, n cazul n care a nu are nici un divizor de dou cifre. De exemplu: pentru a=160 se va afia 80. 41. Subprogramul cifre_pare primete ca parametru un numr natural n avnd cel mult 9 cifre i verific dac numrul n are toate cifrele pare. a) Scriei definiia complet a subprogramului cifre_pare. b) Scriei programul care folosind apelul subprogramului cifre_pare, afieaz pe ecran numerele naturale mai mici dect 10000, care au toate cifrele pare. 42. Se citesc de la tastatur trei numere naturale nenule, a, b i m, de cel mult 3 cifre fiecare. Scriei programul care afieaz pe ecran, primii m multipli comuni ai celor dou numere a i b. Exemplu:pentru a=180,b=120 i m=5 se vor afia numerele: 360,720,1080,1440,1800 43. irul de numere 1,2,3,1,3,1,0,4, .... este definit prin relaia alturat, n care s-a notat cu x%y restul mpririi numrului natural x la numrul natural y.

a) Descriei n limbaj natural o metod eficient (ca timp de executare i spaiu de memorare) prin care se poate determina elementul din ir aflat pe o poziie dat, n. Explicai n ce const eficiena metodei alese (4-8 rnduri). (2 p.) b) Scriei definiia complet a unui subprogram F care are un singur parametru, n, prin intermediul cruia primete o valoare natural cu cel mult 3 cifre, astfel nct prin instruciunea: write(F(n)); cout<<F(n); /printf("%d",F(n)); 167

s se afieze valoarea celui de-al n-lea termen din ir, utiliznd algoritmul descris la punctul a). (8 p.) Exemplu: Instruciunea write(F(7)); va afia valoarea 0. 44. Un numr natural nenul se numete echilibrat dac numrul cifrelor pare din scrierea lui este egal cu numrul cifrelor impare. De exemplu numerele 1234 i 1212 sunt echilibrate, iar numrul 123 nu este echilibrat. Realizai urmtoarele cerine utiliznd limbajul Pascal/C/C++: a) Scriei definiia complet a unui subprogram sub care primete prin intermediul parametrului n un numr natural cu cel mult 8 cifre i care returneaz valoarea 1 dac numrul n este echilibrat i returneaz 0 n caz contrar. De exemplu sub(1234) returneaz 1, iar sub(123) returneaz 0. b) Scriei un program care citete din fiierul text bac.txt un numr natural n (n<1000) i un ir de n numere naturale mai mici dect 30000; programul determin i afieaz pe ecran secvena de lungime maxim de termeni ai irului, aflai pe poziii consecutive i care sunt numere echilibrate, separai prin cte un caracter spaiu, folosind apeluri ale subprogramului de la punctul a). Exemplu: Dac fiierul bac.txt conine numerele: 8, 124, 1724, 34, 6, 1681, 1241, 1221, 445 se afieaz 1681 1241 1221. 45. Realizai urmtoarele cerine utiliznd limbajul Pascal/C/C++: a) Scriei definiia complet a unui subprogram recursiv sub care returneaz 1 dac un numr natural mai mic dect 30000, dat prin intermediul parametrului nr, este prim i returneaz 0 n caz contrar. b) Scriei un program care citete din fiierul bac.txt un numr natural n (n<1000) i un ir de n numere naturale mai mici dect 30000, separate prin caracterul spaiu; programul determin i afieaz pe ecran secvena de lungime maxim de termeni ai irului, aflai pe poziii consecutive i care sunt numere prime, separai prin cte un caracter spaiu, folosind apeluri ale subprogramului de la punctul a. Exemplu: Dac fiierul bac.txt conine valorile: 8 4 7 3 6 11 17 101 45 se afieaz 11 17 101 46. Se consider subprogramul numar, care: primete prin intermediul unicului su parametru, a, un numr natural de cel mult 4 cifre; returneaz numrul divizorilor lui a; a) Scriei numai antetul funciei numar. (2p.) b) Scriei declarrile de date i programul principal n care, folosind numai apeluri ale subprogramului numar, se verific dac un numr natural k 168 cout<<F(7); /printf("%d",F(7));

(1<k<10000) citit de la tastatur este prim. Programul va afia pe ecran mesajul DA, dac numrul k este prim, sau mesajul NU, n caz contrar. (8p.) 47. Se consider subprogramul fibo, care: primete prin intermediul parametrului a un numr natural nenul de cel mult 4 cifre; returneaz valoarea celui mai mare termen al irului lui Fibonacci mai mic sau egal cu a (un termen general al irului lui Fibonacci, fn, este definit dup regulile: f1=f2=1 i fn=fn-1+fn-2 pentru orice n>2) a) Scriei numai antetul subprogramului fibo. (2p.) b) Scriei declarrile de date i programul principal n care se afieaz o decompunere a unui numr natural nenul de cel mult 4 cifre n citit de la tastatur ca sum de termeni distinci ai irului lui Fibonacci, folosind apeluri ale subprogramului fibo. De exemplu, dac se citete n=17, un rezultat corect afiat de program este: 1 3 13. (8p.) 48. Se consider funcia divizor, care: primete prin intermediul parametrului a un numr natural de cel mult 9 cifre, a>1; returneaz valoarea celui mai mare divizor al lui a diferit de a (de exemplu, dac a=27, funcia va returna 9) a) Alegei o metod eficient de determinare a divizorului cerut, descriind n limbaj natural metoda folosit i explicnd n ce const eficiena acesteia (cel mult 6 rnduri). (2p.) b) Scriei definiia complet a funciei divizor. (5p.) c) Scriei declarrile de date i programul principal n care se verific dac un numr natural de cel mult 9 cifre n (n>1) citit de la tastatur este prim, folosind apeluri ale subprogramului divizor. (3p.) 49. a) Scriei numai antetul funciei maxim, care primete prin intermediul parametrului A o matrice ptrat cu 10 linii i 10 coloane cu elemente reale i prin intermediul parametrilor i1 i i2 dou numere naturale ce reprezint indicii a dou linii din matricea A i returneaz diferena maxim dintre dou elemente, aflate unul pe linia i1 i cellalt pe linia i2. b) Scriei programul Pascal/C care citete de la tastatur o matrice ptrat cu 10 linii i 10 coloane de numere reale denumit A i apoi calculeaz i afieaz diferena maxim dintre dou elemente ale matricei A aflate pe linii diferite, folosind apeluri ale funciei maxim definit la punctul a). De exemplu, pentru matricea A : 0 2 1 1 2 2 ... 9 9 4 ..18 1 ...1 2 ...2 9 ...9 se va afia 17.

169

50. Subprogramul f primete prin intermediul parametrului n un numr natural cuprins ntre 1 i 10.000 i returneaz cel mai mare termen din irul lui Fibonacci strict mai mic dect n. a) Scriei definiia complet a subprogramului f. b) Scriei programul care citete un tablou unidimensional de numere naturale nenule mai mici dect 10.000, apoi nlocuiete fiecare element al tabloului cu cel mai mare termen din irul lui Fibonacci strict mai mic dect el i afieaz elementele tabloului astfel obinut pe o singur linie a ecranului, separate prin spaiu.Se vor folosi apeluri utile ale subprogramului f definit la punctul a). De exemplu, dac se citete tabloul (20,2,87,3,120) atunci se va afia: 13 1 55 2 89. 51. a) Dou subprograme s1 i s2 primesc ca parametri cte un ir, x, de cel mult 100 numere ntregi strict mai mici dect 1000, i cte dou valori p i q (0pq<101). Subprogramul s1 returneaz maximul elementelor irului x situate ntre poziiile p i q, inclusiv p i inclusiv q, iar subprogramul s2 returneaz prin parametrul min minimul elementelor irului x situate ntre poziiile p i q, inclusiv p i inclusiv q. Scriei definiiile complete ale subprogramelor anterioare. b) Scriei programul care citete de la tastatur dou tablouri unidimensionale a i b de cel mult 100 numere ntregi strict mai mici dect 1000 i afieaz pe ecran mesajul DA n cazul n care fiecare element din a este strict mai mic dect toate elementele din b, respectiv NU, n caz contrar. Se vor folosi apeluri utile ale subprogramelor precizate anterior. 52. Scriei un program Pascal/C/C++ care citete de la tastatur un numr natural n(2<=n<=100), apoi n numere naturale de cel mult 9 cifre fiecare i afieaz numerele ordonate descresctor dup suma cifrelor. Dac dou sau mai multe numere au aceeai sum a cifrelor, vor fi afiate n ordinea n care au fost citite. Pentru n = 6 i numerele 124 800 7000 578004 789 312 se va afia 578004 789 800 124 7000 312. (10p.) 53. Se citesc 2 numere naturale nenule m,n (2<m,n<20). S se scrie programul PASCAL/C/C++ care construiete n memorie o matrice A cu m linii i n coloane cu proprietatea c elementul A[i][j] este egal cel mai mare divizor comun dintre numerele i i j . Matricea se va afia pe ecran, cte o linie a matricei pe cte o linie a ecranului, elementele fiecrei linii fiind separate prin spaii. De exemplu pentru m=3 i n=4 se va afia matricea urmtoare: 1 1 1 1 1 2 1 2 1 1 3 1

170

54. Se citete de la tastatur o valoare natural m (2<=m<=100). Scriei programul Pascal/C/C++ care construiete n memorie i apoi afieaz pe ecran matricea a cu m linii i m coloane de numere ntregi construit dup urmtoarea regul: elementul de pe linia i i coloana j a matricii (1<=i,j<=m) este: 1 dac i*i+j*j este numr prim; 2 dac i*i+j*j nu este numr prim, dar suma i+j este numr par mai mare dect 2; 0 n rest. De exemplu pentru m = 4 se va afia: 1 1 2 1 1 2 1 2 2 1 2 0 1 2 0 2

55. a) Scriei definiia complet a unui subprogram elimin care: - primete ca parametri dou iruri s1 i s2 de maximum 250 de litere mici ale alfabetului englez - returneaz prin parametrul s irul de litere distincte care apar fie n irul s1, fie n irul s2, fie n ambele iruri. De exemplu, dac iniial n s1 este memorat irul aebacdbaced, iar n s2 este memorat aeeffgg n final n s va fi memorat aebcdfg, nu neaprat n aceast ordine. (5p.) b) Scriei declarrile de date i programul principal n care se citete de la tastatur un numr n(1<n<20) i apoi n iruri de caractere formate din maxim 250 de litere mici ale alfabetului i afieaz pe ecran un ir de caractere distincte format din toate literele care apar cel puin n unul din irurile citite, utiliznd apeluri ale subprogramului elimin. De exemplu, dac n=4 i cele 4 iruri sunt xabc, yyaad, abcd, ccddzz, se va afia pe ecran abcdxzy, nu neaprat n aceast ordine. (5p.) 56. Se consider subprogramul aparitii care primete prin intermediul parametrului s un ir de maximum 100 de caractere iar prin intermediul parametrului x un caracter i returneaz numrul de apariii ale caracterului x n irul s. a) Scriei definiia complet a subprogramului aparitii. b) Scriei programul Pascal/C care citete de la tastatur dou iruri de maximum 100 de litere mici i verific, utiliznd apeluri ale funciei aparitii dac cele dou iruri sunt anagrame (conin aceleai litere, ordinea acestora fiind diferit). Se cere afiarea mesajului anagrame n caz afirmativ i a mesajului nu sunt anagrame n caz contrar. De exemplu, pentru irurile lada i dala se afieaz anagrame.

171

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