Referat Tipul Char-string
Mai jos puteti citi fragmente din
Referat Tipul Char-string si de asemenea puteti face
Download Referat Tipul char-stringCiteste fragmente din Referat Tipul Char-string
I.TIP CHAR
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 constantă de tip char se reprezintă de obicei prin
caracterul corespunzător încadrat între caractere apostrof..De
exemplu,’a’,’A’,’7’,’+’reprezintă constante de tip
char.
O variabila de tip char se declară astfel:
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’
aracter 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.
Tipul string
prelucrarea şirurilor de caractere,numeroase implimentări Pascal
pentru definirea unor tipuri de date specifice-tipuri string.
Exemple:
‘Un sir’
‘toamna se numară bobocii’
‘Alt’ ‘sir’ .
ÃŽn Turbo Pascal ,pentru a putea lucra cu ÅŸirurile de caractere se
folosesc variabile de tip string.Acest tip este predefinit,adică este
cunoscut,nu avem nevoie să-l declarăm cu TYPE.
Program st1;
Var t:string;
Begin
t:=’Iepuras’;
writeln(t);
end.
Pentru ca să aflăm modul în care o variabilă de tip string
memorează un şir de caractere scriem următorul exemplu dat în
programul de mai sus:
7 I e p u r a s
T[0] t[1] t[2] t[3] t[4] t[5]
t[6] t[7] t[255]
Prin exemplu de mai sus observăm că pentru o varia bilă de tip string
se rezervă automat un vector cu 256 octeti.
În exemplul dat şirul ‘Iepuras’ este alcătuit din 7
caractere.Octetii de la 1 la 7 memorează caracterele din care este
alcătuit şirul.Restul octetilor,de la 8 la 255 au un conţinut
neprecizat.
Întrucât o variabilă de tip STRING memorează cuvintele sub formă
de vector de caractere,există posibilitatea să accesăm direct
conţinutul unui octet,aşa cum suntem obişnuiti.Astfel,t[1]reţine
codul caracterului ‘I’,t[2] reţine codul caracterului
‘e’,ş.a.m.d.,ca în programul de mai jos:
Program st2;
Var t:string;
I:integer;
Begin
T:=’Iepuras’;
For I :=1 to n do write(t[i]);
End.
În cazul variabilelor de tip string există posibilitatea ca atribuirea
să se facă direct,nu pe litere,aşa cum rezultă din programul st4.
Program st4;
Var t,z:string;
Begin
t:=’Iepuras’;
z:=t;
write(z);
end.
În urma atribuirii,variabila z reţine cuvântul “Iepuras†şi
acesta este afiÅŸat.
Noi ştim că primul octet reţine lungimea vectorului,dar în multe
cazuri acest număr este prea mare –se cunsumă memorie inutil.Din
acest motiv există posibilitatea ca o variabilă de tip string să fie
declarată în aşa fel încat să ocupe un număr mai mic de octeti.
Exemplu: var t:string[4];
Variabila t, ocupă 5 octeti.În acest caz variabila poate reţine
cuvinte ce au cel mult 4 caractere.Programul st5 afişează ‘mama’.
Program st5;
Var t:string[4];
Begin
t:=’mama’;
write(t);
end.
ÃŽn concluzie ,prin utilizarea variabilelor de tip string avem avantajul
că putem adresa şirul de caractere atât în ansamblu,prin utilizarea
numelui variabilei,cât şi pe caractere prin utilizarea parantezelor
drepte.
Limbajul este înzestrat cu proceduri şi funcţii care uşurează mult
lucrul cu ÅŸirurile de cractere.
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
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.
VI. Conversii de la ÅŸiruri la valori numerice ÅŸi invers:
sintaxa unei constante reale în formã ştiinţificã (exemplu ‘
1.E-3 ‘);
Limbajul dispune de douã proceduri care realizeazã conversia de la
valori numerice la ÅŸiruri ÅŸi invers.
*Procedura str are rolul de a transforma o valoare numericã în şir.
Procedure str (X[:Lg[:Zec]];var S:string);
Program conv 1;
Var a: string;n: integer;
begin
write(‘n=’);readln(n);
str (n,a);
writeln(a);
end.
Programul urmãtor are grijă ca întodeauna numãrul de octeţi ai
şirului sã fie mai mare sau egal cu numãrul de octeţi ai valorii
convertite.În acest fel,la afişare,vom şti care este spaţiul ocupat
de şir şi putem sã afişãm rezultatele aliniate.În continuare, ne
ocupãm de conversia valorilor reale cãtre şiruri de caractere.
Program conv2;
Var a: string;
x:real;
begin
x:=-67.789;
str(x: 10 : 2, a);
writeln(a);end.
Acum studiem conversia inversã de la tipul string cãtre valori
numerice(întregi sau reale).
Observaţie: dacã încercãm sã convertim şirul ‘1a2’ cãtre o
valoare de tip integer ,conversia nu reuşeşte, pentru cã şirul
conţine caracterul ‘a’.
Pentru realizarea conversiei utilizãm procedura val .Ea are 3 parametri
ÅŸi anume :
Procedure val(s:string; var variabila_numericã ;var cod_er:integer);
variabila_numericã – variabila de tip întreg sau real care va
reţine rezultatul conversiei;
cod_er – variabilã de tip întreg .Dupã conversie ,aceasta va
reţine 0,dacã conversia a reuşit sau o valoare diferitã de 0,în
caz contrar.
Program conv3;
Var a:string;
X,er:integer;
Begin
Write(‘Şirul este’);readln(a);
Val(a, x, er);
If er=0 then writeln(‘conversia a reuşit’,x)
Else
Begin
Writeln(‘conversia nu a reuşit’);
Writeln(x)
End
End.
Observaţii:
( Dacã şirul de caractere cifre este precedat de un de blank-uri,
conversia nu reuşeşte.Exemplu: şirul ’123 ’ nu poate fi
convertit cãtre o valoare numericã.
( Dacã şirul conţine un singur caracter literã, el nu poate fi
convertit cãtre o valoare numericã.
De exemplu, şirul ‘ 12i ’ nu poate fi convertit . Excepţie fac
şirurile de caractere care respectã
( Dacã variabila care reţine rezultatul este de tip întreg ,iar
şirul conţine punctul zecimal,conversia nu reuşeşte.De exemplu ,
şirul ‘1.23 ’ nu poate fi convertit cãtre o variabilã de tip
întreg, dar poate fi convertit cãtre o variabilã de tip real.
( Dacã în urma conversiei se obţine o valoare numericã care nu poate
fi memoratã de variabila respectivã,programul se terminã
anormal,prin eroare de executare.
Programul urmãtor testeazã dacã o valoare introdusã este numericã
şi dacã este cuprinsã în intervalul [10,20].
Program conversie;
Var ÅŸir :string;
Eroare :int eger;valoare:real;
Begin
Writeln(‘introduceţi şirul ’);readln(şir);
Val(ÅŸir,valoare,eroare);
If eroare <> 0then
Writeln(‘ valoarea introdusã este eronatã ’);
Else
If (valoare<10) or (valoare>20) then
Writeln(‘ valoarea nu este in intervalul dorit ’)
Else
Writeln(‘ ok ’)
End.
ì¥Â@