Písemka

Naprogramujte funkci, která dostane pole hodnot ve dvojkové soustavě a vypíše ho jako číslo v soustavě desítkové.

Ukázkové řešení - Python

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))

Ukázkové řešení - C

// 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");
}