Sunteți pe pagina 1din 8

Subprograme

Disciplina:Informatica Clasa a XI-a C G.S.T Videle VIDEANU RADUCU_IONUT

CUPRINS

A.Procedurile

B.Functiile

SUBPROGRAME Definitie Prin subprogram se intelege un ansamblu alcatuit din tipuri de date, variabile si instructiuni scrise in vederea unei anumite prelucrari (calcule, citiri, scrieri) si care poate fi utilizat (rulat) doar daca este apelat de un program sau de un alt subprogram. Observatie

-un program va contine un modul numit modul principal, pe langa care pot exista alte module numite subprograme; -pentru a se executa instructiunile cuprinse intr-un subprogram, acesta trebuie apelat din modulul principal sau din interiorul altui subprogram. Definitie Modulul din care se face apelarea se numeste modul apelant (acesta poate fi programul principal sau chiar un subprogram). Observatie -pana in prezent am fost doar utilizatori de subprograme. Ex. de subprograme folosite: a) matematice: sin, cos, exp, int, trunc b) de prelucrare a sirurilor de caractere: length, pos,val c) de manipulare a fisierelor:assign, reset, rewrite Avantajele utilizarii subprogramelor: 1) reutilizarea codului o data scris un subprogram poate fi utilizat de mai multe subprograme 2) elaborarea algoritmilor prin descompunere problemei in altele mai simple 3) reducerea numarului de erori care pot aparea la scrierea subprogramelor 4) depistarea cu usurinta a erorilor Observatie -modulul apelant poate sa transmita subprogramului pe care il apeleaza niste date numite parametri si ii foloseste atunci cand se executa (in urma apelului). -orice subprogram are un identificator (adica numele dat subprogramului de catre utilizator) si eventual un set de date (parametri). -in Pascal subprogramele sunt de doua tipuri: A) proceduri B) functii -ele difera prin antet, prin modul in care pot fi apelate, precum si prin tipul rezultatului intors de ele; Definitie In esenta un subprogram este alcatuit din: 1) ANTET acesta contine mai multe informatii importante necesare compilatorului: a) numele subprogramului b )lista de parametri (parametri formali) -in cazul functiilor contine si tipul rezultatului (valoarea intoarsa de functie) 2) CORPUL SUBPROGRAMULUI acesta cuprinde definirea tipurilor de variabile ale subprogramului, precum si o instructiune compusa begin-end; structura sa este identica cu cea a programului principal A. Procedurile Sintaxa unei proceduri: procedure <nume procedura> (l1:t1 ;l2:t2; ...ln:tn); <zona de declaratii a variabilelor locale>; begin <instructiuni> end;

Observatie - la definirea procedurii se declara parametri, pentru fiecare parametru precizandu-se numele si tipul acestuia Definitie -acesti parametri precizati la scrierea procedurii sunt niste simboluri, identificatori si se numesc parametri formali (se gasesc in antetul procedurii)

- pentru a se executa procedura, aceasta trebuie apelata -la apel se precizeaza numele procedurii si valorile concrete ale parametrilor intre paranteze rotunde separate prin virgula Definitie - valorile parametrilor care se transmit la apel se numesc parametri actuali sau efectivi. - cand se apeleaza procedura, modulul apelant este abandonat temporal si se executa procedura; in timpul executiei procedurii parametri formali sunt inlocuiti in tot corpul procedurii cu parametri actuali (valori concrete). - dupa incheierea executiei procedurii se revine automat in modulul apelant la linia imediat urmatoare celei care a facut apelul. Observatie - parametri actuali trebuie sa corespunda ca numar, tip si ordine cu parametri formali - apelul unei proceduri este o instructiune numita instructiune de apel - la apel controlul programului este transferat la prima instructiune a procedurii - subprogramele se pot plasa in cadrul programului intre declaratiile de variabile si instructiunea compusa begin-end. - orice variabila a programului principal este si variabila a procedurii (invers nu este adevarat). Ex. Calculul mediei aritmetice a 2 numere folosind o procedura. Program medie; var m,a0,b0,a,b : real; procedure calcul_media(a,b:real); begin m:=(a+b)/2; writeln(media este=, m:6:2); end; begin calcul_media (2,3); a0:=5; b0:=-4; calcul_media (a0,b0); calcul_media (abs(a0), abs(b0)); write(a=); readln(a); write(b=); readln(b); calcul_media(a,b); readln; end.

In concluzie parametri actuali pot fi : - constante; - valori ale unor variabile obtinute prin atribuire sau citire; - valori ale unor expresii; - valori returnate de functii. Domeniul de vizibilitate al variabilelor(sau constantelor) Definitie 1) Prin domeniu de vizibilitate al unei variabile/constante se intelege zona de program in care este vazuta declaratia acesteia, adica zona din program in care este cunoscuta valoarea sa. 2) Exista 2 tipuri de variabile/constante a) variabila locala daca este declarata intr-un subprogram, atunci valoarea ei va fi cunoscuta numai in interiorul subprogramului respectiv (in timpul executiei acestuia) b) variabila globala daca este declarata la inceputul unui program, atunci ea este vazuta in intreg programul (inclusiv in subprogram) Observatie - putem avea o variabila locala si una globala cu acelasi nume;i n acest caz, in subprogramul in care a fost declarata ,variabila locala acunde variabila globala (in timpul executiei programului este vazuta valoarea variabilei locale,i ar in afara subprogramului este cunoscuta variabila globala). Ex. Program exemplu; var x:integer;

procedure t(x:integer); begin writeln(x); x:=x+1; end; begin x:=3; t; writeln(x); end. Declararea unui subprogram Observatie - declara un subprogram inseamna a-l anunta. (un subprogram nedeclarat nu poate fi folosit) un suprogram trebuie plasat in cadrul programului inaintea programului care-l apeleaza pentru a scrie subprogramul dupa modulul apelant trebuie sa facem o asa numita declaratie anticipata a subprogramului folosind directiva FORWARD in zona de declaratii a programului. Ex. 1) program ex_1; begin a; procedure b; forward; end. procedure a; begin writeln(eu sunt a); b; end; procedure b; begin writeln(eu sunt b); end; 2) program ex_2; procedure a; forward; begin a; end. procedure a; begin writeln(eu sunt a); end;

Dupa mecanismul de transmitere a parametrilor distingem 2 cazuri: 1) parametri transmisi prin valoare 2) parametri transmisi prin referinta 1) - sunt parametri a caror modificare este vazuta numai in interior subprogramului respectiv, nu si in afara acestuia - transmiterea prin valoare se utilizeaza atunci cand suntem interesati ca subprogramul sa lucreze cu acea valoare, dar in prelucrare nu ne intereseaza ca parametru efectiv (cel din blocul apelat) sa retina valoarea modificata in subprogram - se pot transmite prin valoare : valorile retinute de variabile - sunt parametri a caror modificare in interiorul subprogramului este vazuta si la nivelul modulului apelant - putem sa transmitem prin referinta un parametru gol(doar numele lui, fara valoare); in acest caz parametru poate sa primeasca valoare in corpul subprogramului, valoare care mai apoi este este recunoscuta si de modulul apelant - la declararea subprogramului numele acestor parametri vor fi precedate de cuvantul cheie var.

2)

Ex. program ex_ref; var a,b,c ; integer;

procedure calcul(a,b:integer,var c:integer); begin a:=b+c; b:=a+c; c:=a+b; end; begin a:=1; b:=2; c:=3; calcul(a,b,c); writeln(a, ,b, ,c); end.

{se va afisa 1 2 13}

B. Functiile
ca si procedurile functiile fac si ele parte din categoria subprogramelor ele efectueaza anumite operatii, dar in plus, o functie intoarce(returneaza) o anumita valoare o functie returneaza un singur rezultat, pe cand o procedura poate returna mai multe sau nici un rezultat functia lucreaza la fel ca si procedura, deci toate precizarile facute pentru proceduri sunt valabile si in cazul functiei

Sintaxa unei functii este Function <nume functie> (i1:t1,i2:t2...in;tn): tr; <zona de declaratii locale a functiei> Begin <instructiuni> <nume_functie>:=e; end; unde tr reprezinta tipul valorii returnate de catre functie; intre begin si end trebuie sa existe cel putin o instruciune de atribuire care are ca membru stang numele functiei, de aceea se spune ca o functie returneaza o valoare prin numele sau. Observatie - apelul unei procedure se face prin numele ei - iar rezultat intors de functie poate fi afisat, folosit in expresii (calcule), atribuit unei alte variabile

Ex. program medie_aritmetica; var x, y;integer; m,n:real; function medie (a,b:integer) : real; begin medie:=(a+b)/2; end; begin write(x=); readln x); write(y=); readln(y); write (medie(x,y)); m:= medie(x,y)/2; n:=m; writeln(m,n); end.

BIBLIOGRAFIE

1.Manual Informatica

2.Caiet Informatica

3.WWW.WIKIPEDIA.ORG