Stránky neboli dlhú dobu aktualizované. Môžu obsahovať nepresné alebo neaktuálne informácie.
Hľadanie
Rozšírené vyhľadávanie
TOP 7 - stránky
Napaľovacie programy - 108 203x
Free Pascal - Úvod - 65 907x
Lazarus - Kreslenie - 47 466x
Free Pascal - Začiatky - 44 755x
Free Pascal - Podmienky - 37 111x
Free Pascal - Cykly - 36 359x
Internetové prehliadače - 36 218x
Nové v diskusii
Free Pascal - Cykly - štvrtok 31.3.
Lazarus - Začíname - piatok 25.3.
Anketa - streda 2.3.
Navigácia: Programovanie > Free Pascal - Cykly

Free Pascal - Cykly

Pri programovaní v akomkoľvek jazyku sa dosť často používa cyklus. Slúži na opakovanie určitého kroku alebo krokov. Vždy si treba pamätať, že počet opakovaní musí byť konečný, pretože nekonečný program nebude nikdy na osoh.

Určený počet opakovaní

Cyklus s určeným počtom opakovaní môžeme využiť, ak dopredu vieme, koľko krát treba dané inštrukcie vykonávať. Má syntax:

for premenná := hodnota1 to hodnota2 do
 príkaz;

Premenná v tomto prípade slúži na počítanie opakovaní a musí byť ordinálna (napr. celé číslo alebo znak). Hodnota premennej sa bude zvyšovať od hodnoty1 do hodnoty2. Nasledujúci príklad vypíše čísla od 1 do 15:

program cisla;
var
 c: integer;
begin
 for c := 1 to 15 do
  writeln(c);
end.

Ak chceme vykonať viac ako jeden príkaz, musíme použiť kľúčové slová begin a end.

for cislo := -5 to 5 do begin
 writeln(cislo);
 writeln('mocnina: ',cislo*cislo);
end;

Existuje aj variant, pri ktorom sa hodnota premennej nezväčšuje, ale zmenšuje. Stačí miesto slova to použiť downto.

writeln('odpocitavanie:');
for i := 10 downto 1 do
 writeln(i);
writeln('koniec');

Ešte jedna vychytávka. Miesto celého čísla môžeme tiež použiť znak - typ char.

program abeceda;
var
 znak: char;
begin
 for znak := 'a' to 'z' do
  write(znak);
end.

Cykly s podmienkou

Využívame ho, ak má podmienka rozhodnúť o tom, či bude cyklus pokračovať.

while podmienka do
 príkaz;

Príkaz sa bude vykonávať dovtedy, kým má logický výraz (testovaný na začiatku) hodnotu true. Pri viacerých príkazoch používame známe begin a end. Tento príklad bude žiadať napísanie čísla dovtedy, kým užívateľ nezadá číslo väčšie ako 10.

program cyklus2;
var
 cislo: integer;
begin
 while cislo <= 10 do begin
  writeln('zadajte cislo vacsie ako 10');
  readln(cislo);
 end;
end.

Existuje aj iný typ cyklu a má syntax:

repeat
 príkaz(y)
until nepravdiva_podmienka

Daný príkaz sa bude opakovať, kým bude mať logický príkaz (zisťovaný na konci) hodnotu false. Jednoduchým, ale užitočným príkladom je pozastavenie programu pred jeho koncom, kým užívateľ nestlačí klávesu. Pomôže nám funkcia keypressed.

program vypisx;
uses
 crt;
begin
 writeln('x');
 repeat until keypressed;
end.

Zistili sme, že medzi repeat a until nemusíme uviesť žiaden príkaz.

Medzi cyklom s podmienkou na začiatku a na konci je jeden dôležitý rozdiel - v druhom spomínanom prípade sa príkazy vykonajú vždy aspoň raz.

Náhle ukončenie cyklu

Ak potrebujeme okamžite ukončiť cyklus, napríklad niekde v jeho strede, použijeme príkaz break.

program stop;
var
 i, cislo: integer;
begin
 for i := 1 to 5 do begin
  writeln('Napiste cislo.');
  readln(cislo);
  if cislo >= 100 then begin
   writeln('Nespravna hodnota, koncim!');
   break; // uplny koniec cyklu
  end;
  writeln('Spravna hodnota.');
 end;
end.

Náš program v ideálnom prípade prečíta päť čísel z klávesnice. Akonáhle však zadáme číslo >= 100, vypíše sa hláška a celý cyklus sa ukončí.

Pokračovanie v cykle

Príkaz continue preskočí všetko, čo nasleduje za ním v cykle. Potom pokračuje až v ďalšom opakovaní. Zvýši pritom počítaciu premennú / testuje podmienky cyklu, ako zvyčajne.

Pre pochopenie uvediem príklad, veľmi podobný predchádzajúcemu. Jediný rozdiel bude v tom, že ak užívateľ zadá nesprávne číslo (teda >= 100), bude ešte musieť zadať aj zvyšné čísla. Program teda vždy prečíta práve päť čísel.

program pokracuj;
var
 i, cislo: integer;
begin
 for i := 1 to 5 do begin
  writeln('Napiste cislo.');
  readln(cislo);
  if cislo >= 100 then begin
   writeln('Zla hodnota, ale to nevadi.');
   continue; // skok na dalsie opakovanie
  end;
  writeln('Spravna hodnota.');
 end;
end.

Príkaz continue nie je až taký frekventovaný, ale odporúčam vám vyskúšať, ako funguje.

Hodnotenie
1 2 3 4 5 (ako v škole)
Priemerná známka: 2,73
Diskusia k tejto stránke
Prejsť do diskusie»
2005-2012, Matúš Sulír, matus.sulir (zav) gmail bodka com. Gen.: 0,0545 s. Valid XHTML, CSS.