Sunteți pe pagina 1din 5

Slănină Laurențiu cl 11R

Test final clasa XI, 2020


1. Fie declaraţia: 2. O structura liniara de date care permite adăugarea şi ştergerea
Var p, q, a1,a2: ^Integer; de elemente la ambele sale capete este o structura de tip : 1
Subliniaţi instrucţiunile care sînt scrise corect: a) coada b) stiva c) lista liniara

p:=nil ; q:=12; p:=q; write(p^); p:=q^; p^:=q - 1; 1 3. Uniţi prin linii, stabilind corespondenţa dintre obiectele din
coloana A şi zona de memorie alocată din coloana B. Completaţi
1.2. Scrieţi ce se va afişa la ecran în rezultatul executării Volumul de memorie pentru fiecare zonă.
următoarei secvenţe de instrucţiuni:
New(p); New(q); p^:=11; q^:=p^+32; writeln(p^,’ ’, q^); 1 1
11 43
1
q:=p; New(p); p^:=q^; q^:=q^+13; writeln(p^,’ ’, q^); 1
11 24 1
new(a1); new(a2); a1^:=1; a2^:=a1^+5; writeln(a1^, ‘ ’,a2^); 1 A B memorie
16 Variabilele dinamice 1-1 256Koct
1 Heap
new(a1); a2:=a1; a1^:=11; a2^:=a2^+5; writeln(a1^, ‘ ’,a2^); eți
16 16 Variabilele declarate în 2-3 64
secţiunea var a programului Stivă
Kocteți
Variabilele declarate în 3-2 Segmentul 16Kocte
subprograme date ți
4. TYPE AC = ^Celula; 5. Evaluaţi necesarul de memorie pentru programele ce urmează şi
Celula = Record valoarea maximă a lui n pentru care programele derulează fără erori
Info : String; Prec : AC; End; 5.1. const n=1126; 1
Var R, S : AC; Type persoana= record
4.1. Completaţi locurile libere din tabelul de mai jos, pentru N, P: string[25]; AN: integer; S: real; End; 1
operaţia de eliminare a unui element din stivă. ListaPersoana=array[1..n] of persoana;
Var a,b,c: persoana; s: real; p: ListaPersoana;
R:=S; { memorarea adresei celulei 3
extrase } 1 5.2. const n=40;
Writeln(R^.Info) { prelucrarea informaţiei din type Matrice = array[1..n, 1..n] of longint;
cîmpul R^.Info } 1 Vector = array[1..n] of real; 1
S:=S^.Prec; {Eliminarea celulei din stivă} var A : Matrice; i : integer; p: ^Matrice;
dispose(R); {Distrugerea celulei eliminate} 1 procedure Prelucrare(var B:Matrice);
Indicaţi pentru acest exemplu: var C: Vector; begin … end;{ Prelucrare }
4.2. Necesarul de memorie din Blocul de date 8 octeţi 1
4.3. La eliminarea unei celule din stivă volumul memoriei begin {...introducerea matricei A...} Prelucrare(A);
libere ce măreşte cu ______260_______ octeţi for i:=1 to n do begin new(p); …end; end.
6. 6.1. Creați (desenați) un arbore binar de căutare sortare, 1 7. Fie date următoarele declaraţii:
dacă la intrare avem următoarele elemente: type Arbore = ^Nod;
20, 25, 36, 9, 15, 48, 40, 3, 1, 8, 19, 59, 12, 7, 77, 55, Nod = record
44, 8, 13, 100 1 N : integer; V : boolean;
St, Dr : Arbore;
6.2. Determinaţi înălţimea arborelui binar prezentat pe desen 6 end;
6.3. Numiţi nodurile neterminale de pe nivelul trei ale arborelui 1 var T, V : Arbore;
binar. Numiţi nodurile terminale ale arborelui binar În timpul executării programului a fost creat un arbore, ce constă
Neterminale de nivel 3 : 8, 12, 48 din 7 noduri. Calculaţi necesarul de memorie pentru variabilele
1
Terminale : 1,7,8,13,19,44,55,100 statice şi dinamice din aceste declaraţii. Argumentaţi răspunsul 1
6.4. Scrieţi lista de noduri obţinută în urma parcurgerii prin calculele respective
arborelui în DSR 1 7.1. Necesarul de memorie pentru variabilele statice este:
100,77,55,59,44,40,48,36,25,19,13,12,15,8,7,8,1,3,9,20 8 octeţi, 2*4=8 1
1
6.5. Scrieţi lista de noduri obţinută în urma parcurgerii 7.2. Necesarul de memorie pentru variabilele dinamice este:
arborelui în SRD 77 octeţi, 7*(2+1+2*4)=77
1,3,7,8,8,9,12,13,15,19,20,25,36,40,44,48,55,59,77,100 8.Analizaţi funcţiile PR – recursivă şi PI – iterativă pentru n>2
function Function PI(a,n:integer):integer;
PR(a,n:integer):integer; var i,p:integer; 3
begin begin p:=1;
if n=1 then putere:=a for i:=1 to n do p:=p*a;
else putere:=p;
putere:=putere(a,n-1)*a; end;
end;
1
9. Estimaţi numărul operaţiilor elementare din fragmentul de 8.1. şi puneţi unul din semnele >, < sau = între Iterativitate şi
program ce urmează Recursivitate la caracteristica necesarul de memorie
Begin For i:=1 to n do
For k:=1 to 500 do Iterativitate < Recursivitate
Slănină Laurențiu cl 11R
If k div 2=0 then r:=1.4 else begin r:=1.4; r:=r+k; end; 1
end 8.2. Argumentaţi răspunsul
n*[500*(2+4+1)+500+1]+n+1=4002n+1 Recursivitatea va ocupa mai multă memorie, pentru că funcția
va fi chemată de n ori, încărcând stiva.
10.Scrieţi subprogramele pentru: 11. Scrieţi forma generală a algoritmului bazat pe tehnica:
4 2
10.1. Adăugarea unui element intr-o coadă. 11.1. Trierii;
4 4
10.2. Excluderea ultimului element într-o listă. 4 11.2. Reluării; 3
10.3. Adăugarea unui element la o stivă. 11.3. Desparte şi stăpâneşte

10.1 end;
procedure Adaug;
var R : AdresaCelula; 11.1
begin for i:= 1 to k do if SolutiePosibila(si)
new(R); then PrelucrareaSolutiei(si)
readln(R^.Info);
R^.Urm:=nil; 11.2
if P=nil then begin P:=R; U:=R end procedure Reluare(k:integer);
else begin U^.Urm:=R; U:=R end; begin
end; if k<=n then
begin
10.2 X[k]:=PrimulElement(k);
Procedure Exclud; if Continuare(k) then Reluare(k+1);
Var Q, R : Adresa Celula; while ExistaSuccesor(k) do
begin begin
R:=P; X[k]:=Succesor(k);
Q:=R; if Continuare(k) then Reluare(k+1)
While R^.Urm<>nil do end;
begin end
Q:=R; else PrelucrareaSolutiei;
R:=R^.Urm; end;
end;
Q^.Urm:=nil; 11.3
dispose(R); procedure DesparteSiStapineste(i, j :
end; integer; var x : tip);
var m : integer;
10.3 x1, x2 : tip;
procedure Introduc; begin
var R : AdresaCelula; if SolutieDirecta(i, j) then Prelucrare(i,
begin j, x)
new(R); else
readln(R^.Info); begin
R^.Prec:=S; m:=(j-i) div 2;
S:=R; DesparteSiStapineste(i, i+m, x1);
Slănină Laurențiu cl 11R
DesparteSiStapineste(i+m+1, j, x2); end;
Combina(x1, x2, x); end;
12. Scrieţi ce se va afişa la ecran în rezultatul execuţiei următorului program
12.1
Program p; Var N : Integer;
Procedure P1(Var N:Integer);
Begin N:=2*N; End;
Procedure P2( N:Integer);
Begin P1(N); End;
Begin
2
N:=100; P1(N); Write(N,' '); P2(N); WriteLn(N);
pun
End.
cte
Scrieţi răspunsul ___200 200__________
12.2 Ce se va afişa la ecran în urma execuţiei următorului program:
Program sport; var x : boolean;
function f ( t : boolean ) : boolean;
begin x := not t; f := t; end;
begin x := false;
writeln(x, ' ', f(x)); writeln(f(x), ' ' , x);
2 end.
pun Scrieţi răspunsul ______ False False
cte True False_____

13. Datele despre elevii ce au susţinut examenele BAC, s-au înscris într-un fişier text. Pentru fiecare elev se cunosc numele şi notele de la
BAC la 4 obiecte. Elaboraţi un program care va citi aceste date din fişierul de intrare şi va crea 2 liste unidirecţionale. Prima listă va
conţine, în câmpurile informaţionale ale celulelor sale numele şi nota medie la cele 4 obiecte pentru elevii care nu au nici o notă mai mică
decât „5”, iar în a doua vor fi înscrise numele şi media celorlalţi elevi.

Intrare: Fişierul text ELEVI.IN va conţine pentru fiecare elev 2 linii. Prima linie – numele elevului, următoarea linie – 4 numere reale
separate prin spaţiu – notele acestuia.
Ieşire: Se înscriu în fişierul ELEVI.OUT conţinutul primei liste, numele şi media cu 2 sutimi, separate prin spaţiu în linii aparte pentru
fiecare elev, şi va afişa la ecran conţinutul listei a doua numele şi media cu 2 sutimi, separate prin spaţiu.
10 puncte

14. Fie dat un şir finit de caractere format din parantezele (,),[,],{,}. Şirul se consideră corect dacă se respectă următoarele reguli:
• şirul vid este corect;
• dacă A este un şir corect atunci şirurile (A), [A] şi {A} sînt corecte;
• dacă A şi B sînt şiruri corecte, atunci AB este un şir corect.
Scrieţi un program, care verifică dacă şirul dat este corect.

Intrare: fişierul text IN.TXT conţine un şir din cel mult 250 paranteze.
Ieşire: la ecran se afişează mesajul DA în cazul cînd şirul este corect, NU - în caz contrar 10 puncte

15. Se consideră tabloul A[1..n] (n<=100) elementele căruia sunt numere întregi diferite de zero. Scrieţi un program care transformă acest
tablou în felul următor: la începutul lui se înscriu numerele pozitive în ordine crescătoare, apoi urmează cele negative tot în ordine
crescătoare.
Intrare: n şi elementele tabloului se citesc de la tastatură;
Ieşire: Tabloul rezultant se înscrie în fişierul NUMERE.OUT de tip integer. 8 puncte

16. Şirul de caractere S este format din '0' si '1'. Să se scrie un program, care să numere n0 - numarul de subşiruri formate din zerouri şi
n1 - numărul de subşiruri formate din unităţi. De exemplu, dacă valoarea lui S este '1100001011100111' se va obţine rezultatul: 3 4
Intrare: Şirul S ce citeşte de la tastatură.
Ieşire: Valorile n0 şi n1 se afişează la ecran, despărţite prin spaţiu. 7 puncte

17. În fişierul IN.TXT este înscris un număr întreg reprezentat în cod complementar pe 16 poziţii binare. Utilizînd o listă unidirecţională
elaboraţi un program Pascal, folosind subprograme cu ajutorul cărora în fişierul OUT.TXT se vor înscrie la solicitare pe linii separate :
a) reprezentarea zecimală a numărului dat n;
b) din lista cu reprezentarea binară a numărului dat n de înlocuit toate subşirurile din zerouri cu o singură componentă egală cu 0 şi toate
subşirurile unitare de înlocuit cu un singur 1 (de exemplu lista 1000001111010000 se va înlocui cu 101010) 8 puncte
Problema 13
Slănină Laurențiu cl 11R
Program P13 Problema 14
Type AdresaCelula=^Celula type AdresaCelula=^Celula;
Celula=record      Celula=record
Info:string                   Info : char;
Media:real                   Prec : AdresaCelula;
Urm: AdresaCelula;             end;
end; var S : AdresaCelula; 
var     p : string;   
p1,p2:AdresaCelula
s:string procedure pune(c:char);
a,b,c,d:integer; var r:AdresaCelula;
t:text; begin
procedure Include(p:AdresaCelula);   new(r); r^.info:=c; r^.prec:=s; s:=r;
var q,r:AdresaCelula; end;
begin new(Q);
Q^.Info:=s; procedure scoate;
Q^.Media;=(a+b+c+d)/4; var r:AdresaCelula;
Q^.Urm:=nil; begin
R:=P;   r:=s; s:=s^.prec; dispose(r);
While R^.Urm<>nil do R:R^.Urm; end;
R^.urm:=Q;
end; function corect(t:string):boolean;
procedure Afis(P:AdresaCelula); var   i: integer;   G: 0..1;
var R:AdresaCelula; begin
begin   G:=0;  
if P=nil then writeln(t,’Lista este vidă) else   i:=1;
begin  while (i<=length(t)) and (G=0) do
writeln(t,’Lista curentă:’);    begin
R:=P;      case t[i] of
while R<>nil do        '(','[','{': pune(t[i]);
begin        ')': if (S<>NIL)AND(s^.info='(') then scoate ELSE G:=1;
writeln(t,R^.Info);        ']': if (S<>NIL)AND(s^.info='[') then scoate ELSE G:=1;
writeln(t, R^.Media:4:2);        '}': if (S<>NIL)AND(s^.info='{') then scoate ELSE G:=1;
R:R^.Urm;        else G:=1;  
End;      end;
End;      i:=i+1;
Writeln(t);    end;
End;     corect:= (s=nil)  AND (G=0);
Begin end;  { corect }
P1:=nil;
P2:=nil; begin
assign(t,’Elevi.in’);   write(' dati sirul de paranteze: '); readln(p);
reset(f);   s:=nil;  
while not eof(t) do begin   if corect(p) then writeln(' sir corect...')
readln(t,s);   else writeln(' sir incorect...');
readln(t,a,b,c,d);   readln;
if (a>=5) and(b>=5) and (c>=5) and (d>=5) then end.
begin if P1=nil then begin new(P1);
P1^.Info:=s;P1^.Media:=(a+b=c+d)/4;
P1^.Urm:=nil end; else Include(P1) end;
else begin if P2=nil then begin new(P2); P2^.Info:=s;
P2^.Media:=9a+b+c+d)/4;
P2^.Urm:=nil end; Include(P2) end;
end;
close(t);
assign(t, ‘ Elevi.out’);
rewrite(t)
Afis(P1);
Afis(P2);
Close(t) ;
end.
Slănină Laurențiu cl 11R

Problema 15
Program P15 Problema 17
var type
a:array[1..100] of integer; ac = ^c;
n,i,j,s:integer; c = record
begin info: char;
readln(n); urm: ac;
for i:= 1 to n do read(a[i]); end;
for i:=1 to n do vector = array [1..16] of string;
for j:=i+1 to n do var
if(a[i]*a[j]>0) and (a[i]>a[j])or ((a[i]<0) and (a[j]>0)) then begin f1, f2: text;
s>=a[i]; P, R, V: ac;
a[i]:=a[j]; j, a, b, i: integer;
a[j]:=s; x: string[16]
end; begin
assign(f1, 'IN.txt');
Problema 16 reset(f1);
var assign(f2, 'OUT.txt');
s:string; rewrite(f2);
i,n0,n1,pa,pb:integer; read(f1, x);
begin for i := 1 to 16 do
read(s); begin
pa:=-1; pb:=-1; new(R);
for i>=1 to lenght(s) do R^.info := x[i];
begin R^.urm := nil;
if (s[i]=’1’) and ( pb<>n1) then begin pa:=n0; inc(n0); if P = nil then begin P := R; V := R; end
pb:=n1; end; else begin V^.urm := R; V := R end;
if (s[i]=0) and (pa<>n0) then begin pb:=n1;inc(n1); end;
pa:=n0; end; R:=P;
writeln(n0,’ ’,n1); V:=P;
end. R:=R^.urm;
for i:=2 to 16 do
begin
if R^.info='0' then n:=n+0;
if R^.info='1' then begin
a:=1;
for j:=1 to 16-i do a:=a*2;
b:=b+a;
end;
R:=R^.urm;
end;
R:=P;
V:=P;
if R^.info='0' then writeln(f2, b);
if R^.info='1' then begin b:=b-32768; writeln(f2, b); end;
R:=P;
V:=P;
.............(aici m-am oprit mai departe nu știu cum să fac)

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