1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
#include <stdio.h>
#include <stdlib.h>
int podprogram (int * t /* tabela s kovanci */, int l /* dolzina tabele */) {
int c = 0; /* oznacuje, kje v tabeli trenutno smo */
int s = 0; /* sestevek */
int a = -2; /* kateri kupcek smo pobrali nazadnje */
int i = 0; /* indeks pri iteraciji */
while (c < l) { /* za vsak kupcek */
if (c-a > 1 && t[c] >= t[c+1]) { /* poberemo le, ce prej nismo pobarli in ce je naslednji manjsi ali enak trenutnemu */
for (i = c; i > a + 1; i = i - 2) /* ce je nekaj kupckov vmes med prejsnjim pobranim in tem, so urejeni po velikosti, gremo vzvratno in poberemo vsakega drugega. tukaj se pobere tudi trenutni. */
s += t[i];
a = c;
}
c++;
}
return s; /* vrnemo seštevek */
}
#if __INCLUDE_LEVEL__ == 0
int main (int argc, char ** argv) {
if (argc < 2) { /* ni bilo povedanih nobenih kupckov */
fprintf(stderr, "uporaba: %s 1 2 3 4 ...\n", argv[0]);
return 1; /* zapremo program */
}
int * t = malloc(sizeof(int)*argc); /* pripravimo prostor za tabelo s kupcki, en kupcek vec */
int i = 1; /* indeks pri iteracijah */
for (i = 1; i < argc; i++) /* pretvorimo vhodne kupcke iz nizov v cela stevila */
t[i-1] = atoi(argv[i]); /* in jih postavimo v tabelo */
t[i-1] = 0; /* potrebujemo en namisljen kupcek vec, ki nima smeti v vrednosti */
fprintf(stdout, "sestevek: %d\n", podprogram(t, argc-1)); /* pozenemo podprogram in natisnemo izhodni sestevek */
free(t); /* sprostimo spomin, kjer je bila tabela dinamično alocirana */
t = NULL; /* zgolj kot dobro prakso vsakic po sproscanju nastavimo pointer na null, da preprecimo double-free napake (free ne naredi nicesar na naslovu 0x00) */
return 0; /* z uspesnim statusom zapremo program */
}
#endif
|