5. cvičení
Příklad: převod čísel z desítkové do dvojkové soustavy
Algoritmus výpočtu je pěkně vysvětlen zde.
#include <iostream>
using namespace std;
void do_binarni(int n)
{
// velikost pole: pocet bitu typu int
int zbytky[sizeof(int) * 8];
int index = 0;
while (n > 0) {
// spocitat zbytek, ulozit do pole
zbytky[index] = n % 2;
// posunout index
index += 1;
// vydelit, ulozit do n
n /= 2;
}
// vypis binarnich cislic (v opacnem poradi)
for (int i = index - 1; i >= 0; i--) {
cout << zbytky[i];
}
cout << endl;
}
int main()
{
cout << "Zadej prirozene cislo: ";
int cislo = 0;
cin >> cislo;
if (cislo > 0) {
do_binarni(cislo);
return 0;
}
else {
cout << "zadane cislo neni prirozene" << endl;
return 1;
}
}
Bonusový úkol: Zobecnění pro převod čísel z desítkové soustavy do soustavy o základu \(b\), kde \(2<b<10\).
Příklad: 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.
#include <iostream>
using namespace std;
void rozloz_na_prvocinitele(int n)
{
// stejna velikost jako v prvnim prikladu
int prvocinitele[sizeof(int) * 8];
int index = 0;
for (int i = 2; i <= n; i++) {
// - zjistit jestli "i" je delitel cisla "n"
if (n % i == 0) {
// pokud ano, tak:
// ulozit "i" do pole
prvocinitele[index] = i;
// posunout index
index++;
// spocitat n = n / i
n /= i;
// i-- (aby se "i" zkontrolovalo znovu)
i--;
}
}
// vypis
for (int i = 0; i < index; i++) {
cout << prvocinitele[i];
if (i < index - 1) {
cout << " * ";
}
}
cout << endl;
}
int main()
{
cout << "Zadej prirozene cislo: ";
int cislo = 0;
cin >> cislo;
if (cislo > 0) {
rozloz_na_prvocinitele(cislo);
return 0;
}
else {
cout << "zadane cislo neni prirozene" << endl;
return 1;
}
}
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.
Bonusový úkol: Znáte nějaký jiný (lepší) algoritmus pro určení největšího společného dělitele dvou přirozených čísel?