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: 20110107-Fri-prave-dvakrat-S4.c
3 * Datum: 07.01.2011 10:04
4 * Autor: Marek Nožka, nozka <@t> spseol <d.t> cz
5 * Licence: GNU/GPL
6 * Úloha:
7 * Popis:
8 ****************************************************/
9 #include <stdio.h>
10 #include <stdlib.h>
11
12 /* *************** Makra ******************** */
13 #define ARREYC 20
14
15 /* *************** Globální proměnné ************* */
16
17 /* *************** Funkce ******************** */
18
19 /* přidá prvek do pole hotovo */
20 void pridej(int prvek, int arr[], int *hotovop)
21 {
22 arr[*hotovop] = prvek;
23 (*hotovop)++;
24 }
25
26 /* kontroluje zda je prvek v poli hotovo
27 * pokud ano vrátí 1 (true )
28 * pokud ne vrátí 0 (false) */
29 int kontroluj(int prvek, int arrc, int arr[])
30 {
31 for (int i = 0; i < arrc; i++) {
32 if (arr[i] == prvek) {
33 return 1; // hurá, našel jsem, okamžitě končím
34 }
35 }
36 /* nic jsem nenašel */
37 return 0;
38 }
39
40 /****************************************************
41 * Hlavní program.
42 ****************************************************/
43 int main(void)
44 {
45 int pole[ARREYC];
46 int hotovo[ARREYC];
47 int hotovop;
48
49 hotovop = 0;
50
51 /* naplníme pole náhodnými čísly */
52 for (int i = 0; i < ARREYC; i++) {
53 pole[i] = rand() % 21;
54 }
55 /* pole na obrazovku */
56 for (int i = 0; i < ARREYC; i++) {
57 printf("%d ", pole[i]);
58 }
59 putchar('\n');
60
61 /* počítám prvky, které jsou právě dvakrát */
62 for (int i = 0; i < ARREYC; i++) {
63 /* podívám jestli už jsem toto číslo nepočítal */
64 if (kontroluj(pole[i], ARREYC, pole)) {
65 //printf("### %d\n",i);
66 continue; /* přeskočí zbytek těla cyklu a pokračuje další obrátkou */
67 }
68 /* počítám */
69 int pocet = 0;
70 for (int j = i; j < ARREYC; j++) {
71 if (pole[j] == pole[i]) {
72 pocet++;
73 }
74 }
75 if (pocet == 2) {
76 printf("%d ", pole[i]);
77 }
78
79 /* znovu už ho počítat nebudu */
80 pridej(pole[i],hotovo,&hotovop);
81 }
82 putchar('\n');
83
84 return 0;
85 }