Informatica
Limbajul de programare pascalLIMBAJUL DE PROGRAMARE PASCAL 1. Notiuni introductive1.1. Etapele realizarii unui program scris in PascalRealizarea unui program scris in Pascal necesita parcurgerea a trei etape: editare - scrierea programului sursa, cu ajutorul unui utilitar; compilare - se aduce in memorie si se executa compilatorul Pascal. executie - programul obiect este adus in memorie si lansat in executie: se efectueaza citirea intrarilor, calculele si scrierea iesirilor. Etapele procesului de programare sunt urmatoarele: A. specificarea problemei; B. gasirea unui algoritm pentru obtinerea solutiei; C. codificarea algoritmului intr-un limbaj de programare; D. testarea si validarea programului. 2. Vocabularul limbajului PascalAcesta contine: literele mari si mici de la A la Z; liniuta de subliniere '_' ; cifrele zecimale de la 0 la 9; simboluri speciale - operatori si delimitatori, si anume: operatori: +-*/divmod=<><<=>=> notandor := in^ delimitatori ' , . : ; ..blanc In categoria simbolurilor speciale intra si cuvintele cheie, si anume:
O caracteristica importanta a datelor este tipul acestora (integer, real, char, boolean sau definite de utilizator). Programul poate contine anumite date a caror valoare nu se modifica, numite constante. Constantele limbajului Pascal sunt: numerele intregi; numerele reale; sirurile de caractere; constantele desemnate prin identificatori. Variabila este o entitate careia i s-a asociat un identificator si care poate lua valori corespunzatoare unui anumit tip. Etichetele se definesc inaintea variabilelor sau a constantelor si se declara folosind cuvantul cheie label. Tipurile de date pot fi standard sau utilizator. Definitia unui tip se poate face utilizand cuvantul cheie type sau se poate face direct in declaratia unei variabile. Exemplu: label 2, 9; type cifra = 0.. 9; const pret = 100; var cantitate: integer; numar: cifra; 3. Tipuri de operatori A. Operatorii aritmetici folositi de limbajul Pascal sunt:
B. Operatorii relationali existenti in acest limbaj sunt:
C. Operatori logici
4. FunctiiFunctii standard
Observatii: Tipul rezultatelor functiilor abs, sqr, trunc si round este acelasi cu tipul argumentului x, care poate fi real sau integer. Functiile sin, cos, arctan, exp, ln, sqrt admit argumente de tipul integer sau real, dar rezultatul este intotdeana da tipul real. Pentru tipurile integer, char si boolean exista functiile "succ"(succesor) si "pred"(predecesor), cu semnificatia uzuala. Functia "ord(x)" cu argument de tip char ia valori de tip integer cuprinse intre 0 si 127. Exemplu: (utilizarea variabilelor, operatorilor, functiilor standard): var m: integer; n: real; c: char; b: boolean; begin c:= 'A'; m:= 1; n:= 2.5; m:= m + trunc(n) + round(n); m:= m mod m div m + ord('A'); n:= succ(m) + n / n - pred(succ(m)); c: = chr(ord(c)); d:= (n <= n) and true; write(c, d, m, n) end. La sfarsitul executiei programul, c = 'A', d = true, m = 65 si n = 2 Functii si proceduri predefinite pentru prelucrarea datelor de tip string Functia concat: admite doi sau mai multi parametri de tip string sau char si furnizeaza ca rezultat sirul obtinut prin concatenarea valorilor acestora. Functia length: furnizeaza ca rezultat lungimea unui sir de caractere si admite ca parametru un string. Functia pos: cauta un subsir al unui sir dat Functia copy: realizeaza copierea unui subsir dintr-un sir, avand ca parametri: sirul din care se copiaza, pozitia caracterului din sir cu care incepe copierea si numarul de caractere copiate. Procedura delete: realizeaza stergerea unui subsir dintr-un sir. Procedura insert are tot trei parametri: subsirul inserat, sirul in care se face inserarea si pozitia de la care incepe inserarea. Procedura val: realizeaza conversia unui sir de caractere intr-o valoare numerica(intreaga sau reala). Procedura str: este utilizata pentru a obtine reprezentarea sub forma de sir de caractere a unei valori numerice intregi sau reale Exemplu:
Operatii de intrare / iesire (a) Procedura Read are forma: read( f, var1 , var2, ., varn f reprezinta numele fisierului de intrare, iar var1, ., varn reprezinta lista variabilelor. (b) Procedura Readln este o procedura prin care se avanseaza la inceputul liniei urmatoare celei curente. Apelul readln( f, var1 ,var2 ., varN ) este echivalent cu secventa : read( f, var1 , var2, ., varN ); readln(f); (c) Procedura Write are forma generala: write( f, var1 , var2, ., varN unde la apelul acesteia se scriu unul sau mai multe campuri consecutive, avansandu-se in fisier la inceputul campului urmator. (d) Procedura Writeln permite fata de procedura Write un avans la linia urmatoare, si are forma generala: writeln( f, var1 , var2, ., varN Exemplu: (folosirea operatiilor de intrare / iesire): program vanzare_cumparare; const pret_unitar = 500; var cantitate: integer; begin write(' Ce cantitate doriti ? '); readln(cantitate); writeln('Suma de plata =', cantitate*pret_unitar: 4: 2) end. Tipuri de date a) Tipurile standardinteger - permite reprezentarea, memorarea si prelucrarea numerelor intregi; real - este format dintr-o submultime a numerelor rationale, dependente de implementare, reprezentand aproximatii ale numerelor reale; boolean - este format din multimea valorilor logice false si true; char - o valoare de tip caracter este un element al unui set finit si ordonat de caractere(ASCII). b) Tipurile utilizatorI. Tipuri simple:
B. tipul subdomeniu: trebuie precizata limita inferioara si superioara a intervalului; Exemplu: type luni =(ian, feb, mar, apr, mai, iun, iul, aug, sep, oct, nov, dec) vara: iun.. aug; I. Tipuri structurate (ce se obtin din tipurile simple): 1) tipul tablou(array): la definirea unui tablou se precizeaza tipul elementelor si tipul permis pentru indici. Un tablou reprezinta o colectie de elemente care sunt toate de acelasi tip. array v1..v2 of tip_element sau packed array v1..v2 of tip_element Atributul packed indica in general cerinta de optimizare a spatiului de memorare pentru elementele tipului array. O componenta a tabloului se specifica ca o variabila indexata: nume_tablou lista _indici Deoarece tipul elementelor poate fi orice tip admis de limbajul Pascal, elementele unui tablou pot fi la randul lor de tip structura. Astfel, putem defini un tablou multidimensional: array tip1, tip2 of tip_element Exemplu: type A = array 2.. 5 of real; var sir: packed array 1.. 4 of char; a: array 14, 1.. 3 of integer; 2) tipul sir de caractere(string): este un tip special de vector, cu elemente de tip char, care memoreaza, in afara caracterelor din sir, si lungimea respectivului sir de caractere; identificator: string valoare_intreaga 3) tipul inregistrare(record): o inregistrare reprezinta o colectie de campuri care pot fi de tipuri diferite. Tipul inregistrare se specifica folosind o sintaxa asemanatoare celei folosite pentru declararea variabilelor, prin scrierea cuvintelor cheie record si end. record camp: tip_camp end Un camp al unei variabile de tip inregistrare se acceseaza prin : nume_variabila.camp Se pot defini inregistrari cu variante prin utilizarea cuvantului cheie case: case camp_selector: tip of Tipul campului selector trebuie specificat ca identificator de tip si poate fi oricare tip simplu, mai putin tipul real. Exemplu: type date = record nume: string 40 an_nastere: integer; stare_civila:(casatorit, necasatorit, divortat) case sex:(masculin, feminin) of masculin:(stagiu_militar: string 15 feminin:(ocupatie: string 20 end; Fie N o varaibila de tip date , atunci putem scrie: N.nume:= 'Ionascu Catalin'; N.an_nastere:= 1969; N.stare_civila:= 'necasatorit' N.sex:= masculin; N.stagiu_militar:= 'satisfacut'; 4) tipul multime(set): multimea, in limbajul Pascal, reprezinta o colectie de obiecte distincte, toate avand acelasi tip. set of tip_element Cu elemente de tip set pot fi efectuate operatiile: +(reuniune), *(intersectie), -(diferenta), =(egalitate), < >(neegalitate), <=(incluziunea ), >=(incluziunea ), si in(apartenenta). Exemplu: Fiind definit tipul zile: type zile =(luni, marti, miercuri, joi, vineri, sambata, duminica); putem declara un nou tip sau variabile multime: zi = set of zile; sau var zi1, zi2: set of zile; 5) tipul referinta(pointer): formarea unei multimi cu oricate elemente care sunt adrese de variabile dinamice de acelasi tip.In programele Pascal se folosesc variabile statice si / sau dinamice. O variabila statica aflata in executie dureaza cat timp se executa blocul din care face parte. Variabilele dinamice se creeaza si dispar in cursul executiei in mod dinamic, conform cerintelor programatorului. Deoarece tabloul este o structura lipsita de flexibilitate (fiind o structura statica), este recomandata folosirea unei liste inlantuite(structura dinamica). Referirile la intrarile urmatoare din cadrul listei se numesc indicatori (adrese sau pointers). Indicatorul asociat primei intrari poate fi memorat intr-o variabila declarata astfel: antet: referinta; Pentru a marca ultima intrare(adica, dupa aceasta nu mai urmeaza nici o intrare), limbajul Pascal ofera cuvantul cheie nil. Un tip referinta este definit sub forma: nume = ^ tip unde " nume " este numele noului tip, iar " tip " reprezinta tipul datelor referite de catre datele de tip " nume". Fie nume1 si nume2 doua variabile indicator de tip ^ T, carora le-au fost atribuite valori, variabilele dinamice adresate de nume1 s nume2, notate cu nume1 ^ si nume2 ^ se numesc variabile referite. Crearea variabilelor dinamice se creeaza cu ajutorul procedurii standard New. Pentru distrugerea unei variabile dinamice si eliberarea spatiului de memorie ocupat se foloseste procedura Dispose. Exemplu: type legatura = ^persoana; persoana = record nume: packed array 1.. 20 of char; prenume: packed array 1.. 30 of char; urmatorul: legatura end; 6) tipul de date file(fisier): un program Pascal poate utiliza pe parcursul prelucrarilor atat fisiere standard de intrare si iesire(Input si Output), cat si fisiere cu alt suport extern. Din punctul de vedere al continutului lor, fisierele se impart in: fisiere text in care sunt memorate caractere, liniile consecutive fiind separate prin EOL. Din aceasta categorie fac parte fisierele care contin programe sursa scrise in diferite limbaje de programare, fisierele document si orice alte fisiere ale caror componente sunt caractere grupate in linii. Forma generala este: fisier: text fisiere cu tip(fisiere cu componente de alte tipuri definite de catre programator), cum ar fi fisierele care contin programe executabile sau date inregistrate in forma de reprezentare interna. Forma generala este: <identificator_tip > = file of < tip_componenta> Aceste fisiere reprezinta colectii de componente de acelasi tip, simplu(integer, real etc.) sau structurat(array, record etc.) Din punctul de vedere al accesului la componente, fisierele se impart in: fisiere cu acces secvential : componentele pot fi prelucrate in ordinea in care sunt inregistrate in fisier; fisiere cu acces direct: componentele fisierului pot fi prelucrate in orice ordine; Exemplu: type disc = record interpret: packed array 1.. 30 of char; nr_inreg: real end; catalog = file of disc; var fismel: catalog; Proceduri standard pentru lucrul cu fisiere: Rewrite(f): pregateste pentru re(scriere) fisierul f, inlocuindu-l cu un fisier vid(nu contine nici o componenta) si stabilind pozitia initiala de scriere; Write(f, x): adauga in fisierul f o componenta a carei valoare este data de expresia x si deplaseaza pozitia de scriere in dreptul noului sfarsit de fisier. Writeln(f): incheie linia curenta a fisierului text f; Reset(f): pregateste fisierul f pentru citire, mutand pozitia de citire la inceputul fisierului ; Read(f, x): copiaza urmatoarea componenta a fisierului f in variabila x si apoi avanseaza pozitia de citire dincolo de aceasta componenta; Readln(f): trece la inceputul urmatoarei lini a fisierului text F; Assign(f, nume): se realizeaza asocierea numelui fisierului extern(nume) variabilei fisier(f). Close(f): la terminarea tuturor prelucrarilor efectuate asupra unui fisier acesta trebuie inchis folosind aceasta procedura. Get(f): procedura de citire a unei componente din fisier.Apelul acestei proceduri este permis numei daca eof(f) = false. Put(f): este prodecura de scriere a unei noi componente in fisier. Apelul procedurii este permis numai daca partea dreapta a fisierului fd = <EOF>(un fisier se considera totdeauna a fi sectionat in doua parti - partea stanga si partea dreapta) . Append(f): adaugarea de informatii intr-un fisier deschis; 5. Instructiuni PascalIn limbajul Pascal exista urmatoarele tipuri de instructiuni: A. Instructiuni simpleInstructiunea de atribuire are forma generala: <variabila>: = <expresie> unde " variabila " si " expresie "trebuie sa fie de acelasi tip. Exemplu: program atribuiri; var m, n: integer; x: real; ch: char; begin x:= 2; m:= 3; n:= m; x: = n; ch:= 'X'; writeln(m); writeln(x); writeln(ch) end B. Instructiunea apel de procedura se insereaza in program in locul in care se doreste executarea instructiunilor specificate de o declaratie de procedura asupra entitatilor particulare "transmise" ei din locul de apel. Apelul de procedura are forma: p(l) unde p reprezinta numele procedurii, iar l este lista de parametrii actuali. Exemplu: Fie procedura procedure numere(x, y: integer; var z, t: real). Aceasta se poate apela prin : numere(3, 4, a, b) unde variabilele a si b sunt declarate in program ca reale. C. Instructiunea de transfer neconditionat goto are forma: goto <eticheta>; si permite transferul controlului executiei la o instructiune precedata de eticheta specificata. Aceasta eticheta trebuie declarata in sectiunea Label . Exista cateva restrictii privind plasarea unei instructiuni goto in raport cu instructiunea referita de aceasta: nici o instructiune goto nu trebuie sa forteze un salt exterior in interiorul unei instructiuni structurate; nici un goto nu are dreptul sa forteze un salt din exterior in interiorul unui subprogram; Exemplu: program maxim; label 1, 2; var max, x, y: integer; begin if x > y then goto 1; max:= y; goto 2; 1: max:= x; 2: write(max) end D. Instructiunea de efect nul: executarea acesteia nu are efect asupra variabilelor programului(starea acestuia ramane neschimbata). In textul programului, instructiunea de efect nul nu este reprezentata de nimic, dar, deoarece instructiunile sunt despartite intre ele prin delimitatorul "; ", prezenta sa este marcata de aparitia acestui delimitator. Exemplu: 100:; m:= m + 1;;; goto 100 exista 3 instructiuni de efect nul. Instructiuni structurate:A. Instructiunea compusa este formata dintr-o lista de instructiuni separate prin caracterul "; " si cuprinse intre cuvintele cheie begin si end. Sintactic, ea este tratata ca o singura instructiune. Exemplu: var m, n, t: integer; begin m:= m + 1; n:= n + 2; t:= m + n end. contine o singura instructiune compusa prin care se initializeaza variabilele m, n si t. B. Instructiunile iterative specifica faptul ca anumite instructiuni se repeta de mai multe ori. instructiunea while are forma: while <expresie> do <instructiune> unde <expresie> trebuie sa fie de tip boolean, iar <instructiune> poate fi orice instructiune Pascal , ce se va executa atat timp cat <expresie> ia valoarea true. Daca initial <expresie > are valoarea false, <instructiune> nu se va executa niciodata. Instructiunea while se mai numeste si ciclu cu test initial. Exemplu: program suma; var s, element: integer; begin s:= 0; read(element); while element > = 0 do begin s:= s + element; read(element) end; write('Suma este: ', s); writeln end. instructiunea repeat are forma: repeat until <expresie>; unde <expresie> trebuie sa fie de tip boolean si se evalueaza dupa fiecare iteratie. Deci, secventa de instructiuni aflata intre repeat si until se executa cel putin o data. Instructiunea repeat se mai numeste si ciclu cu test final. instructiunea for are formele: for <contor>:= <valoare initiala> to <valoare finala> do <instructiune> unde <contor> este o variabila de tip ordinal, iar <valoare initiala> si <valoare finala> sunt constante, variabile sau expresii de acelasi tip ordinal. Efectul executiei unei astfel de instructiuni consta in reluarea executiei prelucrarii pentru toate valorile consecutive ale contorului din intervalul delimitat de <valoare initiala> si <valoare finala>. Daca valoarea initiala este mai mare decat valoarea finala atunci nu se executa nici o instructiune. for <contor>:= <valoare initiala> downto <valoare finala > do <instructiune> In acest caz valoarea initiala trebuie sa fie mai mare decat valoarea finala. Exemplu: var i, v: integer; begin v:= 1; for i:= 1 to 3 do v:= v + 1 end. va avea ca rezultat v = 4; C. Instructiuni conditionale: Instructiunea if are doua forme: (a) if <conditie> then <instructiune1> else <instructiune2>; (b) if <conditie> then <instructiune>; unde <conditie> este o expresie cu valoare logica, iar <instructiune1>, <instructiune2> si <instructiune> sunt instructiuni Pascal. Exemplu: var a, b: integer; begin a:= 5; b:= 8; if a > b then max:= a else max:= b end. va avea ca rezultat max:= 8 Instructiunea de selectie multipla case are forma: case <expresie > of valoare_1: instructiune; valoare_2: instructiune; . valoare_n: instructiune else instructiune end; unde <expresie> trebuie sa fie de tip ordinal(standard - integer, char, boolean - sau definita de utilizator ca subdomeniu sau enumerare). Valoarea acestei expresii este utilizata pentru selectia uneia dintre alternative. D. Instructiunea with are forma: with <lista_inregistrari> do <instructiune> unde <lista_inregistrari> este o lista de elemente de tip inregistrare. In <instructiune> referirile la campurile din inregistrarile ce apar in lista de selectie se fac numai prin selectorii campurilor. Exemplu: Presupunand ca am definit tipul inregistrare " Date personale "ce contine campurile sex, prenume, nume, iar variabila date este declarata var date: date_personale putem considera urmatoarea secventa de program: with date do begin write(Prenume, ' ', Nume, 'este'); case sex of M: write('barbat'); F: write('femeie') end end; SubprogrameProcedura si functia constituie o parte a descrierii unui program, denumita subprogram. Deosebirea intre cele doua tipuri de subprograme consta in numarul valorilor calculate si returnate in punctele din care s-a facut apelul: procedura calculeaza oricate valori, in timp ce functia calculeaza intotdeauna o singura valoare, care se asociaza numelui functiei. I) FunctiiFunctia este un subprogram care calculeaza si intoarce subprogramului apelant o singura valoare. Forma generala a unei functii este: function f(x1.. xn): t; D1; begin . end; Pentru a scrie o functie trebuie precizate: numele functiei precedat de cuvantul cheie function; parametrul(sau parametrii) sai formali (x1.. xn) ; t - tipul rezultatului obtinut prin executia functiei; D1 - declaratii locale ale functiei; instructiunile ce specifica modul in care se calculeaza rezultatul functiei pe baza parametrilor actuali. Parametrii formali(reprezinta argumentele functiei) sunt disponibili doar in interiorul functiei. Apelul unei functii este de forma: f(a1.. an) unde f reprezinta numele functiei; (a1.. an) reprezinta parametrii actuali; Numarul parametrilor actuali(reprezinta expresii ale caror valori sau adrese sunt furnizate functiei) trebuie sa fie identic cu cel al parametrilor formali. Valorile parametrilor actuali se atribuie parametrilor formali exact in ordinea precizata la definirea functiei. Rezultatul functiei este reprezentat printr-o unica valoare. In corpul functiei trebuie sa existe cel putin o instructiune de atribuire prin care sa se transmita numelui functiei valoarea rezultatului. O functie poate avea ea insasi propria-i parte declarativa, in care sunt definite constante, tipuri, variabile locale(sunt create la fiecare activare a functiei si desfiintate la completarea executiei functiei si revenirea in program) si chiar alte functii. Variabilele globale, declarate in programul principal pot fi utilizate in interiorul oricarei functii asigurand in anumite situatii un alt mijloc pentru transmiterea rezultatelor. II) Proceduri Deoarece de multe ori este necesara obtinerea ca rezultat a mai multor valori, limbajul Pascal permite utilizarea unui al doilea tip de subprogram, procedura. Spre deosebire de functii, procedurile furnizeaza rezultate prin intermediul parametrilor si nu prin numele asociat. Forma generala este: procedure p(x1.. xn); D1; begin . end; unde p este numele procedurii; (x1.. xn) lista optionala de parametrii formali; D1 declaratii locale; begin . end; este o instructiune compusa. Apelul unei proceduri este de forma: p(a1.. an), unde: p este numele procedurii (a1.. an) este lista(optionala) de parametri actuali. Pentru procedura, datele de intrare se transmit prin parametrii valoare, prin valoarea acestora, iar rezultatele se transmit prin intermediul parametrilor variabila, care trebuie precedati in lista parametrilor formali de cuvantul cheie var. Parametrii valoare reprezinta mijlocul comun in Pascal pentru comunicarea datelor de la locul de apel spre functia / procedura apelata. Parametrii variabila reprezinta mijlocul principal de recuperare a rezultatelor din procedura apelata. PROBLEME REZOLVATE 1. Sa se scrie o procedura care, inscpectand registrul de stare civila, precizeaza daca un anumit barbat indeplineste conditiile legale pentru a se casatori cu o anumita femeie, si daca acest lucru este posibil, sa se actualizeze in mod corespunzator inregistrarile: Rezolvare: Structura inregistrarilor continute in registrul de stare civila ar putea fi descrisa astfel: Persoana = RECORD Nume, Prenume: PACKED ARRAY [1.12] OF CHAR; DataNasterii: DATE; Sex: (M,F); StareCivila: (NC, C, D, V) END; Procedura va fi: PROCEDURE Casatorie (VAR sot, sotie: Persoana; VAR Legal: BOOLEAN); BEGIN Legal:= (sot.sex=M) AND (sotie.sex=F) AND (sot.StareCivila<>C)AND (sotie.StareCivila<>C); IF Legal THEN BEGIN sot.StareCivila:=C; sotie.StareCivila:=C; END END. Apelul procedurii poate fi: Casatorie (Aurelia, Florin, Permis); 2. Considerand ca date de intrare pentru un fisier campurile: numele, prenumele, data nasterii( ziua, luna anul) unor persoane, sa se construiasca un program care sa numere inregistrarile cu campul anul=1973. Rezolvare: Program an; type DatePersonale = record nume, prenume: packed array [1..15] of char; ziua: 1..31; luna: 1..12; anul: integer end; var persoana: DatePersonale; f: file of DatePersonale; i: integer; begin rewrite(f); with persoana do begin while not EOF do begin write ('Nume:'); readln (nume); write ('Prenume:'); readln (prenume); writeln ('Data nasterii: write ('ziua:'); writeln (ziua); write ('luna:'); writeln (luna); write ('anul:'); writeln (anul); f^ :=persoana; put(f) end; reset(f); i:=0; while not EOF(f) do begin persoana := f^; get(f); if anul=1973 then i:=i+1 end; writeln ('Sunt', i, ' persoane cu anul 1973') end end. 3. Sa se creeze un program, in care dupa ce se introduc datele personale referitoare la un angajat (nume, prenume, data nasterii, numar de copii, seria de buletin): sa se adauge o noua inregistrare in fisierul ce contine datele personale ale angajatului; sa se actualizeze campul 'copii' al unei inregistrari din fisier, identificata prin campul 'Buletin'; sa se listeze inregistrarile fisierului. Rezolvare: Program angajat; type DatePersonale = record nume, prenume: packed array [1..15] of char; ziua: 1..31; luna: 1..12; anul: integer; buletin: integer; copii: integer end; var persoana: DatePersonale; f: file of DatePersonale; n, m, p, u, i: integer; codoper: char; begin rewrite (f,,'/seek'); with persoana do begin write ('Apasati una din literele (e, a) readln(codoper); while codoper<>'e' do begin case codoper of 'a': begin write('buletin:'); readln(buletin); write ('Nume:'); readln (nume); write ('Prenume:'); readln (prenume); writeln ('Data nasterii: write ('ziua:'); writeln (ziua); write ('luna:'); writeln (luna); write ('anul:'); writeln (anul); write ('copii:'); writeln (copii); seek (f, buletin); write (f, persoana) end; 'u' : begin write ('buletin:'); readln (m); write ('Numar copii de adaugat:'); readln (n); seek (f, m); read (f, persoana); copii:= copii+n; seek(f, m); write (f, persoana) end; 'l' : begin write ('De la: '); readln(p); write ('pana la: '); readln (u); seek (f, p); for i:=p to u do begin read (f, persoana); writeln (buletin, nume, prenume, ziua, luna, anul, copii) end end; otherwise end; write ('Cod operatie (e, l, a, u): '); readln (codoper) end end end. PROBLEME PROPUSE 1. Rezultatul expresiei pred(succ(pred('F'))) este: a. D b. E c. F d. G 2. Fiind date declaratiile de variabile: VAR m, n, p: INTEGER; x, y, z; REAL; c: CHAR; a, b: BOOLEAN; Care dintre urmatoarele atribuiri este incorecta: a. z:= m mod n; b. y:= n/p; c. m:= z-round(z); d. p:= m+n. 3. Care este rezultatul urmatoarei secvente: p:= 1; c:= 2; WHILE c<=5 DO p:= p*c; c:= c+1; writeln ('p= ', p); a. 120 b. 100 c. 50 d. 20. 4. Fie urmatoarea instructiune IF: IF pret>8000 THEN A:=1000 ELSE IF pret>9000 THEN A:=2000 ELSE IF pret>10000 THEN A:=3000 Daca variabila "pret" are valoarea 20.000 atunci valoarea atribuita variabilei A in urma executarii secventei de instructiuni este: a. 1000 b. 2000 c. 3000 d. 0 5. Rezultatul operatiei TRUNC(3.7) este: a. 4 b. 3 c. 7 d. 37 6. Fie variabilele: VAR i: INTEGER; c: CHAR; Sa se precizeze care instructiune este incorecta: a. i:=1; b. c:= 'i'; c. c:= chr(i); d. c:= i; 7. Functia furnizeaza rezultatul prin intermediul: a. numelui asociat; b. parametrilor variabila; c. parametrilor valoare; d. variabilelor globale. 8. Rezultatul operatiei (18 mod 4)este: a. 2 b. 3 c. 4 d. nu se poate calcula. 9. Care dintre functii va furniza rezultate de tip integer: a. pred(x) b. succ(x) c. exp(x) d. round(x) 10. In cazul in care n=2 si x=3, sa se aleaga rezultatul corect in urma executiei programului: program test var x, y: real; contor, n: integer; begin read(x); readln(n); y:=1; contor:=n; while contor>0 do begin y:=y*x; contor:= contor-1 end writeln(y) end. a. 2 b. 3 c. 6 d. 9 11. Care instructiune este o instructiune repetitiva? a. IF b. WHILE c. CASE d. GOTO 12. Procedurile au ca rezultat: a. o singura valoare; b. doua valori; c. oricate valori; d. valoarea data de utilizator; 13. Care instructiune este o instructiune conditionala? a. case b. with c. for d. repeat 14. Functia are ca rezultat: a. o singura valoare; b. doua valori; c. oricate valori; d. o valoare precizata de utilizator. 15. Functia care precizeaza daca un sir apare sau nu ca subsir al altui sir este: a. STR b. VAL c. INSERT d. POS 16. Tipul standard de date format din valorile FALSE si TRUE este: a. integer; b. real; c. boolean; d. char. 17. Pascal este: a. un limbaj de asamblare; b. un limbaj de nivel inalt; c. un limbaj neprocedural; d. un sistem de gestiune a bazelor de date relationale. 18. Scrieti un program care afiseaza angajatii unei firme, ordonati descrescator dupa salariul pe care il primesc. 19. Realizati un program cu ajutorul caruia sa inregistrati datele referitoare la studentii inscrisi intr-o facultate: nume, prenume, adresa, telefonul, starea civila, prenumele sotiei. 20. Sa se realizeze un program prin care sa se introduca de la tastatura numarul de candidati, numarul de probe si numarul candidatilor admisi la un concurs, iar apoi sa se calculeze rezultatele obtinute de acestia, calculand media fiecarui candidat. Sa se precizeze candidatii admisi si sa se localizeze candidatul cu punctaj maxim. 21. Pentru o grupa de studenti se introduc urmatoarele date de la tastatura: numarul de studenti din grupa; numele si prenumele fiecarui student; numarul de examene din sesiunea de vara; notele fiecarui student la examenele din sesiunea de vara (in caz de absenta se va introduce cifra 0). Sa se scrie un program care sa afiseze in ordinea mediilor studentilor si lista studentilor care au absente (in cazul in care exista doua medii identice, se va respecta ordinea alfabetica).
|