Přednáška http://efis.tul.cz/~dana.nejedlova/ Počítače I Přednáška - Čísla v počítači Cisla_v_pocitaci.pptx Probralo se to do konce. Ke zkoušce je třeba znát: - Proč vznikl standard pro reprezentaci znaků Unicode? - Nejsme závislí na kódovacích tabulkách lokálních počítačů. - Jaké kódování má variabilní délku kódu? - Unicode. - Jak jsou v počítači reprezentovány řetězce? - řetězce ukončené nulou (null-terminated strings) - řetězce s předponou určující délku (length-prefixed strings) Přednáška - Algoritmy Algoritmy.pptx Ke zkoušce je třeba znát: - Co je to nejlepší, průměrný a nejhorší případ algoritmu. - Co je to asymptotická analýza algoritmu. - Jaká je složitost nejlepšího, průměrného a nejhoršího případu vyhledávání sekvenčního a binárního ve formě funkce n, což je počet položek seznamu. - Viz snímek "Vyhledávání". - Co jsou to polynomiální algoritmy a proč se odlišují od ostatních algoritmů. - viz snímek "Algoritmy polynomiální a ty ostatní". Cvičení Operátor sizeof() viz https://en.wikipedia.org/wiki/Sizeof #include int main() { char znak; int cislo_int; float jednoducha_presnost; double dvojita_presnost; printf("znak ma %d bajtu\n", sizeof(znak)); printf("'a' ma %d bajtu\n", sizeof('a')); printf("cislo_int ma %d bajtu\n", sizeof(cislo_int)); printf("3 ma %d bajtu\n", sizeof(3)); printf("3L ma %d bajtu\n", sizeof(3L)); printf("3LL ma %d bajtu\n", sizeof(3LL)); printf("jednoducha_presnost ma %d bajtu\n", sizeof(jednoducha_presnost)); printf("3.14f ma %d bajtu\n", sizeof(3.14f)); printf("dvojita_presnost ma %d bajtu\n", sizeof(dvojita_presnost)); printf("3.14 ma %d bajtu\n", sizeof(3.14)); printf("(3 > 1) ma %d bajtu\n", sizeof(3 > 1)); return 0; } Dělení celočíselné a dělení reálných čísel #include int main() { printf("%d\n", 10 / 3); printf("%f\n", 10.0 / 3); printf("%f\n", 1e1 / 3); printf("%f\n", 10e0 / 3); printf("%f\n", 100e-1 / 3); printf("%f\n", 3.0 / 0); printf("%f\n", 3 / 0.0); printf("%f\n", 0 * 3 / 0.0); return 0; } #include #define POCET_CYKLU 10 int main() { int i; for (i = 0; i < POCET_CYKLU; i++) { printf("%d\n", 3 / i); /* Havaruje, protoze dojde k celociselnemu deleni nulou. */ } return 0; } #include #define POCET_CYKLU 10 int main() { int i; for (i = 0; i < POCET_CYKLU; i++) { printf("%f\n", 3.0 / i); /* Nehavaruje, protoze to neni celociselne deleni. */ } return 0; } #include #include #include #define POCET_CYKLU 10 int main() { int i; srand((unsigned int) time(NULL)); for (i = 0; i < POCET_CYKLU; i++) { printf("%d\n", 1 / rand()); /* Havaruje, kdyz rand() vrati nulu. */ } return 0; } #include #include #include #define POCET_CYKLU 10 int main() { int i; srand((unsigned int) time(NULL)); for (i = 0; i < POCET_CYKLU; i++) { printf("%d\n", 1.0 / rand()); /* \main.c|10|warning: format '%d' expects argument of type 'int', but argument 2 has type 'double' [-Wformat=]| */ } /* Vypisou se chybne hodnoty vznikle interpretaci standardu IEEE 754 pomoci dvojkoveho doplňku. */ return 0; } Operátor modulo viz https://en.wikipedia.org/wiki/Modulo_operation #include #include #include #define POCET_CYKLU 10 #define MAX 5 #define ROZSAH_KODU_ZNAKU (1 + 'Z' - 'A') /* Zavorka je nutna. */ int main() { int i; srand((unsigned int) time(NULL)); for (i = 0; i < POCET_CYKLU; i++) { printf("%d ", rand() % MAX); printf("%c\n", 'A' + rand() % ROZSAH_KODU_ZNAKU); } return 0; } #include #include #include #define POCET_CYKLU 10 #define MAX 5 #define ROZSAH_KODU_ZNAKU (1 + 'Z' - 'A') int main() { int i; for (i = 0; i < POCET_CYKLU; i++) { srand((unsigned int) time(NULL)); /* Inicializace generatoru nahodnych cisel by nemela byt v cyklu. */ printf("%d ", rand() % MAX); printf("%c\n", 'A' + rand() % ROZSAH_KODU_ZNAKU); } return 0; }