P. 1
Pascal

Pascal

|Views: 47|Likes:
Published by cris3an2

More info:

Published by: cris3an2 on Dec 04, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as DOCX, PDF, TXT or read online from Scribd
See more
See less

12/17/2012

pdf

text

original

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

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++. sunt shortint. Operatorii aritmetici care se pot folosi sunt: o + (semnul plus) pentru adunare o . word . tipurile ordinale de date In operatii. enumerativ: (FALSE.se poate aplica asupra operanzilor intregi.se obtine catul o MOD impartire intreaga .se obtine restul o / (semnul slash) impartire reala . procedure extensie a Pascalului standard. longint. TRUE). file folosit la prelucrarea fisierelor o tipul referinta: pointer folosit la prelucrarea dinamica a memoriei o tipurile procedurale: function. folosite pentru a putea folosi subprogramele ca variabile Tipuri ordinale Cum am aratat mai sus.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. unde sirul se termina cu caracterul #0 . Operatorii logici care i se pot aplica sunt: o NOT operatia logica "nu" o AND operatia logica "si" . dar rezultatul este real. toate tipurile intregi de date sunt compatibile intre ele.(semnul minus) pentru scadere o * (semnul asterisc) pentru inmultire o DIV impartire intreaga . integer. byte. 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. Tipul Boolean Tipul boolean este ordinal.

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

cosinus: Real. putere: Longint.1415926535897932). Bineinteles. Compilatoarele moderne de Pascal includ mii de functii pentru toate necesitatile. iar sistemul de ajutor al Borland Pascal 7. Sistemul de ajutor (Help) al compilatorului nu trebuie neglijat. 4. aceasta lista de functii nu este lista completa de functii si proceduri ale compilatorului Pascal. WriteLn(Chr(97)). cosinus := cos(3.Pentru tipurile ordinale de date. {si afisam 0} 10. {5 la patrat = 125} . var caracter: Char. WriteLn(cosinus). putere := Sqr(5). din care voi prezenta cateva mai jos. urmat de argumentul (parametrul) functiei. Toate functiile expuse aici sunt folosite scriind numele functiei. 2. 5. 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. pus intre paranteze rotunde ( si ). index: Byte. {va afisa litera a (mica)} 7. WriteLn(Ord('a')). Pascal ofera functiile prezentate in tabelul de mai jos. 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. A se folosi cu incredere Exemplu de folosire a catorva functii: Line number On/Off | Expand/Contract | Select all 1. begin 6. {va afisa 97} 8. {ar trebui ca valoarea sa fie egala cu 0} 9. 3.0 este foarte bine pus la punct. unde exista un predecesor si un succesor distinct pentru fiecare valoare.

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

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

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

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

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

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

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

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

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

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->