Turbo Pascal - 6. lekce
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Turbo Pascal - 6. lekceTurbo Pascal - 6. lekce

 

Turbo Pascal - 6. lekce

Google       Google       21. 11. 2005       39 731×

Datové typy i proměnné máme za sebou. Můžeme se tedy pustit do podmínek.

Reklama
Reklama

Výklad učiva:

Podmínky v Pascalu máme vlatně jen dvě. Jsou výjimky typu While, ale já osobně pokládam while za cyklus a ne podmínku. První z podmínek má hodně možností zapsání, kdežto druhá má pouze dva.

Příkaz IF

Podmínka IF aneb "jestliže", má mnoho způsobů zapsání, ovšem všechny mají stejné jedno, a to porovnání podmínky. Podmínka se zapisuje pomocí porovnávíní Cproměnné a máme několik možností porovnání:


Číselné hodnoty (Integer)

a<5   (* proměnná a je menší než 5 *)
a>5   (* proměnná a je větší než 5 *)
a<=5 (* proměnná a je menší nebo rovna 5 *)
a>=5 (* proměnná a je větší nebo rovna 5 *)
a<>5 (* proměnná a se nerovná 5 *)
a=5   (* proměnná a se rovná 5 *)

Písmena (Char)
a='N'  (* proměnná a se rovná N *)
a<>'N' (* proměnná a se nerovná N *)

Logické hodnoty (Boolean)
a=TRUE  (* proměnná a se rovná TRUE (pravda) *)
a<>False (* proměnná a se nerovná FALSE (nepravda) *)

Číselné příklady jsou, myslím si, jasné. U písmen, tedy typu Char, je možné dělat i stejné operace jako u čísel, protože každé písmeno má svojí hodnotu v ASCII tabulce, ale dopředu se dohodneme, že budeme u písmen používat pouze rovná se a nerovná se. U posledního typu (Boolean) si bystřejší z vás všimnou, že obě podmínky mají stejný význam, protože pokud se 'a' nerovná FALSE, logicky se rovná TRUE, což je napsané nad ní.

Podmínky lze také kombinovat, samozřejmě, a to pomocí logických operátorů AND a OR, přičemž se musí výraz umístit do závorek. Uveďme si příklad:


(a='N') AND (a='n')
(a=5) OR (a=10)

Složené podmínky můžeme také kombinovat a vnořovat, takže nám může vzniknout například tohle:


( (a='N') OR (a='n') AND (a='A') OR (a='a') )

Upozorňuji na velkou ostražitost při psaní závorek!

To by byl základ psaní podmínek a teď již k samotnému příkazu.

Jednoduchá podmínka

Jednoduchá podmínka se zapisuje ve tvaru: IF podminka THEN prikaz; např.: IF a=5 THEN write('Ahoj svete');

Program zkontroluje výraz v podmínce jestli je pravdivý a pokud ano, provede příkaz za slůvkem THEN. Pokud není podmínka pravdivá, celý příkaz přeskočí a pokračuje v programu. Například:


...  
  writeln('Pokud zmacknes klavesu O vypise se ti ,,Obraz" ');
  a:=readkey;
  if (a='O') OR (a='o') then writeln('Obraz');
  write('Pokracujeme v programu');
... 

Jak vidíte, rovnou jsem si pojistil v podmínce, že zmáčknutá klávesa může být jak velké tak malé ,,O" . Jde o to, že v syntaxi kompilátor sice nerozpoznává velká a malá, ovšem hodnota proměnné je buď velká nebo malá.

Úplná podmínka

Úplná podmínka se zapisuje ve tvaru : IF podminka THEN prikaz ELSE prikaz; např.: IF a=5 THEN write('Ahoj svete') ELSE write('Nashle svete');

Program tedy zkontroluje podmínku a pokud je pravdivá, vykoná příkaz za slůvkem THEN, pokud není pravdivá, vykoná příkaz za slovem ELSE. Všiměte si, že příkaz za slůvkem THEN není ukončen středníkem a to proto, že pokud v podmínce použijete slovo ELSE, nesmí se za THEN psát středník. Program tedy vykoná větev podle vyhodnocení podmínky a pokračuje dál. Například:


...
  write('Chces vypsat ahoj svete? A/N ');
  readln(volba);
  IF (volba='A') OR (volba='a') THEN writeln('Ahoj svete') ELSE writeln('Nevypisu');
  write('Podminka byla vykonana a pokracujeme');
...

Podmínky se mohou samozřejmě také vnořovat, ale moc to nedoporučuji, protože se pak zdrojový kód stává dost nepřehledným.

Myslím, že prozatím nebudeme k příkazu IF více potřebovat. Poslední co potřebujete vědět je, že, jak jste si všimli, za slůvka THEN a ELSE lze vložit pouze jeden příkaz. Taková podmínka by nám byla samozřejmě k ničemu, a proto se tento problém řeší použitím složeného příkazu BEGIN END; . Dejte si pozor na středník za endem.

Příkaz CASE

Předchozí příkaz (IF) nám program dokázal rozvětvit pouze do dvou větví, což je dobré jen pro nějaká opatření a další maličkosti, ovšem pro větší projekty je samozřejmě potřeba větvení do více větví. O to se právě stará příkaz CASE nebo-li přepínač.

Příkaz se zapisuje v tomto tvaru:

CASE promenna OF
'hodnota': prikaz;
'hodnota2': prikaz;
....
'hodnotaN': prikaz;
End;

Nejlepší asi bude, když hned uvedu příklad:


...
writeln('zadej tvoji volbu: ');readln(volba);
CASE volba OF
  'A','a' : writeln('Ahoj svete');
  'N','n' : writeln('Nashle svete');
  'E','e' : writeln('Euklidovo cislo');
  'K','k' : writeln('Konec');
End;
write('Prepinac vypsal, co mel a my pokracujeme');
...  

Příkaz CASE, stejně jako IF, má ještě jednu variantu, a to se slůvkem ELSE. Tzn., že přepínač zkontroluje všechny větve a pokud výraz neodpovídá žádné z nich, provede to, co je za slůvkem ELSE. Pokud slovo ELSE nepoužijeme, tak program normálně pokračuje dále.

Problematika podmínek je, myslím si, velmi těžká látka a pro dnešek jsme si toho už vysvětlili hodně. Nakonec tedy malá ukázka programu s použitím podmínek:


Program podminky;
Uses crt;
label skok;      (* Deklarace skoku *)
var i:integer;     (* Deklarace promennych *)
    odpoved,volba:char;
Begin
 clrscr;
 write('Vitejte v programu Test');  (* Uvitani *)
 readln;
 skok:    (* Zacatek skoku *)
 clrscr;
 writeln('1. Jaka je nejlepsi stranka o programovani? ');
 writeln('a) Azetko.sk');
 writeln('b) Programujte.com');    (* Otazka *)
 writeln('c) Seznam.cz');
 readln(odpoved);
 CASE odpoved OF    (* Prepinac *)
   'A','a' : Begin    (* pokud je odpoved A *)
               write('Nene Azetko je slovensky vyhledavac zkus to znovu');
               readln;
               goto skok;
             end;
   'B','b' : write('Vyborne! Programujte rulezzz');  (* Pokud je odpoved B *)
   'C','c' : Begin     (* Pokud je odpoved C *)
               write('Ale to vis ze ne Seznam je Cesky vyhledavac zkus to znovu');
               readln;
               goto skok;
             end;
   ELSE Begin     (* Pokud je odpoved jina nez a,b,c *)
          write('Spatne zadani. Zadej a,b nebo c');
          readln;
          goto skok;
        end;
 End;
readln;
clrscr;
Write('Odpovedel jsi spravne chces to zkusit znovu ? (N/A)');
readln(volba); 
if (volba='A') OR (volba='a') Then goto skok ELSE write('Dekuji za pouziti'); (* Opakovat ? *)
readln;
end.

Úkol

Jak ste si asi všimli, měl jsem trošku problém vymslet rychle nějaký problém, kde bych použil IF i CASE a nebylo to na tisíc řádků. A jelikož programátor musí být nápaditý a mít fantazii, tak je to samé teď na vás. Vymyslete nějaký program, ve kterém použijete jak IF, tak CASE. Dopředu říkam, že chci, aby program měl určitou úroveň, tzn. počty s proměnnými a další a další věci.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor programuje v Pascalu.

Nové články

Obrázek ke článku Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

Reklama
Reklama
Obrázek ke článku ICT PRO školení zaměřené nejenom na ICT

ICT PRO školení zaměřené nejenom na ICT

Dovolte, abychom se představili. Jsme zaměstnanci společnosti ICT Pro, profesionálové v oblasti poskytování komplexních ICT služeb. Neboli služeb spojených s informačními a komunikačními technologiemi, které dnes - ve 21. století - tvoří  nedílnou součást běžného provozu všech moderních firem.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý