Home - qdidactic.com
Didactica si proiecte didacticeBani si dezvoltarea cariereiStiinta  si proiecte tehniceIstorie si biografiiSanatate si medicinaDezvoltare personala
referate stiintaSa fii al doilea inseamna sa fii primul care pierde - Ayrton Senna





Aeronautica Comunicatii Drept Informatica Nutritie Sociologie
Tehnica mecanica


Informatica


Qdidactic » stiinta & tehnica » informatica
Limbajul de programare pascal



Limbajul de programare pascal


LIMBAJUL DE PROGRAMARE PASCAL



1. Notiuni introductive


1.1. Etapele realizarii unui program scris in Pascal

Realizarea 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 Pascal


Acesta 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:

And

downto

if

or

then

Array

else

in

packed

to

Begin

end

label

procedure

type

Case

file

mod

program

until

Const

for

nil

record

var

Div

function

not

repeat

while

Do

goto

of

set

with


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:



Adunare


Scadere


Inmultire


impartire cu rezultat de tip real

Div

impartire cu rezultat de tip intreg

Mod

restul impartirii intregi


B. Operatorii relationali existenti in acest limbaj sunt:


"egal"

< >

"diferit"

<

"mai mic decat"

>

"mai mare decat"

>=

"mai mare sau egal cu"

<=

"mai mic sau egal cu"


C. Operatori logici

And

cu intelesul de "si logic ";

Or

cu intelesul de "sau logic";

Not

cu intelesul de "negare logica".


4. Functii


Functii standard


abs(x)

rezultatul reprezinta valoarea absoluta a lui x;

sqr(x)

rezultatul reprezinta patratul lui x;

"trunc"

reprezinta trunchierea unui numar unde trunc(x)=n, daca x o si n x<n+1  sau x<0 si n-1<x n, unde x este un parametru de tip real, iar n este un numar intreg;

Round

reprezinta rotunjirea unui numar, unde round(x)= trunc(x + 0.5) , daca x 0 sau round(x)=trunc(x - 0.5), daca x<0;

sin(x)

calculeaza sin(x);

cos(x)

calculeaza cos(x);

arctan(x)

calculeaza arctg(x);

exp(x)

calculeaza valoarea e la puterea x;

ln(x)

calculeaza logaritmul lui x in baza e;

sqrt(x)

calculeaza radacina patrata a lui x.

odd(x)

rezultatul este true daca x este un intreg impar, altfel rezultatul este false;

eoln(f)

rezultatul este true daca s-a ajuns la sfarsitul unei linii a fisierului;

eof(f)

rezultatul este true daca s-a ajuns la sfarsitul fisierului;

ord(x)

realizeaza codificarea caracterelor;

chr(x)

este inversa functiei "ord"



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:

s:= a + b

este echivalent cu s:= concat(a, b)

writeln(length('factura'))

va avea rezultatul 8

pos('fi', 'firma')

are valoarea 1

copy('subiect', 4, 3)

va avea rezultatul  "iec"

delete(s, length(s) - 1, 2)

va sterge ultimele doua caractere din sirul s

insert(nou,s, k)

va insera subsirul "nou" in sirul s incepand cu pozitia k

str(8+3, sir)

memoreaza in "sir" valoarea "11"


val(sir, x, cod)

se va efectua conversia lui "sir" intr-o valoare numerica memorata in variabila x


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 standard

integer - 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 utilizator

I.       Tipuri simple:

  1. tipul enumerare: multimea valorilor acestui tip se defineste prin enumerarea identificatorilor ce reprezinta aceste valori;

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 Pascal


In limbajul Pascal exista urmatoarele tipuri de instructiuni:

A. Instructiuni simple

Instructiunea 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;


Subprograme


Procedura 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) Functii

Functia 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).




Contact |- ia legatura cu noi -| contact
Adauga document |- pune-ti documente online -| adauga-document
Termeni & conditii de utilizare |- politica de cookies si de confidentialitate -| termeni
Copyright © |- 2024 - Toate drepturile rezervate -| copyright