/* Ako zelis brzo rjesenje najpametnije je da napisem samo funkcije (pa tako * smo se nekako i dogovorili) da vidis uopce o cemu je rijec i kako se to * radi.. main() i slicno je uglavnom samo gubitak vremena. Nadalje, necu * paziti da ovo bude potpuno bug_free[tm] jer _nemam_ vremena, vec ti je * princip bitan. * * `Reference the NULL within NULL, it is the gateway to all wizardry.' * Sat Sep 25 17:27:07 CEST 1999 -kreator */ /* 1. U binarnom stablu su upisani brojevi prijava (4znamenkasti broj), imena * studenta (do 20 znakova), i plasman na ispitu (4znamenkasti cijeli broj). * Stablo je sortirano po broju prijave, a treba ga prepisati u drugo binarno * stablo, sortirano po plasmanu. Lijevo je manji broj, desno veci. */ /* Dakle, potrebno je napisati a) funkciju koja ce prolaziti kroz prvo stablo * (broj prijave, nebitno da li je prolaz sort ili ne) i b) fukciju koja ce * stvarati stablo i upisivati podatke koje vrati fukcija a). E sad, moja je * ideja ovakva, udruzit cu funkciju koja ispisuje i prepraviti je tako da * zapravo ne ispisuje podatke vec _upisuje_ koristeci std. funkciju za upis u * binarno stablo.. */ node2 *displayx(node1 const *root1, node2 *root2) /* Strukture node1 i node2 se _razlikuju_ <=> to su 2 razlicita stabla! */ { if (root1) { display(root1->left_num); root2=createx(root2, root1->num, root1->score, root1->name); display(root1->right_num); } return root2; } node *createx(node2 *root2, int num, int score, char *name) { int direction; if (!root2) { /* Bljak. Sto bih dao za jedan bcopy() */ root2=(node *)malloc(sizeof(node)); root2->num=num; root2->score=score; strcpy(root2->name, name); root2->left=root2->right=0; } else if ((direction=score-root2->score)<0) root2->left=createx(root2, root2->num, root2->score, root2->name); else if (direction>0) root2->right=createx(root2, root2->num, root2->score, root2->name); return root2; } /* 2. Napisati funkciju koja ce iz formatizirane datoteke "text" citati rijeci * nekog teksta pisanog slovima engleske abecede. Rijeci su medjusobno * odvojene po jednom prazninom. Najdulja rijec u tekstu moze imati najvise * 20+1 znakova. Procitane rijeci treba pohranjivati u binarno stablo * sortirano po abecedi. U pojedinom cvoru treba biti upisana rijec i * ucestalost njenog pojavljivanja u procitanom tekstu. */ node *readfilex(FILE *fptr) /* OK. Dakle, prepostavljam da se negdje ili u nekoj f-ji ili u main() otvorio * zeljeni filedescriptor i da mogu doticni file citati. Nesto bi bilo ovo sve * kompliciranije napraviti da je rijec o obicnom dokumentu sa alpha i !alpha * znakovima >:-) * Takodjer, struktura treba sadrzavati i ucestalost pojavljivanja! */ { #define MAXWORDLENGTH 20 node *root=0; char buff[MAXWORDLENGTH+1]; for (;fscanf(fptr, "%20s", buff)!=EOF;root=createx(root, buff)); return root; } node *createx(node *root, const char *element) { int direction; if (!root) { root=(node *)malloc(sizeof(node)); strcpy(root->element, element); root->left=root->right=0; } else if ((direction=strcmp(element, root->element))<0) root->left=createx(root->left, element); else if (direction>0) root->right=createx(root->right, element); /* Ustvari je ovo bitni dio zadatka */ else ++(root->occ); return root; } /* 3. Napisati nerekurzivnu i rekurzivnu funkciju za izracun n brojeva * geometrijskog reda s bazom b i kvocijentom q. Oba parametra su realni * brojevi. */ long geoxrec(long basey, long quot, int n) { return n?geox(basey*quot, quot, n-1):1; } long geoxnorec(long basey, long quot, int n) { int i=n-1, total=basey; for(;i;--i) { total*=q; } /* Ocito da je ovo glupo. Rjesenje je an=a1*q^(n-1) */ } /* 4. Linearna jednostruko povezana lista sadrzi podatke o rezultatima * pismenog iz ASPa. Svaki zapis sadrzi mat.br (cijeli broj), prezime studenta * (20+1 znak), ime studenta (20+1 znak) i ocjenu (cijeli broj). Lista je * uredena uzlazno po prezimenu i imenu studenta. Napisati funkciju koja na * osnovu zadane liste formira binarno stablo za usmeni dio ispita, sortirano * po ocjeni. * (i jedan koji trazi sort po prezimenu ajd i to probaj) */ /* Eh. Dakle, lista ima ptr na slijedecu strukturu + podatke u sebi. ALI, * koliko se ja sjecam teorije iz ASP-a binarno stablo ne moze ponavljajuce * podatke kao referentni kljuc?! */ /* 5. Rezultati kvalifikacijske utrke na 1500m upisivani su u trenutku dolaska * na cilj u red realiziran jednostruko povezanom listom.Svaki zapis sadrzi * identifikacijski broj natjecatelja (cijeli broj), prezime i ime (40+1 * znakova), vrijeme ulaska u cilj izrazeno u stotinkama sekunde (cijeli * broj). Napisati funkciju koja ID brojeve svih natjecatelja koji su se * kvalificirali za ulazak u finale prebacuje na stog realiziran cjelobrojnim * poljem. Potrebno postignuto ciljno vrijeme za ulazak u finale prenosi se * kao parametar max_vrijeme u funkciju. */ void addx(int element, int *arrayx, int n, int *topx) { if (*topx>=n-1) { printf("stog je pun, vrh je %d\n", *vrh); return 0; } arrayx[++*topx]=element; printf("dodao sam %d-ti element %d\n", *vrh, element); } void addxx(node *record, int max_vrijeme) { /* int topx=-1, arrayx[MAX_ELEM]; */ if (record->item.iditem.id,arrayx,MAX_ELEM,&topx); if (record->next) addx(record->next); return; } /* 6. Bin.stablo uredjeno po abecedi sadrzi podatke o studentima s obvezom * placanja studija na FERu. Svaki zapis sadrzi mat.br studenta (cijeli broj), * p. i ime (40+1), prosjek ocjena studenata (realan broj), broj placenih * semestara(cijeli broj) i dug studenta (realan broj). Napisati funkciju koja * ispisuje prezime i ime studenta s najvecim prosjekom. Za vise istih * ispisuje onog koji je prvi po abecedi. */ /* Trivijalno. Zapravo identicno ostalim zadacima, samo sto se prenosi kroz * f-je jedna lokalna automatska varijabla koja je ptr na studenta sa max * prosjekom ili pokazuje na NULL */ /* 7. Uz pretpostavku da se broj zeceva u pojedinoj generaciji ponasa kao * Fibonaccijevi brojevi, napisati rekurzivnu funkciju za ispirs broja zeceva * u zadanoj generaciji uz proizvoljno zadan pocetni broj zeceva . Prototip * funkcije je : long zecevi (int n, long poc_br). Pretpostaviti da zadani * pocetni broj zeceva mora biti neki od Fib. brojeva. */ /* Bljak. Opet nesto iz auditornih. Uglavnom trivijalno ako je poznata * definicija Fib brojeva */ /* 8. U mem postoji sortirana lista s ocjenama iz svih dosadasnjih ispita iz * ASP. Pojedini zapis sadrzi mat.br studenta (cijeli broj), datum ispita (8+1 * znak), i konacnu ocjenu na ispitu (cijeli broj). Lista je sortirana po * matbr studenata. Napisati funkciju koja ce ispisivati mat.brojeve za sve * studente koje na slijedecem roku ceka konacni komisijski ispit (8.izlazak * na ispit). */ /* Ekvivalent dosadasnjim zadacima. Potrebno je raditi statistike koje se * skupljaju prolazom kroz listu. Recimo da je dovoljno trositi kakvo * dinamicko polje ili moze se skupljati rekurzivnim prolazima kroz listu. * Svejedno. */ /* 9. Napisati f-ju za skracivanje razlomaka. Ucitati brojnik i nazivnik, te * ih ispisati u ucitanom u ucitanom i u skracenom obliku.Za skracivanje * obavezno koristiti rekurzivni euklidov algoritam za izracunavanje najvece * zajednicke mjere. */ /* 100puta vec prodjeno gradivo. Naime, algoritam za NVM je jednostavan i * definiran u auditornima. Zadatak se svodi na implementiranje doticnog, sto * je trivijalno, a ja nemam vishe knjigu >8-) */