Jazyk C - cykly: Rozdiel medzi revíziami
(26 medziľahlých úprav od 3 ďalších používateľov nie je zobrazených) | |||
Riadok 2: | Riadok 2: | ||
[[Kategória:Informatika]] | [[Kategória:Informatika]] | ||
{{Skripta_ZI}} | {{Skripta_ZI}} | ||
+ | __TOC__ | ||
==Cykly== | ==Cykly== | ||
'''Cykly''' v programovaní sa začnú používať, keď potrebujeme opakovane vykonávať blok príkazov. Napríklad: Predpokladajme, že chceme vytlačiť „Hello World“ 10-krát. Toto sa dá urobiť dvoma spôsobmi, ako je uvedené nižšie: | '''Cykly''' v programovaní sa začnú používať, keď potrebujeme opakovane vykonávať blok príkazov. Napríklad: Predpokladajme, že chceme vytlačiť „Hello World“ 10-krát. Toto sa dá urobiť dvoma spôsobmi, ako je uvedené nižšie: | ||
− | Spôsob, ako to urobiť, je napísať printf() 10-krát. | + | Spôsob, ako to urobiť, je napísať [[Printf (jazyk C)|printf]]() 10-krát. |
<source lang="c" line> | <source lang="c" line> | ||
Riadok 34: | Riadok 35: | ||
Existujú hlavne dva typy cyklov: | Existujú hlavne dva typy cyklov: | ||
− | + | ;Cyklus s podmienkou na začiatku: V tomto type cyklov sa testovacie podmienky testujú pred vstupom do cyklu. For cyklus a While cyklus sú vstupom riadené cykly. | |
− | + | ;Cyklus s podmienkou na konci: V tomto type cyklov sa testovacie podmienky testujú alebo hodnotia na konci tela cyklu. Preto sa bude cyklus vykonávať aspoň raz, bez ohľadu na to, či je testovacia podmienka pravdivá alebo nepravdivá. do - while cyklus je s podmienkou na konci. | |
− | |||
− | |||
− | |||
− | |||
− | V tomto type cyklov sa testovacie podmienky testujú alebo hodnotia na konci tela cyklu. Preto sa bude cyklus vykonávať aspoň raz, bez ohľadu na to, či je testovacia podmienka pravdivá alebo nepravdivá. do - while cyklus je | ||
− | |||
− | |||
− | |||
− | |||
==For cyklus== | ==For cyklus== | ||
− | + | ;Cyklus For: Sa používa na opakované vykonávanie bloku príkazov, kým sa daná podmienka vráti pravdivo. Cyklus nám umožňuje vykonať n počet krokov spolu na jednom riadku. | |
− | Cyklus for sa skláda z 3 častí | + | '''Cyklus for sa skláda z 3 častí''' |
*Inicializačná premenná: V tomto výraze musíme inicializovať počítadlo slučky na nejakú hodnotu. napríklad: int i = 1; | *Inicializačná premenná: V tomto výraze musíme inicializovať počítadlo slučky na nejakú hodnotu. napríklad: int i = 1; | ||
*Testovací výraz: V tomto výraze musíme testovať stav. Ak sa stav vyhodnotí ako true, vykonáme telo slučky a prejdeme na aktualizáciu výrazu, inak opustíme slučku for. Napríklad: i <= 10; | *Testovací výraz: V tomto výraze musíme testovať stav. Ak sa stav vyhodnotí ako true, vykonáme telo slučky a prejdeme na aktualizáciu výrazu, inak opustíme slučku for. Napríklad: i <= 10; | ||
Riadok 57: | Riadok 49: | ||
'''Vývojový diagram pre cyklus For''' | '''Vývojový diagram pre cyklus For''' | ||
− | [[Súbor:For cyklus.png| | + | [[Súbor:For cyklus.png|240px|none]] |
Riadok 88: | Riadok 80: | ||
''Výstup:'' | ''Výstup:'' | ||
<source lang="c" > | <source lang="c" > | ||
− | + | 10x Hello World | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | Hello World | ||
</source> | </source> | ||
Riadok 132: | Riadok 115: | ||
V cykle for sa na riadenie cyklu používa premenná (v našom prípade i). Najprv inicializujte túto premennú cyklu na nejakú hodnotu, potom skontrolujte, či je táto premenná menšia alebo väčšia ako hodnota počítadla. Ak je príkaz pravdivý, vykoná sa telo cyklu a aktualizuje sa premenná. Kroky sa opakujú, až kým nedôjde k výstupu. | V cykle for sa na riadenie cyklu používa premenná (v našom prípade i). Najprv inicializujte túto premennú cyklu na nejakú hodnotu, potom skontrolujte, či je táto premenná menšia alebo väčšia ako hodnota počítadla. Ak je príkaz pravdivý, vykoná sa telo cyklu a aktualizuje sa premenná. Kroky sa opakujú, až kým nedôjde k výstupu. | ||
− | ==While | + | ==Cyklus While== |
Pri štúdiu cyklu for sme vedeli, že počet iterácií je známy vopred, t. j. Koľkokrát sa vykoná telo cyklu, zatiaľ čo while cyklus sa používa v situáciách, keď vopred nevieme presný počet iterácií slučky. Vykonanie slučky je ukončené na základe testovacích podmienok. | Pri štúdiu cyklu for sme vedeli, že počet iterácií je známy vopred, t. j. Koľkokrát sa vykoná telo cyklu, zatiaľ čo while cyklus sa používa v situáciách, keď vopred nevieme presný počet iterácií slučky. Vykonanie slučky je ukončené na základe testovacích podmienok. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
'''Syntax''' | '''Syntax''' | ||
− | '''Cyklus while''' pozostáva z | + | '''Cyklus while''' pozostáva z inicializačného výrazu. |
<source lang="c" > | <source lang="c" > | ||
Riadok 160: | Riadok 133: | ||
− | ''' | + | '''Vlasnosti cyklu while:''' |
− | + | *Na kontrolu stavu sa používa podmienený výraz. Príkazy definované vo vnútri cyklu while sa budú opakovane vykonávať až do zlyhania danej podmienky. | |
+ | *Podmienka bude splnená, ak sa vráti 0. Podmienka bude neplatná, ak vráti akékoľvek nenulové číslo. | ||
+ | *V slučke while je podmienený výraz povinný. | ||
+ | *Je možné spustiť cyklus bez tela. | ||
+ | *V cykle while môžeme mať viac ako jeden podmienený výraz. | ||
+ | *Ak telo cyklu obsahuje iba jeden príkaz, sú zátvorky voliteľné.<ref>https://www.javatpoint.com/while-loop-in-c</ref> | ||
+ | |||
+ | |||
+ | |||
+ | '''Vývojový diagram:''' | ||
+ | [[Súbor:While (1).png|360px|none]] | ||
'''Príklady v jazyku c''' | '''Príklady v jazyku c''' | ||
Riadok 202: | Riadok 185: | ||
#include<stdio.h> | #include<stdio.h> | ||
int main(){ | int main(){ | ||
− | int i=1; | + | int i=1; |
− | while(i<=10){ | + | while(i<=10){ |
− | printf("%d \n",i); | + | printf("%d \n",i); |
− | i++; | + | i++; |
− | } | + | } |
return 0; | return 0; | ||
} | } | ||
Riadok 225: | Riadok 208: | ||
</source> | </source> | ||
− | + | ==Cyklus Do while== | |
− | ==Do while | ||
Na rozdiel cyklov for a while ktoré testujú stav cyklu na začiatku, cyklus do while v programovaní v C testujú stav cyklu na konci. To znamená že ukončenie cyklu je podmienené na základe ukončovacích podmienok. | Na rozdiel cyklov for a while ktoré testujú stav cyklu na začiatku, cyklus do while v programovaní v C testujú stav cyklu na konci. To znamená že ukončenie cyklu je podmienené na základe ukončovacích podmienok. | ||
Riadok 246: | Riadok 228: | ||
'''Vývojový diagram:''' | '''Vývojový diagram:''' | ||
− | [[Súbor: | + | [[Súbor:DoWhile.png|300px|none]] |
Všimnite si, že podmienený výraz sa objaví na konci cyklu, takže výrok v slučke sa vykoná raz pred testovaním podmienky. | Všimnite si, že podmienený výraz sa objaví na konci cyklu, takže výrok v slučke sa vykoná raz pred testovaním podmienky. | ||
Riadok 288: | Riadok 270: | ||
#include<stdio.h> | #include<stdio.h> | ||
int main(){ | int main(){ | ||
− | int i=1; | + | int i=1; |
− | do{ | + | do{ |
− | printf("%d \n",i); | + | printf("%d \n",i); |
− | i++; | + | i++; |
− | }while(i<=10); | + | }while(i<=10); |
return 0; | return 0; | ||
} | } | ||
Riadok 316: | Riadok 298: | ||
#include<stdio.h> | #include<stdio.h> | ||
int main(){ | int main(){ | ||
− | int i=1,cislo=0; | + | int i=1,cislo=0; |
− | printf("Vloz cislo: "); | + | printf("Vloz cislo: "); |
− | scanf("%d",&cislo); | + | scanf("%d",&cislo); |
− | do{ | + | do{ |
− | printf("%d \n",(cislo*i)); | + | printf("%d \n",(cislo*i)); |
− | i++; | + | i++; |
− | }while(i<=10); | + | }while(i<=10); |
return 0; | return 0; | ||
} | } | ||
Riadok 342: | Riadok 324: | ||
50 | 50 | ||
</source> | </source> | ||
− | |||
==Nekonečný cyklus== | ==Nekonečný cyklus== | ||
− | Nekonečný cyklus je časť programovania, | + | Nekonečný cyklus je časť programovania, ktorá nemá funkčný výstup, takže sa opakuje donekonečna. Nekonečný cyklus nastane, keď sa stav vždy vyhodnocuje ako pravdivý. Zvyčajne sa jedná o chybu. |
Cyklus do-while bude prebiehať donekonečna,keď ako podmienený výraz odovzdáme ľubovoľnú nenulovú hodnotu. | Cyklus do-while bude prebiehať donekonečna,keď ako podmienený výraz odovzdáme ľubovoľnú nenulovú hodnotu. | ||
Riadok 403: | Riadok 384: | ||
</source> | </source> | ||
− | == | + | ==Referencie== |
Aktuálna revízia z 15:38, 26. máj 2020
Učebné texty
Obsah
Cykly
Cykly v programovaní sa začnú používať, keď potrebujeme opakovane vykonávať blok príkazov. Napríklad: Predpokladajme, že chceme vytlačiť „Hello World“ 10-krát. Toto sa dá urobiť dvoma spôsobmi, ako je uvedené nižšie:
Spôsob, ako to urobiť, je napísať printf() 10-krát.
1 #include <stdio.h>
2
3 int main()
4 {
5 printf( "Hello World\n");
6 printf( "Hello World\n");
7 printf( "Hello World\n");
8 printf( "Hello World\n");
9 printf( "Hello World\n");
10 printf( "Hello World\n");
11 printf( "Hello World\n");
12 printf( "Hello World\n");
13 printf( "Hello World\n");
14 printf( "Hello World\n");
15
16 return 0;
17 }
V cykle musí byť príkaz napísaný iba raz a cyklus bude vykonaný 10-krát, ako je uvedené nižšie.
V počítačovom programovaní je cyklus postupnosť inštrukcií, ktorá sa opakuje, až kým sa nedosiahne určitá podmienka.
Existujú hlavne dva typy cyklov:
- Cyklus s podmienkou na začiatku
- V tomto type cyklov sa testovacie podmienky testujú pred vstupom do cyklu. For cyklus a While cyklus sú vstupom riadené cykly.
- Cyklus s podmienkou na konci
- V tomto type cyklov sa testovacie podmienky testujú alebo hodnotia na konci tela cyklu. Preto sa bude cyklus vykonávať aspoň raz, bez ohľadu na to, či je testovacia podmienka pravdivá alebo nepravdivá. do - while cyklus je s podmienkou na konci.
For cyklus
- Cyklus For
- Sa používa na opakované vykonávanie bloku príkazov, kým sa daná podmienka vráti pravdivo. Cyklus nám umožňuje vykonať n počet krokov spolu na jednom riadku.
Cyklus for sa skláda z 3 častí
- Inicializačná premenná: V tomto výraze musíme inicializovať počítadlo slučky na nejakú hodnotu. napríklad: int i = 1;
- Testovací výraz: V tomto výraze musíme testovať stav. Ak sa stav vyhodnotí ako true, vykonáme telo slučky a prejdeme na aktualizáciu výrazu, inak opustíme slučku for. Napríklad: i <= 10;
- Aktualizácia výrazu: Po vykonaní tela slučky tento výraz zvyšuje alebo zmenšuje premennú slučky o nejakú hodnotu. napríklad: i ++;
Vývojový diagram pre cyklus For
Syntax
for (inicializátor; podmienka; inkrement)
{
// telo cyklu
}
Hello World skrz cyklus for
1 #include <stdio.h>
2
3 int main()
4 {
5 int i=0;
6
7 for (i = 1; i <= 10; i++)
8 {
9 printf( "Hello World\n");
10 }
11
12 return 0;
13 }
Výstup:
10x Hello World
Príklad vypíš čísla od 1 po 10:
1 // Napíš čísla od 1 po 10
2 #include <stdio.h>
3
4 int main() {
5
6 for (int i = 1; i < 11; ++i)
7 {
8 printf("%d ", i);
9 }
10 return 0;
11 }
Výstup:
1
2
3
4
5
6
7
8
9
10
V cykle for sa na riadenie cyklu používa premenná (v našom prípade i). Najprv inicializujte túto premennú cyklu na nejakú hodnotu, potom skontrolujte, či je táto premenná menšia alebo väčšia ako hodnota počítadla. Ak je príkaz pravdivý, vykoná sa telo cyklu a aktualizuje sa premenná. Kroky sa opakujú, až kým nedôjde k výstupu.
Cyklus While
Pri štúdiu cyklu for sme vedeli, že počet iterácií je známy vopred, t. j. Koľkokrát sa vykoná telo cyklu, zatiaľ čo while cyklus sa používa v situáciách, keď vopred nevieme presný počet iterácií slučky. Vykonanie slučky je ukončené na základe testovacích podmienok.
Syntax
Cyklus while pozostáva z inicializačného výrazu.
inicializačná premenná;
while (testovací_výraz)
{
// tvrdenie
aktualizácia_výrazu;
}
Vlasnosti cyklu while:
- Na kontrolu stavu sa používa podmienený výraz. Príkazy definované vo vnútri cyklu while sa budú opakovane vykonávať až do zlyhania danej podmienky.
- Podmienka bude splnená, ak sa vráti 0. Podmienka bude neplatná, ak vráti akékoľvek nenulové číslo.
- V slučke while je podmienený výraz povinný.
- Je možné spustiť cyklus bez tela.
- V cykle while môžeme mať viac ako jeden podmienený výraz.
- Ak telo cyklu obsahuje iba jeden príkaz, sú zátvorky voliteľné.[1]
Vývojový diagram:
Príklady v jazyku c
1 // C program ktorý ilustruje while cyklus
2 #include <stdio.h>
3
4 int main()
5 {
6 // inicializačný výraz
7 int i = 1;
8
9 // testovycí výraz
10 while (i < 6)
11 {
12 printf( "Hello World\n");
13
14 // aktualizovaný výraz
15 i++;
16 }
17
18 return 0;
19 }
Výstup
Hello World
Hello World
Hello World
Hello World
Hello World
Vypíš čísla od 1 do 10
1 #include<stdio.h>
2 int main(){
3 int i=1;
4 while(i<=10){
5 printf("%d \n",i);
6 i++;
7 }
8 return 0;
9 }
Výstup
1
2
3
4
5
6
7
8
9
10
Cyklus Do while
Na rozdiel cyklov for a while ktoré testujú stav cyklu na začiatku, cyklus do while v programovaní v C testujú stav cyklu na konci. To znamená že ukončenie cyklu je podmienené na základe ukončovacích podmienok. Cyklus do while je podobný ako cyklus while s výnimkou že cyklus do while sa vykoná aspoň raz.[2]
Syntax
inicializačný výraz;
do
{
// výrok
aktualizovaný výraz;
} while (testovací_výraz);
Poznámka: Na konci cyklu while je bodkočiarka.
Vývojový diagram:
Všimnite si, že podmienený výraz sa objaví na konci cyklu, takže výrok v slučke sa vykoná raz pred testovaním podmienky.
Ak je podmienka splnená, tok kontroly vyskočí späť a príkaz sa v slučke znova vykoná. Tento proces sa opakuje, kým sa daná podmienka nestane nepravdivou.
Príklady v jazyku C
1 // C program na ilustráciu do while cyklu
2 #include <stdio.h>
3
4 int main()
5 {
6 int i = 2; // inicializačný výraz
7
8 do
9 {
10 // telo cyklu
11 printf( "Hello World\n");
12
13 // aktualizovaný_výraz
14 i++;
15
16 } while (i < 1); // testovací_výraz
17
18 return 0;
19 }
Výstup
Hello world
Vo vyššie uvedenom programe sa testovacia podmienka (i <1) vyhodnotí ako nepravdivá. Ale aj keď je slučka ukončená - telo slučky sa vykoná raz.
Výpis čísel od 1 po 10
1 #include<stdio.h>
2 int main(){
3 int i=1;
4 do{
5 printf("%d \n",i);
6 i++;
7 }while(i<=10);
8 return 0;
9 }
Výstup
1
2
3
4
5
6
7
8
9
10
Program tabuľky pre dané číslo pomocou cyklu do while
1 #include<stdio.h>
2 int main(){
3 int i=1,cislo=0;
4 printf("Vloz cislo: ");
5 scanf("%d",&cislo);
6 do{
7 printf("%d \n",(cislo*i));
8 i++;
9 }while(i<=10);
10 return 0;
11 }
Výstup
Vloz cislo: 5
5
10
15
20
25
30
35
40
45
50
Nekonečný cyklus
Nekonečný cyklus je časť programovania, ktorá nemá funkčný výstup, takže sa opakuje donekonečna. Nekonečný cyklus nastane, keď sa stav vždy vyhodnocuje ako pravdivý. Zvyčajne sa jedná o chybu.
Cyklus do-while bude prebiehať donekonečna,keď ako podmienený výraz odovzdáme ľubovoľnú nenulovú hodnotu.
do{
//výraz
}while(1);
1 // Program C na demonštráciu nekonečných cyklov pomocou for a while
2
3 #include <stdio.h>
4
5 int main ()
6 {
7 int i;
8
9 // Toto je podmienka pre nekonený cyklus
10 // výraz je prázdny
11 for ( ; ; )
12 {
13 printf("Tento cyklus bude bežať do nekonečna.\n");
14 }
15
16 // Nekonečný cyklus ako podmienka
17 // Ak je cyklus zadaný,opakuje sa do nekonečna
18 /*
19 while (i != 0)
20 {
21 i-- ;
22 printf( "Tento cyklus bude bežať do nekonečna.\n");
23 }
24 */
25
26 // Nekonečný cyklus ako podmienka
27 // while cyklus je "true"
28 /*
29 while (true)
30 {
31 printf( "Tento cyklus bude bežať do nekonečna.\n");
32 }
33 */
34 }
''Výstup''
Tento cyklus bude bežať do nekonečna.
Tento cyklus bude bežať do nekonečna.
Tento cyklus bude bežať do nekonečna.
..........
..........
Tento cyklus bude bežať do nekonečna.