Referat Tipul Char-string

Mai jos puteti citi fragmente din Referat Tipul Char-string si de asemenea puteti face Download Referat Tipul char-string

Citeste 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 av[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. 쥁@