6. cvičení

Probrané příklady:

  1. Program pro převod čísel z desítkové do dvojkové soustavy.

    Algoritmus výpočtu je pěkně vysvětlen zde.

    Bonusový úkol: zobecnění pro převod čísel z desítkové soustavy do soustavy o základu \(b\), kde \(2<b<10\).

    #include <stdio.h>
    #include <stdbool.h>
    
    int main()
    {
        printf("Zadej cele cislo: ");
        int cislo;
        scanf("%d", &cislo);
    
        // deklarace pomocneho pole
        bool pole[32];
    
        // cyklus pro prevod do binarni soustavy
        int pocet = 0;
        while (cislo > 0) {
            pole[pocet] = cislo % 2;
            cislo = cislo / 2;
            pocet++;
        }
    
        // vypis vysledku
        for (int i = 0; i < pocet; i++)
            printf("%d", pole[pocet - i - 1]);
        printf("\n");
    
        return 0;
    }
    
  2. Rozklad přirozeného čísla na součin prvočísel. Prvočísla ukládejte do pole, na konci programu proveďte kontrolu (pronásobení všech prvočísel v poli a porovnání se zadaným číslem) a vypište čísla na obrazovku.

    Bonusový úkol: pomocí rozkladu čísla na součin prvočísel určete největšího společného dělitele (NSD) a nejmenší společný násobek (NSN) dvou zadaných čísel.

    #include <stdio.h>
    
    int main()
    {
        printf("Zadej cislo: ");
        int cislo;
        scanf("%d", &cislo);
    
        // deklarace pole
        int pole[32];
    
        // cyklus pro rozklad na soucin prvocisel
        int pocet = 0;
        int cislo2 = cislo;
        int k = 2;
        while (cislo2 >= k) {
            if (cislo2 % k == 0) {
                pole[pocet] = k;
                cislo2 = cislo2 / k;
                pocet++;
            }
            else {
                k++;
            }
        }
    
        // vypis vysledku
        if (cislo > 1) {
            printf("%d = ", cislo);
            for (int i = 0; i < pocet - 1; i++)
                printf("%d * ", pole[i]);
            printf("%d\n", pole[pocet - 1]);
        }
        else {
            printf("%d = %d\n", cislo, cislo);
        }
    
        return 0;
    }
    

Domácí úkol

Naprogramujte Euklidův algoritmus pro určení největšího společného dělitele dvou přirozených čísel.

Program by měl po spuštění fungovat např. takto:

Zadej dve prirozena cisla: 16 24
Nejvetsi spolecny delitel techto cisel je 8.

Bonusový úkol: Program zobecněte pro určení největšího společného dělitele libovolného počtu přirozených čísel. Po spuštění by měl fungovat např. takto:

Zadej pocet cisel: 4
Zadej 4 prirozena cisla: 16 24 38 7
Nejvetsi spolecny delitel techto cisel je 1.

Výsledný zdrojový soubor (soubor.c) odevzdávejte na mou emailovou adresu do 20. 10. 2019, 24:00 CEST. Pokud narazíte na problém a budete potřebovat poradit, neopisujte od kolegů, ale požádejte mě o radu (mailem, na cvičení nebo na konzultaci). Úkol je vhodné začít vypracovávat co nejdřív, aby se tyto problémy stihly vyřešit před termínem.