Subprograme Ce sunt subprogramele si de ce ne
Subprograme Ce sunt subprogramele si de ce ne sunt necesare? Grupa II : Druga Dumitru Cursaru Andreea Carstocea Dragos
Cuprins: Ce sunt subprogramele? Tipuri de subprograme? Subprogramele de tip functie. Subprogramele de tip procedura. Diferente intre subprogramele de tip functie si subprogramele de tip procedura. Exemplu. Aplicabilitatea subprogramelor in alte domenii. Concluzie.
Ce sunt subprogramele? SUBPROGRAMUL reprezinta parti identificabile prin nume care se pot activa la cerere prin intermediul acetui nume. O parte din subprogram se contruieste ca subprogram daca un algoritm cuprinde in mai multe locuri aceeasi secventa de operatii executabila pentru aceleasi date sau pentru date diferite. In loc ca subprogramul sa cuprinda in acelasi loc, acelasi grup de instructiuni, concepand grupul de intructiuni ca subprogram, el va aparea in program o singura data si se va activa de mai multe ori. Partea respectiva de program rezolva o subproblema din cele in care se descompune problema complexa. In limbajul Pascal, avem doua tipuri de subprograme: procedurile si functiile
De tip functie: function Tipuri de subprograme= De tip procedura: procedure Structura unui subprogram: -Antet -Zona de declaratii -Bloc Structura subprogramelor de tip functie: Antet function Identificator de functie ( Structura subprogramelor de tip procedura: Antet Identificator procedure de procedura Lista parametri formali ( ) Lista parametri formali Identificator de tip : )
Subprograme de tip functie Structura • Antet Function <nume f> (lista parametrilor formali: tip): tip f; • Nume f – numele functiei • Lista parametrilor formali: tip sunt variabilele care se scriu numai in antetul functiei. Lista parametrilor formali contine unul sau mai multi parametrii formali. Nu este obligatoriu ca toti parametrii formali sa aiba acelasi tip. • Tip f – tipul functiei • Zona de declaratii ( se declara varabilele locale) Variabilele locale sunt variabile care se declara si se utilizeaza numai la nivel de subprogram. • Zona operativa (corpul functiei) • Scris intre cuvintele rezervate “begin…end; ” Variabilele globale sunt cele care se scriu in zona de declaratii a programului si sunt utilizate atat la nivel de program cat si la nivel de subprogram. Programul principal contine: • Citiri ale datelor de intrare • Apeluri de functie (procedure) E(n) – apel al functiei • Calcule affective si afisari de rezultat n- parametrul efectiv Parametrii efectivi sunt parametrii care se scriu la apelul functiei si ei sunt valori cunoscute pentru care se calculeaza functia.
Subprograme de tip procedura Structura • Antet Procedure <nume p> (lista parametrilor formali); • Zona de declaratii – se declara variabile locale; • Corpul procedurii intre cuvintele rezervate begin…end; Procedurile pot fi folosite pentru citiri de variabile, afisari de variabile sau diferite calcule. O procedura poate fi folosita pentru afisarea mai multor variabile. Afisarile de rezultate se pot face sau in corpul procedurii sau la apelul procedurii. Parametrii formali • Parametrii formali transmisi prin valuare – sunt parametrii din antetul procedurii ale caror valori se cunosc (ex: a, b: integer). • Parametrii formali transmisi prin referinta sau adresa sunt parametrii din lista parametrilor formali precedati de cuvantul rezervat “var”, iar valorile lor urmeaza a fi calculate (ex: var m: real). Apelul procedurilor se realizeaza printr-o instructiune numita instrutiune de apel de procedura. Apelul se face scriind numele procedurii urmat de lista parametrilor efectivi.
Diferente intre subprogramele de tip functie si subprogramele de tip procedura: Functii: Apelul unei functii se face in cadrul unei expresii (instructiune de a afisare sau atribuire) cu numele functiei, urmata de lista parametrilor efectivi. Intre-un subprogram de tip functie nu se fac citiri si nici afisari de variabile. Numarul, tipul si ordinea parametrilor formali trebuie sa coincide cu cel al parametrilor efectivi. Sunt situatii in care subprogramul de tip functie nu contine parametrii formali. Proceduri: Apelul procedurilor se realizeaza printr-o instructiune numita instrutiune de apel de procedura. Apelul se face scriind numele procedurii urmat de lista parametrilor efectivi. Procedurile pot fi folosite pentru citiri de variabile, afisari de variabile sau diferite calcule. O procedura poate fi folosita pentru afisarea mai multor variabile. Afisarile de rezultate se pot face sau in corpul procedurii sau la apelul procedurii.
Exemplu : Realizati un program care citeste de la tastatura doua perechi de numere (a 1, b 1) si (a 2, b 2), calculeaza media aritmetica a numerelor fiecarei perechi, apoi determina cea mai mare dintre mediile obtinute. Functie: program medii; var m 1, m 2: real; a 1, b 1, a 2, b 2: integer; function medie(a: integer; b: integer): real; var m: real; begin m: = (a+b)/2; medie: =m; end; begin write(‘a 1=’); readln(a 1); write(‘b 1=’); readln(b 1); write(‘a 2=’); readln(a 2); write(‘b 2=’); readln(b 2); m 1: =medie(a 1; b 1); m 2: =medie(a 2; b 2); if m 1>m 2 then writeln(‘m 1=’, m 1); else writeln(‘m 2=’, m 2); readln end. Procedura: program medii; var a 1, b 1, a 2, b 2: integer; m 1, m 2: real; procedure media (a; b: integer ; var begin m: =(a+b)/2 end; procedure citire(a; b: integer); begin write(‘a=’); readln(a); write(‘b=’); readln(b); end; begin citire(a 1, b 1); citire(a 2, b 2); media(a 1, b 1, m 1); writeln(‘m 1=’, m 1); media(a 2, b 2, m 2); writeln(‘m 2=’, m 2); if m 1>m 2 then write(m 1) else write(m 2); readln end. m: real);
Aplicabilitatea subprogramelor in alte domenii: Functii: 1. Ne aflam intr-un magazin unde se aplica reduceri la rechizite. Pretul unui caiet este redus cu 20% daca un client cumpara intre 5 -7 caiete si cu 50% daca el cumpara cel putin 8 caiete. Care este valuarea pe care trebuie sa o achite cumparatorul? x-pret y-numarul de caiete r 1 -reducerea I r 2 -reducerea a-II-a pt- pretul total program magazine; var x, y, r 1, r 2, sel: integer; pt 1, pt 2: real; begin procedure citire (x, y: integer); begin write(‘x=’); readln(x); write(‘y=’); readln(y); end; procedure pret_total_1(x, y, r 1: integer, pt 1: real); begin if(y=>5) and (y<=7) then r 1: =x-(20/100)*x; pt 1: =y*(x-(20/100)*x); end; procedure pret_total_2(x, y, r 2: iteger, pt 2: real ); begin if(y>=8) thenr 2: =x-(50/100)*x; pt 2: =y*(x-(50/100)*x); end; begin citire(x. y); write(‘sel=’); readln(sel); case sel of 1. pret_total_1(x, y); 2. pret_total_2(x, y); end; readln end. Proceduri: 2. Intr-o magazie sunt urmatoarele produse: fasole, cartofi si rosi. Cunoscandu-se cantitatile existente din fiecare produs si pretul unui singur kg din fiecare produs. Sa se calculeze pretul total al tuturor lgumelor din magazie. Cf-cantitatea fasole Cr-cantitatea rosi Cc-cantiatea cartofi Pf-pret fasole Pr-pret rosi Pc-pret cartofi program legume; function produs (var Pf, Cf, Pr, Cr, Pc, Cc: real): real; var p: real; begin p: =1; p: =(Pf*Cf)+(Pr*Cr)+(Pc*Cc); produs: =p; end; begin write(‘Pf: ’); readln(Pf); write(‘Cf: ’); readln(Cf); write(‘Pr: ’); readln(Pr); write(‘Cr: ’); readln(Cr); write(‘Pc: ’); readln(Pc); write(‘Cc: ’); readln(Cc); writeln(‘produsul este: ’, produs(Pf, Cf, Pr, Cr, Pc, Cc)); end; readln end.
Concluzie: Utilizarea funcţiilor şi procedurilor permite elaborarea unor programe mai mici ca volum, deci care ocupă mai puţin spaţiu de memorie şi care sunt mai bine de înţeles pen-tru alţi utilizatori(alţii decât cei care au elaborat programul). Plus la asta aduce şi o eco-nomie de timp programatorului la elaborarea programului, deoarece odată elaborate, funcţiile şi procedurile pot fi apelate ori de câte ori nu am avea nevoie de instrucţiunea în cauză în program. Deosebirea intre ele consta in numarul de valori calculate si returnate programului apelat. Procedurile calculeaza mai multe valori sau nici una, iar functiile returneaza o singura valoare asociata numelui functiei. Atat procedurile cat si functiile pot fi standard(predefinite in unitul sistem), cat si nestandard(definite de utilizator). Procedurile si functiile nestandard trebuie declarate obligatoriu inainte de a fi apelate. Aplicabilitatea subprogramelor nu se limiteaza doar la matematica si informatica, conform exemplelor din slide-ul anterior subprogramele pot fi folosite aproximativ in orice domeniu.
Bibliografie: http: //www. cuplari. ro/referate/referat_SUBPROGRAME-592. html http: //referat. clopotel. ro/Subprograme-10442. html http: //www. cs. utt. ro/~todinca/TPAC/Curs/dt_tpac 6. pdf http: //www. e-referate. ro/referate/Subprograme 2005 -03 -18. html http: //dfs 543. tripod. com/id 1. html http: //facultate. regielive. ro/cursuri/limbaje_de_programare/notiuni_despre_algori tmi_si_programare_structurata-72742 http: //infomat. wetpaint. com/
- Slides: 11