Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* ZADATAK:(2 + 6 + 7 = 15 bodova) Elementi vezane liste trebaju sadržavati podatke o djeci jednog naselja, i to: ime (s
- najviše 25 znakova), te broj sličica nogometnih igrača koje su prikupili (prirodni broj).
- (a) Napišite definiciju tipa podatka za pojedini element liste, na način da bude moguće definirati varijable naredbom djeca
- item; i sl. Definirajte samo podatke koji su nužni za čuvanje takve liste u memoriji.
- (b) Napišite funkciju djeca* igra(djeca* first, char* dijete1, char* dijete2), gdje je first pokazivač na prvi
- element liste, a dijete1 je ime djeteta koje je u igri dobilo sve sličice djeteta dijete2. Igra se treba obaviti na
- način da se djetetu dijete1 pribroje sve sličice djeteta2, te da se obriše element vezane liste u kojem su spremljeni
- podaci djeteta dijete2. Ukoliko barem jedno dijete zadanog imena ne postoji u vezanoj listi, funkcija ne radi nikakvu
- promjenu u ulaznoj vezanoj listi. Funkcija vraća pokazivač na početak vezane liste.
- (c) Napišite funkciju djeca* najbolji(djeca** first) koja iz liste izdvaja najboljih 10% djece, na način da se formira
- nova vezana lista, u kojoj su ti elementi spremljeni (sortirani silazno po broju sličica), i vraća se pokazivač na početak
- nove vezane liste. first je pokazivač na pokazivač na početak (stare) vezane liste. Broj najboljih 10% djece odredi se
- tako da se uzme najveći cijeli broj djece manji ili jednak od 10% ukupnog broja djece, ukoliko je taj broj veći od 1,
- odnosno, 1, ukoliko je taj broj jednak 0. Ukoliko je ulazna lista prazna, funkcija ne radi nikakvu promjenu na ulaznoj
- vezanoj listi, a vraća NULL pokazivač. Ovdje nije dozvoljeno alocirati memoriju za nove elemente, već sve treba raditi
- s postojećim elementima vezane liste */
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- typedef struct _djeca{
- char ime[26];
- int broj;
- struct _djeca* next;
- }djeca;
- djeca* igra(djeca* first, char* dijete1, char* dijete2){
- int br=0;
- djeca* pom=first;
- djeca* temp;
- //provjera prvog
- if(strcmp(pom->ime, dijete2)==0){
- br=pom->broj;
- temp=first;
- first=first->next;
- free(temp);
- }
- while(pom->next){
- if(strcmp(dijete2, pom->next->ime)==0){
- br=pom->next->broj;
- temp=pom->next;
- pom->next=temp->next;
- free(temp);
- }
- pom=pom->next;
- }
- pom=first;
- while(pom){
- if(strcmp(dijete1, pom->ime)==0)
- pom->broj+=br;
- pom=pom->next;
- }
- return first;
- }
- djeca* najbolji(djeca** first){
- djeca* pom=*first;
- djeca* temp;
- int br_djece=0;
- int br_boljih;
- while(pom){ //zanima me koliko je djece ukupno
- br_djece++;
- pom=pom->next;
- }
- pom=*first;
- djeca* pom2=*first;
- while(pom->next){ // za svako dijete gledam koliko je djece bolje od njega, prolazim po prethodnicima
- br_boljih=0;
- for(pom2=*first; pom2!=NULL; pom2=pom2->next){
- if((pom->next->broj)<(pom2->broj))
- br_boljih++;
- }
- if(br_boljih>(0.1 *br_djece)){ //nisam zicer da je dobar uvjet u zagradi, brisem one koji su u 90% losih
- temp=pom->next;
- pom->next=temp->next;
- free(temp);
- }
- pom=pom->next;
- }
- //provjera prvog
- br_boljih=0;
- pom=*first;
- for(pom2=*first; pom2!=NULL; pom2=pom2->next)
- if(pom->broj<pom2->broj)br_boljih++;
- if(br_boljih>(0.1*br_djece)){
- temp=*first;
- first*=first*->next; //OVA LINIJA JE JAKO KRITICNA, KOMPAJLER JU OPCE NE PRIMA
- free(temp);
- }
- return *first;
- }
- int main(vodi){
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement