Sunteți pe pagina 1din 28

MEDII DE PROGRAMARE IN IA Cursul 7 Transmiterea datelor n Guru

Nicolae T and areanu

Facultatea de Matematic a si Informatic a, Universitatea din Craiova, str.A.I.Cuza 13, 1100-Craiova, Romania e-mail: rcai@central.ucv.ro

Obiective

Obiectivele acestei lect ii sunt urm atoarele: nsu sirea formatelor pentru transmiterea datelor n Guru nsu sirea modului de a proiecta si utiliza formele ca interfet e grace utilizator pentru transmiterea datelor n Guru

Modele utilizate n transmiterea datelor

Pentru transmiterea datelor de intrare sau de ie sire GURU utilizeaz a un model pe care l dene ste utilizatorul. Acesta descrie forma sub care vor ar ata datele la ie sire sau forma datelor de intrare. Un model descrie pozit ie cu pozit ie tipul de informat ie pe care o trecem pe pozit ia respectiv a. Spre exemplu, prima pozit ie poate o cifr a, a doua un caracter alfabetic etc. Din punct de vedere sintactic un model este un sir Model format din anumite caractere, iar sirul este inclus ntre semnele duble de apostrof. Fiecare caracter din sir este

3 tratat e ca un indicator de pozit ie (placeholder), e ca o constant a literal a. Putem folosi urm atoarele caractere placeholder: a este indicator pentru caracter alfabetic; GURU nu accept a pe aceste pozit ii un caracter non-alfabetic. c este indicator pentru caracter alfanumeric; GURU nu accept a pe aceste pozit ii caractere non-alfanumerice. d este indicator pentru cifr a sau semn(+/-); GURU refuz a orice caracter diferit de 0123456789+- sau valoarea lui E.PNT pe aceste pozit ii. Subliniem c a valoarea default a variabilei de mediu E.PNT este punct. l este indicator pentru caracter ASCII; dac a este caracter alfabetic mare atunci el este convertit la caracter mic. n este indicator care accept a numai cifre (0123456789). r este indicator pentru caracter ASCII. u este indicator pentru caracter ASCII. Caracterul alfabetic mic este convertit n caracter mare.

4 z este indicator asem an ator cu d, cu precizarea: c ampurile goale sunt umplute cu zerouri. prezentarea de mai jos caracterul Exemplul 2.1 In reprezint a o pozit ie blanc. Guru > x:= 12; ?x using "dddd" __12 Guru > x:="12aa" Guru > ?x using "dduu" 12AA Guru > ?x using "dduuzz" 12AA00 Guru > x:= 12.36 Guru > ?x using "ddd.ddd" _12.360 Guru > ?x using "ddd.dddzz" _12.36000 Guru > ?x using "zzddd.ddd" 00_12.360 Guru > x:=1234.56789 Guru > ?x using "dd.dd" **.** Guru > ?x using "dddd.dd" 1234.57

5 Guru > ?x using "zzddd.ddd" 01234.568 O observat ie important a este aceea c a toate caracterele placeholder trebuie s a e caractere mici ale alfabetului; n caz contrar ele sunt tratate ca valori literale. Caracterul % este utilizat pentru a indica un factor de repetit ie; astfel, formatul %3d este echivalent cu ddd. Dac a unul din caracterele placeholder trebuie s a apar a drept literal atunci el trebuie precedat de un backslash. Caracterul " trebuie precedat de un backslash; utilizarea caracterului % trebuie precedat de un alt semn %; caracterul backslash trebuie precedat de un caracter backslash. Dac a un backslash din format nu este urmat de un placeholder, "" sau \ atunci acesta este ignorat. Dac a nu se utilizeaz a nici un format pentru a introduce o dat a, atunci default se consider a urm atoarele valori: - variabile string : o secvent a de valori de lungime E.LSTR - variabile ntregi sau numerice: ddddddddd.ddddd - variabile logice: aaaaa Num arul de zecimale aate dup a punctul zecimal este controlat de variabila de mediu E.DECI. Num arul
caracter placeholder

6 total de cifre este controlat de variabila E.LNUM, care poate avea valoarea maxim a 14 (punctul zecimal nu este num arat pe aceste pozit ii). Exemplul 2.2 Prezent am mai jos c ateva exemple de a sare de date: Guru > x:= 34 Guru > output x using "\z\zdd" zz34 Guru>output x using "\a\ce\st\a e\ste \u\n \e\xemp\l\u: dd" acesta este un exemplu: 34 Guru > x:= 55 Guru > output x using "\\a:dd" \_:55 Guru > output x using "\\\a:dd" \a:55 Guru > output x using "\\\\a:dd" \\_:55 Guru > output x using "\\\\\a:dd" \\a:55

Forme, denirea si utilizarea lor

In acest paragraf vom prezenta conceptul de form a, care

7 ne ofer a posibilitatea de a construi interfet e grace pentru vizualizarea si transmiterea datelor. O form a reprezint a o imagine grac a care prin denirea form a unor caracteristici permite transmiterea de date ntre utilizator si GURU. O form a are nf a ti sarea unui dreptunghi care poate avea p n a la 255 linii si 255 coloane. Cele mai multe forme se restr ang la posibilit a tile grace ale ecranului, adic a cel mult 24 linii si 80 de coloane. Orice form a este delimitat a de marginile dreptunghiului, care formeaz a borderul formei. Denirea borderului pre- Borderul formei supune denirea colt ului nord-vest si a colt ului sud-est. Aceasta se face prin precizarea coordonatelor punctului, prezentate sub forma (numar linie, numar coloana) Borderul presupune de asemenea denirea cernelei background si a celei foreground. Exist a 8 posibilit a ti de culoare background si 8 pentru foreground. In interiorul unei forme putem deni diferite blocuri colorate, care s a cont in a diferite informat ii. In afara acestor blocuri colorate si a borderului, o form a cont ine unul sau mai multe elemente. Un element din form a este o locat ie din interiorul formei n care scriem o informat ie

8 pentru a atribuit a unei variabile (input) sau o locat ie care precizeaz a unde se va scrie o informat ie (output). Un element poate de unul din urm atoarele tipuri: literal (un string de caractere); non-literal (o variabil a sau o expresie de evaluat). Pentru elemente se pot deni coduri de transmitere, precum si efecte speciale (blinking etc). Lucrul cu o form a presupune: construirea sau denirea formei; plasarea ei n memorie; a sarea si utilizarea formei. Comanda cu numele FORM dene ste o asemenea form a. Denirea unei forme poate local a sau global a. Declararea local a se face inser and cuv antul LOCAL n fat a cuv antului FORM din comanda respectiv a. In acest caz forma este local a procedurii n care este denit a, iar c and procedura si nchide lucrul forma respectiv a este scoas a (release) automat din memorie. Exist a dou a moduri de a deni o form a. Ambele sunt n cele din urm a echivalente, dar sunt modalit a ti diferite de realizare a unei forme.

9 Prima metod a se refer a la denirea prin editorul TEXT a unei for- me, iar forma respectiv a poate inclus a n orice sesiune de lucru prin comanda: P ERF ORM nume f isier unde nume f isier este numele sierului care cont ine denirea formei respective. A doua metod a se refer a la comanda PAINT, care permite denirea interactiv a a unei forme. Plasarea unei forme n memorie nseamn a nc arcarea ei n memorie. Acest proces se realizeaz a n mai multe moduri: C and forma este denit a ntr-un program IPF, nc arcarea se face o dat a cu execut ia comenzii perform ata sat a programului. C and se lucreaz a cu PAINT, plasarea are loc atunci c and termin am de construit forma si ncheiem sesiunea. Dac a lucr am n GURU interactiv (adic a guru -g) plasarea are loc atunci c and se execut a ultima instruct iune (ENDFORM) din denirea formei.

10 O form a r am ane n memorie p an a c and oprim calculatorul sau p an a c and este extras a din memorie cu comanda RELEASE. At ata timp c at forma este rezident a n memorie, ea poate a sat a cu comanda PUTFORM. Sintaxa comenzii FORM este urm atoarea: FORM formname

AT coord GET variabila tip AT coord GET variabila tip USING "coduri" \ WITH "efecte" AT coord PUT expresie AT coord PUT expresie USING "coduri" \ WITH "efecte" AT nwcoord TO secoord PUT BORDER "culori" \ WITH "efecte" AT nwcoord TO secoord PUT "culori" ENDFORM unde: formname este numele formei; dou a forme diferite au nume diferite. AT coord specic a coordonatele de pe ecran de unde ncepe transmisia de date (input sau output). La ie sirea de date, ncep and cu aceast a pozit ie se

11 a seaz a rezultatele. La intrare, utilizatorul transmite date ncep and cu aceast a pozit ie. Se poate utiliza simbolul @ n loc de AT. GET variabila specic a numele variabilei de lucru sau eld care prime ste data de intrare. tip specic a tipul variabilei de lucru: STR, NUM, INT, sau LOGIC. Dac a nu se precizeaz a tipul atunci el se consider a STR. Tipul se mai precizeaz a atunci c and dorim s a schimb am tipul anterior al acestei variabile. Dac a tipul a mai fost declarat sau variabila respectiv a a fost utilizat a n program, atunci nu este necesar s a declar am tipul variabilei. PUT expresie precizeaz a valoarea care va a sat a. Expresia poate s a cont in a mai multe variabile. AT nwcoord indic a coordonatele colt ului nord-vest ale dreptunghiului care cuprinde forma. TO secoord indic a coordonatele sud-est al dreptunghiului. PUT BORDER indic a faptul c a se dore ste desenarea marginei formei.

12 "culori" precizeaz a culoare background si foreground pentru border sub forma "FxBy" unde x si y pot C, O, U, G, A, R, M, W Ele codic a urm atoarele culori: C= cyan; O= maron; U= blue; G= verde; A= negru; R= ro su; M= magenta; W= alb. USING "coduri" precizeaz a codurile de transmitere a datelor. WITH "efecte" indic a anumite efecte speciale. Se pot utiliza urm atoarele caractere: D, B, R, L, S respectiv pentru doubleline, blinking, reversevideo, low-intensity, sound a bell. Efectul doubleline se refer a numai la border. ENDFORM precizeaz a c a s-a ncheiat procesul de denire a formei. Documentat ia GURU recomand a utilizarea comenzii FORM numai n siere IPF deoarece nu toate versiunile de GURU permit utilizarea comenzii FORM n coduri compilate. Exist a dou a comenzi legate de comanda FORM: comanda PUTFORM;

13 comanda GETFORM. Comanda PUTFORM are forma sintactic a urm atoare: PUTFORM formname PUTFORM formname AT coord unde: formname este numele formei pe care vrem s a o a sa m; AT coord specic a linia si coloana unde vrem s a apar a forma. Prin lips a se consider a pozit ia (1,1). Ca efect, pentru ecare literal din PUT (adic a expresie care este o constant a) specicat n denit ia formei, se a seaz a la locul precizat valoarea acestuia. Expresiile din PUT care cont in variabile sunt evaluate numai dac a utiliz am comanda TALLY. Ordinea caracteristicilor din form a este aceea din comanda FORM. Comanda GETFORM are forma: GETFORM formname GETFORM formname AT coord unde: formname este numele formei prin care vrem s a primim datele de intrare;

14 AT coord precizeaz a coordonatele punctului nordvest pentru form a. Prin lips a se consider a pozit ia (1,1). Inainte de a utiliza aceast a comand a, trebuie mai nt ai s a a s am forma cu comanda PUTFORM, pentru a putea vedea textele si prompterul unde se a steapt a datele. C and se execut a comanda GETFORM, cursorul se deplaseaz a la pozit ia indicat a de primul GET din denit ia formei. Utilizatorul poate introduce datele, conform codului de transmitere. Act ionarea tastei ENTER determin a trecerea la urm atoarea comand a GET din FORM. Exemplul 3.1 Introducem cu editorul TEXT sierul a11.ipf de mai jos: CLEAR; LOCAL FORM unu AT 2,2 TO 8,40 PUT BORDER "FRBW"; AT 3,3 TO 7,39 PUT "FOBG"; AT 3,5 PUT "EXEMPLU DE FORMA"; AT 6,5 PUT "NUME"; AT 6,12 PUT "PRENUME"; AT 7,5 GET nume USING "%5a"; AT 7,12 GET prenume USING "%6a"; ENDFORM

15 putform unu;getform unu; Execut ia acestui program determin a aparit ia pe ecran a formei reprezentat a n gura 1.

Figura 1: Execut ia programului a11.ipf

Exemplul 3.2 Consider am programul a12.ipf de mai jos: LOCAL x,y,z; LOCAL FORM doi AT 5,10 TO 13,55 PUT BORDER "FGBU"; AT 6,11 TO 12,54 PUT "FOBR"; AT 6,13 PUT "DATI PE x:"; AT 6,24 GET x INT USING "dd"; AT 8,13 PUT "DATI PE y:"; AT 8,24 GET y INT USING "dd"; AT 10,13 PUT "DATI PE z:"; AT 10,24 GET z INT USING "dd"; AT 12,13 PUT "SUMA ESTE:";

16 AT 12,24 PUT x+y+z; ENDFORM putform doi;getform doi; Rezultatul execut iei se poate vedea n gura 2. Se observ a c a nu se a seaz a valoarea sumei x+y+z.

Figura 2: Execut ia programului a12.ipf S a modic am programul a12.ipf, devenind urm atorul: LOCAL x,y,z; LOCAL t; t:=7; t:=t+1; @ 2,2 output "val. lui t este:",t; LOCAL FORM doi AT 5,10 TO 15,55 PUT BORDER "FGBU"; AT 6,11 TO 14,54 PUT "FOBR";

17 AT 6,13 PUT "DATI PE x:"; AT 6,24 GET x INT USING "dd"; AT 8,13 PUT "DATI PE y:"; AT 8,24 GET y INT USING "dd"; AT 10,13 PUT "DATI PE z:"; AT 10,24 GET z INT USING "dd"; AT 12,13 PUT "SUMA ESTE:"; AT 12,24 PUT x+y+z; AT 14,13 PUT "Valoarea lui t :"; AT 14,30 PUT t USING "dd"; ENDFORM putform doi; getform doi; Execut and programul modicat observ am n gura 3 c a este a sat a valoarea lui t nainte de a se intra n forma doi, dar forma nu a seaz a aceast a valoare, ca si valoarea sumei. Acest lucru se explic a prin faptul c a toate cantit a tile cerute a a sate nu sunt literali. Pentru a a sa valorile variabile (inclusiv expresii), este necesar s a utiliz am comanda TALLY a c arei form a sintactic a este: TALLY formname TALLY formname AT coord

18

Figura 3: Execut ia programului a12.ipf modicat Cu aceast a comand a se a seaz a cantit a tile care nu sunt constante n comanda PUT a unei forme. Dac a exist a comenzi PUT care utilizeaz a valori intrate prin GET atunci comanda TALLY trebuie a sezat a dup a GETFORM; altfel ea trebuie a sezat a dup a PUTFORM. In exemplul care urmeaz a avem a doua variant a. Numele sierului executat este a13.ipf. Exemplul 3.3 LOCAL t; t:=7; t:=t+1; @ 2,2 output "val. lui t este:",t; LOCAL FORM doi LOCAL x,y,z;

19 AT 5,10 TO 15,55 PUT BORDER "FGBU"; AT 6,11 TO 14,54 PUT "FOBR"; AT 6,13 PUT "DATI PE x:"; AT 6,24 GET x INT USING "dd"; AT 8,13 PUT "DATI PE y:"; AT 8,24 GET y INT USING "dd"; AT 10,13 PUT "DATI PE z:"; AT 10,24 GET z INT USING "dd"; AT 14,13 PUT "Valoarea lui t :"; AT 14,30 PUT t USING "dd"; ENDFORM putform doi;tally doi;getform doi; Rezultatul execut iei se poate observa n gura 4.

Figura 4: Execut ia programului a13.ipf

20 In exemplul urm ator este necesar s a utiliz am prima variant a. Not am cu a14.ipf numele sierului care cont ine aceast a variant a. Exemplul 3.4 LOCAL t; t:=7; t:=t+1; @ 2,2 output "val. lui t este:",t; LOCAL FORM doi AT 5,10 TO 15,55 PUT BORDER "FGBU"; AT 6,11 TO 14,54 PUT "FOBR"; AT 6,13 PUT "DATI PE x:"; AT 6,24 GET x INT USING "dd"; AT 8,13 PUT "DATI PE y:"; AT 8,24 GET y INT USING "dd"; AT 10,13 PUT "DATI PE z:"; AT 10,24 GET z INT USING "dd"; AT 12,13 PUT "SUMA ESTE:"; AT 12,24 PUT x+y+z; AT 14,13 PUT "Valoarea lui t :"; AT 14,30 PUT t USING "dd"; ENDFORM putform doi; LOCAL x,y,z;

21 getform doi; tally doi; Rezultatul execut iei se poate vedea n gura 5.

Figura 5: Execut ia programului a14.ipf

Vom prezenta n continuare alte comenzi legate de forme: Comanda CLEAR are forma: CLEAR CLEAR formname CLEAR formname AT coord Toate expresiile formei care au fost a sate cu PUTFORM sunt sterse. Toate datele care au fost introduse

22 cu GETFORM sunt de asemenea sterse. Dac a nu trecem numele formei si nici AT coord atunci se sterge ntreg ecranul. Dac a nu se trece AT coord atunci se consider a c a forma ncepe cu pozit ia (1,1). Comanda RESET are forma sintactic a: RESET formname RESET formname AT coord Aceast a comand a se utilizeaz a pentru a sterge valorile elementelor non-literal care apar n imaginea unei forme. Valorile non-literal din PUT sunt sterse, iar valorile non-literal primite prin GET sunt sterse, astfel nc at la prompterul care a steapt a primirea de valori nu se mai a a a sate vechile valori primite. Variabila de mediu E.OPRN are valoarea default FALSE. Dac a se seteaz a valoarea acesteia cu TRUE atunci se redirecteaz a ie sirea c atre imprimant a. In cazul c and dorim s a scoatem la imprimant a imagini de forme, caracteristicile de culoare sau blinking nu au nici o inuent a. A doua metod a de a deni o form a este metoda interactiv a utiliz and PAINT. Aceast a component a GURU permite denirea unei forme av and forma pe ecran. Fa-

23 cilit a tile oferite de PAINT le descriem mai jos, p astr and terminologia din modul conversat ional PAINT: Color Blocks dene ste blocuri noi, revizuie ste pe cele existente; atribuie culori pentru background si foreground unui bloc; mut a un bloc pe alte pozit ii; modic a un bloc existent; sterge un bloc. Form Elements dene ste noi elemente si revizuie ste pe cele existente; indic a faptul c a un element este literal sau non-literal; specic a variabila sau expresia pentru un element non-literal; specic a codul ata sat pentru transmiterea elementului; specic a efecte speciale pentru un element; copiaz a un element pe o alt a pozit ie;

24 mut a un element pe o alt a pozit ie; sterge un element. Form Borders dene ste si revizuie ste borderul unui bloc; asigneaz a culori background si foreground pentru border; mut a un border pe o alt a pozit ie; schimb a dimensiunea borderului; sterge un border; specic a efecte speciale pentru border. Entire Form a seaz a forma; salveaz a forma ntr-un sier context (ICF); arat a denirea formei (show); mut a o form a pe o alt a pozit ie a ecranului; extrage forma din memorie (release). Lansarea componentei PAINT se face cu comanda: PAINT formname

25 sau cu comanda: PAINT formname TO "filename" unde filename este numele sierului care va cont ine denit ia formei. Prima comand a salveaz a denit ia formei n spat iul de lucru GURU. A doua salveaz a denit ia ntr-un anumit sier de pe disk. Dac a forma este rezident a n memorie, atunci ea poate v azut a cu comanda: SHOW formname

Teme

TEMA nr. 4.1 Executat i programul a11.ipf. S terget i din program comanda getform. Executat i din nou programul. Revenit i n program, sterget i putform si introducet i getform. Executat i programul modicat si observat i ce se nt ampl a. TEMA nr. 4.2 Modicat i n programul a14.ipf comanda tally, pun and tally doi AT 10,10

26 Execut and noul program si observat i modic arile pe ecran. TEMA nr. 4.3 Scriet i un program de documentare bazat pe meniuri, utilizat la o bibliotec a. A sarea rezultatului s a se fac a cu ajutorul unei forme n care s a apar a numele autorului, titlul c art ii, anul aparit iei, editura si un mic rezumat. TEMA nr. 4.4 Societatea comercial a PRESA.SRL efectueaz a abonamente pentru ziare si reviste pentru persoane zice. Ea face abonamente pentru urm atoarele publicat ii: Evenimentul Zilei, Adev arul si Nat ional. Valorile/lun a sunt urm atoarele: Evenimentul Zilei: N1 lei Adev arul: N2 lei Nat ional: N3 lei Abonamentul pentru un periodic pe n luni (n cel mult 12) se calculeaz a astfel: - Dac a n=3,4,5 atunci valoarea lunar a pentru primele 3 luni se ia din tabel, iar pentru urm atoarele luni se face o reducere de 15 - Dac a n=6,7,8 luni atunci primele 3 luni se calculeaz a dup a tabel, urm atoarele 2 luni au o reducere de 15

27 - Dac a n 9 atunci regula de calcul este urm atoarea: primele 3 luni se iau din tabel; urm atoarele 4 luni au reducere de 20 Scriet i o funct ie care s a calculeze valoarea abonamentului pentru o persoan a dat a. Utiliz and o form a convenabil denit a, programul s a elibereze factura de plat a. TEMA nr. 4.5

Creat i cu PAINT o form a de tipul urm ator: NUME PRENUME Num ar de zile lucrate Tarif/zi SALARIU REALIZAT Salariul realizat se obt ine nmult ind num arul de zile cu tariful/zi. Scriet i un program care s a utilizeze urm atoarele: - s a utilizeze forma de mai sus ca interfat a de intrare pentru a introduce date ntr-un tabel cu numele salarii.

28 - utilizat i aceea si form a pentru a aa SALARIUL REALIZAT de persoanele cu numele N1,...,Nk, care se vor specica n momentul execut iei.