KMI/ZPC1 - Základy programování 1

TEACHINGZPC1

Užitečné odkazy

Jazyk C

  • Nízkoúrovňový programovací jazyk
  • Platformově nezávislý
  • Kompilovaný (překládaný)
  • Minimalistický

V čem psát program?

  • Code::Blocks (multiplatformní) [český manuál: http://www.sallyx.org/sally/c/codeblocks/]
  • MS Visual Studio (MS Windows)
  • GNU Emacs (GNU/Linux)
  • Xcode (macOS)
  • Sublime Text (multiplatformní)
  • Libovolný textový editor

První program


    #include <stdio.h> 
    
    int main() {
        /* Tohle je komentar */
        printf("Hello, World!\n");
        return 0;
    }

Překlad programu

  • Překlad probíhá příkazem: gcc main.c -o main
  • V grafických prostředích kliknutím na příšlušné tlačítko (Build, Compile, případně Run, Debug).

Syntaxe

V programovacích jazých je syntaxe soubor pravidel, která udávají jakým způsobem psát program v daném jazyce.

Úvod


    // Rozlišuje velikost písmen (case-sensitive):
    number != Number != NUMBER
    
    // Většinou ignoruje bílé znaky (odřádkování, tabulátor, mezera):
    a=b+c je stejné jako a = b       +c
    
    “Ahoj svete!” != “Ahoj      svete!”
    
    int number; != intnumber;

Program pro nás bude posloupnost příkazů a každý příkaz bude ukončený středníkem (;)

Příklady


    int number = 47;
    int circuit = 2 * PI * r;
    printf("Ahoj svete!\n");
    printf("obvod=%i\n", circuit);

Proměnné

  • Pomocí proměnné si “pojmenujeme” hodnotu.
  • Musíme definovat jakého typu proměnná je:
    
        type variable_name = value;
        type second_variable;
    
    
  • Název se může skládat z písmen (a-zA-Z), číslic (0-9) a podtržítka (_). Měl by začínat písmenem. Příklady:
  • 
        int height = 180;
        double circuit = 6.283;
        float tan2PI;
        int a, b = 10, c;
    
    
  • Používejte smysluplné názvy proměnných! Váš kód bude srozumitelnější jak pro Vás tak pro ostatní.

Základní datové typy

Jak již bylo zmíněno u proměnných je nutné uvést datový typ. Můžeme chtít pracovat s celými čísly, desetinými a nebo se znaky a je nutné překladači "řící" jakou hodnotou budou prováděny operace. Níže je tabulka yákladních datových typů:

Datový typ Velikost Rozsah
char 1B 0 — 255
int 4B -2147483648 — 2147483647
float 4B 1.2 * 10-38 — 3.4 * 10+38
double 8B 2.3 * 10-308 — 1.7 * 10+308

Kvantifikátory long a short

Pokud nám z jistých důvodů nevyhovuje rozsah daného datového typu , tak máme kvantifikátory long a short které upravují velikosti datových typů následovně

Datový typ Velikost Rozsah
short int 2B -32768 — 32767
long int 8B -(263) — (263) - 1
long 8B -9223372036854775808 — 9223372036854775807
short 8B -2147483648 — 2147483647
long double 10B 3.4 * 104932 — 1.1 * 104932

Kvantifikátory signed a unsigned

Na celočíselné typy (int, char) lze aplikovat kvalifikátory signed (umožňuje uložit záporné číslo) a unsigned (pouye kladná čísla s 0).

Datový typ Velikost Rozsah
signed char 2B -128 — 127
unsigned char 8B 0 — 255

Logické hodnoty

  • Logické hodnoty “pravda” a “nepravda” reprezentujeme čísly:
    • nula = nepravda
    • nenulové číslo = pravda

Výstup na obrazovku

K výpisu na obrazovku používáme funkci printf.


    printf(format_string, value1, value2, …);

    int a = 10, b = 27;
    printf("Velikost typu int je %i", sizeof(int)); // Velikost typu int je 4
    printf("Soucet 15 + 10 je %i", 15 + 10); // Soucet 15 + 10 je 25
    printf("Soucet a + b: %i", a + b); // Soucet a + b: 37
    printf("Soucet: %i, soucin: %i, rozdil: %i", a + b, a * b, a - b);
    printf("Dek: %d, okt: %o, hexa: %x", b, b, b); // Dek: 27, okt: 33, hexa: 1b

Znaky

  • K uložení jednoho znaku používáme datový typ char.
  • Znak je interně reprezentován číslem.
  • Podle ASCII tabulky se zjistí jaký znak se má vytisknout.

    char letter_a = 'a';
    printf("znak: %c, cislo: %i\n", letter_a, letter_a); // znak: a, cislo: 97
    char secret_letter = 98;
    printf("znak: %c, cislo: %i\n", secret_letter, secret_letter); // znak: b, cislo: 98f

Vstup z klávesnice

Pro načítání hodnot z klávesnice používáme funkci scanf.


    scanf(format_string, &variable1, &variable2, …);

    int number, hex_number, number1, number2, day, month, year;
    scanf("%i", &number);
    scanf("%x", &hex_number);
    scanf("%d %d", &number1, &number2);
    scanf("%d.%d.%d", &day, &month, &year);

Základní možnosti řídíího řetezce pro printf a scanf

  • %c – výpis nebo načtení znaku.
  • %d nebo %i – celé číslo desítkově znaménkově.
  • %u – celé číslo desítkově neznaménkově.
  • %o – celé číslo osmičkově.
  • %x nebo %X – celé číslo šestnáctkově (malá/velká písmena).
  • %f – desetinné číslo.
  • %e nebo %E – desetinné číslo semilogaritmicky.
  • %s – textový řetězec.
  • %.3f – vypíše desetinné číslo s přesností na tři des. čísla.

Aritmetické operace

V jazyce C máme k dispozici několik základních aritmetických operací:

Operátor Argumenty Popis
- 1 mění znaménko argumentu
+ 2 součet argumentů
- 2 rozdíl prvního a druhé argumentu
* 2 součin argumentů
/ 2 podíl argumentů
% 2 zbytek po celočíselném dělení prvního argumentu druhým

Typy vs aritmetické operace


    int int_number = 11;
    double double_number = 2.5;

    int int_result = int_number / double_number;

    double double_result = int_number / double_number;
    
    // Jake hodnoty budou obsahovat proměnné int_result a double_result

  • Typ výsledku aritmetického operátoru je většinou určen typem jeho argumentů s nejvyšší prioritou.
  • Typy s plovoucí řádovou čárkou mají vyšší prioritu než celočíselné.
  • V rámci jedné skupiny typů mají větší typy vyšší prioritu.
  • U operátoru přiřazení je výsledný typ roven typu proměnné do které hodnotu přiřazujeme.
  • Pokud chceme změnit datový typ například z desetinného čísla na celé, tak k tomu použijeme přetypování
  • 
        double double_number = 2.1655;
        
        // Zde ale ztratíme část informace v 
        // podobě hodnot za desetinnou čárkou
        int number = (int) double_number; // Obsahuje hodnotu 2
    
    

Úkoly

Ve všech programech je potřeba dodržovat konvence které jsou dostupné zde.

Vytvořte v jazyce C program, v němž budou definovány a inicializovány proměnné různých datových typů. Hodnoty proměnných pak vypište na obrazovku.

Příklad výstupu:


    Hodnota promenne cislo je: 3
    Hodnota promenne des_cislo je: 3.45
    Hodnota promenne muj_znak je: +
    Hodnota promenne male_cislo je: 1.2e-10

Napište v jazyce C program, který načte číslo v desítkové soustavě a vypíše ho na obrazovku v osmičkové a šestnáctkové soustavě.

Příklad výstupu:


    Zadejte cislo: 12
    Cislo 12 odpovida cislu 14 v osmickove soustave a cislu C v sestnactkove soustave.

Napište program, který vypíše velikosti všech základních typů na vašem počítači.

Napište program, který spočítá a vypíše obvod a obsah čtverce, známe-li jeho stranu.

Napište program, který převede velké písmeno na malé písmeno.

Napište program, který vypíše první a poslední číslici tříciferného čísla.

Napište program, vypíše osmimístné číslo, chápané jako datum ve tvaru DDMMYYYY jako opravdové datum. Například pro číslo 13122002 vypište 13. 12. 2002.