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

vezana lista (zadatak)
WWW:

Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Računarski praktikum 1
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
rat in a cage
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 11. 2004. (21:45:48)
Postovi: (22C)16
Sarma = la pohva - posuda
13 = 17 - 4
Lokacija: Zg

PostPostano: 11:58 čet, 18. 5. 2006    Naslov: vezana lista Citirajte i odgovorite

Trebam pomoć s next zadatkom:

[b]Zad:[/b]
Napišite funkciju sa prototipom [i]cvor *slova(cvor *)[/i] koja prima pokazivač na početak liste. Funkcija treba ispred svakog čvora [i]u[/i] dodati nove čvorove čiji stringovi će se sastojati od pojedinih znakova stringa iz čvora [i]u[/i], u istom poretku. Na primjer, ako se ulazna lista sastojala redom od 2 čvora u kojima je pisalo: [i](jedan)(pet)[/i], onda preuređena lista treba izgledati ovako: [i](j)(e)(d)(a)(n)(jedan)(p)(e)(t)(pet)[/i]; tu listu treba ispisati na ekran.

evo što sam ja napisao al ne radi, a ne mogu nać di sam fulao:
[code:1]cvor *slova (cvor *l)
{
cvor *t, *k, *pom, *p;
char rijec[21];
int br=0,i;
p=l;

for (t=l;t!=NULL;t=t->next)
{
k=t;
strcpy (rijec, t->r);

for (i=0;i<strlen(rijec);i++)
{
pom=(cvor*)malloc(sizeof(cvor));
pom->r[0]=rijec[i];
pom->r[1]='\0';
p->next=pom;

if ((br==0)&&(i==0)) l=pom;
else if (i==0)
{
k=pom;
pom->next=t;
}
else
{
pom->next=t;
k->next=pom;
k=pom;
}
}
p=t;
br=br+1;
}
return l;
} [/code:1]

odmah ova prva for petlja je beskonačna, zašto?
pliz pomagajte :oops:
Trebam pomoć s next zadatkom:

Zad:
Napišite funkciju sa prototipom cvor *slova(cvor *) koja prima pokazivač na početak liste. Funkcija treba ispred svakog čvora u dodati nove čvorove čiji stringovi će se sastojati od pojedinih znakova stringa iz čvora u, u istom poretku. Na primjer, ako se ulazna lista sastojala redom od 2 čvora u kojima je pisalo: (jedan)(pet), onda preuređena lista treba izgledati ovako: (j)(e)(d)(a)(n)(jedan)(p)(e)(t)(pet); tu listu treba ispisati na ekran.

evo što sam ja napisao al ne radi, a ne mogu nać di sam fulao:
Kod:
cvor *slova (cvor *l)
     {
     cvor *t, *k, *pom, *p;
     char rijec[21];
     int br=0,i;
     p=l;
   
     for (t=l;t!=NULL;t=t->next)
           {                         
           k=t;         
           strcpy (rijec, t->r);
           
           for (i=0;i<strlen(rijec);i++)
               {
               pom=(cvor*)malloc(sizeof(cvor));
               pom->r[0]=rijec[i];
               pom->r[1]='\0';
               p->next=pom;
             
               if ((br==0)&&(i==0)) l=pom;
               else if (i==0)
                    {
                    k=pom;
                    pom->next=t;
                    }                 
               else
                    {
                    pom->next=t;
                    k->next=pom;
                    k=pom;
                    }
               }
          p=t;     
          br=br+1;
          }   
     return l;
     }     


odmah ova prva for petlja je beskonačna, zašto?
pliz pomagajte Embarassed


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


Pridružen/a: 08. 06. 2005. (22:40:59)
Postovi: (14A)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
31 = 55 - 24
Lokacija: Keglić

PostPostano: 11:46 pet, 19. 5. 2006    Naslov: Citirajte i odgovorite

Nisam skroz analizirao cijeli kod. inače bi varijable mogle biti malo, hm, pa recimo da kroz njihovo ime objasniš kaj rade, izgubio sam se u t, k, p... :oops:

[quote][code:1]p->next=pom; [/code:1][/quote]
Primjetio sam da bi ti trebalo pisati [code:1]pom->next=p[/code:1] jer ga ovako metneš iza, a ne ispred člana liste i pogube ti se veze odmah na početku. Nisam probao kompajlirati, pa ako ti ne radi, javi, i pojasni mi kaj je koji od t, p i k jer sam nesposoban :?
Nisam skroz analizirao cijeli kod. inače bi varijable mogle biti malo, hm, pa recimo da kroz njihovo ime objasniš kaj rade, izgubio sam se u t, k, p... Embarassed

Citat:
Kod:
p->next=pom;

Primjetio sam da bi ti trebalo pisati
Kod:
pom->next=p
jer ga ovako metneš iza, a ne ispred člana liste i pogube ti se veze odmah na početku. Nisam probao kompajlirati, pa ako ti ne radi, javi, i pojasni mi kaj je koji od t, p i k jer sam nesposoban Confused


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


Pridružen/a: 19. 01. 2005. (14:15:23)
Postovi: (157)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
62 = 85 - 23
Lokacija: Happily traveling through space since 1986!

PostPostano: 13:45 pet, 19. 5. 2006    Naslov: Citirajte i odgovorite

Ne znam što ti nije točno pa sam prepravio program.
[code:1]cvor *slova (cvor *l)
{
cvor *pNovaLista = 0, *pIter = 0, *pTemp = 0;
for (pIter = l; pIter != 0;)
{
int iZnak;
// dodaj svaki znak u novu listu
for (iZnak = 0; iZnak < strlen(pIter->r); iZnak++)
{
cvor *pNovi = (cvor*)malloc(sizeof(cvor));
pNovi->next = 0;
pNovi->r[0] = pIter->r[iZnak];
pNovi->r[1] = '\0';

if (!pNovaLista) pNovaLista = pNovi;
else
{
// dodaj na kraj
for (pTemp = pNovaLista; pTemp->next != 0; pTemp = pTemp->next);
pTemp->next = pNovi;
}
}

// na kraj dodaj punu rijec
for (pTemp = pNovaLista; pTemp->next != 0; pTemp = pTemp->next);
pTemp->next = pIter;
// pomakni se na sljedeću riječ
pIter = pIter->next;
// sad resetiraj ptr tako da možemo nastaviti dodavati slova od sljedeće riječi
pTemp->next->next = 0;
}

return pNovaLista;
}[/code:1]
Ne znam što ti nije točno pa sam prepravio program.
Kod:
cvor *slova (cvor *l)
{
     cvor *pNovaLista = 0, *pIter = 0, *pTemp = 0;
     for (pIter = l; pIter != 0;)
     {
          int iZnak;
          // dodaj svaki znak u novu listu
          for (iZnak = 0; iZnak < strlen(pIter->r); iZnak++)
          {
              cvor *pNovi = (cvor*)malloc(sizeof(cvor));
              pNovi->next = 0;
              pNovi->r[0] = pIter->r[iZnak];
              pNovi->r[1] = '\0';
             
              if (!pNovaLista) pNovaLista = pNovi;
              else
              {
                 // dodaj na kraj
                 for (pTemp = pNovaLista; pTemp->next != 0; pTemp = pTemp->next);
                 pTemp->next = pNovi;
              }
          }

          // na kraj dodaj punu rijec
          for (pTemp = pNovaLista; pTemp->next != 0; pTemp = pTemp->next);
          pTemp->next = pIter;
          // pomakni se na sljedeću riječ
          pIter = pIter->next;
          // sad resetiraj ptr tako da možemo nastaviti dodavati slova od sljedeće riječi
          pTemp->next->next = 0;
     }
     
     return pNovaLista;
}



_________________
-- space available for rent --
[Vrh]
Korisnički profil Pošaljite privatnu poruku
HijenA
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 23. 01. 2004. (16:46:04)
Postovi: (3D2)16
Spol: muško
Sarma = la pohva - posuda
-26 = 44 - 70
Lokacija: Prazan skup ;-)

PostPostano: 14:31 pet, 19. 5. 2006    Naslov: Citirajte i odgovorite

[quote="pecina"]Ne znam što ti nije točno pa sam prepravio program.
[code:1]cvor *slova (cvor *l)
{
cvor *pNovaLista = 0, *pIter = 0, *pTemp = 0;[/code:1]
[/quote]


ok...meni ovo od pocetka nije jasno. AFAIK, ovako ne mozes pridruzivati vrijednosti. pazi, ti si pointeru koji bi trebao pokazivati na strukturu dodijelio vrijednost 0 :-? jel samo to meni cudno ili...?

BTW. koliko sam shvatio pIter bi trebao biti brojac, zar ne? zasto koristiti tako definiran brojac a ne jednostavno napravit da ti je brojac kao varijabla tipa int koji se za svaku iteraciju poveca za 1 (ili za koji god vec broj)?

EDIT: za taj pIter isto vrijedi ovo sto sam gore napisao kod pridruzivanja vrijednosti.
pecina (napisa):
Ne znam što ti nije točno pa sam prepravio program.
Kod:
cvor *slova (cvor *l)
{
     cvor *pNovaLista = 0, *pIter = 0, *pTemp = 0;




ok...meni ovo od pocetka nije jasno. AFAIK, ovako ne mozes pridruzivati vrijednosti. pazi, ti si pointeru koji bi trebao pokazivati na strukturu dodijelio vrijednost 0 Confused jel samo to meni cudno ili...?

BTW. koliko sam shvatio pIter bi trebao biti brojac, zar ne? zasto koristiti tako definiran brojac a ne jednostavno napravit da ti je brojac kao varijabla tipa int koji se za svaku iteraciju poveca za 1 (ili za koji god vec broj)?

EDIT: za taj pIter isto vrijedi ovo sto sam gore napisao kod pridruzivanja vrijednosti.



_________________
Chuck Norris can divide by zero.

I bow before you Veliki Limun, on je kiseo i zut Bow to the left

[Vrh]
Korisnički profil Pošaljite privatnu poruku Pošaljite e-mail
pecina
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 19. 01. 2005. (14:15:23)
Postovi: (157)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
62 = 85 - 23
Lokacija: Happily traveling through space since 1986!

PostPostano: 14:46 pet, 19. 5. 2006    Naslov: Citirajte i odgovorite

Ne kužim u čemu je problem? Pokazivač pokazuje na 0. Inače je dobra praksa SVAKI pokazivač inicijalizirati na 0.

BTW, taj kod radi jer sam ga prepisao iz Dev-CPP-a. Uostalom, ja sam svaki pokazivač pravilno inicijalizirao prije upotrebe.
Ne kužim u čemu je problem? Pokazivač pokazuje na 0. Inače je dobra praksa SVAKI pokazivač inicijalizirati na 0.

BTW, taj kod radi jer sam ga prepisao iz Dev-CPP-a. Uostalom, ja sam svaki pokazivač pravilno inicijalizirao prije upotrebe.



_________________
-- space available for rent --
[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


Pridružen/a: 06. 10. 2002. (22:07:09)
Postovi: (3562)16
Spol: zombi
Sarma = la pohva - posuda
854 = 1068 - 214
Lokacija: /sbin/init

PostPostano: 15:10 pet, 19. 5. 2006    Naslov: Citirajte i odgovorite

AFAIK, [tt]NULL[/tt] je nula castana na pointer:

[code:1][vsego@degiorgi ~]$ grep "define NULL" /usr/include/*.h
/usr/include/gdcache.h:#define NULL (void *)0
/usr/include/libio.h:# define NULL (__null)
/usr/include/libio.h:# define NULL ((void*)0)
/usr/include/libio.h:# define NULL (0)
/usr/include/malloc.h:# define NULL 0
/usr/include/malloc.h:# define NULL ((__malloc_ptr_t) 0)
/usr/include/portab.h:#define NULL 0
/usr/include/portab.h:#define NULL ((void *)0)[/code:1]

Ako direktno pridruzujes, onda se castanje vrsi automatski. 8)

Ali, slazem se da je bolje pisati [tt]NULL[/tt] - preglednije je. ;)
AFAIK, NULL je nula castana na pointer:

Kod:
[vsego@degiorgi ~]$ grep "define NULL" /usr/include/*.h
/usr/include/gdcache.h:#define NULL (void *)0
/usr/include/libio.h:#  define NULL (__null)
/usr/include/libio.h:#   define NULL ((void*)0)
/usr/include/libio.h:#   define NULL (0)
/usr/include/malloc.h:#  define NULL    0
/usr/include/malloc.h:#  define NULL    ((__malloc_ptr_t) 0)
/usr/include/portab.h:#define NULL    0
/usr/include/portab.h:#define NULL    ((void *)0)


Ako direktno pridruzujes, onda se castanje vrsi automatski. Cool

Ali, slazem se da je bolje pisati NULL - preglednije je. Wink



_________________
U pravilu ignoriram pitanja u krivim topicima i kodove koji nisu u [code]...[/code] blokovima.
Takodjer, OBJASNITE sto vas muci! "Sto mi je krivo?", bez opisa u cemu je problem, rijetko ce zadobiti moju paznju.
Drzim prodike
[Vrh]
Korisnički profil Pošaljite privatnu poruku
rat in a cage
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 11. 2004. (21:45:48)
Postovi: (22C)16
Sarma = la pohva - posuda
13 = 17 - 4
Lokacija: Zg

PostPostano: 9:00 pon, 22. 5. 2006    Naslov: Citirajte i odgovorite

hvala vam svima...sad to opće nisam gledao ovih dana i zaboravio sam i ja kaj su mi točno ti t, p, k...zapravo t je valjda trenutni p prethodni a k?? :? ma izgubio sam se sam u svom programu :oops: uglavnom skužio sam sad...trebao bi ubuduće pointere malo sugestivnije zvati :oops:
:thankyou: još jednom :wink:
hvala vam svima...sad to opće nisam gledao ovih dana i zaboravio sam i ja kaj su mi točno ti t, p, k...zapravo t je valjda trenutni p prethodni a k?? Confused ma izgubio sam se sam u svom programu Embarassed uglavnom skužio sam sad...trebao bi ubuduće pointere malo sugestivnije zvati Embarassed
Thank you još jednom Wink


[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 2. godine -> Računarski praktikum 1 Vremenska zona: GMT + 01:00.
Stranica 1 / 1.

 
Forum(o)Bir:  
Možete otvarati nove teme.
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 can 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