Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Programování v Pascalu Přednáška 7 RNDr. Hana Havelková.

Podobné prezentace


Prezentace na téma: "Programování v Pascalu Přednáška 7 RNDr. Hana Havelková."— Transkript prezentace:

1 Programování v Pascalu Přednáška 7 RNDr. Hana Havelková

2 Řetězce Deklarace Deklarovaná a skutečná délka řetězce Přístup k jednotlivým znakům Porovnávání řetězců Spojování řetězců Typové konstanty Funkce a procedury pro práci s řetězci Řetězce jako parametry procedur a funkcí

3 Deklarace délka znaků Reprezentace proměnné typu string  jednorozměrné pole znaků indexované od 1 do N  aktuální (skutečná) délka uloženého řetězce je zaznamenána v bytu s indexem 0 (formálně je obsah toho bytu typu char) stringdélka []

4 Příklady type TJmeno= string [20]; TNadpis = string [60]; TDen= string [2]; TPredmet= string [3]; var jmeno, prijmeni : TJmeno; predmet: TPredmet; veta: string; zahlavi, zapati: TNadpis ;

5 Přístup k jednotlivým znakům pomocí indexu var S : string[10] ; přiřadíme S := 'Dobrý den'; potom S[1] = 'D', S[2] = 'o', …, S[9] = 'n' skutečná délka S je 9 S[0] obsahuje znak s kódem 9

6 Náhrada všech y, i podtržítkem uses Crt; var veta : string; i : byte; begin ClrScr; WriteLn ('Zadej větu :'); ReadLn (veta); for i := 1 to Length(veta) do if veta[i] in ['i','í', 'I','y','ý','Y'] then veta [i] := '_'; ClrScr; WriteLn ('Procvic si psani i – y '); WriteLn (veta); ReadLn; end.

7 Uspořádání řetězců  lexikografické dle kódování znaků ‘4’ < ‘Z’ < ‘f’ < ‘fa’ < ‘fb’ < ‘g’ < ‘č’ < ‘á’  je možné používat relační operátory =,, =, <>  'Novák' < 'Novák ' < 'Nováková'

8 Typové konstanty const NADPIS : string = 'Programování I' ; AUTOR : string [20] = 'Jan Soukup'; VERZE : string [3] = '1.0';

9 Kontrola platného identifikátoru const PlatneZnaky : set of char = ['_', 'A'..'Z', 'a'..'z']; Cislice : set of char = ['0'..'9']; var id : string; i, delka : byte; Chyba : boolean; begin Chyba := false; Write('Zadej identifikator: ') ; ReadLn(id); delka := Length(id); if (delka = 0) or not (id[1] in PlatneZnaky) then Chyba := true else for i := 2 to delka do if not ((id[i] in Cislice) or (id[i] in PlatneZnaky)) then begin Chyba := true; break; end; if Chyba then WriteLn('Chyba!') else WriteLn('OK'); ReadLn; end.

10 Počet cifer čísla zadaného jako řetězec s kontrolou platnosti čísla var cislo : string; n : longint; kod, cifry : integer; begin Write('Zadej cislo: '); ReadLn(cislo); cifry := Length(cislo); if (cislo[1]='-') or (cislo[1]='+') then begin Dec(cifry); cislo := Copy (cislo,2,cifry); {vypustime z retezce znamenko} end; Val (cislo, n, kod) ; {prevedeni na cislo} if kod > 0 then WriteLn ('Neplatne cislo') else WriteLn('Pocet cifer je ', cifry); ReadLn end.

11 Zjištění pohlaví dle křestního jména const vyjimka1 : string = 'Rut'; vyjimka2 : string = 'Ester'; vyjimka3 : string = 'Miriam'; var jmeno : string; delka : byte; vysledek : string[4]; posledni_znak : char; begin Write('Zadej krestni jmeno: '); ReadLn(jmeno); if (jmeno = vyjimka1) or (jmeno = vyjimka2) or (jmeno = vyjimka3) then vysledek := 'zena' else begin delka := Length(jmeno); posledni_znak := jmeno[delka]; if (posledni_znak = 'a') or (posledni_znak = 'e') then vysledek := 'zena' else vysledek := 'muz'; end; WriteLn('Pohlavi: ', vysledek); ReadLn; end.

12 Načtení dlouhého čísla type Cislo = array [1..100] of byte; var C: Cislo; {C[1]…cifra v řádu jednotek} PC: byte; {počet cifer} S: string [100]; i: integer; begin ReadLn(S); PC := 0; for i := Length(S) downto 1 do begin inc (PC); C[PC] := ord(S[i]) - ord('0') ; end; …. end.

13 Standardní rutiny pro práci s řetězci Length(S) aktuální délka řetězce Concat(S1, S2, …, Sn) spojení řetězců za sebe (stejné jako pomocí operátoru +) Copy(S, Index, Pocet)kopírování části řetězce S dané délky počínaje od daného indexu Delete(S, Index, Pocet) zrušení části řetězce S dané délky počínaje od daného indexu Insert(Co, Kam, Index) do řetězce Kam vloží Co na pozici daného indexu Pos(Co, Kde) pozice prvního výskytu podřetězce Co v řetězci Kde (0 pokud není obsažen)

14 Řetězec jako parametr procedur a funkcí vstupní parametr (volání hodnotou) je-li formální parametr typu string bez udaného počtu znaků, může být skutečným parametrem string bez udaného počtu znaků i string[pocet_znaku] je-li formální parametr pojmenovaného typu string [pocet_znaku], může být skutečným parametrem string bez udaného počtu znaků i string[jiny_pocet_znaku] výstupní parametr (volání odkazem) používáme pokud chceme načíst řetězce v podprogramu chceme změnit hodnoty řetězce chceme výsledek výpočtů podprogramu uložit do řetězce u formálního parametru musíme použít var formální a skutečný parametr by měly být shodné typy nebo skutečný parametr může být typ string a formální pojmenovaný podtyp typu string

15 Funkce monogram function Monogram (jm: string):string; var predchozi, aktualni : char; mono : string; i : byte; begin mono := '';{prázdný řetězec} predchozi := ' '; {mezera} for i:=1 to Length(jm) do begin aktualni := jm[i]; if (predchozi = ' ') and (aktualni <> ' ') then mono := mono + UpCase(aktualni); predchozi := aktualni; end; Monogram := mono; end;

16 Funkce Palindrom (1) function Palindrom(text : string) : boolean; var i, delka : byte; odpoved : boolean; {pomocna vnitrni funkce} function SmazMezery (text : string): string; var vysledek : string; i : byte; znak : char; begin vysledek := ''; for i := 1 to Length(text) do begin znak := text[i]; if znak <> ' ' then vysledek := vysledek + znak; end; SmazMezery := vysledek; end;

17 Funkce Palindrom (2) begin odpoved := true; text := SmazMezery(text); delka := Length(text); for i:=1 to delka div 2 do if text[i] <> text[delka-i+1] then begin odpoved := false; break; end; Palindrom := odpoved; end;

18 Procedura Jmeno {upravi jmeno tak, ze první pismeno je velke, ostatní mala} procedure Jmeno(var jm : string); var i : byte; znak: char; begin jm[1] := UpCase(jm[1]); for i := 2 to Length(jm) do begin znak := jm[i]; if znak in ['A'..'Z'] then jm[i] := chr(ord(znak) + ord('a') - ord('A')); end;


Stáhnout ppt "Programování v Pascalu Přednáška 7 RNDr. Hana Havelková."

Podobné prezentace


Reklamy Google