Jump to content

[PASCAL] Lectia 2 - Tipuri de date


Leventhe
 Share

Recommended Posts

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

Tipul enumerare

Tipul subdomeniu

Tipuri reale

single

poate lua valori intre (1.5E-45, 3.4E38)

stocat intern pe: 4 bytes

real

poate lua valori intre (2.9E-39, 1.7E38)

stocat intern pe: 6 bytes

double

poate lua valori intre (5.0E-324, 1.7E308)

stocat intern pe: 8 bytes

extended

poate lua valori intre (3.4E-4932, 1.1E4932)

stocat intern pe: 10 bytes

comp

poate lua valori intre (-2^63+1, 2^63-1)

stocat intern pe: 8 bytes

Tipurile structurate:

tipul tablou: array

folosit pentru a memora un sir de valori

tipul sir de caractere: string

este o secventa dinamica (ca lungime) de caractere.

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++, unde sirul se termina cu caracterul #0 - null terminated strings)

tipul inregistrare: record

folosit pentru a memora valori de mai multe tipuri in acelasi loc

tipul obiect: object

folosit in programarea pe obiecte (OOP)

tipul multime: set

folosit pentru a desemna o multime (ca in matematica) de elemente de acelasi tip

tipul fisier: text, file

folosit la prelucrarea fisierelor

tipul referinta: pointer

folosit la prelucrarea dinamica a memoriei

tipurile procedurale: function, procedure

extensie a Pascalului standard, folosite pentru a putea folosi subprogramele ca variabile

 

Tipuri ordinale

 

Cum am aratat mai sus, tipurile ordinale de date sunt shortint, byte, integer, word , longint.

 

In operatii, toate tipurile intregi de date sunt compatibile intre ele. Operatorii aritmetici care se pot folosi sunt:

+ (semnul plus)

pentru adunare

- (semnul minus)

pentru scadere

* (semnul asterisc)

pentru inmultire

DIV

impartire intreaga - se obtine catul

MOD

impartire intreaga - se obtine restul

/ (semnul slash)

impartire reala - se poate aplica asupra operanzilor intregi, dar rezultatul este real.

Tipul Boolean

 

Tipul boolean este ordinal, enumerativ: (FALSE, TRUE). Operatorii logici care i se pot aplica sunt:

NOT

operatia logica "nu"

AND

operatia logica "si"

OR

operatia logica "sau"

XOR

operatia logica "sau exclusiv" - este adevarat daca un operand este adevarat, dar nu amandoi.

A XOR B inseamna "A sau B, dar nu amandoua".

 

Tipul Char

 

Tipul char este ordinal.

Valoarea unei variabile de acest tip se va scrie intre ghilimele.

Ex. 'A' sau 'a' (sunt distincte !)

 

Operatorii si functiile care se pot aplica asupra acestui tip de data sunt:

+

concateneaza 2 sau mai multe caractere, dar rezultatul este de tip string

CHR

este o functie care se aplica datelor de tip intreg, dar rezultatul este de tip Char. Returneaza caracterul cu codul respectiv din codul ASCII. Alternativ, se poate folosi #.

Ex. Chr(65) este egal cu #65, ambele avand valoarea A (caracter)

 

Tipuri reale

 

Tipurile reale de date sunt single, real, double, extended si comp.

Datele sunt memorate intern in virgula mobila.

 

Tipul comp desemneaza o data reala particulara, avand numai valori intregi. In operatii intra ca o data reala, avand partea zecimala egala cu zero.

 

Operatorii aritmetici (si functii) care se pot aplica tipurilor reale sunt:

+

pentru adunare

-

pentru scadere

*

pentru inmultire

/

impartire reala (cu virgula)

Trunc

functie care returneaza partea intreaga a numarului

Round

functie care rotunjeste un numar. Daca partea zecimala este de 0.5 atunci numarul este rotunjit in sus

 

Tipurile structurate vor fi explicate intr-un alt tutorial, necesitand mai multe informatii.

 

 

Operatii specifice pe tipuri de date in Pascal

 

Pentru tipurile ordinale de date, unde exista un predecesor si un succesor distinct pentru fiecare valoare, Pascal ofera functiile prezentate in tabelul de mai jos.

 

FUNCTII PENTRU TIPURI ORDINALE

Functie

Descriere

Tip argument

Tip rezultat

chr

caracterul specificat din ASCII

intreg

caracter

ord

valoare ordinala

intreg sau caracter

intreg

pred

predecesor

intreg sau caracter

la fel ca argumentul

succ

succesor

intreg sau caracter

la fel ca argumentul

 

 

Pascal ofera o multitudine de functii matematice, din care voi prezenta cateva mai jos.

 

FUNCTII MATEMATICE

Functie

Descriere

Tip argument

Tip rezultat

abs

valoare absoluta

real sau intreg

la fel ca argumentul

arctan

arctangenta in radiani

real sau intreg

real

cos

cosinus de X radiani

real sau intreg

real

exp

e la putere

real sau intreg

real

ln

logaritm natural

real sau intreg

real

round

rotunjire

real

integer

sin

sinus de X radiani

real sau intreg

real

sqr

ridicare la patrat

real sau intreg

la fel ca argumentul

sqrt

radical

real sau intreg

real

trunc

rotunjire in jos

real sau intreg

integer

 

 

Atentie: Toate functiile trigonometrice din Pascal lucreaza cu radiani.

 

Toate functiile expuse aici sunt folosite scriind numele functiei, urmat de argumentul (parametrul) functiei, pus intre paranteze rotunde ( si ).

 

Bineinteles, aceasta lista de functii nu este lista completa de functii si proceduri ale compilatorului Pascal. Compilatoarele moderne de Pascal includ mii de functii pentru toate necesitatile. Sistemul de ajutor (Help) al compilatorului nu trebuie neglijat, iar sistemul de ajutor al Borland Pascal 7.0 este foarte bine pus la punct. A se folosi cu incredere

 

Exemplu de folosire a catorva functii:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

var caracter: Char;

index: Byte;

cosinus: Real;

putere: Longint;

begin

WriteLn(Chr(97)); {va afisa litera a (mica)}

WriteLn(Ord('a')); {va afisa 97}

cosinus := cos(3.1415926535897932); {ar trebui ca valoarea sa fie egala cu 0}

WriteLn(cosinus); {si afisam 0}

putere := Sqr(5); {5 la patrat = 125}

WriteLn(putere); {si afisam 125}

end.

 

 

Formatarea afisarii

 

Formatarea afisarii presupune afisarea datelor (cu functiile Write sau WriteLn) care le dorim in alta forma. Contine mai multe cazuri si metode de folosire. Despre formatarea afisarii am vorbit, pe scurt, si in tutorialul anterior de Pascal.

 

Afisarea normala este o afisare ca in exemplul de mai jos.

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

WriteLn('Acesta este un test de afisare.');

 

Sa trecem la formatari.

 

Prima metoda de formatare este de folos cand dorim sa aliniem la dreapta textul care-l vrem afisat.

Se foloseste afisand in felul urmator:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

WriteLn('Text de afisat' : 40);

 

De remarcat secventa : 40. Aceasta secventa specifica pe cate pozitii va fi afisat textul, aliniind textul la dreapta. Daca am vrea sa afisam "bitcell.info" (care contine 12 caractere) pe 20 de pozitii, afisarea va fi facuta punand 8 spatii (20 - 12) si apoi scriind textul.

 

Daca numarul de pozitii specificat este prea mic, el este ignorat si afisarea se executa ca o afisare normala.

 

Acest tip de afisare poate fi de folos, de exemplu, cand vrem sa cream un meniu.

A doua metoda de formatare a afisarii presupune dublarea secventei care specifica numarul de pozitii pe care se face afisarea, ca in exemplul de mai jos:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

WriteLn(40.234111242:5:2);

 

Acest tip de formatare se foloseste doar pentru afisarea numerelor reale.

 

Mergand pe exemplul de mai sus, secventa :2 specifica numarul de zecimale afisat, iar :5 specifica numarul total de pozitii pe care va fi afisat numarul, incluzand punctul zecimal. Afisarea se va face normal, afisand "40.23" (sunt 5 caractere, deci nu se pune niciun fel de spatiu). Daca secventa :5 era, sa zicem :3, ea era ignorata.

 

Operatii cu tipul logic (Boolean)

 

Pentru tipul logic de date exista cativa operatori, prezentati mai jos.

 

OPERATORI LOGICI

Operator

Descriere

not

negatie

and

conjunctie (si logic)

or

disjunctie (ori logic)

xor

disjunctie exclusiva

 

 

Tabelurile de adevar pentru operatorii AND, OR si XOR sunt date mai jos (negatia nu cred sa aiba nevoie de tabel).

 

TABELE DE ADEVAR

AND

True

False

OR

True

False

XOR

True

False

True

True

False

True

True

True

True

False

True

False

False

False

False

True

False

False

True

False

 

 

Operatorii relationali care pot fi folositi pentru a genera rezultate logice (de tip Boolean - True sau False), sunt mai jos.

 

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. Mici erori de rotunjire pot genera erori destul de mari (1.5678 este diferit de 1.5679).

 

De tinut minte este faptul ca operatorii folositi in Pascal au, fiecare, o anumita prioritate, care permite compilatorului sa "inteleaga" intern ordinea operatiilor.

 

PRIORITATEA OPERATORILOR

Nivel

Operatori

Explicatie

0

not

prioritate maxima

1

* / div mod and

2

+ - or

3

< > <= >= = <>

prioritate minima

 

 

Daca vreti sa fiti siguri ca ordinea operatiilor este cea dorita de dvs., va trebui sa-i explicati compilatorului acest lucru, punand paranteze, ca in matematica.

 

Atentie: in cazul folosirii operatorilor relationali intr-o expresie logica, este indicat ca fiecare sub-expresie sa fie pusa in interiorul unui set de paranteze, datorita prioritatilor expuse mai sus.

 

Exemplu de folosire a operatorilor relationali si logici:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

var numar: integer;

carac: char;

begin

carac := 'd';

numar := 5;

if (carac = 'D') then

Writeln('Caracterul este D');

 

if (carac = 'a') and (numar = 5) then

WriteLn('Caracter = a, numar = 5');

 

if (carac = 'a') or (numar = 5) then

WriteLn('Caracter = a SAU numar = 5');

end.

 

Sper ca ati inteles faptul ca acest cod va afisa doar

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

Caracter = a SAU numar = 5

 

 

Tipuri de date structurate

 

O parte din tipurile de date structurate sunt tipuri care pot fi definite de utilizator. Tipurile ordinale, cum ar fi integer, specifica foarte clar marimea ocupata in memorie si tipul de date care-l va contine.

 

Sa luam, ca exemplu, tipul array. Acest tip de data permite stocarea mai multor date de acelasi tip (ordinal sau structurat). Daca aveti nevoie de un sir de 20 de numere intregi ... sau de 200, array este tot ce aveti nevoie. Totusi, acest tip de data este destul de complex, motiv pentru care exista tutorialul despre vectori si matrici.

 

Tipul string

 

Sa presupunem ca aveti nevoie sa stocati un nume, dat de la tastatura. Nu stiti ce lungime, in caractere, va avea, deci nu ar fi practic sa-l salvati intr-un numar de variabila de tip char. Mai tarziu, cand veti ajunge la tipul array, veti gasi o solutie alternativa pentru stocarea unui sir de caractere, dar, pe moment, tipul string este tot ce aveti nevoie.

 

O variabila de tip string se declara in felul urmator:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

var nume: string

 

In aceasta variabila de tip string vom putea salva numele dat de la tastatura, fara sa ne facem griji. Limitarea acestui tip de data este ca nu poate stoca mai mult de 255 de caractere, dar 255 de caractere este mult prea mult pentru un simplu nume.

 

Tipul string poate fi vazut ca un sir de maxim 255 de caractere. Fiecare caracter din string poate fi accesat / modificat individual, folosind indexul acelui caracter (indecsii incep de la 1). Programul de mai jos va exemplifica acest lucru.

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

var nume: string;

begin

nume := 'BitCall'; {Bitcell, scris gresit !}

nume[5] := 'e';

write('Numele corect este ', nume);

readln;

end.

 

O variabila de tip string este stocata intern pe 256 de bytes. Motivul pentru acest lucru este faptul ca pe pozitia 0 din acest sir este stocata lungimea sirului (spre deosebire de C / C++, unde caracterul 0 din ASCII este terminator de sir). Avand in vedere ca numarul maxim de valori care le poate lua un byte este de 256 (intre 0 si 255), ar trebui sa fie clar de ce tipul string poate stoca maxim 255 de caractere (aceasta limitare se refera la Borland Pascal - in alte variante de Pascal sau in Delphi, aceasta limita este ridicata la peste 2 miliarde de caractere).

 

FUNCTII SI PROCEDURI UTILIZATE PENTRU TIPUL STRING

Nume

Descriere

Length

Aceasta functie returneaza lungimea, in caractere, a variabilei de tip string. Primul caracter (cel de pe pozitia 0 - care specifica lungimea stringului) nu este luat in calcul.

 

Format apel:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

Length(S: String)

Copy

Returneaza un string care contine caracterele specificate din string-ul introdus ca parametru.

 

Format apel:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

Copy(S: string; Index: Integer; Count: Integer);

 

 

Stringul rezultat va contine Count caractere, incepand de la pozitia Index inclusiv, din stringul S. Daca Index specifica un numar mai mare decat lungimea totala a stringului, atunci stringul rezultat va fi vid. Daca numarul specificat de Count trece de numarul de caractere totale, incepand de la Index, se va returna tot stringul de la pozitia Index pana la final.

Concat

Concateneaza mai multe stringuri intr-unul singur. Returneaza stringul rezultat.

 

Format apel:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

Concat(s1 [, s2, ..., sn]: String);

 

 

Alternativ, stringurile pot fi concatenate folosind operatorul +, ca la operatia de adunare. Daca stringul rezultat are mai mult de 255 de caractere, este trunchiat la primele 255 de caractere.

Delete

Procedura care sterge un subsir de caractere dintr-un string.

 

Format apel:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

Delete(var S: String; Index: Integer; Count: Integer);

 

 

Din stringul S vor fi sterse Count caractere, incepand cu pozitia Index. Daca Index este mai mare decat lungimea totala stringului, procedura nu avea avea nici un efect. Daca numarul specificat de Count trece de numarul de caractere total, incepand de la Index, stringul va fi trunchiat incepand cu pozitia Index.

Insert

Insereaza un substring intr-un string.

 

Format apel:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

Insert(Source: String; var S: String; Index: Integer);

 

 

Stringul Source va fi inserat in stringul S, incepand de la pozitia Index. Daca sirul rezultat va avea mai mult de 255 de caractere, va fi trunchiat la 255 de caractere.

Pos

Cauta pozitia unui subsir intr-un string, returnand pozitia primului caracter al subsirului din sir.

 

Format apel:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

Pos(SubStr: String; S: String): Byte;

 

 

Daca subsirul nu este gasit, aceasta functie va returna 0.

 

 

Procedurile si functiile expuse mai sus ar trebui sa va poata da o idee despre lucrul cu siruri de caractere in Pascal.

 

Tipuri de date definite de utilizator

 

Impreuna cu notiunea de tip, una din cele mai bune noutati introduse de limbajul Pascal este posibilitatea de a defini noi tipuri de date intr-un program. Programatorii isi pot defini propriile tipuri de date folosind constructorii de tipuri, cum ar fi tipul array, tipul subdomeniu, tipul record, tipul enumerat, tipul set si tipul pointer.

 

Pascal a fost primul limbaj care a introdus ideea unor constructori de tip definiti intr-un mod formal si foarte precis.

 

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. Tipul char permite variabilelor sa ia ca valori orice caracter din ASCII. 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:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

type nume_tip = limita_inf .. limita_sup;

 

Nimic mai simplu. Dupa ce ne botezam tipul de date, nu mai avem de facut decat sa specificam limitele valorilor de date, separate prin doua puncte ( .. ), care specifica faptul ca e vorba de un interval.

 

Restrictii:

limita inferioara trebuie sa fie mai mica decat limita superioara, ca valori

acest tip nu poate fi declarat decat folosind valori ordinale

 

Exemple:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

type

litere_mari = 'A' .. 'Z';

litere_mici = #97 .. chr(122); {metode alternative de introdus caracter}

{functioneaza doar din cod !}

note = 1 .. 10;

 

 

Tipul multime (set)

 

Multimile exista peste tot in jurul nostru, iar Pascal ne ofera posibilitatea de a lucru cu ele. Multimele sunt un mod de a clasifica tipuri comune in grupuri. Ca un exemplu din viata, imaginati-va un buchet cu flori de mai multe feluri : o multime de flori

 

In Pascal, multimile sunt gandite ca avand niste valori dintr-un subdomeniu definit. O multime poate avea una, mai multe sau toate valorile din subdomeniul respectiv. Subdomeniul insusi este denumit multimea de baza, multimea din care orice multime de acelasi tip isi poate lua valori.

 

Declarare tip:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

type multime = set of 1 .. 10;

multime_byte = set of byte;

 

 

Dupa cum observati, multimile pot fi definite ca avand un subdomeniu de valori sau toate valorile unui anumit tip (ordinal), avand ca restrictie un numar total de maxim 256 de valori distincte.

 

OPERATII CU MULTIMI

Operatie

Descriere

in

Apartenenta. Verifica daca un element exista sau nu in multime.

+

Reuniune. Rezultatul este o multime care contine toate elementele din cele doua multimi, o singura data.

*

Intersectie. Rezultatul este o multime care contine doar acele elemente care exista in ambele multimi.

-

Diferenta. Rezultatul este o multime care contine elementele primei multimi care nu apar si in a doua multime.

 

 

Un program demonstrativ pentru multimi:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

type multime = set of 1..10;

var n_prime, n_pare: multime; {numere prime mai mici decat 10}

i: byte;

begin

n_prime := [2, 3, 5, 7];

n_pare := [2, 4, 6, 8];

 

Write('Numere prime: ');

for i := 1 to 10 do

if (i in n_prime) then {apartenenta}

write(i : 3);

WriteLn;

 

n_prime := n_prime + [10]; {reuniune}

{acum multimea va contine si numarul 6}

 

n_prime := n_prime + n_pare; {reuniune - again}

n_prime := n_prime - [5, 7]; {diferenta}

 

Write('Numere ramase in multime (reuniune, diferenta): ');

for i := 1 to 10 do

if (i in n_prime) then {apartenenta}

write(i : 3);

WriteLn;

 

n_prime := n_pare * [2, 3, 6, 9]; {intersectie}

Write('Numere ramase in multime (intersectie): ');

for i := 1 to 10 do

if (i in n_prime) then {apartenenta}

write(i : 3);

WriteLn;

 

ReadLn;

end.

 

 

Tipul enumerare

 

Tipul subdomeniu, explicat mai sus, spune cum putem da note fara sa avem posibilitatea de a da nota 11 ... sau 0. Din pacate, am auzit ca de vreo cativa ani se dau calificative, cel putin pentru elevii claselor primare. Hai sa vedem ce tip de data am putea folosi pentru a stoca niste calificative.

 

Tipul enumerare ofera posibilitatea definirii unui tip ordinal de data, creand si identificatori pentru posibilele valori.

 

Declarare tip:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

type nume_tip : (ident1 [, ident2, ... identX]);

 

Fiecare valoare din lista unui tip enumerate are asociat un numar ordinal (primul are valoarea 0), iar variabilelor de acest tip li se pot aplica functiile aplicabile tipurilor ordinale, mai putin Chr.

 

Un exemplu de cod care foloseste tipul enumerat:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

type

zile = (luni, marti, miercuri, joi, vineri, sambata, duminica);

calificative = (foarte_rau, rau, suficient, bun, foarte_bun, grozav);

var zi: zile;

nota: calificative;

begin

zi := vineri;

zi := succ(zi); {acum e sambata}

 

zi := pred(miercuri); {tocmai a devenit marti}

WriteLn('Numarul de ordine pentru Marti este ', Ord(marti), '.');

nota := rau;

Write('Numarul de ordine pentru "rau" este ', Ord(nota), '.');

ReadLn;

end.

 

 

Restrictii:

identificatorii nu pot fi dublati pe parcursul unui program.

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, si cum vom mai vedea la array-uri, exista posibilitati de a stoca in memorie cantitati mari de date, cu elemente de acelasi tip. 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. Avem nevoie de un loc pentru nume si de un loc pentru varsta ... o variabila string si o variabila byte. Tipul record (inregistrare) permite crearea unui tip de date care sa permita gruparea unor date de tipuri diferite.

 

Declararea unui tip inregistrare:

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

 

type

nume_tip = record

field1: string;

field2: byte;

field3: integer

...

fieldX: tipX;

end;

 

TipX nu este un tip implicit al Pascal, sper ca e destul de clar. Ideea principala este ca tipul inregistrare poate contine mai multe campuri cu valori de diferite tipuri.

 

Sa vedem cum facem un programel care sa citeasca si sa afiseze numele si varstele a doua persoane.

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

uses crt;

type

persoana = record {tip inregistrare, definit de noi}

nume: String;

varsta: Byte;

end;

 

var first, second: persoana; {tipul nostru inregistrare}

begin

ClrScr;

 

Write('Dati numele primei persoane: ');

ReadLn(first.nume);

Write('Dati varsta primei persoane: ');

ReadLn(first.varsta);

 

Write('Dati numele celei de-a doua persoane:');

ReadLn(second.nume);

Write('Dati varsta celei de-a doua persoane: ');

ReadLn(second.varsta);

 

ClrScr;

WriteLn('1. Nume: ', first.nume, ' - varsta: ', first.varsta, ' de ani.');

WriteLn('2. Nume: ', second.nume, ' - varsta: ', second.varsta, ' de ani.');

ReadKey;

end.

 

Dupa cum se poate vedea in program, fiecare camp dintr-o inregistrare se apeleaza folosind numele inregistrarii . (punct) numele campului (fara spatii).

 

O alta posibilitate oferita de tipul inregistrare este faptul ca pot avea o parte variabila, dar, in afara de a incurca treburile, nu i-am gasit nicio alta utilitate, motiv pentru care nu o voi explica aici.

 

Celelalte tipuri de date vor fi explicate in tutorialele urmatoare, cand va fi necesar.

 

Sursa: http://www.bitcell.info/tutorial-pascal-lectia-2-tipuri-de-date-t20.html?sid=ba5880663f2c18ab18ed300345f06ba8

Edited by Cdorsu
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.