Documente online.
Username / Parola inexistente
  Zona de administrare documente. Fisierele tale  
Am uitat parola x Creaza cont nou
  Home Exploreaza
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: 12644
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. 2024 )