Naprogramujte funkci, která dostane pole hodnot ve dvojkové soustavě a vypíše ho jako číslo v soustavě desítkové.
from __future__ import print_function # kompatibilita s Python 3
def prevod(pole):
hodnota = 0
for bit in pole:
hodnota *= 2
hodnota += bit # pravdivostni hodnoty se pricitaji jako cisla 0, 1
print(hodnota)
# nebo vypiseme vysledek vlastnim kodem (bonus):
#vypis_integer(hodnota)
# bonus - tahle funkce v pisemce nebyla potreba
def vypis_integer(hodnota):
vystupni_pole = list()
while hodnota > 0:
hodnota, cislice = divmod(hodnota, 10) # deleni se zbytkem -> podil, zbytek
vystupni_pole.append(cislice)
for cislice in reversed(vystupni_pole):
print(cislice, end="")
print()
# ukazkove pouziti
prevod((True, False, False, True, True, False, True, False, False, True, False))
// formality na úvod
#include <stdio.h>
void prevod(bool* pole, int delka);
int main();
void vypis_integer(int hodnota);
// hlavní funkce (do písemky stačilo napsat tohle)
void prevod(bool* pole, int delka) {
int hodnota = 0;
for (int i = 0; i < delka; i++){
hodnota *= 2;
if (pole[i]){
hodnota += 1;
}
}
printf ("%i\n", hodnota);
// místo printf můžeme použít bonusovou funkci:
// vypis_integer(hodnota);
}
// ukázkové použití
int main(){
bool pole[] = {true, false, false, true, true, false, true, false, false, true, false};
int delka = 11;
prevod(pole, delka);
return 0;
}
// tohle už nebylo v zadání povinně, to je jen bonus
void vypis_integer(int hodnota){
int vystupni_pole[200]; //předpokládáme, že číslo nebude mít víc než 200 číslic
int delka_vystupu;
for (delka_vystupu = 0; hodnota > 0; delka_vystupu += 1) {
vystupni_pole[delka_vystupu] = hodnota % 10; //na konec výstupního pole přihodíme další číslici
hodnota /= 10;
}
for (int i = delka_vystupu - 1; i >= 0; i--) { //projdeme pole pozpátku (povšimněte si >= a --)
printf("%c", '0'+vystupni_pole[i]);
}
printf("\n");
}