Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Tipuri de date ordinale si functii ordinale

Informatica


Tipuri de date ordinale si functii ordinale

Tipul de date ordinale cuprinde un domeniu de valori care pot fi ordonate si care pot fi, prin urmare numarate (0, 1, 2, 3...) pâna la valoarea maxima permisa.



Remarca.

În (Borland) PASCAL numaratoarea începe, mai degraba de la 0 decât de la 1; este ceva arbitrar, dar procedeul este obisnuit în stiinta calculatoarelor.

Trei din cele patru tipuri de date PASCAL studiate sunt ordinale, si anume: integer, char si boolean. Întregii sunt evident ordinali. Tipul char este un tip ordinal datorita numarului finit al caracterelor si secventei acestora - caracterele sunt ordonate si consecutive. Valorile booleene sunt usor de numarat, din moment ce sunt numai doua; false este zero si true este unu..

Datele de tip real nu sunt de tip ordinal deoarece nici un numar real nu are un predecesor sau un succesor.

Exista patru functii ordinale (predefinite) utilizate frecvent: ord, odd, succ, pred si chr. În completarea functiilor succ si pred, (Borland) PASCAL ofera alte doua proceduri care modifica valorile ordinale: inc si dec.

Functia odd(x) - primeste un argument întreg si returneaza un rezultat boolean, cu valoarea true daca argumentul (x) este impar (pozitiv sau negativ) si false în caz contrar.

Functia ord(x) - primeste un argument de un tip ordinal si întoarce un rezultat de tip întreg, reprezentând valoarea ordinala a entitatii x. .

În acord cu valorile booleene, ord(false) returneaza 0 si ord(true) are valoarea 1.

Daca pentru functia ord folosim ca argumente întregii, aplicarea acestei functii este fara sens , întrucât ea va returna aceleasi valori (ordinea unui întreg este data de chiar valoarea acelui întreg!). Iata câteva exemple:

Exemple:

ord(18)=18

ord(23)=23

Din cauza multitudinii de seturi de caractere folosite, evident nu ne putem astepta ca functia ord ('C'), de exemplu, sa returneze aceeasi valoare pe toate tipurile de calculatoare cu care lucram. Ne putem astepta însa ca:

ord('A') < ord('B') sau

ord('d') < ord('e') sau

ord('2') " ord('3').

In completarea lui ord, PASCAL-ul are o pereche de functii denimite succ si pred, astfel:

Functia pred(x) - primeste argument de tip ordinal; întoarce un rezultat de acelasi tip ordinal ca si argumentul, reprezentând elementul având valoarea ordinala cu 1 mai mica decât ce a lui x.

Functia succ(x) - primeste argument de tip ordinal; întoarce un rezultat de acelasi tip ordinal ca si argumentul, reprezentând elementul având valoarea ordinala cu 1 mai mare decât ce a lui x.

Este usor de observat ca succ(4) este 5, iar pred(9) este 8, dar aceleasi rezultate le putem obtine si prin adaugarea sau scaderea lui 1 din acel numar al carui succesor sau predecesor îl dorim. Pentru caractere, totusi, lucrurile sunt putin mai complicate ! Evident nu putem adauga 1 unei variabile de tip char, sa zicem aga, dar putem calcula succ(aga) pentru a obtine caracterul a carui valoare ordinala este cu 1 mai mare în secventa comparatoare (în engleza collating sequence).

De exemplu, daca aga este 'c' , atunci succ(aga) este 'd'. Relatia dintre cele doua functii poate fi exprimata astfel:
pred(succ(d))=d=succ(pred(d)) unde d este un element de tip ordinal, cu conditia ca pred(d) si succ(d) sa existe.

Remarca:

Functiile pred si succ pot fi aplicate oricaror date de tip ordinal si vor returna o valoare ordinala de acelasi tip.

Functia chr(x) - primeste un argument de tip întreg si întoarce un rezultat de tip char, a carui valoare este caracterul cu numarul de ordine x. Aceasta valoare depinde de implementare.

De exemplu, conform codului ASCII, secventa:
ord('1'), ord('2'),..., ord('9') returneaza valorile:

De asemenea, conform codului ASCII, chr(102)='f' si chr

Deci, numai pentru cazul care implica tipul char functiile ord si chr formeaza o pereche inversa.

ord(chr(13))=13, chr(ord('c'))='c'.

Remarci:

  • Nu este incorecta exprimarea "chr(n) converteste n într-un caracter", dar trebuie sa întelegeti exact sensul acestei exprimari: chr(n) sau ord(e) nu vor schimba efectiv pe "n" sau "e" - ele numai folosesc "n" si "e" pentru a "vedea" o valoare corespunzatoare în alt domeniu; astfel, functiile ord, respectiv chr functioneaza ca functii de transfer.
  • Functiile ord si chr pot fi folosite pentru a schimba o litera din majuscula în minuscula si invers. Astfel, enuntul write(chr(32+ord('D'))) va afisa d (vezi codul ASCII).

De notat, ca în conformitate cu codul ASCII, orice litera mica are o valoare mai mare cu 32 decât valoarea ordinala a literei mari corespunzatoare



De exemplu,

ord('D')=68, iar chr(32+68 )='d'.

ord('a') - ord('A')=32

ord('z') - ord('Z')=32

Deci, putem generaliza:

literamica:=chr(32+ord(literamare))

respectiv:

literamare:=chr(ord(literamica)-32).

De exemplu:

chr(ord('d')-32)=chr(100-32)=chr(68)='D'.

  • Pentru a converti cifra car de tip char în valoare numerica se utilizeaza relatia:
    ord(car)-ord('0'), unde, ord('0') are valoarea 48.

De exemplu:
ord('8')-ord('0')=56-48=8.

  • Daca val este un întreg în intervalul [0, 9 , caracterul corespunzator lui va fi chr (val ord('0')).
    De exemplu,
    chr(9+ord('0'))=chr(57)='9'.

Procedura inc - este declarata cu doi parametri formali de tip întreg; al doilea parametru este optional.
Efect: incrementeaza variabila data ca prim parametru cu valoarea data de al doilea parametru. Daca nu se precizeaza un al doilea parametru, se realizeaza incrementarea cu o unitate.

Exemplu:

k:=17;

inc(k);

inc(k,2);

Procedura dec - este declarata cu doi parametri formali de tip întreg; al doilea parametru este optional.
Efect: decrementeaza variabila data ca prim parametru cu valoarea data de al doilea parametru. Daca nu se precizeaza un al doilea parametru, se realizeaza decrementarea cu o unitate.

Exemplu:

k:=17;

dec(k);

dec(k,8);

Remarca:

Este de remarcat ca apelul procedurilor inc sau dec produce un cod mai bun decât echivalentul:
k:=k+1 sau k:=k-8
(vezi exemplele anterioare).

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" - un "sau exclusiv" este adevarat daca un operand este adevarat, dar nu amandoi. A XOR B inseamna "A sau B, dar nu amandoua".

Operatorii logici se pot aplica si tipurilor intregi de date, dar in acest caz operatiile logice se fac pe biti (se considera True = 1 si False = 0)

Tipul enumerare



Tipul enumerare defineste o multime ordonata de valori : se enumera un sir de identificatori care desemneaza valorile posibile. Primul identificator desemneaza cea mai mica valoare, cu numarul de ordine zero. Ceilalti identificatori desemneaza succesorul valorii specificate de catre identificatorul precedent. Identificatorii apar în ordinea crescatoare a valorii lor.

Tipul enumerare se defineste în sectiunea Type astfel :

Type nume_tip = (identif,identif, . , identif);

Exemplu :

Type sex=(barbat, femeie);

Studii=(elementare, medii, superioare);

Variabilele de tip enumerare sînt declarate în sectiunea var. Ele pot lua una din valorile însirate în lista de enumerare.

Var s:sex;

Pregatire:studii;

Limba:(engleza,franceza);

Aici variabila s poate sa ia una din valorile barbat sau femeie, variabila pregatire poate sa ia una din valorile superioare, medii sau elementare.

Tipul lgic este de fapt un tip de enumerare :

Type boolean=(False,True);

Operatiile care se pot face cu valorile unui tip de enumerare sînt urmatoarele :

Atribuirea

S:=barbat; studii:=superioare;

Limba:=germana;

Determinarea numarului de ordine

Se face cu functia Ord. De exemplu Ord(barbat) returneaza valoarea 0, Ord(medii) returneaza valoarea 1.

Determinarea succesorului se face cu functia Succ sau a predecesorului se face cu functia Pred. De exemplu, prin instructiunea de atribuire :

Limba:=Succ(engleza);

Variabila limba va avea valoarea franceza, iar prin instructiunea :

Pregatire:=Pred(medii);

Variabila pregatire va avea valoarea elemetare.

Încercarea determinarii succesorului ultimului element din lista sau a predecesorului primului element din lista, constituie o eroare.

Comparatia (<, <=, =, >=, >, <>). Doua valori v1 si v2 sînt într-una din relatiile anterioare daca Ord(v1) si Ord(v2) sînt în aceiasi relatie. De exemplu, comparatia "elementare < superioare" furnizeaza rezultatul True, deoarece Ord(elementare)=0 este mai mic decît Ord(superioare)=2.

Tipul interval

Fiind dat un tip ordinal, din acest tip se poate genera un nou tip, numit tipul interval. Definitia unui interval indica valoarea constanta cea mai mica si cea mai mare din interval (în sensul numarului de ordine) si cuprinde toate valorile dintre ele. Sintaxa unui tip interval este :

Type nume_tip=valoarea_minima..valoarea_maxima;

Se subliniaza faptul ca nu este permisa definirea unui interval al tipului real, deoarece acesta nu este de tip ordinal. Valoarea minima trebuie sa fie mai mica sau egala cu valoarea maxima.

Exemplu :

Type

Indice=1..10;

Litera='A'..'Z';

Zile=(Lu,Ma,Mi,Jo,Vi,Sî,Du);

Zile_lucrat=Lu..Vi

Var

I:indice;

L:litera;

Z:zile_lucrat;




Document Info


Accesari: 12859
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2025 )