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

1. domaca zadaca
WWW:
Idite na 1, 2  Sljedeće
Moja sarma
 
Započnite novu temu   Odgovorite na temu   printer-friendly view    Forum@DeGiorgi: Početna -> Kolegiji 2. godine -> Strukture podataka i algoritmi
Prethodna tema :: Sljedeća tema  
Autor/ica Poruka
hipernova
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 09. 2011. (20:15:21)
Postovi: (C)16
Sarma = la pohva - posuda
= 0 - 0
Lokacija: Zagreb

PostPostano: 1:04 čet, 25. 10. 2012    Naslov: 1. domaca zadaca Citirajte i odgovorite

Pozdrav!

Pokusavam implementirati atp stog sa pointerima, ali ima par stvari koje ne kuzim.
Evo kod:

[code:1]#include<stdio.h>

typedef struct _stack
{
char zn;
struct _stack *next;
}stack;

typedef stack *stog;

void MAKE_NULL(stog *s)
{
*s=(stack*)malloc(sizeof(stack));
(*s)->next= NULL;
return;
}


main()
{
stack *s;
MAKE_NULL(s);
return 0;
}
[/code:1]

prvi typedeff je zapravo struktura celija, drugi typedeff nisam siguran za sto tocno sluzi, ali mi nikako drugacije nece kompajlirati(iako i za ovo baca warninge)
također nisam siguran kako tocno ide funkcija MAKE_NULL jer u skripit pise da s=NULL, ali to mi sa ovime ne radi, a u nekoj drugoj skripti sam procitao da pointer next mora biti postavljen na NULL.
Ako bi mi netko mogao objasnit dal je prvi typedeff dobar, cemu tocno ovaj drugi typedeff i kako se to moze napraviti bez njega, i kako tocno MAKE_NULL napraviti.

Hvala
Pozdrav!

Pokusavam implementirati atp stog sa pointerima, ali ima par stvari koje ne kuzim.
Evo kod:

Kod:
#include<stdio.h>

typedef struct _stack
{
    char zn;
    struct _stack *next;
}stack;

typedef stack *stog;

void MAKE_NULL(stog *s)
{
    *s=(stack*)malloc(sizeof(stack));
    (*s)->next= NULL;
    return;
}


main()
{
    stack *s;
    MAKE_NULL(s);
    return 0;
}


prvi typedeff je zapravo struktura celija, drugi typedeff nisam siguran za sto tocno sluzi, ali mi nikako drugacije nece kompajlirati(iako i za ovo baca warninge)
također nisam siguran kako tocno ide funkcija MAKE_NULL jer u skripit pise da s=NULL, ali to mi sa ovime ne radi, a u nekoj drugoj skripti sam procitao da pointer next mora biti postavljen na NULL.
Ako bi mi netko mogao objasnit dal je prvi typedeff dobar, cemu tocno ovaj drugi typedeff i kako se to moze napraviti bez njega, i kako tocno MAKE_NULL napraviti.

Hvala


[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
hipernova
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 09. 2011. (20:15:21)
Postovi: (C)16
Sarma = la pohva - posuda
= 0 - 0
Lokacija: Zagreb

PostPostano: 16:07 čet, 25. 10. 2012    Naslov: Citirajte i odgovorite

evo nasao sam rjesenje tu: [url]http://degiorgi.math.hr/forum/viewtopic.php?t=10333[/url]

ali imam drugi problem :)

[code:1]#include<stdio.h>

typedef struct _stack
{
char zn;
struct _stack *next;
}stack;

typedef stack *stog;

void MAKE_NULL(stog *s)
{
s=NULL;
}

void PUSH(char x, stog *s)
{
stack *n;
n=(stack*)malloc(sizeof(stack));
n->zn=x;
n->next=s;
*s=n;
}

int main()
{
stog s;
MAKE_NULL(&s);
PUSH('a',&s);
printf("\n slovo je %c", s->zn);
PUSH('B',&s);
printf("\n sljedece je %c", s->zn);
return 0;
}[/code:1]

program radi, ali mi izbacuje 2 warninga
[quote]warning: incompatible implicit declaration of built-in function 'malloc'|

warning: assignment from incompatible pointer type|
[/quote]

zna li netko zbog cega se javljaju ova upozorenja?
evo nasao sam rjesenje tu: http://degiorgi.math.hr/forum/viewtopic.php?t=10333

ali imam drugi problem Smile

Kod:
#include<stdio.h>

typedef struct _stack
{
    char zn;
    struct _stack *next;
}stack;

typedef stack *stog;

void MAKE_NULL(stog *s)
{
    s=NULL;
}

void PUSH(char x, stog *s)
{
    stack *n;
    n=(stack*)malloc(sizeof(stack));
    n->zn=x;
    n->next=s;
    *s=n;
}

 int main()
{
    stog s;
    MAKE_NULL(&s);
    PUSH('a',&s);
    printf("\n slovo je %c", s->zn);
    PUSH('B',&s);
    printf("\n sljedece je %c", s->zn);
    return 0;
}


program radi, ali mi izbacuje 2 warninga
Citat:
warning: incompatible implicit declaration of built-in function 'malloc'|

warning: assignment from incompatible pointer type|


zna li netko zbog cega se javljaju ova upozorenja?


[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
Loo
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 11. 06. 2012. (16:02:07)
Postovi: (D0)16
Spol: žensko
Sarma = la pohva - posuda
84 = 85 - 1

PostPostano: 17:19 čet, 25. 10. 2012    Naslov: Citirajte i odgovorite

probaj sa:
[code:1]#include <stdlib.h>[/code:1]

a u MAKE_NULL-u
[code:1]*S=NULL[/code:1]
probaj sa:
Kod:
#include <stdlib.h>


a u MAKE_NULL-u
Kod:
*S=NULL


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


Pridružen/a: 25. 09. 2011. (20:15:21)
Postovi: (C)16
Sarma = la pohva - posuda
= 0 - 0
Lokacija: Zagreb

PostPostano: 18:38 čet, 25. 10. 2012    Naslov: Citirajte i odgovorite

hvala, ali funkcija MAKE_NULL radi u ovom drugom primjeru, no nesto ne štima sa PUSH-om. Očita greška je n->next=s; , ali ako stavim n->next=s->next program ne radi :/
hvala, ali funkcija MAKE_NULL radi u ovom drugom primjeru, no nesto ne štima sa PUSH-om. Očita greška je n->next=s; , ali ako stavim n->next=s->next program ne radi Ehm?


[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
Loo
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 11. 06. 2012. (16:02:07)
Postovi: (D0)16
Spol: žensko
Sarma = la pohva - posuda
84 = 85 - 1

PostPostano: 18:51 čet, 25. 10. 2012    Naslov: Citirajte i odgovorite

možda
[code:1]n->next=*S[/code:1] ?
možda
Kod:
n->next=*S
?


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


Pridružen/a: 25. 09. 2011. (20:15:21)
Postovi: (C)16
Sarma = la pohva - posuda
= 0 - 0
Lokacija: Zagreb

PostPostano: 19:05 čet, 25. 10. 2012    Naslov: Citirajte i odgovorite

da, tako radi, ali nisam siguran dal je to tocno. jer i dalje izbacuje warning :/

EDIT: Evo sad sam stoposto siguran da push radi jer sam ubacio provjere malo bolje.Ali ne radi pop :(

evo kod za ovo sta sam dosad napravio, ako netko vidi razlog zasto pop ne radi vicite

[code:1]#include<stdio.h>
#include<stdlib.h>

typedef struct _stack
{
char zn;
struct _stack *next;
}stack;

typedef stack *stog;

void MAKE_NULL(stog *s)
{
s=NULL;
}

void PUSH(char x, stog *s)
{
stack *n=*s;
*s=(stack*)malloc(sizeof(stack));
(*s)->zn=x;
(*s)->next=n;
}

void POP(stog *s)
{
printf("\n funkcija pop");
(*s)=(*s)->next->next;
}

int main()
{
stog s;
s=(stack*)malloc(sizeof(stack));
MAKE_NULL(&s);
PUSH('a',&s);
printf("\n Prvo slovo u stogu je %c", s->zn);
PUSH('b',&s);
printf("\n Drugo %c, prije %c", s->zn, s->next->zn);
PUSH('c',&s);
printf("\n trece je %c, drugo %c, prvo %c", s->zn,s->next->zn, s->next->next->zn);
POP(&s);
printf("\n poslije pop-a %c", s->zn);
return 0;
}
[/code:1]

EDIT2: evo sredio sam i pop sad radi, malo je ruzna provjera
da, tako radi, ali nisam siguran dal je to tocno. jer i dalje izbacuje warning Ehm?

EDIT: Evo sad sam stoposto siguran da push radi jer sam ubacio provjere malo bolje.Ali ne radi pop Sad

evo kod za ovo sta sam dosad napravio, ako netko vidi razlog zasto pop ne radi vicite

Kod:
#include<stdio.h>
#include<stdlib.h>

typedef struct _stack
{
    char zn;
    struct _stack *next;
}stack;

typedef stack *stog;

void MAKE_NULL(stog *s)
{
    s=NULL;
}

void PUSH(char x, stog *s)
{
    stack *n=*s;
    *s=(stack*)malloc(sizeof(stack));
    (*s)->zn=x;
    (*s)->next=n;
}

void POP(stog *s)
{
    printf("\n funkcija pop");
    (*s)=(*s)->next->next;
}

 int main()
{
    stog s;
    s=(stack*)malloc(sizeof(stack));
    MAKE_NULL(&s);
    PUSH('a',&s);
    printf("\n Prvo slovo u stogu je %c", s->zn);
    PUSH('b',&s);
    printf("\n Drugo %c, prije %c", s->zn, s->next->zn);
    PUSH('c',&s);
    printf("\n trece je %c, drugo %c, prvo %c", s->zn,s->next->zn, s->next->next->zn);
    POP(&s);
    printf("\n poslije pop-a %c", s->zn);
    return 0;
}


EDIT2: evo sredio sam i pop sad radi, malo je ruzna provjera


[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
vsego
Site Admin
Site Admin


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

PostPostano: 0:07 pet, 26. 10. 2012    Naslov: Citirajte i odgovorite

[tt]MAKE_NULL()[/tt] ne moze raditi ispravno kad mijenja lokalnu varijablu [tt]s[/tt], sto je isto kao da i ne radi nista.

A ovaj [tt]pop()[/tt] brise dva znaka sto je krivo. Takodjer, past ce ako pozoves za prazni stog.
MAKE_NULL() ne moze raditi ispravno kad mijenja lokalnu varijablu s, sto je isto kao da i ne radi nista.

A ovaj pop() brise dva znaka sto je krivo. Takodjer, past ce ako pozoves za prazni stog.



_________________
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
mamba
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 09. 07. 2012. (17:11:16)
Postovi: (16)16
Sarma = la pohva - posuda
= 1 - 1

PostPostano: 8:45 pet, 26. 10. 2012    Naslov: duljine? Citirajte i odgovorite

Implementirajte a.t.p. BTREE pomoću polja i napišite potprogram koji kreira binarno stablo iz prefix oblika logičkog izraza.Implementirajte a.t.p. BTREE pomoću polja i napišite potprogram koji kreira binarno stablo iz prefix oblika logičkog izraza. Za kontrolu napravite i preorder obilazak dobivenog stabla.

pitanje:
ako stavim da mi je ulazni string duljine 100, koja bi bila povoljna konstanta MAXNODES koja određuje duljinu polja u kojoj je stablo spremljeno? na vježbama je rečeno 2^n-1, pa neznam baš kako bi to funkcioniralo.
pa ako ima kakav savjet kako da odredim mksimalne duljine tih stringova i polja za BTREE

i još vezano uz funkciju error koja se pojavljuje u implementacijama:
ona napiše poruku o grešci i prekida program (sa exit) ili nešto drugo?

hvala
Implementirajte a.t.p. BTREE pomoću polja i napišite potprogram koji kreira binarno stablo iz prefix oblika logičkog izraza.Implementirajte a.t.p. BTREE pomoću polja i napišite potprogram koji kreira binarno stablo iz prefix oblika logičkog izraza. Za kontrolu napravite i preorder obilazak dobivenog stabla.

pitanje:
ako stavim da mi je ulazni string duljine 100, koja bi bila povoljna konstanta MAXNODES koja određuje duljinu polja u kojoj je stablo spremljeno? na vježbama je rečeno 2^n-1, pa neznam baš kako bi to funkcioniralo.
pa ako ima kakav savjet kako da odredim mksimalne duljine tih stringova i polja za BTREE

i još vezano uz funkciju error koja se pojavljuje u implementacijama:
ona napiše poruku o grešci i prekida program (sa exit) ili nešto drugo?

hvala


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


Pridružen/a: 31. 05. 2012. (13:40:59)
Postovi: (7)16
Sarma = la pohva - posuda
= 1 - 0

PostPostano: 16:26 sub, 27. 10. 2012    Naslov: Citirajte i odgovorite

Zadatak: Implementirajte a.t.p. BTREE pomoću polja

Odnosno, zanima me kako implementirati fju CREATE ili LEFT/RIGHT_SUBTREE, koje su podosta povezane. tražila sam u skripti, ali općenito nema nešto puno o binarnim stablima, a o imlementaciji BTREE preko polja još manje, također ni na internetu nisam uspjela naći puno toga. sama sam uspjela jedino napisati create koja izgleda kao rekurzija i poziva stalno left/right subtree. našla sam neke prijedloge da create napišem pomoću kursora, što mi izgleda podosta lagano, ali kasnije s tom fjom create neću moći ništa.
ukratko zanima me kako čuvati neko podstablo? neki hint za implementaciju, bilo šta?
Zadatak: Implementirajte a.t.p. BTREE pomoću polja

Odnosno, zanima me kako implementirati fju CREATE ili LEFT/RIGHT_SUBTREE, koje su podosta povezane. tražila sam u skripti, ali općenito nema nešto puno o binarnim stablima, a o imlementaciji BTREE preko polja još manje, također ni na internetu nisam uspjela naći puno toga. sama sam uspjela jedino napisati create koja izgleda kao rekurzija i poziva stalno left/right subtree. našla sam neke prijedloge da create napišem pomoću kursora, što mi izgleda podosta lagano, ali kasnije s tom fjom create neću moći ništa.
ukratko zanima me kako čuvati neko podstablo? neki hint za implementaciju, bilo šta?


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


Pridružen/a: 10. 09. 2011. (16:08:19)
Postovi: (F4)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
10 = 17 - 7

PostPostano: 20:36 sub, 27. 10. 2012    Naslov: Citirajte i odgovorite

I ja imam implementaciju BTREE preko polja. Imam jedan glupi glupi problem - što uopće sve moram staviti u typedef stuct {... } BTREE ?
Samo labels[]? lijevo i desno dijete? roditelja i desno dijete? još nešto?
I ja imam implementaciju BTREE preko polja. Imam jedan glupi glupi problem - što uopće sve moram staviti u typedef stuct {... } BTREE ?
Samo labels[]? lijevo i desno dijete? roditelja i desno dijete? još nešto?



_________________
With great power comes great electricity bill.
n!!!!
Theorem 2: Alexander the Great did not exist and he had an infinite number of limbs.
[Vrh]
Korisnički profil Pošaljite privatnu poruku
R2-D2
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 11. 10. 2011. (20:32:10)
Postovi: (2F)16
Sarma = la pohva - posuda
12 = 12 - 0

PostPostano: 20:58 sub, 27. 10. 2012    Naslov: Citirajte i odgovorite

samo elementtype labels[N], a N si možeš staviti na npr. 1000
samo elementtype labels[N], a N si možeš staviti na npr. 1000


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


Pridružen/a: 10. 09. 2011. (16:08:19)
Postovi: (F4)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
10 = 17 - 7

PostPostano: 22:03 sub, 27. 10. 2012    Naslov: Citirajte i odgovorite

Ok, sad sam konačno skužila što i kako moram...
Ok, sad sam konačno skužila što i kako moram...



_________________
With great power comes great electricity bill.
n!!!!
Theorem 2: Alexander the Great did not exist and he had an infinite number of limbs.
[Vrh]
Korisnički profil Pošaljite privatnu poruku
vsego
Site Admin
Site Admin


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

PostPostano: 22:16 sub, 27. 10. 2012    Naslov: Citirajte i odgovorite

[quote="R2-D2"]samo elementtype labels[N], a N si možeš staviti na npr. 1000[/quote]

U [tex]n[/tex] nivoa ima najvise [tex]2^n-1[/tex] cvorova. Nije li onda logicnije uzeti takvu granicu (1023, na primjer)? Uz predlozenu "okruglu" granicu, najdesniji cvor u 10. nivou (i ponesto njegovih susjeda) nece stati, dok vecina njih ipak hoce, sto mi se bas i ne cini kao razumno ogranicenje.
R2-D2 (napisa):
samo elementtype labels[N], a N si možeš staviti na npr. 1000


U [tex]n[/tex] nivoa ima najvise [tex]2^n-1[/tex] cvorova. Nije li onda logicnije uzeti takvu granicu (1023, na primjer)? Uz predlozenu "okruglu" granicu, najdesniji cvor u 10. nivou (i ponesto njegovih susjeda) nece stati, dok vecina njih ipak hoce, sto mi se bas i ne cini kao razumno ogranicenje.



_________________
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
hipernova
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 25. 09. 2011. (20:15:21)
Postovi: (C)16
Sarma = la pohva - posuda
= 0 - 0
Lokacija: Zagreb

PostPostano: 12:55 ned, 28. 10. 2012    Naslov: Citirajte i odgovorite

hvala svima, ja rjesio implementaciju :D
hvala svima, ja rjesio implementaciju Very Happy


[Vrh]
Korisnički profil Pošaljite privatnu poruku Posjetite Web stranice
štrumfeta
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 02. 11. 2011. (19:36:55)
Postovi: (36)16
Sarma = la pohva - posuda
= 3 - 1

PostPostano: 16:16 ned, 28. 10. 2012    Naslov: Citirajte i odgovorite

mamba molim te možeš li mi reći kako si napravilo/a ovu funkciju koja prebacuje iz postfixa jer ja neznam kreirat stablo pa da bi ga onda mogla kasnije koristit.fala!
mamba molim te možeš li mi reći kako si napravilo/a ovu funkciju koja prebacuje iz postfixa jer ja neznam kreirat stablo pa da bi ga onda mogla kasnije koristit.fala!


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


Pridružen/a: 10. 09. 2011. (16:08:19)
Postovi: (F4)16
Spol: kućni ljubimac
Sarma = la pohva - posuda
10 = 17 - 7

PostPostano: 18:22 ned, 28. 10. 2012    Naslov: Citirajte i odgovorite

Ovo bi bilo moje nerekurzivno rješenje za stvaranje bin.stabla: [code:1]

node CREATE ( labeltype l, BTREE TL, BTREE TR, BTREE *T )
{
int maxlvlTL = VISINA ( 0, TL );
int maxlvlTR = VISINA ( 0, TR );
int maxlvl = ( maxlvlTL < maxlvlTR ? maxlvlTR : maxlvlTL );

MAKE_NULL(T);
T->labels[0] = l;

int razina, brojac;
node cvor_od_T = 1; // pocinjem od cvora 1 jer smo korijen vec rijesili
node cvor_od_TL = 0; // oznacavaju nam kretanje po TL i TR, krecemo od korijena
node cvor_od_TR = 0;

for ( razina = 1; razina <= maxlvl; ++razina ) // stablo popunjavam razinu po razinu, od 1. do zadnje = maxlvl
{
int i, ukupno = 1;
for ( i = 0; i < razina; ++i ) ukupno *=2; // na svakoj razini imam ukupno 2^razina cvorova
brojac = 1; // na svakoj razini resetiram brojac koji broji jesmo li prosli kroz sve cvorove na razini

while ( brojac <= ukupno / 2) // prvu polovicu razine cine cvorovi iz TL
{ // povecavam brojac prolaska, brojace cvorova stabla T i cvorova TL
T->labels[cvor_od_T] = TL.labels[cvor_od_TL];
++cvor_od_TL;
++cvor_od_T;
++brojac;
}

while ( brojac <= ukupno ) // drugu polovicu razine cine cvorovi iz TR
{ // povecavam brojac prolaska, brojac cvorova stabla T i cvorova TR
T->labels[cvor_od_T] = TR.labels[cvor_od_TR];
++cvor_od_TR;
++cvor_od_T;
++brojac;
}

}

return 0;
} [/code:1]

Kako to obično biva, u teoriji mi radi, u praksi ne. Itko vidi grešku? Dobit će moje štovanje. :lol:
Ovo bi bilo moje nerekurzivno rješenje za stvaranje bin.stabla:
Kod:


node CREATE ( labeltype l, BTREE TL, BTREE TR, BTREE *T )
{
   int maxlvlTL = VISINA ( 0, TL );
   int maxlvlTR = VISINA ( 0, TR );
   int maxlvl = ( maxlvlTL < maxlvlTR ? maxlvlTR : maxlvlTL );

   MAKE_NULL(T);
   T->labels[0] = l;

   int razina, brojac;
   node cvor_od_T = 1;                                          // pocinjem od cvora 1 jer smo korijen vec rijesili
   node cvor_od_TL = 0;                                          // oznacavaju nam kretanje po TL i TR, krecemo od korijena
   node cvor_od_TR = 0;

   for ( razina = 1; razina <= maxlvl; ++razina )                        // stablo popunjavam razinu po razinu, od 1. do zadnje = maxlvl
   {
      int i, ukupno = 1;
      for ( i = 0; i < razina; ++i ) ukupno *=2;                           // na svakoj razini imam ukupno 2^razina cvorova
      brojac = 1;                                                // na svakoj razini resetiram brojac koji broji jesmo li prosli kroz sve cvorove na razini

      while ( brojac <= ukupno / 2)                                 // prvu polovicu razine cine cvorovi iz TL
      {                                                         // povecavam brojac prolaska, brojace cvorova stabla T i cvorova TL
         T->labels[cvor_od_T] = TL.labels[cvor_od_TL];
         ++cvor_od_TL;
         ++cvor_od_T;
         ++brojac;
      }

      while ( brojac <= ukupno )                                    // drugu polovicu razine cine cvorovi iz TR
      {                                                         // povecavam brojac prolaska, brojac cvorova stabla T i cvorova TR
         T->labels[cvor_od_T] = TR.labels[cvor_od_TR];
         ++cvor_od_TR;
         ++cvor_od_T;
         ++brojac;
      }

   }

   return 0;
}


Kako to obično biva, u teoriji mi radi, u praksi ne. Itko vidi grešku? Dobit će moje štovanje. Laughing



_________________
With great power comes great electricity bill.
n!!!!
Theorem 2: Alexander the Great did not exist and he had an infinite number of limbs.


Zadnja promjena: PermutiranoPrase; 0:35 pon, 29. 10. 2012; ukupno mijenjano 2 put/a.
[Vrh]
Korisnički profil Pošaljite privatnu poruku
Ryssa
Forumaš(ica)
Forumaš(ica)


Pridružen/a: 18. 12. 2011. (00:10:28)
Postovi: (57)16
Sarma = la pohva - posuda
= 4 - 1

PostPostano: 18:33 ned, 28. 10. 2012    Naslov: Citirajte i odgovorite

mogu li izraz zadan sa stringom u prefixu izračunati tako da string čitam u nazad(kao da računam izraz za postfix) i onda napraviti algoritam za to ili je jednostavnije u naprijed? ..i zanima me kako višeznamenkaste brojeve ("riječi" u stringu) prebaciti u int...neznam da li je dobro koristiti funkciju strtok koja razdvaja "riječi" pa onda nekako prebacivati u int?
mogu li izraz zadan sa stringom u prefixu izračunati tako da string čitam u nazad(kao da računam izraz za postfix) i onda napraviti algoritam za to ili je jednostavnije u naprijed? ..i zanima me kako višeznamenkaste brojeve ("riječi" u stringu) prebaciti u int...neznam da li je dobro koristiti funkciju strtok koja razdvaja "riječi" pa onda nekako prebacivati u int?


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


Pridružen/a: 16. 01. 2012. (20:57:13)
Postovi: (3)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 20:14 ned, 28. 10. 2012    Naslov: Citirajte i odgovorite

moze hint kako isprogramirat rekonstrukciju?BTREE je implementirano pomocu polja...

Ulazni podaci: dva stringa: INORDER pa PREORDER obilasci stabla.
Izlazni podaci: ako stablo ima n čvorova, onda treba ispisati n redova: u svakom redu je oznaka jednog vrha i oznake njegove lijevog i desnog djeteta (NULL ako ih nema). Te redove možete ispisati u bilo kojem redoslijedu.
Na primjer, za ulazne podatke:
DGBFCEA
BDGACFE
treba ispisati:
B D A
D NULL G
A C NULL
C F E
F NULL NULL
G NULL NULL
E NULL NULL
moze hint kako isprogramirat rekonstrukciju?BTREE je implementirano pomocu polja...

Ulazni podaci: dva stringa: INORDER pa PREORDER obilasci stabla.
Izlazni podaci: ako stablo ima n čvorova, onda treba ispisati n redova: u svakom redu je oznaka jednog vrha i oznake njegove lijevog i desnog djeteta (NULL ako ih nema). Te redove možete ispisati u bilo kojem redoslijedu.
Na primjer, za ulazne podatke:
DGBFCEA
BDGACFE
treba ispisati:
B D A
D NULL G
A C NULL
C F E
F NULL NULL
G NULL NULL
E NULL NULL


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


Pridružen/a: 15. 11. 2011. (00:01:02)
Postovi: (4)16
Sarma = la pohva - posuda
= 0 - 0

PostPostano: 15:54 pon, 29. 10. 2012    Naslov: Citirajte i odgovorite

Zadatak mi je da implem BTREE pomocu polja i napisem potprogram koji ispisuje oznake cvorova koji imaju samo jedno dijete u binarnom stablu u inorder redoslijedu, ulazni podaci: stablo sa oznakama tipa char
ne radi mi funkcija unos. stablo na kraju bilježi samo čvor. zasebno radi za prvih par, ali kao rekurzija ne. može pomoć?
[code:1]
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxlength 100

typedef char labeltype;
typedef int node;
const node LAMBDA = -1;

typedef struct
{
labeltype labels[maxlength];
} BTREE;

void MAKE_NULL(BTREE *T)
{
int i;
for(i = 0;i < maxlength;i++)
T->labels[i]='-';
}

int EMPTY(BTREE T)
{
int i = 1,j = 0;
while(i && j < maxlength)
{
if (T.labels[j]!='-')
i = 0;
j++;
}
return i;
}

void pomocna(node i, BTREE *T, node j, BTREE *T1) {
if (j >= maxlength || i >= maxlength || 2*i>=maxlength || 2*j>=maxlength) return;
T->labels[i] = T1->labels[j];
pomocna(2*i + 1, T, 2*j + 1, T1);
pomocna(2*i + 2, T, 2*j + 2, T1);
}

node CREATE(labeltype l, BTREE TL, BTREE TR, BTREE *T) {
T->labels[0]=l;
pomocna(1, T, 0, &TL);
pomocna(2, T, 0, &TR);
return 0;
}

void LEFT_SUBTREE (BTREE T, BTREE *TL) {
MAKE_NULL(TL);
if(T.labels[0]=='-')
printf("Stablo je prazno!");
else pomocna(0, TL, 1, &T);
}

void RIGHT_SUBTREE (BTREE T, BTREE *TR) {
MAKE_NULL(TR);
if(T.labels[0]=='-')
printf("Stablo je prazno!");
else pomocna(0, TR, 2, &T);
}

node LEFT_CHILD(node i, BTREE T)
{
if (i < 0 || i > maxlength) printf("Taj cvor u stablu ne postoji!");
if (T.labels[i] == '-') printf("Taj cvor u stablu ne postoji!");
if ((2*i + 1) > maxlength) printf("Ne postoji lijevo dijete tog cvora u stablu!");
if (T.labels[2*i + 1] == '-') return LAMBDA;
return 2*i + 1;
}

node RIGHT_CHILD(node i, BTREE T)
{
if (i < 0 || i > maxlength) printf("Taj cvor u stablu ne postoji!");
if (T.labels[i] == '-') printf("Taj cvor u stablu ne postoji!");
if ((2*i + 2) > maxlength) printf("Ne postoji desno dijete tog cvora u stablu!");
if (T.labels[2*i + 2]=='-') return LAMBDA;
return 2*i + 2;
}

node INSERT_LEFT_CHILD(labeltype l, node i, BTREE *T)
{
T->labels[i*2 + 1]=l;
return i*2 + 1;
}

node INSERT_RIGHT_CHILD(labeltype l, node i, BTREE *T)
{
T->labels[i*2 + 2]=l;
return i*2 + 2;
}

void DELETE(node i, BTREE *T)
{
T->labels[i]='-';
}

node ROOT(BTREE T)
{
if(T.labels[0] == '-')
return LAMBDA;
return 0;
}

node PARENT(node i, BTREE T)
{
if (i < 0 || i > maxlength) printf("Taj cvor u stablu ne postoji!");
if (T.labels[i] == '-') printf("Taj cvor u stablu ne postoji!");
if (i == 0) return LAMBDA;
return (i-1)/2;
}

labeltype LABEL(node i, BTREE T)
{
return T.labels[i];
}

void CHANGE_LABEL(labeltype l, node i, BTREE *T)
{
T->labels[i]=l;
}

int POTOMAK(node n, BTREE T)
{
if(LEFT_CHILD(n, T) == LAMBDA && RIGHT_CHILD(n, T) == LAMBDA)
return 0;
if(LEFT_CHILD(n, T) != LAMBDA && RIGHT_CHILD(n, T) != LAMBDA)
return 0;
return 1;
}

void INORDER (node n, BTREE T)
{
if (n == LAMBDA) return;
INORDER (LEFT_CHILD(n, T), T);
if(POTOMAK(n, T))
printf ("%c ", LABEL(n, T));
INORDER (RIGHT_CHILD(n, T), T);
}

void UNOS(node n, BTREE T)
{
node nL, nR;
labeltype kL, kR;

if ( n == LAMBDA ) return;
if(LABEL(n,T) != '-')
{
printf("Lijevo dijete od %c: ", LABEL(n,T));
scanf(" %c", &kL);
if(kL != '-'){
nL = INSERT_LEFT_CHILD(kL,n,&T);
UNOS(nL,T);
}
printf("Desno dijete od %c: ", LABEL(n,T));
scanf(" %c", &kR);
if(kR != '-'){
nR = INSERT_RIGHT_CHILD(kR,n,&T);
UNOS(nR,T);
}
}
}

int main()
{
BTREE B, BL, BR;
node n;
labeltype k;
MAKE_NULL(&B);
MAKE_NULL(&BL);MAKE_NULL(&BR);
printf("Korijen: ");
scanf(" %s", &k);
CREATE(k, BL, BR, &B);
n = ROOT(B);
UNOS(n, B);
INORDER(n, B);
return 0;
}
[/code:1]
Zadatak mi je da implem BTREE pomocu polja i napisem potprogram koji ispisuje oznake cvorova koji imaju samo jedno dijete u binarnom stablu u inorder redoslijedu, ulazni podaci: stablo sa oznakama tipa char
ne radi mi funkcija unos. stablo na kraju bilježi samo čvor. zasebno radi za prvih par, ali kao rekurzija ne. može pomoć?
Kod:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define maxlength 100

typedef char labeltype;
typedef int node;
const node LAMBDA = -1;

typedef struct
    {
    labeltype labels[maxlength];
    } BTREE;

void MAKE_NULL(BTREE *T)
    {
        int i;
        for(i = 0;i < maxlength;i++)
            T->labels[i]='-';
    }

int EMPTY(BTREE T)
    {
        int i = 1,j = 0;
        while(i && j < maxlength)
            {
                if (T.labels[j]!='-')
                    i = 0;
                j++;
            }
        return i;
    }

void pomocna(node i, BTREE *T, node j, BTREE *T1) {
    if (j >= maxlength || i >= maxlength || 2*i>=maxlength || 2*j>=maxlength) return;
    T->labels[i] = T1->labels[j];
    pomocna(2*i + 1, T, 2*j + 1, T1);
    pomocna(2*i + 2, T, 2*j + 2, T1);
}

node CREATE(labeltype l, BTREE TL, BTREE TR, BTREE *T) {
    T->labels[0]=l;
    pomocna(1, T, 0, &TL);
    pomocna(2, T, 0, &TR);
    return 0;
}

void LEFT_SUBTREE (BTREE T, BTREE *TL) {
    MAKE_NULL(TL);
    if(T.labels[0]=='-')
        printf("Stablo je prazno!");
    else pomocna(0, TL, 1, &T);
}

void RIGHT_SUBTREE (BTREE T, BTREE *TR) {
    MAKE_NULL(TR);
    if(T.labels[0]=='-')
        printf("Stablo je prazno!");
    else pomocna(0, TR, 2, &T);
}

node LEFT_CHILD(node i, BTREE T)
    {
        if (i < 0 || i > maxlength) printf("Taj cvor u stablu ne postoji!");
        if (T.labels[i] == '-')  printf("Taj cvor u stablu ne postoji!");
        if ((2*i + 1) > maxlength) printf("Ne postoji lijevo dijete tog cvora u stablu!");
        if (T.labels[2*i + 1] == '-') return LAMBDA;
        return 2*i + 1;
    }

node RIGHT_CHILD(node i, BTREE  T)
    {
        if (i < 0 || i > maxlength) printf("Taj cvor u stablu ne postoji!");
        if (T.labels[i] == '-')  printf("Taj cvor u stablu ne postoji!");
        if ((2*i + 2) > maxlength) printf("Ne postoji desno dijete tog cvora u stablu!");
        if (T.labels[2*i + 2]=='-') return LAMBDA;
        return 2*i + 2;
    }

node INSERT_LEFT_CHILD(labeltype l, node i, BTREE *T)
    {
        T->labels[i*2 + 1]=l;
        return i*2 + 1;
    }

node INSERT_RIGHT_CHILD(labeltype l, node i, BTREE *T)
    {
        T->labels[i*2 + 2]=l;
        return i*2 + 2;
    }

void DELETE(node i, BTREE *T)
    {
        T->labels[i]='-';
    }

node ROOT(BTREE T)
    {
        if(T.labels[0] == '-')
            return LAMBDA;
        return 0;
    }

node PARENT(node i, BTREE T)
    {
        if (i < 0 || i > maxlength) printf("Taj cvor u stablu ne postoji!");
        if (T.labels[i] == '-')  printf("Taj cvor u stablu ne postoji!");
        if (i == 0) return LAMBDA;
        return (i-1)/2;
    }

labeltype LABEL(node i, BTREE T)
    {
        return T.labels[i];
    }

void CHANGE_LABEL(labeltype l, node i, BTREE *T)
    {
        T->labels[i]=l;
    }

int POTOMAK(node n, BTREE T)
    {
        if(LEFT_CHILD(n, T) == LAMBDA && RIGHT_CHILD(n, T) == LAMBDA)
            return 0;
        if(LEFT_CHILD(n, T) != LAMBDA && RIGHT_CHILD(n, T) != LAMBDA)
            return 0;
        return 1;
    }

void INORDER (node n, BTREE T)
    {
        if (n == LAMBDA) return;
        INORDER (LEFT_CHILD(n, T), T);
        if(POTOMAK(n, T))
            printf ("%c ", LABEL(n, T));
        INORDER (RIGHT_CHILD(n, T), T);
    }

void UNOS(node n, BTREE T)
    {
        node nL, nR;
        labeltype kL, kR;

        if ( n == LAMBDA ) return;
        if(LABEL(n,T) != '-')
            {
                printf("Lijevo dijete od %c: ", LABEL(n,T));
                scanf(" %c", &kL);
                if(kL != '-'){
                    nL = INSERT_LEFT_CHILD(kL,n,&T);
                    UNOS(nL,T);
                }
                printf("Desno dijete od %c: ", LABEL(n,T));
                scanf(" %c", &kR);
                if(kR != '-'){
                    nR = INSERT_RIGHT_CHILD(kR,n,&T);
                    UNOS(nR,T);
                }
            }
    }

int main()
    {
        BTREE B, BL, BR;
        node n;
        labeltype k;
        MAKE_NULL(&B);
        MAKE_NULL(&BL);MAKE_NULL(&BR);
        printf("Korijen: ");
        scanf(" %s", &k);
        CREATE(k, BL, BR, &B);
        n = ROOT(B);
        UNOS(n, B);
        INORDER(n, B);
        return 0;
    }


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


Pridružen/a: 20. 11. 2011. (16:59:13)
Postovi: (46)16
Sarma = la pohva - posuda
= 2 - 2
Lokacija: subnet mask

PostPostano: 16:02 pon, 29. 10. 2012    Naslov: Citirajte i odgovorite

zanima me
1) smijem li napisati neke pomocne funkcije koje ne ovise o implementaciji (npr. mogu li napisati pomoćnu funkciju isnum(a) koja radi isto sto i isalpha, samo za brojeve)?

2) vezano za gornje, mogu li napisati funkciju koja vraca prioritet operatora (u slucaju citanja pre/postfix izraza)?

3) kako se desava 'predaja' programa, tj. dal donesemo te programe na usb-u, isprintate ili ih pisemo pred asistentom u praktikumu?

Hvala unaprijed
zanima me
1) smijem li napisati neke pomocne funkcije koje ne ovise o implementaciji (npr. mogu li napisati pomoćnu funkciju isnum(a) koja radi isto sto i isalpha, samo za brojeve)?

2) vezano za gornje, mogu li napisati funkciju koja vraca prioritet operatora (u slucaju citanja pre/postfix izraza)?

3) kako se desava 'predaja' programa, tj. dal donesemo te programe na usb-u, isprintate ili ih pisemo pred asistentom u praktikumu?

Hvala unaprijed


[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 -> Strukture podataka i algoritmi Vremenska zona: GMT + 01:00.
Idite na 1, 2  Sljedeće
Stranica 1 / 2.

 
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