|
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:
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 :
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.
Reprezentarea interna a sirurilor de caractere
Reguli:
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 ;