Jazyk C (príklady) - Podmienky: Rozdiel medzi revíziami

Z Kiwiki
Skočit na navigaci Skočit na vyhledávání
 
(2 medziľahlé úpravy od 2 ďalších používateľov nie sú zobrazené)
Riadok 2: Riadok 2:
 
[[Kategória:Informatika]]
 
[[Kategória:Informatika]]
 
{{Priklady_ZI}}
 
{{Priklady_ZI}}
__TOC__
 
 
   
 
   
==Obsah==
 
 
V tejto časti sú ukázané príklady s využitím podmieného príkazu. Na pochopenie týchto príkladov sa predpokladá zvládnutie syntaxe a sémantiky príkazov if a switch.
 
V tejto časti sú ukázané príklady s využitím podmieného príkazu. Na pochopenie týchto príkladov sa predpokladá zvládnutie syntaxe a sémantiky príkazov if a switch.
  
==if==
+
__TOC__
 +
== Teória==
 +
===if===
 
Príkaz if má 2 verzie.
 
Príkaz if má 2 verzie.
  
Riadok 15: Riadok 15:
 
     príkaz;
 
     príkaz;
 
</source>
 
</source>
Význam: ak je podmienka pravdivá, vykoná sa príkaz.
+
;Význam: ak je podmienka pravdivá, vykoná sa príkaz.
  
 
;2. Úplná verzia: má obe vetvy.
 
;2. Úplná verzia: má obe vetvy.
Riadok 27: Riadok 27:
 
</source>
 
</source>
  
Význam: ak je podmienka pravdivá vykoná sa príkaz1, v opačnom prípade sa vykoná príkaz2.
+
;Význam: ak je podmienka pravdivá vykoná sa príkaz1, v opačnom prípade sa vykoná príkaz2.
 
;3. Rozšírená verzia: vo vetvách má viacero príkazov.
 
;3. Rozšírená verzia: vo vetvách má viacero príkazov.
 
<source lang="c" line>
 
<source lang="c" line>
Riadok 41: Riadok 41:
 
}
 
}
 
</source>
 
</source>
Význam: Význam je rovnaký ako v druhom prípade, avšak teraz vykonávame viacero príkazov. V prípade ak cheme vykonať viacero príkazov, musíme tieto uzatvoriť do bloku {}.
+
;Význam: Význam je rovnaký ako v druhom prípade, avšak teraz vykonávame viacero príkazov. V prípade ak cheme vykonať viacero príkazov, musíme tieto uzatvoriť do bloku {}.
  
==switch==
+
===switch===
 
switch - viacnásobný výber.
 
switch - viacnásobný výber.
 
<source lang="c" line>
 
<source lang="c" line>
 
switch(vyraz)
 
switch(vyraz)
 
{
 
{
case hod_1: prikaz1; break;
+
    case hod_1:  
case hod_2: prikaz2; break;
+
      prikaz1;  
 +
      break;
 +
    case hod_2:
 +
      prikaz2;  
 +
      break;
  
case hod_n: prikazn; break;
+
    case hod_n:  
default: prikazD;
+
      prikazn;  
 +
      break;
 +
    default: prikazD;
 
}
 
}
 
</source>
 
</source>
Význam:
+
;Význam: vyraz môže nadobúdať celočíselné hodnoty hod_1, hod_2, ...,hod_n, alebo nejaké iné celočíselné hodnoty. V prípade že vyraz má hodnotu hod_1, vykoná sa príkaz1 a príkaz switch sa ukončí. V prípade že vyraz má hodnotu hod_2, vykoná sa príkaz2 a príkaz switch sa ukončí.  Ak nadobudne vyraz nejakú inú hodnotu, vykoná sa príkazD. Ak by sa príkaz break neuviedol, vykonajú sa všetky vetvy príkazu switch postupne.
 
 
vyraz môže nadobúdať celočíselné hodnoty hod_1, hod_2, ...,hod_n, alebo nejaké iné celočíselné hodnoty. V prípade že vyraz má hodnotu hod_1, vykoná sa príkaz1 a príkaz switch sa ukončí. V prípade že vyraz má hodnotu hod_2, vykoná sa príkaz2 a príkaz switch sa ukončí.  Ak nadobudne vyraz nejakú inú hodnotu, vykoná sa príkazD. Ak by sa príkaz break neuviedol, vykonajú sa všetky vetvy príkazu switch postupne.
 
  
 
==Príklady==
 
==Príklady==

Aktuálna revízia z 23:16, 19. máj 2020


Základy informatiky - jazyk C


Riešené príklady

Algoritmy

Prvé programy

Podmienky

Cykly

Polia

Funkcie

Súbor

Vzorové príklady

Neriešené príklady


zdroj: Juraj Ďuďák, Zbierka úloh z algoritmizácie pre predmet Základy informatiky

ISBN: 978-80-8075-199-9

V tejto časti sú ukázané príklady s využitím podmieného príkazu. Na pochopenie týchto príkladov sa predpokladá zvládnutie syntaxe a sémantiky príkazov if a switch.

Teória

if

Príkaz if má 2 verzie.

1. Skrátená verzia
má len jednu vetvu.
1 if(podmienka)
2     príkaz;
Význam
ak je podmienka pravdivá, vykoná sa príkaz.
2. Úplná verzia
má obe vetvy.
1 if(podmienka)
2     príkaz;
3 else
4     príkaz2;
Význam
ak je podmienka pravdivá vykoná sa príkaz1, v opačnom prípade sa vykoná príkaz2.
3. Rozšírená verzia
vo vetvách má viacero príkazov.
 1 if(podmienka)
 2 {
 3     príkaz1;
 4     príkaz2;
 5 }
 6 else
 7 {
 8     príkaz3;
 9     príkaz4;
10 }
Význam
Význam je rovnaký ako v druhom prípade, avšak teraz vykonávame viacero príkazov. V prípade ak cheme vykonať viacero príkazov, musíme tieto uzatvoriť do bloku {}.

switch

switch - viacnásobný výber.

 1 switch(vyraz)
 2 {
 3     case hod_1: 
 4        prikaz1; 
 5        break;
 6     case hod_2:
 7        prikaz2; 
 8        break;
 9 
10     case hod_n: 
11        prikazn; 
12        break;
13     default: prikazD;
14 }
Význam
vyraz môže nadobúdať celočíselné hodnoty hod_1, hod_2, ...,hod_n, alebo nejaké iné celočíselné hodnoty. V prípade že vyraz má hodnotu hod_1, vykoná sa príkaz1 a príkaz switch sa ukončí. V prípade že vyraz má hodnotu hod_2, vykoná sa príkaz2 a príkaz switch sa ukončí. Ak nadobudne vyraz nejakú inú hodnotu, vykoná sa príkazD. Ak by sa príkaz break neuviedol, vykonajú sa všetky vetvy príkazu switch postupne.

Príklady

Delenie nulou 1

Zadanie
Vytvorte program, ktorý načíta 2 čísla a vypíše ich podiel. Ošetrite prípad, keď deliteľ je nulový (operácia delenie 0 nie je definovaná).
Analýza problému
V prípade delenia nulou sa program ukončí chybovou hláškou „delenie nulou“. Tento prípad ošetríme vhodným použítím podmieňovacieho príkazu. Operáciu delenia budeme robiť iba v prípade, ak je deliteľ rôzny od nuly.


Program:

 1 #include<stdio.h>
 2 
 3 void main()
 4 {
 5 
 6     float x,y;
 7     printf("Zadajte 2 reálne čísla. \n");
 8     scanf("%f %f",&x,&y);
 9     if(y!=0)
10         printf("podiel x/y=%.3f",x/y);
11 
12 }

Delenie nulou 2

Zadanie
Uvažujeme predchádzajúci príklad s tou zmenou, že ak má deliteľ hodnotu 0, program vypíše upozornenie „Nulou sa delit neda“. V opačnom prípade (teda, keď je všetko v poriadku) sa vypíše podiel.
Analýza problému
V tomto prípade použijeme rozšírenú formu príkazu if: if-else.
 1 #include<stdio.h>
 2 
 3 void main()
 4 {
 5 
 6     float x,y;
 7     printf("Zadajte 2 reálne čísla. \n");
 8     scanf("%f %f",&x,&y);
 9     if(y==0)
10         printf("Nulou sa delit neda");
11     else
12         printf("podiel x/y=%.3f",x/y);
13 
14 }

Absolútna hodnota

Zadanie
Vytvorte program, ktorý vypočíta absolútnu hodnotu zadaného čísla.
Analýza problému
Absolútna hodnota je definovaná ako vzdialenosť čísla od nuly. Teda ak je číslo kladné, jeho absolútna hodnota je to isté číslo. Ak je číslo záporné, jeho absolútna hodnota je toto číslo, ale kladné.

abs(x)=

  • x, ak je x>=0
  • -1*x, ak je x<0
 1 #include<stdio.h>
 2 
 3 void main()
 4 {
 5 
 6     int x;
 7     printf("Zadajte 1 celé číslo. \n");
 8     scanf("%d",&x);
 9     if(x<0)
10          x=-1*x;
11     printf("abs(x)=%d",x);
12 
13 }

Minimálna hodnota

Zadanie
Máme zistiť minimálnu hodnotu z dvoch zadaných čísel x a y.
Analýza problému
Menšie z dvoch čísel zistíme jednoduchým porovnaním hondôt oboch premenných.

Príklad:

 1 #include<stdio.h>
 2 void main()
 3 {    
 4 
 5     int x,y,min;
 6     printf("Zadajte 2 celé čísla. \n");
 7     scanf("%d %d",&x,&y);
 8     if(x<y)
 9          min=x;
10     else
11          min=y;
12     printf("min(%d,%d)=%d",x,y,min);
13 
14 }

Maximálna hodnota

Zadanie
Máme zistiť maximálnu hodnotu z troch zadaných čísel x, y, a z.
Analýza problému
Keďže máme zistiť maximum len z troch čísel, najjednoduchším spôsobom bude porovnať každé číslo s každým. Týmto dostaneme 3 porovnania, po ktorých vieme jednoznačne určiť najväčšie číslo. Na lepšiu predstavivosť poslúži obrázok č.9.

Príklad:

 1 #include<stdio.h>
 2 
 3 int main()
 4 {
 5     int a, b, c, m;
 6     scanf("%d %d %d",&a, &b, &c);
 7     if(a>b)
 8     {    if(a>c)
 9             m=a;
10          else
11             m=c;
12     }
13     else
14     {    if(b>c)
15             m=b;
16          else
17             m=c;
18     }
19     printf("%d",m);
20 }

Slovné hodnotenie

Zadanie
Vytvorte prgram, ktorý by po zadaní známky (číselná hodnota) túto hodnotu previedol na textové hodnotenie. Známky majú takéto slovné hodnotenia: 1-výborne, 2-veľmi dobre, 3-dobre, 4-dostatočne, 5-nedostatočne.
Analýza problému
Na riešenie tohoto problému môžeme použiť príkaz if, avšak jeho použitie je v tomto prípade dosť neprehľadné. Použime teda príkaz switch.

Príklad:

 1 #include<stdio.h>
 2 void main()
 3 {
 4 
 5     int zn;
 6     printf("Zadaj znamku (od 1 do 5)");
 7     scanf("%d",&zn);
 8     switch(zn)
 9     {
10 
11         case 1 : printf("vyborne");break;
12         case 2 : printf("velmi dobre");break;
13         case 3 : printf("dobre");break;
14         case 4 : printf("dostatocne");break;
15         case 5 : printf("nedostatocne");break;
16         default : printf("nepripustna znamka %d\n",zn);break;
17 
18      }
19 
20 }