#include #include 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