Přednáška http://efis.tul.cz/~dana.nejedlova/ Základy programování, Programování I a II Přednáška z jazyka C Probralo se to do snímku "Příkaz return". Cvičení Řídící struktura if...else, řídící struktura switch a ternární operátor. Program tiskne náhodná čísla. #include #include #include #define POCET_RADKU 3 #define POCET_CYKLU POCET_RADKU * 4 #define MAX 100 int main() { int i; srand((unsigned int) time(NULL)); for (i = 0; i < POCET_CYKLU; i++) { printf("%d ", rand() % MAX); } return 0; } Program tiskne náhodná čísla se zařádkováním a tabelátorem mezi čísly. #include #include #include #define POCET_RADKU 3 #define DELKA_RADKU 4 #define POCET_CYKLU POCET_RADKU * DELKA_RADKU #define MAX 100 int main() { int i; srand((unsigned int) time(NULL)); for (i = 0; i < POCET_CYKLU; i++) { if ((i + 1) % DELKA_RADKU == 0) printf("%d\n", rand() % MAX); else printf("%d\t", rand() % MAX); } return 0; } Program tiskne náhodná čísla se zařádkováním a mezerami mezi čísly tak, aby číslo zabralo vždy DELKA_CISLA znaků. viz "width" na stránce https://www.cplusplus.com/reference/cstdio/printf/ #include #include #include #define POCET_RADKU 3 #define DELKA_RADKU 4 #define POCET_CYKLU POCET_RADKU * DELKA_RADKU #define MAX 100 #define DELKA_CISLA 3 int main() { int i; srand((unsigned int) time(NULL)); for (i = 0; i < POCET_CYKLU; i++) { if ((i + 1) % DELKA_RADKU == 0) printf("%*d\n", DELKA_CISLA, rand() % MAX); else printf("%*d", DELKA_CISLA, rand() % MAX); } return 0; } Program tiskne (i + 1) % DELKA_RADKU se zařádkováním pomocí switch, ale není správně, protože v něm chybí skok break. #include #include #include #define POCET_RADKU 3 #define DELKA_RADKU 4 #define POCET_CYKLU POCET_RADKU * DELKA_RADKU #define MAX 100 #define DELKA_CISLA 3 int main() { int i; srand((unsigned int) time(NULL)); for (i = 0; i < POCET_CYKLU; i++) { switch ((i + 1) % DELKA_RADKU) { case 0: printf("%*d\n", DELKA_CISLA, (i + 1) % DELKA_RADKU/*rand() % MAX*/); default: printf("%*d", DELKA_CISLA, (i + 1) % DELKA_RADKU/*rand() % MAX*/); } } return 0; } Program tiskne náhodná čísla se zařádkováním pomocí switch. #include #include #include #define POCET_RADKU 3 #define DELKA_RADKU 4 #define POCET_CYKLU POCET_RADKU * DELKA_RADKU #define MAX 100 #define DELKA_CISLA 3 int main() { int i; srand((unsigned int) time(NULL)); for (i = 0; i < POCET_CYKLU; i++) { switch ((i + 1) % DELKA_RADKU) { case 0: printf("%*d\n", DELKA_CISLA, rand() % MAX); break; default: printf("%*d", DELKA_CISLA, rand() % MAX); break; } } return 0; } Program tiskne náhodná čísla se zařádkováním pomocí ternárního operátoru. #include #include #include #define POCET_RADKU 3 #define DELKA_RADKU 4 #define POCET_CYKLU POCET_RADKU * DELKA_RADKU #define MAX 100 #define DELKA_CISLA 3 int main() { int i; srand((unsigned int) time(NULL)); for (i = 0; i < POCET_CYKLU; i++) { ((i + 1) % DELKA_RADKU == 0) ? printf("%*d\n", DELKA_CISLA, rand() % MAX) : printf("%*d", DELKA_CISLA, rand() % MAX); } return 0; } Program tiskne náhodná čísla se zařádkováním pomocí ternárního operátoru, který je argumentem funkce printf(). #include #include #include #define POCET_RADKU 3 #define DELKA_RADKU 4 #define POCET_CYKLU POCET_RADKU * DELKA_RADKU #define MAX 100 #define DELKA_CISLA 3 int main() { int i; srand((unsigned int) time(NULL)); for (i = 0; i < POCET_CYKLU; i++) { printf(((i + 1) % DELKA_RADKU == 0) ? "%*d\n" : "%*d", DELKA_CISLA, rand() % MAX); } return 0; } Program tiskne náhodná čísla se zařádkováním pomocí ternárního operátoru, který je argumentem funkce printf(), a nemá část " == 0". #include #include #include #define POCET_RADKU 3 #define DELKA_RADKU 4 #define POCET_CYKLU POCET_RADKU * DELKA_RADKU #define MAX 100 #define DELKA_CISLA 3 int main() { int i; srand((unsigned int) time(NULL)); for (i = 0; i < POCET_CYKLU; i++) { printf(((i + 1) % DELKA_RADKU) ? "%*d" : "%*d\n", DELKA_CISLA, rand() % MAX); } return 0; } Terminálový vstup a výstup v cyklu. Program s volbou bez opakování. #include int main(void) { int i; printf("Zadejte cislo mezi 1 a 4: "); scanf("%d", &i); switch (i) { case 1: printf("jedna"); break; case 2: printf("dve"); break; case 3: printf("tri"); break; case 4: printf("ctyri"); break; default: printf("nezname cislo"); break; } return 0; } Program s volbou s opakováním. #include int main(void) { int i; do { printf("\nZadejte cislo mezi 1 a 4: "); scanf("%d", &i); switch (i) { case 1: printf("jedna"); break; case 2: printf("dve"); break; case 3: printf("tri"); break; case 4: printf("ctyri"); break; default: printf("nezname cislo"); break; } } while (i < 10); return 0; } Program s volbou ve formě čísla s opakováním, který se zacyklí, když nezadáme číslo. #include #define KONEC 0 int main(void) { int i; do { printf("\nZadejte cislo %d pro ukonceni nebo cislo mezi 1 a 4: ", KONEC); scanf("%d", &i); switch (i) { case 1: printf("jedna"); break; case 2: printf("dve"); break; case 3: printf("tri"); break; case 4: printf("ctyri"); break; default: printf("nezname cislo"); break; } } while (i != KONEC); return 0; } Program s volbou ve formě znaku s opakováním, který se chová chybně, protože nevyprazdňuje buffer. #include #define KONEC '0' int main(void) { char znak; do { printf("\nZadejte cislo %c pro ukonceni nebo cislo mezi 1 a 4: ", KONEC); scanf("%c", &znak); switch (znak) { case '1': printf("jedna"); break; case '2': printf("dve"); break; case '3': printf("tri"); break; case '4': printf("ctyri"); break; default: printf("nezname cislo"); break; } } while (znak != KONEC); return 0; } Program s volbou ve formě znaku s opakováním, ve kterém se vyprazdňuje buffer. #include #define KONEC '0' int main(void) { char znak; do { printf("\nZadejte cislo %c pro ukonceni nebo cislo mezi 1 a 4: ", KONEC); scanf("%c", &znak); while (getchar() != '\n') ; switch (znak) { case '1': printf("jedna"); break; case '2': printf("dve"); break; case '3': printf("tri"); break; case '4': printf("ctyri"); break; default: printf("nezname cislo"); break; } } while (znak != KONEC); return 0; } Program s volbou ve formě čísla s opakováním, ve kterém se vyprazdňuje buffer. #include #define KONEC 0 int main(void) { int i; do { printf("\nZadejte cislo %d pro ukonceni nebo cislo mezi 1 a 4: ", KONEC); scanf("%d", &i); while (getchar() != '\n') ; switch (i) { case 1: printf("jedna"); break; case 2: printf("dve"); break; case 3: printf("tri"); break; case 4: printf("ctyri"); break; default: printf("nezname cislo"); break; } } while (i != KONEC); return 0; }