Pravda a nepravda
Každé porovnání má odpověď: ano, nebo ne. Takovým hodnotám se říká booleovské hodnoty, podle matematika George Boolea. V jazyce C mají datový typ bool a ten má jen dvě hodnoty: true (pravda) a false (nepravda). Abyste je mohli používat, napište na začátek programu #include <stdbool.h>, podobně jako píšete #include <stdio.h> kvůli printf:
#include <stdbool.h>
#include <stdio.h>
int main(void) {
int vek = 20;
bool je_dospely = vek >= 18;
printf("Dospělý: %d\n", je_dospely);
if (je_dospely) {
printf("Můžete volit\n");
}
return 0;
}Program vypíše:
Dospělý: 1
Můžete volitŘádek s bool čtěte zprava: program nejdřív porovná vek >= 18, což je pravda, a pak = výsledek uloží do je_dospely. Podmínka if (je_dospely) znamená totéž co if (je_dospely == true). Jen je kratší, a proto ji tak programátoři píší. Názvy booleovských proměnných obvykle začínají na je_ nebo ma_ (je_dospely, ma_vstupenku), aby se četly jako otázka, na kterou se odpovídá ano, nebo ne.
Proč printf vypsal 1? Jazyk C dlouho žádný bool neměl a uvnitř pořád pracuje s čísly: true je 1 a false je 0. Proto se bool vypisuje pomocí %d. I každé porovnání dává číslo 1, nebo 0:
printf("%d\n", 5 > 3);
printf("%d\n", 2 > 3);Tento kód vypíše:
1
0A podmínka je v C prostě číslo: 0 znamená nepravdu a každé jiné číslo pravdu. Když zapomenete na #include <stdbool.h>, překladač slovo bool nezná a ohlásí chybu error: use of undeclared identifier 'bool'.
Booleovská proměnná se hodí třeba pro sudá čísla. Číslo je sudé, když po jeho dělení dvěma nic nezbude, tedy když je zbytek cislo % 2 roven 0:
int cislo = 14;
bool je_sude = cislo % 2 == 0;
printf("Sudé: %d\n", je_sude);Tento kód vypíše:
Sudé: 1Program nejdřív spočítá zbytek 14 % 2, tedy 0, a teprve potom ho porovná s nulou: % má přednost před ==, tak jako násobení před sčítáním. U lichého čísla, třeba 7, je zbytek 1 a je_sude je nepravda. Kdybyste tu omylem napsali jedno rovnítko, cislo % 2 = 0, překladač by ohlásil chybu error: expression is not assignable, protože do výsledku výpočtu nejde nic uložit.
Jak psát:
Pokyny
Na začátek programu přidejte #include <stdbool.h>. Pak pod printf vytvořte proměnnou je_sude typu bool s výsledkem porovnání cislo % 2 == 0 a vypište ji: printf("Sudé: %d\n", je_sude);. Číslo 7 sudé není, a tak program vypíše Sudé: 0.
Pod tento výpis napište příkaz if s podmínkou je_sude, který vypíše Číslo je sudé, a k němu větev else, která vypíše Číslo je liché. Program vypíše:
Číslo: 7
Sudé: 0
Číslo je lichéZačněte programovat zdarma
5/12