You are on page 1of 11

CURS 6

6.1.FUNCII NUMERICE Notaiile funciilor n limbajul BASIC seamn cu cele cunoscute din matematic, totui exist cteva diferene: - Funciile trigonometrice msoar unghiurile n Radiani - nu n grade [Sper c nu ai uitat : (adic 3.14) radiani corespund la 180 de grade, deci cade n sarcina programatorului s fac transformrile n i din radiani.] - Funcia logaritmic lucreaz n baza e, i nu n baza 10, aa cum s-a nvat n liceu. [ i aici programatorul este obligat s fac transformrile -dac sunt necesare-.] Legat de funciile despre care nu s-a invat n liceu : - Funcia SGN (de la cuvntul "SIGNUM" din latin = semn), se definete matematic astfel: SGN(x) = 1 dac x > 0 ; SGN(x) = 0 dac x = 0; SGN(x) = -1 dac x<0 - Sunt o serie de calcule ale cror rezultat trebuie s fie ntreg. [La un examen de admitere nu se pot admite 23 i un sfert de elevi ! ] . Funciile INT i FIX transform rezultatele n numere ntregi, alegnd ntregul cel mai apropiat. Rotunjirea -operaia cunoscut din coalpoate fi simulat folosind formula: NUMR ROTUNJIT = INT (x + 0.5) - Funcia RND(x) ne permite s modelm fenomene ntmpltoare (stohastice) cu ajutorul calculatorului. Dac se apeleaz repetat funcia RND(x), el returneaz numere la ntmplare ntre 0 i 1 (0 poate fi , 1 niciodat). Numerele generate - indiferent cte numere generm - sunt uniform repartizate pe intervalul 0-1, i aparent nu exist nici-o relaie matematic care s ne permit s calculm urmtorul numr generat din numerele generate anterior. Folosind aceast funcie, mpreun cu funcia INT putem obine un algoritm ce ne va furniza numere ntregi la ntmplare ntre 1 i 6, exact ca un zar: [ncercai s rulai de mai multe ori : N = INT( 6 * RND(X)) + 1 : PRINT N ]

n tabelul 6.1 se prezint funciile matematice utilzate mai frecvent: FUNCIA ARGUMENTUL SEMNIFICAIA SIN(X) COS(x) TAN(X) ATAN (x) LOG(x) EXP(x) SQR(x) ABS(x) SGN(x) INT(x) FIX(x) RND(X) < X > = Radiani < X > = Radiani < X > = Radiani x Re x>0 x Re x>0 x Re x Re x Re x Re [ X nu conteaz] Sinusul unghiului x Cosinusul unghiului x Tangenta unghiului x Arctangenta lui x Logaritmul natural a lui x e [ 2.71828] la puterea x Radical de ordinul 2 din x Modul (valoarea absolut) de x Semnul lui x ( -1, 0 , 1 ) Ultimul ntreg mai mic ca x Partea intreag a lui x Numr pseudoaleator ntre [0, 1 )

Obs.

Rez. n radiani

INT(-2.3) = -3 ! FIX(-2.3) = -2 !

Tabelul 6.1.Funciile numerice din BASIC


1

Chimia, Biologia, Geografia necesit mult matematic: Calcule trigonometrice, calcul matricial, calcule statistice, etc. Funciile matematice prezentate n Tab. 6.1 au multiple utilizri. Formulele cele mai utilizate n statistic sunt formulele mediei i a dispersiei: Formula mediei: Formula dispersiei:

m =

d2 =

[ Pt detalii :

vezi_f_C i IptNI_Cap_13 ]

6.2.FUNCTII IR. n tabelul urmtor sunt trecute n revist toate funciile ce au legtur cu "iruri" (texte), indiferent c argumentul sau rezultatul este ir. Instruciunile ce permit alinierea textelor nu au form de funcie, dar ele ca i funcionare se incadreaz aici. FUNCIA LEN(X$) VAL(X$) STR$(X) CHR$(N) ASC(X$) STRING$(X,N) SPACE$(X) LEFT$(X$,N) RIGHT$(X$,N) MID$(X$,N,M) INSTR(X$,A$) LSET A$=X$ RSET A$=X$ UCASE$ (X$) LCASE$ (X$) LTRIM$(X$) RTRIM$(X$) ARGUMENTUL IR IR NUMR 0 =< N =< 127 IR NUMR, NUMR NUMR IR, NUMR IR, NUMR IR, NR1, NR2 IR1, IR2 IR IR IR IR IR IR SEMNIFICAIA LUNGIMEA IRULUI "VALOAREA" IRULUI IRUL CORESPUNZTOR CARACTERUL ASCII NR. de ORDINE ASCII (A primului) IR CU X CARACTERE IDENTICE IR CU X SPAII PRIMELE N caractere din IR ULTIMELE N caractere din IR M caractere (incepnd cu N) CUTARE SUBIR(A$) N X$ ALINIERE LA STNGA ALINIERE LA DREAPTA TRANSFORM TEXTUL N MAJUSCULE (LITERE MARI) TRANSFORM TEXTUL N LITERE MICI ELIMIN BLANCURILE DE LA NCEPUTUL TEXTULUI ELIMIN BLANCURILE DE LA SFRITUL TEXTULUI Tabelul 6.2.Funciile ir din BASIC
2

REZULTAT NUMR NUMR IR 1 CARACT. 0 =< N =< 127 IR IR IR IR IR NUMR IR IR IR IR IR IR

6.3.FUNCII LOGICE Funciile logice opereaz asupra variabilelor logice. Chiar dac nu exist definite explicit n limbajul BASIC (ele exist definite n limbajele FORTRAN, PASCAL, etc.), aceste variabile sunt folosite n construcia i funcionarea instruciunii IF. Dac ne uitm la structura acestei instruciuni (vezi 5.9), evaluarea acelei <condiii> din instruciune, atribuie valoare la o variabil logic. Orice variabil logic poat s aib dou valori : ADEVRAT (Eng.: TRUE) sau FALS (ENG.: FALSE). [ Deobicei se noteaz cu T, F , iar n algebra Boolean se folosesc notaiile 0,1 ]. Asupra variabilelor logice pot aciona funcii unare ( funcia NOT cu un singur argument) i funcii binare (cu 2 argumente) rezultatul fiind tot o variabil logic. FUNCIA NOT X X AND X OR X XOR X EQV X IMP Y Y Y Y Y ARGUMENTUL T, F T, F T, F T, F T, F T, F T, F T, F T, F T, F T, F T, F T, F T, F T, F SEMNIFICAIA "NEGAREA LUI X" (T F, F T) FUNCIA LOGIC "I" FUNCIA LOGIC "SAU" F. LOGIC "SAU EXCLUSIV" F. LOGIC "ECHIVALEN" F. LOGIC "IMPLICAIE" FUNCIA LOGIC "I-NEGAT" FUNCIA LOGIC "SAU-NEGAT" Obs.

X NAND Y X NOR Y ..i alte funcii negate

Tabelul 6.3. Funcii logice n BASIC Funciile pot fi combinate n expresii complicate, pentru reflectarea deciziilor complexe, multicauz. [O persoan superstiioas ce nu iese din cas dac cumva este Vineri i 13 sau a trecut o pisic neagr prin preajm, poate fi modelat de instruciunea : IF (ZIUA$="VINERI" AND DATA = 13) OR PE_STRADA ="ESTE_PISICA_NEAGR" THEN PRINT "AZI NU IEIM PE STRAD! " ] Regulile de compunere a funciilor logice sunt descrise n legile Logicii matematice i n algebra Boolean de ctre axiomele lui DeMorgan. Un exemplu din aceste axiome : I negat este SAU ; Mergem la cinema dac: Nu mergem la cinema dac: nu avem ore I este timp urt. [Negarea acestei propoziii ar fi:] este timp frumos.

avem ore SAU

[ Matematic, aceste axiome sunt descrise mai abstract, dar n esen e vorba de asemenea reguli. Cei interesai vor consulta manualele de specialitate.]
3

6.4.3. Instruciunea COLOR permite s schimbm culoarea textului, a fondului, etc., i prin acesta s atragem atenia asupra unor texte ce sunt mai importante. Dac avem un monitor color, n funcie de calitatea lui, textele pot fi afiate n diferite culori, pe fond de culori diferite, existnd i posibilitatea de a afia n mod luminos i clipitor. Modul de afiare deci depinde de monitor, i este comandat de numerele alese pentru instruciunea cu forma: COLOR <nr_cul_cerneal>, <nr_culoare_fond> unde: - <nr_cul_cerneal>, precizeaz culoarea pentru text - <nr_cul_fond> , precizeaz culoarea pentru fond , iar (6.3)

Cteva exemple: Indiferent de tipul monitorului: COLOR 7,0 este comanda implicit de a scrie cu litere albe pe fond negru, COLOR 0,7 va tipri n "video-invers", adic litere negre pe fond alb. La un monitor color: COLOR 1,7 va tipri cu litere albastre pe fond alb, COLOR 4,7 va tipri cu litere roii pe fond alb, COLOR 7,1 va tipri cu litere albe pe fond albastru, etc. [Numerele asociate fiecrei culori nu merit s fie memorate, ele depind de tipul monitorului, i de alte instruciuni folosite (SCREEN, PALETTE, etc.), aa c cel mai bine ca nainte de a le folosi, s scriem un program ce oblig calculatorul s afieze un text n toate modalitile posibile i s ne alegem de pe ecran "variantele simpatice".] Ceea ce e de reinut n legtur cu folosire instruciunii COLOR este c de fiecare dat instruciunea modific modul de afiare i acesta rmne aa, pn la o nou comand. Deci dac vrei ca un text s fie afiat s zicem video invers, dar textul urmtor iari n mod normal,trebuie s dm din nou o comand de modificare a afirii, adic o nou instruciune COLOR, pentru revenire. Poriunea de program care afiseaz 3 texte, prima n video normal, a doua n video nvers i a 3-a iari n video normal, va arta deci astfel: PRINT "PRIMUL TEXT IN VIDEO NORMAL" COLOR 0,7 PRINT "AL DOILEA TEX IN VIDEO INVERS" COLOR 7,0 PRINT " AL TREILEA TEXT, IARI IN VIDEO NORMAL"

6.5. INSTRUCTIUNI GRAFICE Calculatoarele au ajutat inginerii de la nceput, rezolvnd ecuaii, fcnd calcule complicate n timp mult mai scurt. Mult vreme ns ajutorul s-a mrginit la aceste calcule, i cel mai consumator de timp din activitile ingineretei - desenatul- nu se bucura de nici un ajutor din partea tehnicii de calcul. Principala piedic a fost inexistena dispozitivelor prin care putem povesti calculatorului cum arat un desen i mai ales a dispozitivelor prin care calculatorul - dup ce n memoria lui exist informaiile necesare pentru elaborarea desenului - deseneaz pe hrtie sau mcar pe ecran. [ Despre aceste dispozitive de desenare vom vorbi mai detailat n cap. 10 -Periferice- ] Tehnicile de descompunere a unei imagini n structuri mai simple dateaz nc din secolul trecut cnd pictorii pointiliti [ George Seurat(1859 - 1891), Paul Signac(1863-1935), etc.] au realizat nite picturi din pete mici -practic nite puncte- colorate. Dac ne uitm de la distan vedem peisajul n ansamblu, dar inspectnd picturile de aproape vom vedea c au fost realizate din multe-multe pete colorate. Descompunerea imaginilor n puncte a fost folosit la nceputul secolului XX la transmisia imaginilor prin telegrafie (Video-telegraf, Telefax), i apoi prin televiziune. Acelai principiu se aplic la toate sistemele electrice de afiare, cum ar fi "ziarele electrice" i panourile de afiare din stadioane. O matrice de 8 x 8 becuri permite afiarea unui caracter, dup cum becurile sunt aprinse sau nu. E clar c pe msura creterii numrului de becuri (n loc de cteva becuri mari, vom folosi mai multe becuri mai mici) posibilitatea de afiare a detaliilor va crete. Pentru a descrie fineea unui dispozitiv de afiare construit pe acest principiu vom numra numrul de "puncte grafice" (PIXELI - n informatic) care alctuesc imaginea respectiv. Pentru un caracter (n cazul cel mai simplu ), vom folosi o matrice de 8 x 8 becuri, adic 64 de PIXELI. Ecranele obinuite de televizor de azi afieaz imaginile descompuse n 625 x 625 de puncte, monitoarele de calculator - n funcie de tip vor face acelai lucru pe o matrice - n cazul cel mai defavorabil de 600 x 800 de puncte, dar n cazuri extreme matricea poate fi de 4096 x 4096 de puncte. [ Despre tipuri de monitoare vezi Cursul de periferice ] Intruct exist mai multe tipuri de monitoare pe pia, i acelai calculator poate folosi monitoare mai slabe sau mai pretenioase, la nceputul unui program n care vrem s desenm, trebuie "explicat" calculatorului ce fel de monitor avem. n limbajul BASIC pentru acesta se va folosi instruciunea SCREEN de forma: SCREEN <nr_ecran> (6.2)

unde <nr_ecran> are valori diferite n funcie de tipul monitorului folosit, el era egal cu 12 pentru un monitor VGA color de 640 x 480 (cel mai bun de pe vremea S.O. MS DOS ). [ n VISUAL-BASIC (v. cursul 7) se pot realiza desene n obiectele de tip Picture-Box cu instruciuni asemntoare celor prezentate mai jos, limitele desenului fiind n funcie de parametri obiectului ales pentru desenare. ]

Desenarea se face "aprinznd" cte un pixel. Instruciunile ce permit aprinderea i stingerea pixelilor au forma: PSET (X,Y) pt. aprindere, i PRESET (X,Y) pt. stingere pixel., unde X,Y reprezint coordonatele punctului (a pixelului). Spre deosebire de cele nvate la matematic, unde ne-am obinuit cu coordonatele carteziene, la desenarea pe ecranul monitorului - dac nu se specific n mod special altceva-, se folosesc "coordonatele fizice" (zise i "coordonate ecran"), ce au originea (punctul cu coordonatele 0,0) n colul stnga sus. La nceput, toate desenele se fceu cu ajutorul instruciunilor PSET i PRESET, pentru o linie aprinznd mai multe puncte alturate, s.a.m.d. Dup un timp sau pus la punct o serie de instruciuni ce uureaz elaborarea desenelor. Instruciunea ce permite trasarea liniilor, a dreptunghiurilor (goale i haurate) are forma: LINE [(x1,y1)] - [STEP](x2,y2) [,attr][,B][F][,stil] (Trad.Rom.:LINE = "linie") Figura geometric cea mai frecvent -dup linie- este cercul. Trasarea lui se face cu instruciunea: CIRCLE (xc, yc ), R [,CUL,ST,SF,ASP ] [Trad.Rom.:CIRCLE = "cerc" ] unde - xc, yc -R sunt coordonatele centrului, este Raza cercului, (6.14) (6.5)

restul de parametri opionali ne permit s trasm cercuri colorate, elipse i arcuri de cerc. Trasarea figurilor geometrice mai "complicate", cum ar fi parabole, hiperbole i alte curbe descrise de ecuaii mai complicate, se va face prin "aproximaii", Aa cum un poligon cu foarte multe laturi se apropie de cerc, orice curb poate fi aproximat printr-o succesiune de segmente att de scurte nct nu se vd cu ochiul liber i dau senzaia de curb continu. La folosirea eficient a suprafeei de afiare contribuie nc 2 instruciuni. Prima permite ca tot desenul elaborat de noi s ocupe doar o poriune din ecranul folosit, permind ca pe ecran s se afieze n acelai timp mai multe desene. El are forma general: VIEW (x1,y1) - (x2, y2) [Trad.Rom.:VIEW = "vedere" ] Instruciunea VIEW definete poriunea de ecran folosit pentru desenare. (numit i "FEREASTR GRAFIC" ) [ Implicit,calculatorul presupune c vrem s desenm pe tot ecranul,- adic fr s ne ntrebela nceput de program grafic (dac avem un ecran de 640x480 ) el lanseaz instruciunea: VIEW ( 0,0 ) - (640, 480 ) ]
6

(6.21)

Cealalt instruciune, foarte util n programele de desenare, care permite s alegem ct de mult din desen se afieaz la un moment dat n fereastra grafic aleas, este instruciunea :

WINDOW [SCREEN] (x1,y1) - (x2, y2)

(6.23)

[ Trad.Rom.: WINDOW = "fereastr" ] - unde - x1, y1 - x2, y2 sunt coordonatele colului stnga-sus, iar sunt coordonatele colului dreapta-jos, a poriunii dreptunghiulare de desen afiate n fereastra grafic.

Astfel modificnd parametrii instruciunii WINDOW, din acelai desen putem afia pe ecran zone mai mari (avnd o privire de ansamblu) sau zone mai mici (observnd detaliile ). La laborator veti desena un stadion, de mai multe ori, modificnd parametri instruciunii WINDOWS, astfel afind pe ecran diferite poriuni ale stadionului. [ Ca i "efect secundar", utiliznd instruciunea WINDOWS, calculatorul trece de la coordonate fizice la coordonate carteziene.] Dac nu specificm altceva, - la un monitor de 640x480 - calculatorul presupune c pe ecran se va afia poriunea de desen (0,0) - (640,480), adic la nceput el lanseaz inplicit instruciunea: WINDOW SCREEN (0,0 ) - ( 640, 480 ) (6.24)

Toate instruciunile prezentate pn acum erau destinate inginerilor, pentru desenare pe ecran. Pentru a uura comanda instalaiilor de desenare (PLOTTER: vezi cap.10 PERIFERICE-), s-a creat instruciunea DRAW, mai uor de manipulat ca cele descrise pn acum, inzestrat i cu nite faciliti inexistente pn acum. Instruciunea are forma: DRAW <expresie ir> [Trad.Rom.: DRAW= "a desena" ] Cele prezentate pn aici despre limbajul BASIC (versiunea QUICK-BASIC) ne permit s construim programe destul de complexe, ce pot ajuta mult disciplinele tiinifice ca i Chimia, Biologia, Geografia, i multe alte discipline, fr a fi necesar un efort deosebit. La laborator vei avea ocazia s v convingei de aceasta, rulnd programe scrise n acest limbaj ce rezolv de la probleme de la cele mai simple legate de operaii matematice (ADUN) pn la cele ce rezolv probleme matematice mai complicate (Rezolvarea Ec_grad_2 , Operaii cu Matrici ) de satistic ( calculul Mediei i a Dispersiei). De o utilitate deosebit snt programele ce apeleaz la posibilitile grafice oferite de limbaj: de la cele ce ne ajut la reprezentare grafic a funciilor, la reprezentri de Histograme, la cele ce apeleaz la Interpolarea polinomial, la Regresie , la diferite metode de Clasificarea, etc. Metodele grafice au o importan deosebit pentru Geografi, pentru a nelege modul n care informaiile grafice (Diagrame, hri, etc.) pot fi memorate, afiate i manipulate cu ajutorul tehnicii de calcul.
7

(6.26)

6.6. INSTRUCIUNI DE GENERAREA SUNETULUI. Calculatorul nu a fost inventat ca instrument muzical, dar din cnd n cnd avem nevoie ca el s scoat sunete. n primul rnd cnd - la introducerea datelor, de exemplu - nu suntem ateni i calculatorul poate sesiza greeala. (Dac ntr-un program introducem un numr care reprezint numrul de ordine a unei zile din sptmn, se tie c acesta nu poate fi mai mare ca 7, iar dac ceea ce introducem e numrul de ordine a zilei dintr-o lun, acesta nu poate fi mai mare ca 31, Dac n aceste cazuri, din neatenie, ncercm s "pclim" calculatorul, el ne poate ateniona nu numai printr-un mesaj pe ecran ci i printr-un mesaj sonor. (Aceast atenionare e motenirea din timpul telegrafiei, cnd operatorul trebuia trezit noaptea printr-un semnal sonor transmind caracterul ASCII : BEL). n limbajul BASIC, pentru a auzi un sunet se avertizare (frecvena = 800 Hz, durata 1/4 secunde ) se folosete instruciunea : BEEP [Trad.Rom.: BEEP ="piuit" ] n calculatoarele de azi exist posibilitatea s generm sunete de diferite frecven, i de diferit durat ( nu numai sunetul de avertizare ), folosind instruciunea: SOUND <frecven>, <durat> [Trad.Rom.:SOUND="sunet"] - unde: <frecven> <durat> - reprezint frecvena sunetului n Hz, cu valori n intervalul de (37, 32767) Hz. - este durata n multipli de 0.0549 secunde (pt. 1 secund, durata trebuie s fie n jur de 18.2 ) Durata maxim are valoarea de 65635 (6.28) (6.27)

6.7. .SUBRUTINE n cazul n care anumite instruciuni se folosesc n mod repetat, dar de fiecare dat difer mai multe valori nu numai valoarea unei singure variabile, respectiv valorile variabilelor nu se modific "monoton" subrutinele ne pot ajuta. Programul poate fi scurtat i fcut mai clar, dac rescriem programul astfel: - Instruciunile care se repet se scot din textul programului i un exemplar din ele se poziioneaz la sfrit, incluznd la capt instruciunea RETURN i crendu astfel o SUBRUTIN. - n locul instruciunilor scoase (poziionate acum ntr-un singur exemplar la capt) se include instruciunea GOSUB <etichet>, unde <etichet> este eticheta instruciunii de la nceputul subrutinei. De fiecare dat cnd un program ajunge la o instruciune GOSUB, calculatorul memoreaz adresa instruciunii imediat urmtoare ("adresa de revenire"), dup care sare la subrutin i ncepe executarea instruciunilor memorate acolo. n momentul n care subrutina este terminat i s-a ajuns la instruciunea RETURN se citete adresa anterior memorat i se sare napoi la aceast adres.

Astfel se asigur ca dup saltul la subrutin, execuia s continue unde e logic, adic la instruciunea imediat urmtoare de dup GOSUB. Programul din care instrucinile nglobate n subrutine au fost eliminate se numete acum programul principal (sau programul "apelant"), subrutinele se mai numesc i subprograme, proceduri, sau rutine. Folosirea subrutinelor face munca de programare mai eficient pentru c programul devine mai scurt, mai clar i dac instruciunile care acum sunt ncluse n subrutine trebuiesc modificate, aceste modificri se vor face doar o singur dat, doar asupra instruciunilor din subrutin i nu de attea ori de cte ori existau ele n program ( dac lucram fr subrutine). Valorile ce nu sunt identice la apelrile repetate ale subrutinelor se numesc parametrii subrutinelor, "se comunic" subrutinelor nainte de apelare. Transmiterea acestor valori se poate face prin mai multe metode. Cel mai uor se transmit parametri dac folosim parametri globali, ( folosit i n cazul exerciiilor de mai sus - cele cu "csue"-). La parametri globali variabilele au aceeai denumire i n programul principal i n subrutin. [ Metoda e simpl dar periculoas, subrutina poate modifica accidental valorile unor variabile importante. Aceast form de subrutine se utilizeaz azi doar in secvenele de tratare a erorilor n diferitele versiuni de BASIC i n VISUAL BASIC. Programul apelant i secvena de cod din subrutin este afiat de program n aceeai fereastr ] Versiunile noi de BASIC i VISUAL BASIC utilizeaz subrutinele cu parametrilor formali unde aceeai variabil poate avea denumiri diferite n programul principal i n subrutin. Astfel un subprogram care rezolv ecuaia de gradul doi va fi declarat: SUB ECGRD2 (A,B,C,X1,X2,MESAJ$) (6.29)

(Subrutina are 6 parametri: 3 de intrare -cei 3 coeficieni-, i 3 de ieire - cele 2 pentru rdcinile rezultate i o variabil text pentru eventualele mesaje de eroare. ) De fiecare dat cnd vom apela aceast subrutin din programul principal, se vor preciza valorile parametrilor - sau indicnd valoarea lor, sau preciznd variabilele care memoreaz aceste valori- . Astfel putem apela subrutina (6.29), folosind instruciunile: CALL ECGRD2 (1,-3, 2, U1, U2, TEXT$) CALL ECGRD2 (M, N, P, R1, R2, TEXT$) sau (6.30.a) (8.30.b)

[Se vede c ceea ce n subprogram este notat cu A, n programul principal va fi notat cu M, ceea ce n subprogram e B, afar este N, .a.m.d. ] n primul caz - cea din 6.30.a - metode transmitere a valorilor pentru coeficieni este denumit referin prin valoare. n acest caz valoarea variabilelor din programul principal nu se modific. Cea de a 2-a metod pentru transmiterea acestor valori este denumit referin prin adres i subrutina va opera asupra variabilelor din programul principal transmitndu-se subrutinei adresele acestor variabile . Aceast transmisie de adrese se poate referi la variabile memorate n: memorie, registre, sau n stiv

[ n cazul subrutinelor cu parametri formali, interpretorul sau compilatorul va afia pe ecran programul apelant i subrutinele n ferestre diferite. ] Stiva (descris n cap 8.2 Structuri de date) are aplicaii multiple n cazul subrutinelor. n primul rnd adresa de revenire din subrutin se memoreaz intr-o stiv (STIVA-GOSUB). Stiva se poate folosi nu numai pentru memorarea adresei de revenire ci i pentru transmiterea parametrilor formali a subrutinelor. Acesta aduce o posibilitate nou, cea de "autoapelare" a subrutinelor. Dac parametri formali se transmit printr-o locaie de memorie fix, la prima apelare a subrutinei, aceste locaii de memorie se ocup de datele depuse la prima apelare, i dac am apela aceeai subrutin (nainte ca s se termine subrutina i s se goleasc zona de memorie alocat parametrilor) datele din aceast zon s-ar pierde scriind parametrii noi peste datele vechi. n matematic exist o serie de probleme - formulele de recuren - unde pentru a calcula valoarea unei funcii cu parametrul "N" este necesar calculul lui cu parametrul "N-1": FACT(N) = N * FACT(N-1) , FIBONACCI(N) = FIBONACCI(N-1) + FIBONACCI(N-2), etc. n aceste cazuri se cunoate valoarea funciei pentru 1, i plecnd de la aceast valoare, pe baza formulelor de recuren se calculeaz valorile urmtoare. Invers se poate spune c pentru a calcula valorile pentru "N" se apeleaz funcia pentru "N-1", ceea ce apeleaz funcia cu "N-2", s.a.m.d., pn ce se ajunge la ceva cunoscut, simplificnd treptat problema. n QUICK-BASIC, limbaj care tie s construasc subrutine ce memoreaz parametri formali n stive, se pot construi asemenea subrutine, astfel pentru calcul factorialului se poate folosi subrutina cu structura: SUB FACTORIAL (N) IF N=1 THEN FACTORIAL=1: RETURN ELSE FACTORIAL = N*FACTORIAL(N-1) ENDIF RETURN

' Instruciunea de recuren

Dac se apeleaz aceast subrutin cu parametrul 4, [ REZ = FACTORIAL(4) ] calculatorul depune numrul 4 n stiv i se apuc de lucru. Ajungnd la instruciunea de recuren, calculatorul apeleaz din nou subrutina factorial, dar acum cu parametrul 3, deci se pune 3 n vrful stivei, i se apuc de lucru. Iar ajunge la instruciunea de recuren, i depune numrul 2 n stiv, apelnd subrutina cu parametrul N = 1. n acest moment subrutina tie deja rezultatul, factorialul este egal cu 1, la prsirea subrutinei citindu-se numrul 1 din stiv. Stiva se va goli acum treptat, inmulind pe rnd valoarea funciei cu numerele memorate acolo. Subrutinele recursive- cele ce permit autoapelarea - permit ca o serie de probleme s se reduc la probleme mai simple, uor solubile. Informatica e plin de probleme ce se rezolv mult mai uor dac sunt definite recursiv. (Ex.: parcurgerea unei arbore, -vezi. Capitolul 8. despre structuri de date -, analiza lexical -vezi cap 2-, etc.)
10

Subrutinele au un rol important n VISUAL BASIC. n mod analog cu versiunile de BASIC ele se vor utiliza n momentul n care o secven de instruciuni este utilizat de mai multe ori, i ele se vor apela n mod analog cu cele vzute la BASIC. (Aceste subrutine se pot memora i n fiiere separate de tip *.bas, numite Module . ) Cel mai frecvent subrutinele sunt utilizate la apariia unor evenimente (cel mai frecvent la evenimentul CLICK) ele vor fi apelate automat dup ce evenimentul a avut loc. Aceste subrutine se memoreaz n modulele ce descriu interfaa grafic de utilizator (fiierele de tip *.frm ) Detalii vezi la prezentarea limbajului VISUAL BASIC (Cap 7).

11

You might also like