Skočiť na obsah


Programovanie v jazyku C a C#

Návody pre začiatočníkov a pokročilých



Fórum: Škôlka jazyka C
- - - - -
Fotografia

4. lekcia C (Logika v Céčku) škôlka


Logika v C­éčku

Je výraz pravda(TRUE) alebo nepravda(FALSE)?
O tom tu bude reč.

Booleovské výrazy

Výsledok (0) je FALSE
Výsledok – nenulová hodnota (najčastejšie 1, ale nie je to podmienka) je TRUE.

Rovnosť	 ==

Nerovnosť	 !=

Menšie	 <

Menšie alebo rovnaké	 <=

Vacsie	 >

Vacsie alebo rovnaké	 >=



Logický súčin	 &&

Logický súčet	 ||

Negácia	 !

Ideme praxovať. ;)

Obrázok

Vysvetlím to:
je dané:
i = 5 a j = 7
rovnosť: i == 5, výsledok pravda
nerovnosť: i != j, výsledok pravda
menšie: i < j, výsledok pravda
menšie alebo rovné: i <= j, výsledok je pravda
väčšie: j > i, výsledok pravda
väčšie alebo rovné: j >= i, výsledok pravda

Po zámene hodnôt premenných je všade nepravda okrem:
nerovnosť: i != j, výsledok pravda
čo je logické. :)

Príklad na použitie &&, ||, !

Obrázok

Vysvetlím to:
je dané:
i = 5 a j = 7
i je pravda a súčasne j je pravda, výsledok pravda
i < j a súčasne j > i, výsledok je pravda
i je pravda alebo j je pravda, výsledok pravda
i < j alebo i > j, výsledok pravda, pretože stačí aby jeden výraz bol pravda
negácia !(i < j alebo i > j), výsledok nepravda, pretože celý výraz je pravda, ale negácia (!) podmienku otáča naopak

Po zámene hodnôt premenných popremýšľaj sám, prečo sú výsledky aké sú. ;)

Možno sa ti zdá výraz:
i && j
a výraz
i || j
zvláštny.

Preto sem dávam toto vysvetlenie:

Obrázok

Výrazy môžu byť zložené z viacerých podmienok.
Je veľmi vhodné používať zátvorky na zprehľadnenie zápisu!


Obrázok

Prečítaj si kód a pochop prečo je výsledok pravda. :D

Zatiaľ som používal len premenné typu int, ale podmienky sa dajú použiť aj na ostatné typi premenných.
Ako príklad uvediem podmienku pre znaky.


Keď sa pozrieš na ASCII tabuľku, zistíš, že malé písmená idú za sebou od 'a' po 'z'. Tak isto aj veľké písmená.
Teda, ak chcem spraviť podmienku, ktorá stanoví, či sú písmená melé alebo veľké, musím to spraviť takto:

Deklarujem premennú pre znak: char znak; (môže byť aj int znak;)
podmienka na malé písmená:

znak >= 'a' && znak <= 'z'
To znamená, že znak je väčší alebo rovný ako 'a' a zároveň je menší alebo rovný ako 'z'. Teda podmienka je pravda,
ak sa znak nachádza medzi 'a' až 'z'.
To isté platí aj pre veľké písmená:

znak >= 'A' && znak <= 'Z'
Teraz to už len spojiť do jednej podmienky. Ako? Použiť && alebo ||?
Zamyslím sa.
Ak použijem &&, čo sa stane?

(znak >= 'a' && znak <= 'z') && (znak >= 'A' && znak <= 'Z')

Aby bol výraz pravda, musia byť splnené všetky podmienky, takže keď naplním premennú znakom 'a', splním síce
podmienku na ľavej strane, ale na prevej nie. To znamená, že výsledok bude nepravda.

Treba použiť ||.

(znak >= 'a' && znak <= 'z') || (znak >= 'A' && znak <= 'Z')

V tomto prípade bude pravda aj keď znak bude 'a' aj keď bude 'A'.

Vyskúšam negáciu (!) celého výrazu:

!(znak >= 'a' && znak <= 'z') || (znak >= 'A' && znak <= 'Z')

Čo sa stane?
Všetky znaky okrem malých a veľkých písmen budú pravda.
Teda podmienku sme otočili naopak!


Úlohy

1. Pozri si nasledujúci program a na papier si napíš tvoj typ, čo bude vypisovať. Potom
program skompiluj a spusti. Porovnaj si tvoje typy s realitou. Pochop, prečo píše to, čo to píše.
V odpovedi na úlohu napíš svoje typy to tela príspevku.
#include <stdio.h>

main()

{

int i = 3, j = 4;

printf("%d\n", i == 3);

printf("%d\n", j >= 6);

printf("%d\n", j = 5);

printf("%d\n", i < 6);

printf("%d\n", j == 4);

}
Spoiler


Úloha č.2: Napíšte program, ktorý načíta hodnotu do znakovej premennej zn a vypíše 1 ak je to
číslica '0' až '9'. Inak vypíše 0.
Spoiler

Úloha č.3: Vymyslite podmienku, ktorá nadobudne hodnotu „pravda“ buď vtedy, keď je
v premennej i hodnota 0 alebo vtedy, keď je tam hodnota 1. Inokedy nadobudne
hodnotu „nepravda“. Vyskúšajte v programe.
Spoiler

Úloha č.4: Vymyslite a oskúšajte podmienku, ktorá otestuje, či je hodnota v premennej i párna.
Spoiler

5. Napíš program, v ktorom budú tieto príkazy:
i = 5;
printf("%d \n", i == 8);
printf("%d \n", i = 8);
printf("%d \n", i == 8);
Spoiler

6. Napíš program, ktorý prečíta dva znaky v rozsahu 0 – 9 alebo A – F. Pozor – nečítaj jedno hexadecimálne číslo! Tieto dva znaky potom považuj za hexadecimálne číslo a jeho hodnotu vypíš dekadicky.
Spoiler
  • 0

Popis: Logika v Céčku

- ==, <, >, <=, >=, &&, ||
- (!) negácia výrazu
- úlohy k lekcii
Poznámky: Ak chceš, aby ti niekto úlohy skontroloval, zabal ich do zip-u a zašli na e-mail:
libcosenior zavináč gmail botka com

Poprípade tam môžeš konzultovať, čo ti nie je jasné.
Odkazy:


0 Komentárov


Najlepšie lekcie


Najnovšie pridané lekcie


Najnovšie komentáre


Najviac komentované lekcie


Najviac zobrazené lekcie


Náhodné lekcie


Na tejto stránke bolo užívateľ(ov) za posledných 30 minút

členov, návštevníkov