Pascal

Tipuri de date in Pascal
In Pascal, tipurile de date sunt de 2 feluri: simple si structurate. Tipuri de date simple sunt impartite in tipuri ordinale si reale. Tipuri ordinale: Tipuri intregi:  shortint poate lua valori intre (-128, 127) sau ($80, $7F) in hexazecimal stocat intern pe: 1 byte  byte poate lua valori intre (0, 255) sau ($00, $FF) in hexazecimal stocat intern pe: 1 byte  integer poate lua valori intre (-32768, 32767) sau ($8000, $7FFF) in hexazecimal stocat intern pe: 2 bytes  word poate lua valori intre (0, 65535) sau ($0000, $FFFF) in hexazecimal stocat intern pe: 2 bytes  longint poate lua valori intre (-2147483648, 2147483647) sau ($80000000, $7FFFFFFF) in hexazecimal stocat intern pe: 4 bytes  Tipul logic: boolean poate lua ca valori doar TRUE sau FALSE stocat intern pe: 1 byte  Tipul caracter: char poate lua ca valoare orice caracter din ASCII (American Standard Code for Information Interchange) stocat intern pe: 1 byte o Tipul enumerare o Tipul subdomeniu  Tipuri reale o single poate lua valori intre (1.5E-45, 3.4E38) stocat intern pe: 4 bytes o real poate lua valori intre (2.9E-39, 1.7E38) stocat intern pe: 6 bytes o double poate lua valori intre (5.0E-324, 1.7E308) stocat intern pe: 8 bytes o extended poate lua valori intre (3.4E-4932, 1.1E4932) stocat intern pe: 10 bytes o comp poate lua valori intre (-2^63+1, 2^63-1) stocat intern pe: 8 bytes
 o

enumerativ: (FALSE. longint. toate tipurile intregi de date sunt compatibile intre ele. dar rezultatul este real.se poate aplica asupra operanzilor intregi. Operatorii logici care i se pot aplica sunt: o NOT operatia logica "nu" o AND operatia logica "si" . byte.(semnul minus) pentru scadere o * (semnul asterisc) pentru inmultire o DIV impartire intreaga . unde sirul se termina cu caracterul #0 .se obtine restul o / (semnul slash) impartire reala . Tipul Boolean Tipul boolean este ordinal. TRUE). word .se obtine catul o MOD impartire intreaga . procedure extensie a Pascalului standard. poate lua ca valori un sir de caractere din ASCII (maxim 255 de caractere) stocat intern pe: maxim 256 de bytes (primul e pentru a stoca lungimea sirului (spre deosebire de C / C++. tipurile ordinale de date In operatii. Tipurile structurate: o tipul tablou: array folosit pentru a memora un sir de valori o tipul sir de caractere: string este o secventa dinamica (ca lungime) de caractere. sunt shortint.null terminated strings) o tipul inregistrare: record folosit pentru a memora valori de mai multe tipuri in acelasi loc o tipul obiect: object folosit in programarea pe obiecte (OOP) o tipul multime: set folosit pentru a desemna o multime (ca in matematica) de elemente de acelasi tip o tipul fisier: text. Operatorii aritmetici care se pot folosi sunt: o + (semnul plus) pentru adunare o . folosite pentru a putea folosi subprogramele ca variabile Tipuri ordinale Cum am aratat mai sus. file folosit la prelucrarea fisierelor o tipul referinta: pointer folosit la prelucrarea dinamica a memoriei o tipurile procedurale: function. integer.

'A' Operatorii si functiile care se pot aplica asupra acestui tip de data sunt: + concateneaza 2 sau mai multe caractere. In operatii intra ca o data reala. extended si comp. real. dar nu amandoi. Operatorii aritmetici (si functii) care se pot aplica tipurilor reale sunt: o + pentru adunare o pentru scadere o * pentru inmultire o / impartire reala (cu virgula) o Trunc functie care returneaza partea intreaga a numarului o Round functie care rotunjeste un numar. Returneaza caracterul cu codul respectiv din codul ASCII. dar rezultatul este de tip Char.este adevarat daca un operand este adevarat. Alternativ. dar nu amandoua". se poate folosi #. ambele avand valoarea A (caracter) o Tipuri reale Tipurile Datele reale sunt de date memorate sunt single. Ex. Operatii specifice pe tipuri de date in Pascal . Char variabile de sau acest 'a' tip se va (sunt scrie ordinal. intre ghilimele. A XOR B inseamna "A sau B. Chr(65) este egal cu #65. Tipul comp desemneaza o data reala particulara. dar rezultatul este de tip string o CHR este o functie care se aplica datelor de tip intreg. Daca partea zecimala este de 0. avand partea zecimala egala cu zero.o o OR operatia logica "sau" XOR operatia logica "sau exclusiv" . avand numai valori intregi. double. intern in virgula mobila.5 atunci numarul este rotunjit in sus Tipurile structurate vor fi explicate intr-un alt tutorial. necesitand mai multe informatii. distincte !) Tipul Tipul char este Valoarea unei Ex.

Functie chr ord pred succ Functii pentru tipuri ordinale Descriere Tip argument caracterul specificat din ASCII intreg valoare ordinala intreg sau caracter predecesor intreg sau caracter succesor intreg sau caracter Tip rezultat caracter intreg la fel ca argumentul la fel ca argumentul Pascal ofera o multitudine de functii matematice. begin 6. 2. {ar trebui ca valoarea sa fie egala cu 0} 9. 3. urmat de argumentul (parametrul) functiei. Bineinteles. cosinus: Real. din care voi prezenta cateva mai jos. {va afisa litera a (mica)} 7. pus intre paranteze rotunde ( si ). WriteLn(Chr(97)). 5. putere := Sqr(5).1415926535897932). Functie abs arctan cos exp ln round sin sqr sqrt trunc Atentie: Functii matematice Descriere Tip argument valoare absoluta real sau intreg arctangenta in radiani real sau intreg cosinus de X radiani real sau intreg e la putere real sau intreg logaritm natural real sau intreg rotunjire real sinus de X radiani real sau intreg ridicare la patrat real sau intreg radical real sau intreg rotunjire in jos real sau intreg Toate functiile trigonometrice din Pascal Tip rezultat la fel ca argumentul real real real real integer real la fel ca argumentul real integer lucreaza cu radiani. WriteLn(Ord('a')).0 este foarte bine pus la punct. aceasta lista de functii nu este lista completa de functii si proceduri ale compilatorului Pascal. A se folosi cu incredere Exemplu de folosire a catorva functii: Line number On/Off | Expand/Contract | Select all 1. 4. index: Byte. putere: Longint. {5 la patrat = 125} . cosinus := cos(3. {si afisam 0} 10. var caracter: Char. iar sistemul de ajutor al Borland Pascal 7. {va afisa 97} 8. WriteLn(cosinus). Sistemul de ajutor (Help) al compilatorului nu trebuie neglijat.Pentru tipurile ordinale de date. Compilatoarele moderne de Pascal includ mii de functii pentru toate necesitatile. unde exista un predecesor si un succesor distinct pentru fiecare valoare. Toate functiile expuse aici sunt folosite scriind numele functiei. Pascal ofera functiile prezentate in tabelul de mai jos.

WriteLn('Text de afisat' : 40).11. sa zicem :3. deci nu se pune niciun fel de spatiu). Afisarea se va face normal. Despre formatarea afisarii am vorbit. WriteLn(putere).23" (sunt 5 caractere.234111242:5:2). De remarcat secventa : 40. Operatii cu tipul logic (Boolean) Pentru tipul logic de date exista cativa operatori. Daca secventa :5 era. Prima metoda de formatare este de folos cand dorim sa aliniem la dreapta textul carel vrem afisat. A doua metoda de formatare a afisarii presupune dublarea secventei care specifica numarul de pozitii pe care se face afisarea. prezentati mai jos. WriteLn(40. Se foloseste afisand in felul urmator: Line number On/Off | Expand/Contract | Select all 1. Aceasta secventa specifica pe cate pozitii va fi afisat textul. {si afisam 125} Formatarea afisarii Formatarea afisarii presupune afisarea datelor (cu functiile Write sau WriteLn) care le dorim in alta forma. Operatori logici Operator not and or xor Descriere negatie conjunctie (si logic) disjunctie (ori logic) disjunctie exclusiva . de exemplu. afisand "40. Contine mai multe cazuri si metode de folosire.12) si apoi scriind textul. Afisarea normala este o afisare ca in exemplul de mai jos. cand vrem sa cream un meniu. Sa trecem la formatari. afisarea va fi facuta punand 8 spatii (20 . secventa :2 specifica numarul de zecimale afisat. 2. Daca am vrea sa afisam "bitcell. 12.info" (care contine 12 caractere) pe 20 de pozitii. si in tutorialul anterior de Pascal. Acest tip de formatare se foloseste doar pentru afisarea numerelor reale. pe scurt. 1.'). iar :5 specifica numarul total de pozitii pe care va fi afisat numarul. ea era ignorata. Mergand pe exemplul de mai sus. Daca numarul de pozitii specificat este prea mic. WriteLn('Acesta este un test de afisare. Acest tip de afisare poate fi de folos. incluzand punctul zecimal. ca in exemplul de mai jos: Line number On/Off | Expand/Contract | Select all 1. Line number On/Off | Expand/Contract | Select all 1. el este ignorat si afisarea se executa ca o afisare normala. end. aliniind textul la dreapta.

var numar: integer.5678 este diferit de 1. sunt mai jos. Operatori relationali Operator < > = <= >= <> Descriere mai mic mai mare egal mai mic sau egal mai mare sau egal diferit Pe cat posibil. Nivel 0 1 2 3 Prioritatea operatorilor Operatori not * / div mod and + . punand paranteze. OR si XOR sunt date mai jos (negatia nu cred sa aiba nevoie de tabel). De tinut minte este faptul ca operatorii folositi in Pascal au.Tabelurile de adevar pentru operatorii AND. begin 4. va trebui sa-i explicati compilatorului acest lucru.. carac := 'd'. Mici erori de rotunjire pot genera erori destul de mari (1. AND True False True True False False False False Tabele de adevar True False OR True True True False True False XOR True False True False True False True False Operatorii relationali care pot fi folositi pentru a genera rezultate logice (de tip Boolean True sau False). .or < > <= >= = <> Explicatie prioritate maxima prioritate minima Daca vreti sa fiti siguri ca ordinea operatiilor este cea dorita de dvs. Exemplu de folosire a operatorilor relationali si logici: Line number On/Off | Expand/Contract | Select all 1. evitati folosirea operatorul de egalitate ( = ) cand vreti sa comparati numere reale. care permite compilatorului sa "inteleaga" intern ordinea operatiilor. este indicat ca fiecare sub-expresie sa fie pusa in interiorul unui set de paranteze.5679). ca in matematica. datorita prioritatilor expuse mai sus. fiecare. 2. o anumita prioritate. Atentie: in cazul folosirii operatorilor relationali intr-o expresie logica. carac: char. 3.

va avea. veti gasi o solutie alternativa pentru stocarea unui sir de caractere. 5. cand veti ajunge la tipul array. Tipul string Sa presupunem ca aveti nevoie sa stocati un nume. 11. write('Numele corect este '.. Totusi. pe moment. array este tot ce aveti nevoie. if (carac = 'D') then 7. var nume: string In aceasta variabila de tip string vom putea salva numele dat de la tastatura. Sa luam. folosind indexul acelui caracter (indecsii incep de la 1). 2. Caracter = a SAU numar = 5 Tipuri de date structurate O parte din tipurile de date structurate sunt tipuri care pot fi definite de utilizator. acest tip de data este destul de complex. in caractere. Programul de mai jos va exemplifica acest lucru. 12. 6. Daca aveti nevoie de un sir de 20 de numere intregi . numar = 5'). deci nu ar fi practic sa-l salvati intr-un numar de variabila de tip char. specifica foarte clar marimea ocupata in memorie si tipul de date care-l va contine. if (carac = 'a') or (numar = 5) then 13. scris gresit !} 4.. ca exemplu. {Bitcell. begin 3. Mai tarziu. O variabila de tip string se declara in felul urmator: Line number On/Off | Expand/Contract | Select all 1. var nume: string. numar := 5. nume). 8. Fiecare caracter din string poate fi accesat / modificat individual.5. Sper ca ati inteles faptul ca acest cod va afisa doar Line number On/Off | Expand/Contract | Select all 1. Writeln('Caracterul este D'). Limitarea acestui tip de data este ca nu poate stoca mai mult de 255 de caractere. dat de la tastatura. WriteLn('Caracter = a. end. tipul array. dar. motiv pentru care exista tutorialul despre vectori si matrici. dar 255 de caractere este mult prea mult pentru un simplu nume. Acest tip de data permite stocarea mai multor date de acelasi tip (ordinal sau structurat). nume := 'BitCall'. Nu stiti ce lungime. 14. Tipul string poate fi vazut ca un sir de maxim 255 de caractere. WriteLn('Caracter = a SAU numar = 5'). Tipurile ordinale. fara sa ne facem griji. nume[5] := 'e'. tipul string este tot ce aveti nevoie. 9. if (carac = 'a') and (numar = 5) then 10. . Line number On/Off | Expand/Contract | Select all 1. sau de 200. cum ar fi integer.

Format apel: Line number On/Off | Expand/Contract | Select all 1. Delete Din stringul S vor fi sterse Count caractere. se va returna tot stringul de la pozitia Index pana la final. Format apel: Line number On/Off | Expand/Contract | Select all 1.in alte variante de Pascal sau in Delphi. Concateneaza mai multe stringuri intr-unul singur. 7. Delete(var S: String.. O variabila de tip string este stocata intern pe 256 de bytes. s2. Avand in vedere ca numarul maxim de valori care le poate lua un byte este de 256 (intre 0 si 255). ..6.care specifica lungimea stringului) nu este luat in calcul. Format apel: Line number On/Off | Expand/Contract | Select all 1. unde caracterul 0 din ASCII este terminator de sir). Motivul pentru acest lucru este faptul ca pe pozitia 0 din acest sir este stocata lungimea sirului (spre deosebire de C / C++. Primul caracter (cel de pe pozitia 0 . Length(S: String) Returneaza un string care contine caracterele specificate din string-ul introdus ca parametru. este trunchiat la primele 255 de caractere. Daca Index specifica un numar mai mare decat lungimea totala a stringului. Daca numarul specificat de Count trece de numarul de caractere totale. Length Copy Stringul rezultat va contine Count caractere. procedura nu avea avea nici un efect. incepand cu pozitia Index. Returneaza stringul rezultat. Index: Integer. Concat Alternativ. ar trebui sa fie clar de ce tipul string poate stoca maxim 255 de caractere (aceasta limitare se refera la Borland Pascal . ca la operatia de adunare. din stringul S. incepand de la Index. . a variabilei de tip string. stringurile pot fi concatenate folosind operatorul +. Daca Index este mai mare decat lungimea totala stringului. in caractere. end. incepand de la Index. Concat(s1 [. Daca numarul specificat de Count trece de numarul de caractere total. readln. Format apel: Line number On/Off | Expand/Contract | Select all 1. incepand de la pozitia Index inclusiv.. aceasta limita este ridicata la peste 2 miliarde de caractere). Count: Integer). sn]: String). Nume Functii si proceduri utilizate pentru tipul string Descriere Aceasta functie returneaza lungimea. atunci stringul rezultat va fi vid. Count: Integer). Daca stringul rezultat are mai mult de 255 de caractere. Procedura care sterge un subsir de caractere dintr-un string. Copy(S: string. Index: Integer.

cum ar fi tipul array. tipul subdomeniu. Tipuri de date definite de utilizator Impreuna cu notiunea de tip. Ce se intampla daca vreau sa pot lua valori doar intre 1 si 10 ? Sau doar intre literele B si T ? Declararea acestui tip de data se face in felul urmator: 1. tipul enumerat. Format apel: Line number On/Off | Expand/Contract | Select all 1. Restrictii:   limita inferioara trebuie sa fie mai mica decat limita superioara. va fi trunchiat la 255 de caractere. Cauta pozitia unui subsir intr-un string. S: String): Byte. type nume_tip = limita_inf . Format apel: Pos Line number On/Off | Expand/Contract | Select all 1. aceasta functie va returna 0. Programatorii isi pot defini propriile tipuri de date folosind constructorii de tipuri. limita_sup. tipul record. tipul set si tipul pointer. Procedurile si functiile expuse mai sus ar trebui sa va poata da o idee despre lucrul cu siruri de caractere in Pascal. Tipul char permite variabilelor sa ia ca valori orice caracter din ASCII.Functii si proceduri utilizate pentru tipul string stringul va fi trunchiat incepand cu pozitia Index. Tipul subdomeniu Probabil unul din cele mai accesibile tipuri cand e vorba de invatat Tipul byte permite variabilelor de acest tip sa aiba valori intre 0 si 255. Index: Integer). Pos(SubStr: String. Daca subsirul nu este gasit. una din cele mai bune noutati introduse de limbajul Pascal este posibilitatea de a defini noi tipuri de date intr-un program. Insert Stringul Source va fi inserat in stringul S. var S: String. returnand pozitia primului caracter al subsirului din sir. Pascal a fost primul limbaj care a introdus ideea unor constructori de tip definiti intr-un mod formal si foarte precis. incepand de la pozitia Index. Daca sirul rezultat va avea mai mult de 255 de caractere. Insereaza un substring intr-un string.. Insert(Source: String. ca valori acest tip nu poate fi declarat decat folosind valori ordinale .

3.Exemple: Line number On/Off | Expand/Contract | Select all 1. Multimele sunt un mod de a clasifica tipuri comune in grupuri. 6. Ca un exemplu din viata. 'Z'.[5. {functioneaza doar din cod !} 5. type multime = set of 1. {reuniune . WriteLn. n_pare: multime. Write('Numere prime: '). begin 5. multimile pot fi definite ca avand un subdomeniu de valori sau toate valorile unui anumit tip (ordinal). 4. 6.again} 18. 7]. chr(122). Tipul multime (set) Multimile exista peste tot in jurul nostru. 9. note = 1 . i: byte. {reuniune} 15. type 2. for i := 1 to 10 do 10. 10. 5. 8]. {acum multimea va contine si numarul 6} 16. multimile sunt gandite ca avand niste valori dintr-un subdomeniu definit. 10. . Dupa cum observam.10. n_prime := n_prime + n_pare. n_prime := n_prime . multime_byte = set of byte.. 2. 14. litere_mari = 'A' . Declarare tip: Line number On/Off | Expand/Contract | Select all 1. write(i : 3). 7]. Subdomeniul insusi este denumitmultimea de baza. imaginati-va un buchet cu flori de mai multe feluri : o multime de flori In Pascal. var n_prime. multimea din care orice multime de acelasi tip isi poate lua valori. type multime = set of 1 .. O multime poate avea una. n_pare := [2. n_prime := n_prime + [10]. avand ca restrictie un numar total de maxim 256 de valori distincte. Un program demonstrativ pentru multimi: 1. 4. 17. 3. {metode alternative de introdus caracter} 4. iar Pascal ne ofera posibilitatea de a lucru cu ele. mai multe sau toate valorile din subdomeniul respectiv.. 8.. litere_mici = #97 . 7. 2. 13. if (i in n_prime) then {apartenenta} 11. {numere prime mai mici decat 10} 3. n_prime := [2. {diferenta} 19.. 12.

Tipul enumerare Tipul subdomeniu. 28. 30.. 24. 8. creand si identificatori pentru posibilele valori. cel putin pentru elevii claselor primare. vineri. end. identX]). Din pacate. suficient. begin 7.. calificative = (foarte_rau. '. '. Write('Numarul de ordine pentru "rau" este '. joi. rau. type 2. ReadLn. zi := succ(zi). explicat mai sus. zile = (luni. mai putin Chr. Tipul enumerare ofera posibilitatea definirii unui tip ordinal de data. iar variabilelor de acest tip li se pot aplica functiile aplicabile tipurilor ordinale. 21. Write('Numere ramase in multime (reuniune. 12. ident2. for i := 1 to 10 do if (i in n_prime) then {apartenenta} write(i : 3). Fiecare valoare din lista unui tip enumerate are asociat un numar ordinal (primul are valoarea 0). 34. Ord(marti). 25. var zi: zile. .'). bun. 6. Un exemplu de cod care foloseste tipul enumerat: Line number On/Off | Expand/Contract | Select all 1. WriteLn. 31. . 3. zi := pred(miercuri). 3. for i := 1 to 10 do if (i in n_prime) then {apartenenta} write(i : 3). 9].. duminica). 29. {acum e sambata} 9. nota := rau. {tocmai a devenit marti} 11. sambata. 4. 32.. Hai sa vedem ce tip de data am putea folosi pentru a stoca niste calificative. spune cum putem da note fara sa avem posibilitatea de a da nota 11 . 10. foarte_bun. miercuri. n_prime := n_pare * [2. type nume_tip : (ident1 [. diferenta): '). 33. 5. 23. sau 0. WriteLn('Numarul de ordine pentru Marti este '. marti. WriteLn.20. {intersectie} Write('Numere ramase in multime (intersectie): '). ReadLn. grozav). 26. Declarare tip: Line number On/Off | Expand/Contract | Select all 1. 22.'). 14. nota: calificative. zi := vineri. am auzit ca de vreo cativa ani se dau calificative. 13. 27. Ord(nota). 6.

17. definit de noi} 4.nume). field3: integer 7. ClrScr. 14. {tipul nostru inregistrare} 9.varsta). ReadLn(second.nume). TipX nu este un tip implicit al Pascal. 6. 6. Write('Dati varsta primei persoane: '). field1: string. field2: byte. 5. ReadLn(first. persoana = record {tip inregistrare. begin 10. 8. 9. varsta: Byte. 1. type 3. 5. uses crt. Restrictii:  identificatorii nu pot fi dublati pe parcursul unui program. Ce se intampla in cazul in care vreau sa stochez mai multe tipuri de date intr-un singur element ? Un caz concret ar fi varstele unor oameni. end. nume_tip = record 4.  identificatorii nu pot fi afisati de Pascal (identificatorul nu are o valoare text pentru compilatorul Pascal) Tipul record Cum am vazut deja la tipul string. nume: String. end. ReadLn(first. 7. end. 15. Write('Dati numele celei de-a doua persoane:'). 12.. 16. . second: persoana. Tipul record (inregistrare) permite crearea unui tip de date care sa permita gruparea unor date de tipuri diferite. ReadLn(second. 20. Write('Dati numele primei persoane: ').15. type 3. Ideea principala este ca tipul inregistrare poate contine mai multe campuri cu valori de diferite tipuri. cu elemente de acelasi tip. . Avem nevoie de un loc pentru nume si de un loc pentru varsta . 2. 11. uses crt.varsta).. 8. sper ca e destul de clar.. 19. exista posibilitati de a stoca in memorie cantitati mari de date. o variabila string si o variabila byte. Program care sa citeasca si sa afiseze numele si varstele a doua persoane. 13. 2. Declararea unui tip inregistrare: 1.. 18. Write('Dati varsta celei de-a doua persoane: '). var first. fieldX: tipX. si cum vom mai vedea la array-uri.

end. ClrScr. motiv pentru care nu o voi explica aici.nume. 23. Nume: '.varsta: '.varsta. ' . .nume. dar. second.varsta. 22.21. ' 24. ReadKey.'). de ani. nu i-am gasit nicio alta utilitate. in afara de a incurca treburile.'). de ani.varsta: '. ' 25. O alta posibilitate oferita de tipul inregistrare este faptul ca pot avea o parte variabila. Nume: '. second. 26. ' . first. WriteLn('1. first. WriteLn('2.

Sign up to vote on this title
UsefulNot useful