Presentation is loading. Please wait.

Presentation is loading. Please wait.

Úvod do jazyka C Algoritmizácia úloh 4.

Similar presentations


Presentation on theme: "Úvod do jazyka C Algoritmizácia úloh 4."— Presentation transcript:

1 Úvod do jazyka C Algoritmizácia úloh 4

2 Riadiace štruktúry Riadiace štruktúry predpisujú poradie vykonávania jednotlivých výpočtov. príkaz blok podmienený príkaz príkaz cyklu prepínač príkaz skoku

3 Príkaz a blok Príkaz vzniká pridaním znaku ";" za priradenie a = 1;
Blok je tvorený postupnosťou príkazov jazyka C, uzavrenou v dvojici zložených zátvoriek { }

4 Tvorba podmienok if( <vyraz> ) else while( <vyraz> )
switch( <vyraz>)

5 Podmienený príkaz Podmienka NIE ÁNO Príkaz 2 Príkaz 1

6 Podmienený príkaz if (podmienka) príkaz; else príkaz2;
Podmienený príkaz umožňuje vykonávať vetvenie priebehu programu 1. skrátený tvar if (podmienka) príkaz; 2. úplný tvar if (podmienka) príkaz1; else príkaz2; V obidvoch prípadoch sú príkazy ukončené bodkočiarkou!!

7 Príklad – párne čísla if (delenie == 0) printf("Cislo je parne\n");
else printf("Cislo je neparne\n");

8 Príklad – párne čísla if (delenie == 0) { printf("Cislo je parne\n");
} else printf("Cislo je neparne\n");

9 Príklad – odpoveď užívateľa
printf(“\n\r Chcete pokracovat (a/n) ??? ”); c=getchar(); if (c == ‘a’) { printf(“Uzivatel chce pokracovat”); } else printf(“Uzivatel nechce pokracovat”);

10 Príklad – párne čísla #include <stdio.h>
#include <stdlib.h> int main(int argc, char *argv[]) { int cislo, delenie; printf("Zadaj cele cislo\n"); scanf("%d", &cislo); delenie=cislo%2; if (delenie == 0) printf("Cislo je parne\n"); else printf("Cislo je neparne\n"); system("PAUSE"); return 0; }

11 Pravdivý / nepravdivý výraz
V jazyku C nie je implicitne typ Boolean. Používa sa typ int, kde hodnota „0“ znamená FALSE a nenulová hodnota (najčastejšie „1“ ) je TRUE.

12 Cyklus while nie Podmienka áno Príkaz

13 while (podmienka) príkaz;
Cyklus while while (podmienka) príkaz; Cyklus sa vykonáva, kým je podmienka splnená. Telo cyklu sa teda nemusí vykonať ani raz.

14 Výpis 10-tich riadkov #include <stdio.h> int main() { int i=0;
while (i<10) printf(“\n Riadok cislo %d”, i); i++; } return 0;

15 Príklad – spočítanie čísel
#include <stdio.h> int main() { int cislo=0, sucet=0; while(cislo!=100) printf(“\n\r Zadaj cislo: ”); scanf(“%d”,&cislo); sucet = sucet + cislo; } printf(“\n\r Sucet: %d ”, sucet); return 0;

16 Príkaz while: príklad #include <stdio.h>
program číta znaky z klávesnice, opisuje ich na obrazovku, znaky ‘0’ si nevšíma a skončí po prečítaní znaku * #include <stdio.h> int main(int argc, char *argv[]) { int c; while ((c = getchar()) != '*') if (c != ‘0’) putchar(c); } načítanie znaku - musí byť uzátvorkované, lebo != má väčšiu prioritu ako =

17 Príkaz do-while do { prikazy; } while (podmienka)
testuje podmienku po prechode cyklu cyklus sa vykoná aspoň raz program opúšťa cyklus pri nesplnenej podmienke do { prikazy; } while (podmienka)

18 Príkaz do-while Príkaz nie Podmienka áno

19 Príklad #include <stdio.h> int main() { int cislo=0, sucet=0; do
printf(“\n\r Zadaj cislo: ”); scanf(“%d”,&cislo); sucet = sucet + cislo; } while(cislo!=100) printf(“\n\r Sucet: %d ”, sucet); return 0; }

20 Príkazy break a continue
Oba príkazy je možné použiť vo všetkých typoch cyklov Mení „normálny“ priebeh cyklu break ukončuje vnútornú neuzatvorenú slučku a opúšťa cyklus continue skáče na koniec vnútornej neuzatvorenej slučky a tým sa vynúti ďalšia iterácia slučky – cyklus neopustí

21 Príkaz break #include <stdio.h> int main() { int i=0;
while(i<20) if(i==10) break; printf(“\n\r i = %d”); i++; } return 0;

22 Príkaz continue #include <stdio.h> int main() { int i=0;
while(i<100) if(i==10) break; printf(“\n\r i = %d”); i++; } return 0;

23 Príkaz goto Príkaz nepodmieneného skoku na návestie.
V programe C nemusí byť návestie deklarované. Má sa používať čo najmenej ( účelné použitie napríklad pri výskoku z vnorených cykloch). printf("\n Zadej znak: "); c=getchar(); while (getchar() !='\n'); goto tam; printf(" Bol zadany znak 'a'\n"); tam: printf(" Program bude pokračovat tu\n");

24 Ternárny operátor podmienený výraz
Syntax (podmienka) ? výraz_1 : výraz_2 Ak platí podmienka, vyhodnotí sa výraz_1 Ak neplatí podmienka, vyhodnotí sa výraz_2

25 Príklad int i, k, j = 2; i = (j == 2) ? 1 : 3; i bude 1
k = (i > j) ? i : j; k bude 2

26 Použitie ternárneho operátora
#include <stdio.h> int main() { int cislo1,cislo2,vysledok; printf(" Zadajte prve cislo : "); scanf("%d",&cislo1); printf(" Zadajte druhe cislo : "); scanf("%d",&cislo2); vysledok = ( cislo1>cislo2) ? cislo1 : cislo2 ; printf("Hodnota vacsieho cisla je %d\n",vysledok ); return 0; }

27 Podmienený výraz Príklad: Konverzia znaku na malé písmeno
c = (c >= ‘A‘ && c <= ‘Z‘) ? c + (‘a‘ - ‘A‘) : c;

28 Operátor čiarky Syntax výraz_1 , výraz_2 int i = 2, j = 4;
výraz sa spracováva tak, že sa vyhodnotí prvý výraz a potom sa vyhodnotí druhý výraz, ktorý je aj záverečným výsledkom Príklad: int i = 2, j = 4; j = (i++, i – j); i bude 3 a j bude -1

29 Príkazy cyklu cyklus while cyklus do while cyklus for
Príkaz cyklu sa používa pre riadenie opakovania nejakého výpočtu. Určuje spôsob a podmienku ukončenia opakovania. Jazyk C pozná tri varianty príkazu cyklu: cyklus while cyklus do while cyklus for

30 Cyklus FOR for(i = 0; i< 10; i++)
for(začiatok ; podmienka behu ; zmena ) {     príkaz 1;     príkaz 2;     ...     príkaz n; } for(i = 0; i< 10; i++)

31 Príklady použitia for #include <stdio.h> int main() { int i;
for (i=0; i<20; i++) printf(“%d.) Pekny den\n“,i); } return 0;

32 Príklady použitia for #include <stdio.h> int main() { int i;
for (i=20; i<40; i++) printf(“%d.) Pekny den\n“,i); } return 0; 33 33

33 Príklady použitia for #include <stdio.h> int main() { int i;
for (i=20; i>0; i--) printf(“%d.) Pekny den\n“,i); } return 0; 34 34

34 Príklady použitia for #include <stdio.h> int main(void) {
int i, cislo; printf("\n\r Zadaj cislo: "); scanf("%d", &cislo); for(i=0; i<10; i++) printf("\n\r %d * %d = %d", i, cislo, i*cislo); } while(1); 36 36

35 Príklady použitia for #include <stdio.h> int main(void) {
int i,,zv; for(i=40; i<80; i++) zv=i%3; if(zv==0) printf("\n\r Cislo %d je delitelne tromi",i); } 37 37

36 Prepínač switch Príkaz Podmienka 1 2 3 n Príkaz Príkaz Príkaz Príkaz

37 Prepínač switch Prepínač umožňuje vykonávať vetvenie programu na viac ako dve vetvy. Vetvenie sa vykonáva na základe vyhodnotenia výrazu, ktorý je celočíselného typu. Ak sa nájde zhoda medzi hodnotou výrazu a cestou case, pokračuje výpočet touto vetvou (až po príkaz break), inak je skok na default vetvu. Tvar príkazu je :

38 Prepínač switch switch (výraz) { case hodnota1: prikazy; break;
case hodnotax: default : prikaz; }

39 Príklad na výpis známok
#include <stdio.h> int main() { int zn; scanf(“%d”,&zn); switch(zn) case 1 : printf("vyborne");break; case 2 : printf("velmi dobre");break; case 3 : printf("dobre");break; case 4 : printf("nevyhovel");break; default : printf(“nespravny vstup %d\n",zn);break; } while(1); return 0;

40 tu bude vloženie hodnôt X a Y if ((y < 0) && (x < 0)) kv=3; else if ((y < 0) && (x > 0)) kv=4; else if ((y > 0) && (x > 0)) kv=1; else if ((y > 0) && (x < 0)) kv=2; switch (kv) { case 1 : printf("Bod je v prvom kvadrante");break; case 2 : printf("Bod je v druhom kvadrante");break; case 3 : printf("Bod je v tretom kvadrante");break; case 4 : printf("Bod je v stvrtom kvadrante");break; default : printf("Bod sa nachadza na osi");break; }

41 Relačné a logické operátory
význam C rovnosť == nerovnosť != menšie < menšie alebo rovné <= väčšie > väčšie alebo rovné >= význam C logický súčin && logický súčet || negácia !

42 Priority vyhodnocovania logických výrazov
Operátor smer vyhodnocovania ! (typ) sprava doľava * / % zľava doprava zľava doprava < <= >= > zľava doprava == != zľava doprava && zľava doprava || zľava doprava unárne operátory + pretypovanie

43 Priority vyhodnocovania logických výrazov
aritmetické operátory a operátory porovnania majú väčšiu prioritu ako logické operátory ( ) ( ) Závorky tam nemusia byť, pretože >= a <= má väčšiu prioritu ako && ( c >= 'A' && c <= 'Z' ) ak si nie ste istí, či zátvorky dať, radšej ich uveďte nezamieňajte && za & a || za | - & a | sú bitové operácie

44 Viac podmienok #include <stdio.h> int main() { int cislo;
scanf(“%d”,&cislo); if( (cislo>5) && (cislo<10) ) printf(“cislo je medzi 5 a 10”); else printf(“cislo je mimo intervalu”); while(1); return 0; }

45 Viac podmienok #include <stdio.h> int main() { int cislo;
scanf(“%d”,&cislo); if(cislo<5) printf(“\n\r cislo je mensie ako 5”); if( (cislo>5) && (cislo<10) ) printf(“cislo je medzi 5 a 10”); if(cislo>10) printf(“\n\r cislo je vacsie ako 10”); while(1); return 0; }

46 Viac podmienok #include <stdio.h> int main() { int cislo;
scanf(“%d”,&cislo); if ( ((cislo%2)==0) || ((cislo%3)==0) ) printf(“\n\r Cislo je delitelne 2mi alebo 3mi”); } while(1); return 0;

47 Viac podmienok - while #include <stdio.h>
int main(int argc, char *argv[]) { int cislo=0, sucet=0; while(cislo!=123) printf("\n\r Zadaj cislo: "); scanf("%d",&cislo); sucet=sucet+cislo; } printf("\n\r Sucet cisiel je %d ",sucet); while(1); return 0;

48 Viac podmienok - while #include <stdio.h>
int main(int argc, char *argv[]) { int cislo=0, sucet=0; while( (cislo>-10) && (cislo<10)) printf("\n\r Zadaj cislo: "); scanf("%d",&cislo); sucet=sucet+cislo; }; printf("\n\r Sucet cisiel je %d ",sucet); while(1); return 0; }

49 Skrátené vyhodnocovanie logických výrazov
Logický súčin a súčet sa vyhodnocujú v skrátenom vyhodnotení (short circuit). Argumenty sú vyhodnocované zľava doprava a keď je možné určiť konečný výsledok, vyhodnocovanie skončí. if (y != 0 && x / y < z) k deleniu nulou nedojde, pretože v prípade že y=0 dojde k ukončeniu vyhodnotenia po prvom člene y != 0 (podmienka x / y < z vyhodnocovaná nie je). Poznámka: v Pascale by došlo k chybe if ((y<>0) AND (x/y<z))

50 priradením i = 5 porovnaním i == 5 Poznámka Rozdiel medzi:
výsledok je: i je rovné 5 porovnaním i == 5


Download ppt "Úvod do jazyka C Algoritmizácia úloh 4."

Similar presentations


Ads by Google