1.2. TIPURI DE DATE ȘIR DE CARACTERE
Printre tipurile standard Pascal se numără si tipul CHAR.Valorile de tip char reprezintă caractere(litere mari si mici,cifre,semne de punctuaţie etc.).O
O variabila de tip char se declară astfel:
II.Concatenarea şirurilor
Pentru a concatena 2 şiruri de caractere se foloseşte operatorul ‘+’ .Operatorul ‘+’ este binar şi poate acţiona asupra datelor de tip string.Ce înţeleg prin concatenare ?
Concatenarea este operaţia prin care din 2 şiruri de caractere se obţine un al treilea format astfel:primul şir(cel aflat în stânga operatorului) urmat de al doilea şir (cel din dreapta).
Program st6;
Var t,z:string;
Begin
t:=’acest’;
z:=’exemplu’;
t:=t+z;
writeln(t);
end.
În programul st6 se concatenează două şiruri de caractere (t:=t+z);
III Compararea şirurilor
Şirurile de caractere pot fi comparate.Notînd 2 şiruri cu a şi b avem:a=b(sînt egale);a>b sau a<b.
Compararea şirurilor de caractere este extrem de utilă în sortarea alfabetică a cuvintelor(ca în dicţionar).
În programul următor se sortează alfabetic mai multe şiruri de caractere.Pentru aceasta ,se declară un vector în care fiecare componentă este de tip string.
Program alfabetic;
Type cuvinte =array[1..10] of string;
Var v:cuvinte;
Man:string;
n,i:byte;
inv:boolean;
begin
write(‘n=’);readln;
for i:=1 to n do readln(v[i]);
repeat
inv:=false;
for i:=1 to n-1 do
if v[i]>v[i+1] then
begin
man:=v[i];v[i]:=v[i+1]; v[i+1]:=man;
inv:=true;
end
until not inv;
for i:=1 to n do writeln(v[i]);
end.
IV.Lungimea şirurilor de caractere
Prin lungimea unui şir de caractere înţelegem numãrul de caractere pe care acesta le conţine.
Pentru aflarea lungimii unui şir avem douã posibilitãţi.
1.Prin utilizarea funcţiei length . Aceasta are formula generalã:
function’length(s:string):integer;
EXEMPLE:
a). var a:string; c:integer;
. ……….. ……………
a:=’un test’;
c:=length(a);
În urma atribuirii, variabila c reţine 7.
2).În programul urmãtor se afişeazã lungimea unui şir citit.
Program t;
Var a:string;
Begin
Write(‘a=’);readln(a);
Writeln(‘lungimea şirului a este’,length(a));
Writeln(‘lungimea şirului a este’,ord(a[0]));
End.
Mai existã şi şirul vid,adicã fãrã caractere.Exemplu: a:=’ ‘.
V.Subşiruri:
Fiind dat un şir de caractere ,prin subşir al sãu se înţelege un şir de caractere consecutive care se regãsesc în şirul iniţial.
EXEMPLU:
Şirul ‘harnic’ are ca subşir al sãu ‘rni’ .Acesta începe în poziţia a 3 din şirul iniţial (3caractere).
Existã mai multe proceduri şi funcţii care acţionează asupra şirurilor de caractere .Aceste sunt prezentate mai jos.
- Funcţia copy are rolul de a extrage un subşir din cadrul unui şir dat.
Function copy(s:string;început,lungime:integer):string;
*- variabila s ,de tip string ,conţine şirul din care se face extragerea;
*- început –reţine poziţia de început a subşirului care se extrage;
*- lungime- reţine numãrul de caractere care se extrag.
PROGRAM s1;
Var a,b:string;
i, j:byte;
Begin
Write(‘a=’);readln(a);
Write(‘i:=’);readln(i);
Write(‘j=’);readln(j);
B:=copy(a ,I , j);
Writeln(b);
End.
- Funcţia pos are rolul de a verifica dacã un şir este subşir pentru altul.
Function pos(subşir,şir:string) :byte;
Programul urmãtor citeşte 2 şiruri a şi b şi verificã dacã b este subşir al lui a.
În ambele cazuri se dau mesaje.
Program s2;
Var a, b :string;
N:integer;
Begin
Write(‘a=’);readln(a);
Write(‘b=’);readln(b);
n:=pos(b,a);
if n=0
then writeln(‘b nu este subşir al lui a’)
else writeln(‘b este subşir al lui a şi începe în poziţia’,n);
end.
- Procedura insert are rolul de a insera un şir de caractere începînd cu o anumitã poziţie,înalt şir.
Procedure insert (sir_de_ins: string; var şir_unde_ins:string; poz: integer);
- şir_de_ins –şirulcare urmeazã a fi inserat;
- şir_unde_ins – şirul în care se face inserarea;
- poz – poziţia din care se face inserarea.
Program s3;
Var a, b :string;
Begin
Write(‘a=’);readln(a);
Write(‘b=’);readln(b);
Insert(b, a, 3);
Writeln(a);
End.
- Procedura delete are rolul de a şterge un subşir din cadrul unui şir dat.
Procedure delete(var şir:string; indice ,nr_car: integer);
Programul urmãtor citeşte un şir de caractere într-o variabilã de tip string ,numitã a.
Program s4;
Var a:string;
Begin
Write(‘a=’);readln(a);
Delete(a, 3, 2);
End.
Var : char;
Valoarea unei variabile de tip char este reprezentată de un singur caracter.Această valoare este asociată variabilei prin citire sau atribuire.Programul de mai jos citeşte un caracter pe care îl afisează de mai multe ori.
PROGRAM exemplu(Caracter);
Var c:char; {-caracterul citit-}
k:integer; {-control caractere afisate-}
Begin
Write(‘Introduceti un caracter:’);readln(c);
For k:=1 to 25 do
Write(c);
Writeln
End.
Tipul char e un tip ordinal.Aceasta inseamna ca valorile lui sunt ordonate.
Exemplu:
‘0’<’1’<…<’9’
‘A’<’B’<…<’Z’
Deoarece valorile de tip char sunt ordonate,pentru a afla predecesorul sau succesorul unui caracter pot fi apelate funcţiile standard pred şi succ.De exemplu,apelând pred(‘j’) avem ‘i’,iar succ(‘j’) avem’k’.
Functia ord ,apelată cu parametru de tip char,furnizează ca rezultat numărul de ordine al caracterului.La Turbo Pascal acest număr,cuprins între 0 si 255,coincide cu codul ASCII al caracterului respectiv.Pentru a afla codul unui caracter poate fi utilizat următorul program:
Program CodulunuiCaracter;
Var caracter:char;
Begin
Write(‘Introduceti un caracter:’);readln(caracter);
Writeln(‘caracterul’,caracter,’arecodul’,ord(caracter));
Readln
End.
Functia ord poate fi utilizată si pentru a determina poziţia unei litere din alfabetul latin,astfel:
Ord(litera)-ord(‘A’)+1 sau
Ord(litera)-ord(‘a’)+1
Variabilele de acest tip pot fi utilizate ca variabilele de control ale ciclurilor cu contor(for).De exemplu,programul de mai jos afisează codurile ASCII ale cifrelor,utilizînd în acest scop un ciclu For
cu variabila de control de tip char:
Program CoduriCifre;
Var c:char;
Begin
Write(‘Codurile ASCII ale cifrelor sunt:’);
For c:=’0’ to ‘9’ do
Write(‘ ‘,ord(c));
Writeln
End.
Una dintre utilizările “clasice”ale caracterelor este cea de codificare a opţiunilor.Cazul cel mai simplu este cel al întrebărilor la care se răspunde cu Da sau Nu , prin apăsarea tastei D sau N.
Program exemplu;
Var Raspuns:char;
Begin
Write(‘acum ploua?[Da/Nu] :’);readln(Raspuns);
If (Raspuns = ‘d’) or (Raspuns = ‘D’)then
Writeln(‘Ce bine ca nu ne trebuie umbrela :’)
End.