Documente noi - cercetari, esee, comentariu, compunere, document
Documente categorii

Tipurile Char si String din Pascal. Functii si proceduri utilizate cu aceste tipuri de date

Tipurile Char si String din Pascal.  Functii si proceduri utilizate cu aceste tipuri de date



Tipul Char


Asa cum abilitatea de a manevra cifre este esentiala pentru ingineri, tehnicieni, oameni de stiinta, tot asa abilitatea de a prelucra caractere, texte este esentiala pentru umanisti, oameni de afaceri etc. O variabila (Borland) PASCAL careia putem sa-i atribuim un caracter (litera, cifra, caracter special etc.) trebuie sa fie declarata de tip char, unde char este abrevierea de la character.


Remarca: Doua sau mai multe caractere pot fi combinate intr-un sir de caractere, dar astfel de siruri nu sunt tipuri de date simple, ele reprezinta tipuri de date structurate, ale caror caracteristici le vom prezenta in continuare.




Reprezentarea unei constante de tip char se realizeaza incadrand caracterul respectiv intre apostrofuri. Folosim apostroful pentru a distinge un caracter, cum ar fi 'c' de un identificator c. In interiorul calculatorului, fiecare caracter trebuie sa fie codificat in mod distinct. Forma uzuala de codificare este un numar binar de opt biti care ocupa un byte (octet) de memorie.



Remarci:

  • Multimea caracterelor ce pot fi procesate de un calculator se numeste set de caractere;
  • Utilizarea a 8 biti permite reprezentarea in principiu a 28 sau 256 de coduri diferite, neacordandu-se coduri pentru toate caracterele.

Limbajul (Borland) PASCAL foloseste setul de caractere ASCII (extins).



De exemplu, un set de 8 biti numit EBCDIC (Extended Binary Coded Decimal Interchange Code) este definit numai prin 163 de caractere. Foarte multe calculatoare folosesc un cod de 7 biti numit ASCII (American Standard Code for Information Interchange) in care toate cele 27 (128) de combinatii de cod posibile au o semnificatie precisa.



Tipul STRING


1. Utilizare



Sirul de caractere, dupa cum ii spune si numele, reuneste mai multe caractere sub 'un nume comun'. Putem intelege sirul de caractere ca fiind un cuvant, o propozitie sau o fraza, adica orice formulare scrisa ce contine semne (litere, cifre, semne de punctuatie, semne speciale etc).


Desi tipul STRING prezinta o structura interna comparabila cu cea a masivelor (ARRAY), limbajul (Borland) PASCAL permite programatorului sa-l utilizeze, in multe cazuri, ca pe un tip simplu, de exemplu in operatiile de intrare-iesire.

Desi  este asemanator tipului tablou de caractere, tipul STRING prezinta particularitatea ca numarul de caractere variaza dinamic, in timp ce numarul elementelor unui tablou de caractere este fixat.

2. Declarare


Tipul sir de caractere se declara conform diagramei :


Arata imaginea in dimensiune initiala



Diagrama de sintaxa pentru tipul STRING


unde constanta de tip BYTE defineste lungimea maxima a sirului de caractere. Daca la declarare nu se specifica lungimea maxima, se considera, implicit, 255 caractere.

Remarca:

Spre deosebire de integer, char, real, care sunt identificatori predefiniti, STRING este cuvant rezervat.


Exemple de definire


Type

SirMare = STRING;

SirMediu = STRING[120];

SirMic = STRING[40];

SirPitic = STRING[1];


Lungimea fizica a zonei ocupate de sir este egala cu lungimea maxima plus unu, deoarece un octet (cel de adresa relativa zero) este rezervat pentru memorarea lungimii efective. Lungimea efectiva se incarca in octetul zero in momentul atribuirii unei valori variabilei de tip STRING. In toate operatiile este implicat sirul efectiv, adica sirul a carei lungime este memorata in octetul zero.


Valorile de tip STRING pot fi incluse in sectiuni CONST .


CONST

NumeProgram = 'Program de lucru cu tipul string';

BeepBeep = #7#7;

BEGIN

writeln(NumeProgram);

writeln(NumeProgram,'- La revedere !',BeepBeep)

END.


Se observa ca putem include, in definirea sirurilor de caractere, si notatia pentru caractere singulare. Astfel, '#7' inseamna caracterul cu codul 7 si el produce, la scriere, un semnal sonor. Constanta BeepBeep este de fapt un sir de caractere de lungime 2, ce contine doua semnale sonore.


Este util, in scrierea programelor, ca majoritatea mesajelor pe care ni le propunem sa le afisam sa fie mentionate sub forma unor constante de tip STRING, reunite intr-o sectiune CONST. Astfel, modificarile vor fi usor de facut, fara a fi nevoie sa cautam in program toate pozitiile in care am afisat mesaje.


Pentru includerea unui apostrof intr-un sir de caractere vom specifica doua astfel de caractere:

CONST

SirApostrof='Citat: ''Borland Pascal 7.0''.'

Daca acest sir va fi afisat printr-o instructiune (writeln) va genera randul:


Citat: 'Borland Pascal 7.0'.

Exemplul de mai jos explica modul in care se poate accesa un caracter din sir: prin operatorul '[ ]'.



Daca facem urmatoarea declaratie:

VAR

S : STRING[15];

BEGIN

S := 'Un program';

atunci:

S[1]='U', S[2]='n', S[3]=' ', S[4]='p' etc.


Accesul la elementele ce depasesc lungimea actuala a sirului (via length) conduce la rezultate imprevizibile; nu se va modifica nici elementul S[0] (stocheaza lungimea sirului de caractere) sub riscul de a pierde informatii din sir sau de a-l face ilizibil.

Arata imaginea in dimensiune initiala


Reprezentarea interna a sirurilor de caractere


Reguli:

  • Nu toate caracterele ASCII sunt tiparibile. Codul 127 si toate codurile de la 0 la 31 sunt atribuite caracterelor de control (de exemplu, codul 13 are semnificatia 'carriage return');
  • Fiecarui caracter ii este asociata o valoare intreaga distincta (ordinala). De exemplu, codurile cifrelor de la 0 la 9 sunt: 48, 49, 50, 51, 52, 53, 54, 55, 56, 57; codurile literelor mari A,B, , Z sunt de la 65 la 90, iar codurile literelor mici a,b, , z sunt de la 97 la 122;
  • Valorile ordinale ale cifrelor (0 la 9), ale literelor mari (A la Z) si ale literelor mici (a la z) sunt ordonate si consecutive;
  • Codurile cifrelor sunt mai mici decat codurile literelor; codurile literelor mari sunt mai mici decat codurile literelor mici (exemplu: '1' < 'A' < 'a');
  • Intre valorile de tip char si valorile de tip integer se pot realiza conversii;
  • Reprezentarea constantelor de tip char prin codul acestora se realizeaza prin notatia #<cod>, unde <cod> este o constanta de tip intreg cu valoarea cuprinsa intre 0 si 255 (Exemplu: 'B' si #66 reprezinta aceeasi valoare de tip char). Aceste constante pot fi folosite si la siruri de caractere;
  • Pentru datele de tip char putem considera o serie de functii specifice: chr, ord etc.;
  • Caracterele si sirurile de caractere pot fi citite (din fisierul de intrare) cu procedura read, care nu ignora blancurile, asa cum se intampla cand citeste numere intregi sau reale;
  • Caracterele si sirurile de caractere pot fi scrise cu procedura write, careia putem sa-i asociem un sablon de editare;
  • Operatorii care pot fi utilizati cu variabilele de tip char si string sunt: < ;<= ;> ;>=; =;<>.
  • Compararea se face caracter cu caracter, de la stanga la dreapta (lexicografic), terminandu-se fie la intalnirea primei perechi de caractere neegale, fie dupa un numar de comparari egal cu minimul dintre lungimile sirurilor. Doua siruri sunt egale cand au aceeasi valoare (si aceeasi lungime). Doua siruri sunt inegale cand au valori diferite (sau lungimi diferite). Un sir este mai mare ca altul in urmatoarele situatii:
    a) cand, in analiza de la stanga la dreapta, se intalneste un caracter din respectivul sir mai mare decat caracterul corespunzator din celalalt sir (si analiza se termina).
    b) cand lungimea sirului respectiv este mai mare si s-a realizat numarul de comparari egal cu minimul dintre lungimile sirurilor.

Functii si proceduri standard pentru tipul STRING




CONCAT (sau +) - realizeaza concatenarea sirurilor de caractere;


COPY - extrage din sirul de caractere, de la o pozitie data, un numar specificat de caractere ;


LENGTH - intoarce lungimea unui sir de caractere ;


POS - intoarce pozitia pe care un subsir il ocupa intr-un sir de caractere ;


UPCASE - transforma toate literele mici in majuscule ;


DELETE - sterge din sirul de caractere, de la pozitia specificata, un numar de caractere ;


INSERT - insereaza un subsir intr-un sir, incepand cu o anumita pozitie ;


STR - transforma o valoare numerica intr-un sir de caractere;


VAL - transforma un sir de caractere intr-o valoare numerica, daca transformarea se face fara eroare ;