Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.
1/1
Na této stránce jsou k dispozici zdrojové soubory, které jsem vytvářel při výkladu během výuky. Nejsou to ukázkové a bezchybné zdrojové soubory. Ba naopak, jsou to pracovní neučesané verze, které vznikaly interaktivně ve výuce, často s cílem ukázat, že "takto se to nemá".
1 /*
2 * Soubor: 20101105-Fri-pocty-znaku-P4.c
3 * Datum: 05.11.2010 08:25
4 * Autor: Marek Nožka, nozka z@vináč spseol tečka cz
5 * Licence: GNU/GPL
6 * Úloha: počet jednotlivých znaků
7 * Popis:
8 */
9
10 #include <stdio.h>
11 #include <stdbool.h>
12
13 int na_velka_pismena(int c)
14 {
15 if ( c >= 'a' && c <='z') {
16 return c - ('a' - 'A');
17 } else {
18 return c;
19 }
20 }
21
22 /////////////////////////////////////////////////////
23 #define PPISMEN 'Z'-'A'+1
24 /**
25 * Hlavní program.
26 */
27 int main(void) {
28 int pznaku[PPISMEN] ;
29
30 /* inicializace pole -- naplním pole nulovými hodnotami*/
31 for (int i=0;i<PPISMEN;i++) {
32 pznaku[i] = 0;
33 }
34 /* jestliže načtu znak navýším hodnotu v dané buňce pole*/
35 int znak;
36 while ( (znak = getchar()) != EOF ) {
37 znak = na_velka_pismena(znak);
38 if ( znak >= 'A' && znak <='Z') {
39 pznaku[znak - 'A'] += 1;
40 }
41 }
42 /* Výpis pole a přiřazení jednotlivých buněk písmenům */
43 for (int i=0;i<PPISMEN;i++) {
44 printf("%c: %d\n",'A'+i,pznaku[i]);
45 }
46 /* hledání nejčetnějšího znaku */
47 short i_max = 0; // index nejčetnějšího prvku
48 for (int j=1;j<PPISMEN;j++) {
49 if ( pznaku[j] > pznaku[i_max] ) { // pokud je hodnota prvku větší než doposud největší
50 i_max = j; // zapamatuji si index
51 }
52 }
53 printf("Nejčetnější je písmeno %c, s četností %d\n",'A'+i_max,pznaku[i_max]);
54 return 0;
55 }