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
0

A 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é: 1

Program 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.

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

Registrací souhlasíte s provozními podmínkami a zásadami ochrany osobních údajů.

Nebo se registrujte pomocí:

5/12