Search
 
 
  Engleski
 
 
 
Open in this window (click to change)
Forum@DeGiorgi: Početna
Forum za podršku nastavi na PMF-MO
Login Registracija FAQ Smajlići Članstvo Pretražnik Forum@DeGiorgi: Početna

vezane liste
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
.anchy.
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 11. 2007. (20:03:46)
Postovi: (1BC)16
Sarma = la pohva - posuda
= 15 - 11
Lokacija: Zgb

PostPostano: 17:09 pet, 7. 5. 2010    Naslov: vezane liste Citirajte i odgovorite

7.3. Napisite funkciju delete() koja kao argumente uzima pointer na pocetak liste razlomaka,te brojnik i nazivnik razlomka. Funkcija treba iz liste obrisati prvi razlomak koji ima jednaku vrijednost kao razlomak definiran brojnikom i nazivnikom (argumenti funkcije).
Program ne radi ako treba obrisati prvi razlomak,pa ako mi netko može objasniti zašto:
[code:1]#include <stdio.h>
#include <stdlib.h>

typedef struct _razlomak{
int br,naz;
struct _razlomak *next;
}razlomak;

void deleten(razlomak **first, int x, int y){
razlomak *pom2;
pom2=(razlomak*)malloc(sizeof(razlomak));
for(pom2=*first;pom2;pom2=pom2->next)
if(pom2->next->br * y == pom2->next->naz * x && pom2->next){
razlomak *pomoc=pom2->next;
pom2->next=pom2->next->next;
free(pomoc);
break;
}
if((*first)->br * y == (*first)->naz * x){
razlomak *pomoc2=*first;
*first=pomoc2->next;
free(pomoc2);
}
}


int main(){
razlomak *first=NULL, *pom, *zadnji;
int n,i;
scanf("%d", &n);
for(i=0;i<n;i++){
razlomak *novi;
novi=(razlomak*)malloc(sizeof(razlomak));
scanf("%d %d", &novi->br, &novi->naz);
if(!first) zadnji=first=novi;
else {
zadnji->next=novi;
zadnji=novi;
}
}
zadnji->next=NULL;
deleten(&first, 2,3);
for(zadnji=first;zadnji;zadnji=zadnji->next)
printf("%d / %d\n", zadnji->br, zadnji->naz);
for(zadnji=first;zadnji;zadnji=pom){
pom=zadnji->next;
free(zadnji);
}
system("pause");
return 0;
}
[/code:1]

i još mi nešto nije jasno: koja je razlika između
[code:1]pom2->next=pom2->next->next;[/code:1] i [code:1]pom2=pom2->next->next;[/code:1] ?
7.3. Napisite funkciju delete() koja kao argumente uzima pointer na pocetak liste razlomaka,te brojnik i nazivnik razlomka. Funkcija treba iz liste obrisati prvi razlomak koji ima jednaku vrijednost kao razlomak definiran brojnikom i nazivnikom (argumenti funkcije).
Program ne radi ako treba obrisati prvi razlomak,pa ako mi netko može objasniti zašto:
Kod:
#include <stdio.h>
#include <stdlib.h>

typedef struct _razlomak{
        int br,naz;
        struct _razlomak *next;
}razlomak;

void deleten(razlomak **first, int x, int y){
     razlomak *pom2;
     pom2=(razlomak*)malloc(sizeof(razlomak));
     for(pom2=*first;pom2;pom2=pom2->next)
       if(pom2->next->br * y == pom2->next->naz * x && pom2->next){
                   razlomak *pomoc=pom2->next;
                   pom2->next=pom2->next->next;
                   free(pomoc);
                   break;
                   }
     if((*first)->br * y == (*first)->naz * x){
                  razlomak *pomoc2=*first;
                  *first=pomoc2->next;
                  free(pomoc2);
                  }
                  }
     

int main(){
    razlomak *first=NULL, *pom, *zadnji;
    int n,i;
    scanf("%d", &n);
    for(i=0;i<n;i++){
                     razlomak *novi;
                     novi=(razlomak*)malloc(sizeof(razlomak));
                     scanf("%d %d", &novi->br, &novi->naz);
                     if(!first) zadnji=first=novi;
                     else {
                          zadnji->next=novi;
                          zadnji=novi;
                          }
                     }
    zadnji->next=NULL;
    deleten(&first, 2,3);
    for(zadnji=first;zadnji;zadnji=zadnji->next)
          printf("%d / %d\n", zadnji->br, zadnji->naz);
    for(zadnji=first;zadnji;zadnji=pom){
            pom=zadnji->next;
            free(zadnji);
            }
    system("pause");
    return 0;
}


i još mi nešto nije jasno: koja je razlika između
Kod:
pom2->next=pom2->next->next;
i
Kod:
pom2=pom2->next->next;
?


[Vrh]
Korisnički profil Pošaljite privatnu poruku
pbakic
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 05. 10. 2009. (17:48:30)
Postovi: (143)16
Spol: muško
Sarma = la pohva - posuda
83 = 86 - 3

PostPostano: 18:07 pet, 7. 5. 2010    Naslov: Citirajte i odgovorite

Samo je jedna stvar:
Ovaj if u funkciji deleten (unutar for petlje):
[code:1]if(pom2->next->br * y == pom2->next->naz * x && pom2->next)[/code:1]
Ides po petlji i prvo provjeravas dal je [b]pom2->next->[/b] nesto, a tek onda jel [b]pom2->next[/b] NULL pointer. Znaci zapravo dereferenciras [b]pom2->next[/b] prije provjere dal je NULL pointer, pa program pada cim dodje do kraja liste. Zato bi samo trebalo zamijenit poredak ova 2 uvjeta (pa ce izac iz for petlje cim dodje do kraja):
[code:1]if(pom2->next && (pom2->next->br * y == pom2->next->naz * x))[/code:1]

Za ovo drugo:
[code:1]pom2->next=pom2->next->next;[/code:1] postavlja "next" u kucici na koju pokazuje pom2 da pokazuje na prekiducu kucicu. (tj preskocili smo jedan element liste)
[code:1]pom2=pom2->next->next;[/code:1] samo pomice pointer pom2 (a ne mijenja listu) na prekiducu kucicu
Samo je jedna stvar:
Ovaj if u funkciji deleten (unutar for petlje):
Kod:
if(pom2->next->br * y == pom2->next->naz * x && pom2->next)

Ides po petlji i prvo provjeravas dal je pom2→next→ nesto, a tek onda jel pom2→next NULL pointer. Znaci zapravo dereferenciras pom2→next prije provjere dal je NULL pointer, pa program pada cim dodje do kraja liste. Zato bi samo trebalo zamijenit poredak ova 2 uvjeta (pa ce izac iz for petlje cim dodje do kraja):
Kod:
if(pom2->next && (pom2->next->br * y == pom2->next->naz * x))


Za ovo drugo:
Kod:
pom2->next=pom2->next->next;
postavlja "next" u kucici na koju pokazuje pom2 da pokazuje na prekiducu kucicu. (tj preskocili smo jedan element liste)
Kod:
pom2=pom2->next->next;
samo pomice pointer pom2 (a ne mijenja listu) na prekiducu kucicu


[Vrh]
Korisnički profil Pošaljite privatnu poruku
.anchy.
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 11. 2007. (20:03:46)
Postovi: (1BC)16
Sarma = la pohva - posuda
= 15 - 11
Lokacija: Zgb

PostPostano: 19:21 pet, 7. 5. 2010    Naslov: Re: vezane liste Citirajte i odgovorite

vidis,vidis..a još sam si i mislila da cu napravit takvu gresku. hvala!
još samo nešto.. zašto mi ovo ne radi? (maknula sam break) tako sam mislila riješiti idući zadatak,koji briše sve takve razlomke
[code:1]for(pom2=*first;pom2;pom2=pom2->next)
if(pom2->next->br * y == pom2->next->naz * x && pom2->next){
razlomak *pomoc=pom2->next;
pom2->next=pom2->next->next;
free(pomoc);
}[/code:1]
vidis,vidis..a još sam si i mislila da cu napravit takvu gresku. hvala!
još samo nešto.. zašto mi ovo ne radi? (maknula sam break) tako sam mislila riješiti idući zadatak,koji briše sve takve razlomke
Kod:
for(pom2=*first;pom2;pom2=pom2->next)
       if(pom2->next->br * y == pom2->next->naz * x && pom2->next){
                   razlomak *pomoc=pom2->next;
                   pom2->next=pom2->next->next;
                   free(pomoc);
                   }


[Vrh]
Korisnički profil Pošaljite privatnu poruku
pbakic
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 05. 10. 2009. (17:48:30)
Postovi: (143)16
Spol: muško
Sarma = la pohva - posuda
83 = 86 - 3

PostPostano: 20:36 pet, 7. 5. 2010    Naslov: Citirajte i odgovorite

Pa opet, treba zamijenit poredak uvjeta u if-u. Btw i bez breaka nece radit ako upises vise takvih razlomaka za redom (jer onda izbaci jedan, i pomakne se jedan dalje), pa bi zbog toga trebalo nakon if-a s whileom izbacit sve takve koji slijede
Pa opet, treba zamijenit poredak uvjeta u if-u. Btw i bez breaka nece radit ako upises vise takvih razlomaka za redom (jer onda izbaci jedan, i pomakne se jedan dalje), pa bi zbog toga trebalo nakon if-a s whileom izbacit sve takve koji slijede


[Vrh]
Korisnički profil Pošaljite privatnu poruku
.anchy.
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 14. 11. 2007. (20:03:46)
Postovi: (1BC)16
Sarma = la pohva - posuda
= 15 - 11
Lokacija: Zgb

PostPostano: 6:42 sub, 8. 5. 2010    Naslov: Citirajte i odgovorite

hvala još jednom!
kaj je najbolje,i prvi i drugi put si razmišljam da pazim na taj poredak,kao što nam je asistent Doko objašnjavao,i oba dva puta zeznem.. :D
hvala još jednom!
kaj je najbolje,i prvi i drugi put si razmišljam da pazim na taj poredak,kao što nam je asistent Doko objašnjavao,i oba dva puta zeznem.. Very Happy


[Vrh]
Korisnički profil Pošaljite privatnu poruku
pajopatak
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 10. 2009. (22:20:04)
Postovi: (BE)16
Sarma = la pohva - posuda
= 3 - 0

PostPostano: 20:11 pon, 31. 5. 2010    Naslov: Citirajte i odgovorite

Može li mi netko napisati kod kako se čitav dio liste ili cijela lista ubacuje u drugu..Dali to može ovako (npr kada imam pointer na 2 liste):

t=*lista1;

for(p=*lista2;p!=NULL;p=p->next);
p->next=t->next;
t=*lista2;
:?:
Može li mi netko napisati kod kako se čitav dio liste ili cijela lista ubacuje u drugu..Dali to može ovako (npr kada imam pointer na 2 liste):

t=*lista1;

for(p=*lista2;p!=NULL;p=p->next);
p->next=t->next;
t=*lista2;
Question


[Vrh]
Korisnički profil Pošaljite privatnu poruku
Prethodni postovi:   
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 1. godine, preddiplomski studij Matematika -> Programiranje 1 i 2 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Ne možete otvarati nove teme.
Ne možete odgovarati na postove.
Ne možete uređivati Vaše postove.
Ne možete izbrisati Vaše postove.
Ne možete glasovati u anketama.
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2002 phpBB Group
Theme created by Vjacheslav Trushkin
HR (Cro) by Ančica Sečan