| Prethodna tema :: Sljedeća tema | 
	
	
		| Autor/ica | Poruka | 
	
		| .anchy. Forumaš(ica)
 
  
 
 Pridružen/a: 14. 11. 2007. (20:03:46)
 Postovi: (1BC)16
 Lokacija: Zgb
 
 | 
			
				|  Postano: 12:51 čet, 6. 1. 2011    Naslov: 2.domaća zadaća |         |  
				| 
 |  
				| trebam implementirati a.t.p MULTISKUP pomoću sortirane vezane liste,gdje svaka ćelija liste sadrži i podatak o broju pojavljivanja danog elementa u skupu. veze su pomoću kursora.
trebam implementirati a.t.p MULTISKUP pomoću sortirane vezane liste,gdje svaka ćelija liste sadrži i podatak o broju pojavljivanja danog elementa u skupu. veze su pomoću kursora.Jesam li dobro deklarirala Multiskup kao struct, i zašto mi BubbleSort ne radi? edit:
 rješila sam BubbleSort,sada je sve ok! jedino još ova impl.pomoću kursora..
 [code:1]#define N 1000
 typedef char elementtype;
 
 typedef struct {
 elementtype element;
 int koliko;
 int next;
 }MULTISET;
 
 void BubbleSort(char c[]){
 int i,j;
 int n=strlen(c);
 for(i=0;i<n-1;i++)
 for(j=0;j<n-1-i;j++)
 if((strcmp(c[j+1],c[j])<0)
 swap(&c[j],&c[j+1]);
 }
 
 void swap(char *x, char *y){
 char tmp;
 tmp=*x;
 *x=*y;
 *y=tmp;
 }
 
 
 ...
 BubbleSort(a);
 ...
 [/code:1]
 
 javlja mi " invalid conversion from `char' to `const char*' " u strcmp, i tako nešto slično kod poziva swapa.
 pretp.da ima veze s pointerima,s kojima sam na vi..
 
 još mi nije jasno, kako ću se "kretati" po listi? sa pointerima smo imali npr.[code:1]for (pom = f i r s t ; pom; pom = pom−>next )[/code:1], pa kako bi bilo sa kursorima,nemam ideje..
 
 
 edit:sada vidim da smo na vježbama ovako radili:
 [code:1]struct celltype{
 elementtype element;
 int  koliko;
 int next;
 } MULTISET[N];
 [/code:1]
 trebam li tako deklarirati multiskup?ili? buni me što tu imamo polje..
 Jesam li dobro deklarirala Multiskup kao struct, i zašto mi BubbleSort ne radi? edit:
 rješila sam BubbleSort,sada je sve ok! jedino još ova impl.pomoću kursora..
 
  	  | Kod: |  	  | #define N 1000 typedef char elementtype;
 
 typedef struct {
 elementtype element;
 int koliko;
 int next;
 }MULTISET;
 
 void BubbleSort(char c[]){
 int i,j;
 int n=strlen(c);
 for(i=0;i<n-1;i++)
 for(j=0;j<n-1-i;j++)
 if((strcmp(c[j+1],c[j])<0)
 swap(&c[j],&c[j+1]);
 }
 
 void swap(char *x, char *y){
 char tmp;
 tmp=*x;
 *x=*y;
 *y=tmp;
 }
 
 
 ...
 BubbleSort(a);
 ...
 
 | 
 
 javlja mi " invalid conversion from `char' to `const char*' " u strcmp, i tako nešto slično kod poziva swapa.
 pretp.da ima veze s pointerima,s kojima sam na vi..
 
 još mi nije jasno, kako ću se "kretati" po listi? sa pointerima smo imali npr.
 , pa kako bi bilo sa kursorima,nemam ideje.. 	  | Kod: |  	  | for (pom = f i r s t ; pom; pom = pom−>next ) | 
 
 
 edit:sada vidim da smo na vježbama ovako radili:
 
  	  | Kod: |  	  | struct celltype{ elementtype element;
 int  koliko;
 int next;
 } MULTISET[N];
 
 | 
 trebam li tako deklarirati multiskup?ili? buni me što tu imamo polje..
 
 
 |  | 
	
		| [Vrh] |  | 
	
		| pmli Forumaš(ica)
 
  
 
 Pridružen/a: 09. 11. 2009. (12:03:05)
 Postovi: (2C8)16
 Spol:
  
 
 |  | 
	
		| [Vrh] |  | 
	
		| .anchy. Forumaš(ica)
 
  
 
 Pridružen/a: 14. 11. 2007. (20:03:46)
 Postovi: (1BC)16
 Lokacija: Zgb
 
 |  | 
	
		| [Vrh] |  | 
	
		| pmli Forumaš(ica)
 
  
 
 Pridružen/a: 09. 11. 2009. (12:03:05)
 Postovi: (2C8)16
 Spol:
  
 
 | 
			
				|  Postano: 15:07 čet, 6. 1. 2011    Naslov: |         |  
				| 
 |  
				| [quote=".anchy."]i tada deklarirala liste kao:
[code:1]MULTISET avail, A, B;[/code:1]
 je li to dobro?[/quote]
 Ne. Ideja je da imaš jedno veliko polje SPACE i da se u njemu nalazi avail, A, B i ostalo. MULTISET ti je onda kursor na header (int). SPACE deklariraš kao polje sa svim potrebnim.
 
 [quote=".anchy."]sada mi je sve avail,pa sam napravila for petlju:
 [code:1]for(i=0;i<N;i++) avail.next=i+1;[/code:1]
 ali mi javlja grešku za to..[/quote]
 Trebaš paziti što ti je oznaka za kraj liste, tj. jesu li to samo negativni brojevi i/ili brojevi veći od N-1.
 I naravno, to treba raditi na polju SPACE. avail, A i B trebaju biti int-ovi.
  	  | .anchy. (napisa): |  	  | i tada deklarirala liste kao: 
  	  | Kod: |  	  | MULTISET avail, A, B; | 
 je li to dobro?
 | 
 Ne. Ideja je da imaš jedno veliko polje SPACE i da se u njemu nalazi avail, A, B i ostalo. MULTISET ti je onda kursor na header (int). SPACE deklariraš kao polje sa svim potrebnim.
 
 
  	  | .anchy. (napisa): |  	  | sada mi je sve avail,pa sam napravila for petlju: 
  	  | Kod: |  	  | for(i=0;i<N;i++) avail.next=i+1; | 
 ali mi javlja grešku za to..
 | 
 Trebaš paziti što ti je oznaka za kraj liste, tj. jesu li to samo negativni brojevi i/ili brojevi veći od N-1.
 I naravno, to treba raditi na polju SPACE. avail, A i B trebaju biti int-ovi.
 
 
 |  | 
	
		| [Vrh] |  | 
	
		| .anchy. Forumaš(ica)
 
  
 
 Pridružen/a: 14. 11. 2007. (20:03:46)
 Postovi: (1BC)16
 Lokacija: Zgb
 
 |  | 
	
		| [Vrh] |  | 
	
		| pmli Forumaš(ica)
 
  
 
 Pridružen/a: 09. 11. 2009. (12:03:05)
 Postovi: (2C8)16
 Spol:
  
 
 |  | 
	
		| [Vrh] |  | 
	
		| kakt00s Forumaš(ica)
 
  
  
 Pridružen/a: 17. 10. 2007. (12:19:40)
 Postovi: (183)16
 Spol:
  Lokacija: :ɐɾıɔɐʞoן
 
 |  | 
	
		| [Vrh] |  | 
	
		| kakt00s Forumaš(ica)
 
  
  
 Pridružen/a: 17. 10. 2007. (12:19:40)
 Postovi: (183)16
 Spol:
  Lokacija: :ɐɾıɔɐʞoן
 
 | 
			
				|  Postano: 21:37 pet, 7. 1. 2011    Naslov: |         |  
				| 
 |  
				| [i]Implementirajte a.t.p. MAPPING pomoću otvorenog hashiranja sa B pretinaca (sami predložite funkciju hashiranja). Elementi domene su uredjeni parovi oblika (a, b), za a, b∈{0, 1, 2, …, n}. Kodomena je skup {0, 1, 2, …, n}. [/i]
Implementirajte a.t.p. MAPPING pomoću otvorenog hashiranja sa B pretinaca (sami predložite funkciju hashiranja). Elementi domene su uredjeni parovi oblika (a, b), za a, b∈{0, 1, 2, …, n}. Kodomena je skup {0, 1, 2, …, n}.
 Zezam se sa tom domenom. Kako da to rješim?
 Prvo sam mislio napravit strukturu unutar strukture, ali ipak nebi. :)
 E sad... ako napravim domenu kao polje od 2 člana, onda mi implementacije neće biti točne.
 
 Može neki hint/ideja?
 
 EDIT: [b]Solved[/b] Struktura unutar strukture...P.S. Baš je divlji ovaj rumfo :D
 
 Zezam se sa tom domenom. Kako da to rješim?
 Prvo sam mislio napravit strukturu unutar strukture, ali ipak nebi.
   E sad... ako napravim domenu kao polje od 2 člana, onda mi implementacije neće biti točne.
 
 Može neki hint/ideja?
 
 EDIT: Solved Struktura unutar strukture...P.S. Baš je divlji ovaj rumfo
   
 
 _________________
 Muy importante!
 
 Zadnja promjena: kakt00s; 17:39 uto, 11. 1. 2011; ukupno mijenjano 1 put.
 |  | 
	
		| [Vrh] |  | 
	
		| Tomy007 Forumaš(ica)
 
  
 
 Pridružen/a: 08. 11. 2009. (19:45:28)
 Postovi: (94)16
 
 
 | 
			
				|  Postano: 17:20 sub, 8. 1. 2011    Naslov: |         |  
				| 
 |  
				| [code:1]
#include <stdio.h>
 #include <stdlib.h>
 
 #define MAXN 1000
 #define LAMBDA -1
 #define PRAZNO '-'
 
 typedef char labeltype
 typedef int node;
 typedef node TREE;
 
 typedef struct {
 labeltype label;
 node parent, first_child, next_sibling;
 }SPACE [MAXN]
 
 void MAKE_NULL(int n) {
 node avail;
 for (i=n, i<MAXN, i++) {
 SPACE[I].label=PRAZNO;
 SPACE[i].next_sibling=i+1;
 SPACE[MAXN].next_sibling=LAMBDA;
 avail=n;
 }
 
 node MAKE_ROOT(labeltype l, TREE *T) {
 if (avail==LAMBDA){
 printf("Polje SPACE je puno!");
 system("pause");
 exit(1);
 }
 T=avail
 avail=SPACE[avail].next_sibling;
 SPACE[T].label=l;
 SPACE[T].parent=LAMBDA;
 SPACE[T].first_child=LAMBDA
 SPACE[T].next_sibling=LAMBDA
 return T;
 }
 
 node INSERT_CHILD(labeltype l, node i, TREE *T) {
 node j;
 if (SPACE[i].label==PRAZNO) {                  /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 if (avail==LAMBDA){
 printf("Polje SPACE je puno!");
 system("pause");
 exit(1);
 }
 j=avail;
 avail=SPACE[avail].next_sibling;
 
 SPACE[j].parent=i;
 SPACE[j].first_child=LAMBDA;
 SPACE[j].next_sibling=SPACE[i].first_child;
 
 SPACE[i].first_child=j;
 return j;
 }
 
 node INSERT_SIBLING(labeltype l, node i, TREE *T) {
 node j,t;
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 if (avail==LAMBDA){
 printf("Polje SPACE je puno!");
 system("pause");
 exit(1);
 }
 
 j=avail;
 avail=SPACE[avail].next_sibling;
 
 SPACE[j].next_sibling=SPACE[i].next_sibling;
 SPACE[j].parent=SPACE[i].parent;
 SPACE[j].first_child=LAMBDA;
 
 SPACE[i].next_sibling=j;
 return j;
 }
 
 void DELETE(node i, TREE *T) {
 node j,k,g;
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 
 if (SPACE[i].parent==LAMBDA) {
 printf("Taj cvor je korijen!");
 system("pause");
 exit(1);
 }
 
 if (SPACE[i].first_child!=LAMBDA) {
 printf("Taj cvor ima djece!");
 system("pause");
 exit(1);
 }
 
 j=SPACE[i].parent;
 k=SPACE[i].next_sibling;
 g=SPACE[j].first_child;
 
 
 
 if (g!=i) {
 while (SPACE[g].next_sibling!=i)
 g=SPACE[g].next_sibling;
 }
 
 if (i==SPACE[j].first_child)
 SPACE[j].first_child=k;
 else
 SPACE[g].next_sibling=k;
 
 SPACE[i].label=PRAZNO;
 SPACE[i].next_sibling=avail;
 avail=i;
 }
 
 node ROOT(TREE T) {
 return T;
 }
 
 node FIRST_CHILD(node i; TREE T) {
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 return  SPACE[i].first_child;
 }
 
 node NEXT_SIBLING(node i; TREE T) {
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 return  SPACE[i].next_sibling;
 }
 
 node PARENT(node i; TREE T) {
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 return  SPACE[i].parent;
 }
 
 labeltype LABEL(node i; TREE T) {
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 return  SPACE[i].label;
 }
 
 void CHANGE_LABEL(labeltype l, node i; TREE *T) {
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 SPACE[i].label=l;
 }
 
 
 int main (void) {
 TREE T;
 MAKE_NULL(0);
 
 
 
 system("pause");
 return 0;
 }
 [/code:1]
 
 PITANJA:
 
 1. Bili ovo bila dobra implementacija za TREE pomoću polja na osnovi veze "čvor → (roditelj, (prvo dijete, idući brat))" ili sam nešto krivo razunio/kodirao (ako nešto nije u redu bio bi jako zahvalan da mi ukažete što je krivo i date mi neku ideju kako da to ispravim)
 
 2.Sa komentarom /* ? */ sam označio mjesto u kodu gdje sam iskodirao samo za jednu stablo. Ako je label = '-' onda je u listi avail ako nije onda je sigurno u tom jedinom stablo. Zna li netko kako bi taj problem riješio univerzalno tj. da vrijedi i za više stabala u polju SPACE (znaći da provjerim jeli taj i baš u tom konkretnom stablu)?
 
 3.Kako bi mogao učitati stablo izvana u program. Jedna moja zamisao je bila da se prvo napiše korijen pa onda njegova djeca, a poslje zadnjeg djeteta znak '-'. Nakon toga bi to ponavio za njegovo prvo dijete, pa svako sljedeće i tako u krug dok se ne upiše znak '*' što bi značilo da je cijelo stablo učitano ali nisam siguran bili to bilo ok i kako bi to izveo.
 
 Hvala puno svima koji pokušaju bar nešto od ovoga odgovoriti jer sam malo u stisci s vremenom, a i zato jer je ovo gradivo obrađeno samo apstraktno i nismo radili nikakve konkretnije primjere sa npr. konstruiranjem liste avail ali ni sa večinom implementacija drugih funkcija u ovom obliku sa poljem za obično stablo, a nismo radili ni učitavanje običnog stabla izvana.
  	  | Kod: |  	  | #include <stdio.h>
 #include <stdlib.h>
 
 #define MAXN 1000
 #define LAMBDA -1
 #define PRAZNO '-'
 
 typedef char labeltype
 typedef int node;
 typedef node TREE;
 
 typedef struct {
 labeltype label;
 node parent, first_child, next_sibling;
 }SPACE [MAXN]
 
 void MAKE_NULL(int n) {
 node avail;
 for (i=n, i<MAXN, i++) {
 SPACE[I].label=PRAZNO;
 SPACE[i].next_sibling=i+1;
 SPACE[MAXN].next_sibling=LAMBDA;
 avail=n;
 }
 
 node MAKE_ROOT(labeltype l, TREE *T) {
 if (avail==LAMBDA){
 printf("Polje SPACE je puno!");
 system("pause");
 exit(1);
 }
 T=avail
 avail=SPACE[avail].next_sibling;
 SPACE[T].label=l;
 SPACE[T].parent=LAMBDA;
 SPACE[T].first_child=LAMBDA
 SPACE[T].next_sibling=LAMBDA
 return T;
 }
 
 node INSERT_CHILD(labeltype l, node i, TREE *T) {
 node j;
 if (SPACE[i].label==PRAZNO) {                  /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 if (avail==LAMBDA){
 printf("Polje SPACE je puno!");
 system("pause");
 exit(1);
 }
 j=avail;
 avail=SPACE[avail].next_sibling;
 
 SPACE[j].parent=i;
 SPACE[j].first_child=LAMBDA;
 SPACE[j].next_sibling=SPACE[i].first_child;
 
 SPACE[i].first_child=j;
 return j;
 }
 
 node INSERT_SIBLING(labeltype l, node i, TREE *T) {
 node j,t;
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 if (avail==LAMBDA){
 printf("Polje SPACE je puno!");
 system("pause");
 exit(1);
 }
 
 j=avail;
 avail=SPACE[avail].next_sibling;
 
 SPACE[j].next_sibling=SPACE[i].next_sibling;
 SPACE[j].parent=SPACE[i].parent;
 SPACE[j].first_child=LAMBDA;
 
 SPACE[i].next_sibling=j;
 return j;
 }
 
 void DELETE(node i, TREE *T) {
 node j,k,g;
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 
 if (SPACE[i].parent==LAMBDA) {
 printf("Taj cvor je korijen!");
 system("pause");
 exit(1);
 }
 
 if (SPACE[i].first_child!=LAMBDA) {
 printf("Taj cvor ima djece!");
 system("pause");
 exit(1);
 }
 
 j=SPACE[i].parent;
 k=SPACE[i].next_sibling;
 g=SPACE[j].first_child;
 
 
 
 if (g!=i) {
 while (SPACE[g].next_sibling!=i)
 g=SPACE[g].next_sibling;
 }
 
 if (i==SPACE[j].first_child)
 SPACE[j].first_child=k;
 else
 SPACE[g].next_sibling=k;
 
 SPACE[i].label=PRAZNO;
 SPACE[i].next_sibling=avail;
 avail=i;
 }
 
 node ROOT(TREE T) {
 return T;
 }
 
 node FIRST_CHILD(node i; TREE T) {
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 return  SPACE[i].first_child;
 }
 
 node NEXT_SIBLING(node i; TREE T) {
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 return  SPACE[i].next_sibling;
 }
 
 node PARENT(node i; TREE T) {
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 return  SPACE[i].parent;
 }
 
 labeltype LABEL(node i; TREE T) {
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 return  SPACE[i].label;
 }
 
 void CHANGE_LABEL(labeltype l, node i; TREE *T) {
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 SPACE[i].label=l;
 }
 
 
 int main (void) {
 TREE T;
 MAKE_NULL(0);
 
 
 
 system("pause");
 return 0;
 }
 
 | 
 
 PITANJA:
 
 1. Bili ovo bila dobra implementacija za TREE pomoću polja na osnovi veze "čvor → (roditelj, (prvo dijete, idući brat))" ili sam nešto krivo razunio/kodirao (ako nešto nije u redu bio bi jako zahvalan da mi ukažete što je krivo i date mi neku ideju kako da to ispravim)
 
 2.Sa komentarom /* ? */ sam označio mjesto u kodu gdje sam iskodirao samo za jednu stablo. Ako je label = '-' onda je u listi avail ako nije onda je sigurno u tom jedinom stablo. Zna li netko kako bi taj problem riješio univerzalno tj. da vrijedi i za više stabala u polju SPACE (znaći da provjerim jeli taj i baš u tom konkretnom stablu)?
 
 3.Kako bi mogao učitati stablo izvana u program. Jedna moja zamisao je bila da se prvo napiše korijen pa onda njegova djeca, a poslje zadnjeg djeteta znak '-'. Nakon toga bi to ponavio za njegovo prvo dijete, pa svako sljedeće i tako u krug dok se ne upiše znak '*' što bi značilo da je cijelo stablo učitano ali nisam siguran bili to bilo ok i kako bi to izveo.
 
 Hvala puno svima koji pokušaju bar nešto od ovoga odgovoriti jer sam malo u stisci s vremenom, a i zato jer je ovo gradivo obrađeno samo apstraktno i nismo radili nikakve konkretnije primjere sa npr. konstruiranjem liste avail ali ni sa večinom implementacija drugih funkcija u ovom obliku sa poljem za obično stablo, a nismo radili ni učitavanje običnog stabla izvana.
 
 
 |  | 
	
		| [Vrh] |  | 
	
		| homesweethome Forumaš(ica)
 
  
 
 Pridružen/a: 21. 10. 2009. (16:25:25)
 Postovi: (1C)16
 
 
 |  | 
	
		| [Vrh] |  | 
	
		| ante003 Forumaš(ica)
 
  
  
 Pridružen/a: 13. 10. 2008. (17:45:10)
 Postovi: (3C5)16
 Spol:
  
 
 | 
			
				|  Postano: 19:38 pon, 10. 1. 2011    Naslov: |         |  
				| 
 |  
				| [quote="homesweethome"]:arrow: Treba mi program za ispis INORDER obilaska binarnog stabla, implementiranog pomocu pointera? ne treba biti neovisan o implementaciji..  :?:[/quote]
 :S
 
 napravi si funkciju void inorder i samo napisi kako ti ide definicija inorder ispisa.
 
 lijevo podstablo, korijen, desno podstablo.
 
 najlaksa rekurzivna funkcija koju mozes pitat.
 
 [code:1]inorder(LEFT_CHILD(..),...);
 printf("..",korijen);
 inorder(RIGHT_CHILD(..),...);
 [/code:1]
 
 i jos si dodaj jedan if koji provjerava jel postoji nesto na tom cvoru i voila. to je to :) (ako nisam nesto zaboravio, ako jesam, skuzit ces valjda sto fali :) )
  	  | homesweethome (napisa): |  	  |  Treba mi program za ispis INORDER obilaska binarnog stabla, implementiranog pomocu pointera? ne treba biti neovisan o implementaciji..  | 
 
 :S
 
 napravi si funkciju void inorder i samo napisi kako ti ide definicija inorder ispisa.
 
 lijevo podstablo, korijen, desno podstablo.
 
 najlaksa rekurzivna funkcija koju mozes pitat.
 
 
  	  | Kod: |  	  | inorder(LEFT_CHILD(..),...); printf("..",korijen);
 inorder(RIGHT_CHILD(..),...);
 
 | 
 
 i jos si dodaj jedan if koji provjerava jel postoji nesto na tom cvoru i voila. to je to
  (ako nisam nesto zaboravio, ako jesam, skuzit ces valjda sto fali  ) 
 
 _________________
 Ako ste previše otvorenog uma, ispast će vam mozak
 ------------------------------------------------------
 Racunalo bez Windowsa je kao riba bez bicikla
 |  | 
	
		| [Vrh] |  | 
	
		| c.p.-23 Forumaš(ica)
 
  
 
 Pridružen/a: 04. 06. 2010. (10:21:02)
 Postovi: (8)16
 
 
 |  | 
	
		| [Vrh] |  | 
	
		| eve Forumaš(ica)
 
  
 
 Pridružen/a: 13. 07. 2009. (23:07:06)
 Postovi: (192)16
 Spol:
  
 
 |  | 
	
		| [Vrh] |  | 
	
		| Cobs Forumaš(ica)
 
  
  
 Pridružen/a: 21. 01. 2008. (13:32:15)
 Postovi: (206)16
 Spol:
  Lokacija: Geto
 
 | 
			
				|  Postano: 19:03 sri, 12. 1. 2011    Naslov: |         |  
				| 
 |  
				| [quote="c.p.-23"]ima li itko živ implementaciju:
a.t.p. SET pomoću nesortirane vezane liste (veze u listi su uspostavljene pomoću kursora) i pretpostavku da skupovi sadrže podatke tipa char?
 :cry:  :oops:[/quote]
 
 s obzirom da se radi o implementaciji pomoću nesortirane vezane liste ( implementirane pomoću pointera ) ta lista ne treba biti SORTIRANA , pa po čemu se to razlikuje od obične liste ( implementirane pomoću pointera ).
 
 Ne razlikuje se. Nabavi običnu implementaciju liste pomoću pointera, tog bar ima na internetu na 100 strana.
 
 znači umjesto onog position pointera koji je tam u svakoj funkciji oznaka koji element ubacit,brisat...,  sam stavi pointer na prvi element liste. Jer ti pozicija u skupu nije bitna.
 
 Funkcija MAKE_NULL je ista.
 Kod funkcije INSERT uvijek ubacuj elemente na početak liste.
 Kod funkcije DELETE šećeš po listi od početka dok ne naletiš na neki element ( koji je tamo jedini jer se radi o skupu ) i pobrišeš ga.
 Funkcija MEMBER je gotovo ista kao DELETE, sam ne brišeš podatak na koji eventualno naletiš.
 Funkcija MIN ( MAX ). Šećeš po cijeloj listi i najveći ( najmanji ) element spremiš u pomoćnu varijablu koju ćeš vratiti.
 
 Ostale funkcije su niš drugo nego kombinacija navedenih.
 
 [quote="eve"]
 jel ima netko implementaciju rječnika (sadrži podatke tima char) pomoću otvorene hash tablice?
 
 muci me kakvu funkciju uzet.. i probala sam sa implementacijom koja je u skripti ali izbacuje hrpu grešaka...
 plizz help ak neko to ima...
 [/quote]
 
 si ovo stavila?
 
 [code:1]#define B 20[/code:1]
 
 ak je u nečem drugom problem napiši tu u čem ili meni na pm.
 
 [size=9][color=#999999]Added after 32 minutes:[/color][/size]
 
 [quote="Tomy007"][code:1]
 ...
 typedef struct {
 labeltype label;
 node parent, first_child, next_sibling;
 }SPACE [MAXN]
 
 void MAKE_NULL(int n) {
 node avail;
 for (i=n, i<MAXN, i++) {
 SPACE[I].label=PRAZNO;
 SPACE[i].next_sibling=i+1;
 SPACE[MAXN].next_sibling=LAMBDA;
 avail=n;
 }
 
 void CHANGE_LABEL(labeltype l, node i; TREE *T) {
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 SPACE[i].label=l;
 }
 ...
 [/code:1]
 [/quote]
 
 nisam htjel quotat cijeli post jer je malo prevelik...
 uglavnom... nije dobro. ( bar ovaj mali dio koji sam ti pogledo )
 
 U startu imaš par početničkih grešaka tipa:
 
 [code:1]SPACE[MAXN][/code:1]
 
 - zatim funkcija MAKE_NULL nije dobro zatvorena. ( tj. for petlja u njoj )
 
 - zatim:
 [code:1]node avail[/code:1]
 u istoj funkciji. Čemu služi? vidim da je koristiš odmah u sljedećoj funkciji bez da si je u istoj deklarirao. Ta varijabla ne postoji u nekoj drugoj funkciji jer se uništi na kraju one na kojoj je deklarirana.
 
 -funkcija CHANGE_LABEL bi trebala mjenjat ime nekog čvora u određenom stablu.
 TREE *T je pokazivač na stablo ( pretpostavljam vjerojatno na korijen ). Što ako čvor ( node i ) koji ulazi u funkciju postoji u nekom drugom stablu iz SPACE - a ( ako imaš više stabla u space -u, ako u space -u imaš samo jedno stablo, zašto koristiš pointer na njega? ) ?
 Što ako postoji ( čvor i ) u baš ovom stablu kojeg mjenjaš, ali u tom istom stablu postoji još jedan čvor koji ima ime koje pokušavaš postavit kao novo ( labeltype l )?
 
 Nemoj krivo shvatit ovaj post, kao samu kritiku, ali ti moram reć da nisi na pravom putu...
 
 Probaj napravit nešto najjednostavnije što možeš ( ako govorimo o bilo kojoj implementaciji ), a ako ti to proradi ili kad ti proradi malo počni komplicirat...
  	  | c.p.-23 (napisa): |  	  | ima li itko živ implementaciju: a.t.p. SET pomoću nesortirane vezane liste (veze u listi su uspostavljene pomoću kursora) i pretpostavku da skupovi sadrže podatke tipa char?
 
    | 
 
 s obzirom da se radi o implementaciji pomoću nesortirane vezane liste ( implementirane pomoću pointera ) ta lista ne treba biti SORTIRANA , pa po čemu se to razlikuje od obične liste ( implementirane pomoću pointera ).
 
 Ne razlikuje se. Nabavi običnu implementaciju liste pomoću pointera, tog bar ima na internetu na 100 strana.
 
 znači umjesto onog position pointera koji je tam u svakoj funkciji oznaka koji element ubacit,brisat...,  sam stavi pointer na prvi element liste. Jer ti pozicija u skupu nije bitna.
 
 Funkcija MAKE_NULL je ista.
 Kod funkcije INSERT uvijek ubacuj elemente na početak liste.
 Kod funkcije DELETE šećeš po listi od početka dok ne naletiš na neki element ( koji je tamo jedini jer se radi o skupu ) i pobrišeš ga.
 Funkcija MEMBER je gotovo ista kao DELETE, sam ne brišeš podatak na koji eventualno naletiš.
 Funkcija MIN ( MAX ). Šećeš po cijeloj listi i najveći ( najmanji ) element spremiš u pomoćnu varijablu koju ćeš vratiti.
 
 Ostale funkcije su niš drugo nego kombinacija navedenih.
 
 
  	  | eve (napisa): |  	  | jel ima netko implementaciju rječnika (sadrži podatke tima char) pomoću otvorene hash tablice?
 
 muci me kakvu funkciju uzet.. i probala sam sa implementacijom koja je u skripti ali izbacuje hrpu grešaka...
 plizz help ak neko to ima...
 
 | 
 
 si ovo stavila?
 
 
 
 ak je u nečem drugom problem napiši tu u čem ili meni na pm.
 
 Added after 32 minutes:
 
 
  	  | Tomy007 (napisa): |  	  |  	  | Kod: |  	  | ...
 typedef struct {
 labeltype label;
 node parent, first_child, next_sibling;
 }SPACE [MAXN]
 
 void MAKE_NULL(int n) {
 node avail;
 for (i=n, i<MAXN, i++) {
 SPACE[I].label=PRAZNO;
 SPACE[i].next_sibling=i+1;
 SPACE[MAXN].next_sibling=LAMBDA;
 avail=n;
 }
 
 void CHANGE_LABEL(labeltype l, node i; TREE *T) {
 if (SPACE[i].label==PRAZNO) {                /* ? */
 printf("Taj cvor nije u stablu!");
 system("pause");
 exit(1);
 }
 SPACE[i].label=l;
 }
 ...
 
 | 
 
 | 
 
 nisam htjel quotat cijeli post jer je malo prevelik...
 uglavnom... nije dobro. ( bar ovaj mali dio koji sam ti pogledo )
 
 U startu imaš par početničkih grešaka tipa:
 
 
 
 - zatim funkcija MAKE_NULL nije dobro zatvorena. ( tj. for petlja u njoj )
 
 - zatim:
 
 u istoj funkciji. Čemu služi? vidim da je koristiš odmah u sljedećoj funkciji bez da si je u istoj deklarirao. Ta varijabla ne postoji u nekoj drugoj funkciji jer se uništi na kraju one na kojoj je deklarirana.
 
 -funkcija CHANGE_LABEL bi trebala mjenjat ime nekog čvora u određenom stablu.
 TREE *T je pokazivač na stablo ( pretpostavljam vjerojatno na korijen ). Što ako čvor ( node i ) koji ulazi u funkciju postoji u nekom drugom stablu iz SPACE - a ( ako imaš više stabla u space -u, ako u space -u imaš samo jedno stablo, zašto koristiš pointer na njega? ) ?
 Što ako postoji ( čvor i ) u baš ovom stablu kojeg mjenjaš, ali u tom istom stablu postoji još jedan čvor koji ima ime koje pokušavaš postavit kao novo ( labeltype l )?
 
 Nemoj krivo shvatit ovaj post, kao samu kritiku, ali ti moram reć da nisi na pravom putu...
 
 Probaj napravit nešto najjednostavnije što možeš ( ako govorimo o bilo kojoj implementaciji ), a ako ti to proradi ili kad ti proradi malo počni komplicirat...
 
 
 |  | 
	
		| [Vrh] |  | 
	
		| nike Forumaš(ica)
 
  
 
 Pridružen/a: 11. 02. 2010. (13:05:01)
 Postovi: (58)16
 
 
 | 
			
				|  Postano: 13:11 čet, 13. 1. 2011    Naslov: |         |  
				| 
 |  
				| Trebala bi mi pomoć: imam implementaciju atp TREE preko veze čvor->roditelj,prvo dijete,idući brat...početnu implementaciju pomoću typedef struct sam napravio..Ono što me buni jest kako povezat polje space[maxn] sa imenom TREE...Znači imam ovo:
Trebala bi mi pomoć: imam implementaciju atp TREE preko veze čvor→roditelj,prvo dijete,idući brat...početnu implementaciju pomoću typedef struct sam napravio..Ono što me buni jest kako povezat polje space[maxn] sa imenom TREE...Znači imam ovo:
 typedef int node;  //index u polju
 typedef char labeltype;
 
 typedef struct{
 labeltype label;
 node parent , first.child , next.sibling;
 }SPACE[MAXN];
 
 Gdje je sad tu TREE? jer ja u svim potprogramima koristim kao varijablu TREE,al neznam kako polje space povezat sa TREE....
 Kada napravim ovo :
 
 int main(void){
 
 SPACE[MAXN] T;
 
 javlja mi grešku (nešto tipa da sam zaboravio napisat neki točka zarez)..Al zapravo bi želio implementirat TREE T...kako da to postignem?
 
 typedef int node;  //index u polju
 typedef char labeltype;
 
 typedef struct{
 labeltype label;
 node parent , first.child , next.sibling;
 }SPACE[MAXN];
 
 Gdje je sad tu TREE? jer ja u svim potprogramima koristim kao varijablu TREE,al neznam kako polje space povezat sa TREE....
 Kada napravim ovo :
 
 int main(void){
 
 SPACE[MAXN] T;
 
 javlja mi grešku (nešto tipa da sam zaboravio napisat neki točka zarez)..Al zapravo bi želio implementirat TREE T...kako da to postignem?
 
 
 |  | 
	
		| [Vrh] |  | 
	
		| Cobs Forumaš(ica)
 
  
  
 Pridružen/a: 21. 01. 2008. (13:32:15)
 Postovi: (206)16
 Spol:
  Lokacija: Geto
 
 |  | 
	
		| [Vrh] |  | 
	
		| Tomy007 Forumaš(ica)
 
  
 
 Pridružen/a: 08. 11. 2009. (19:45:28)
 Postovi: (94)16
 
 
 |  | 
	
		| [Vrh] |  | 
	
		| Cobs Forumaš(ica)
 
  
  
 Pridružen/a: 21. 01. 2008. (13:32:15)
 Postovi: (206)16
 Spol:
  Lokacija: Geto
 
 |  | 
	
		| [Vrh] |  | 
	
		| luna5 Forumaš(ica)
 
  
 
 Pridružen/a: 15. 01. 2011. (00:11:50)
 Postovi: (6)16
 
 
 | 
			
				|  Postano: 0:18 sub, 15. 1. 2011    Naslov: |         |  
				| 
 |  
				| [quote="Cobs"]najpojednostavljeniji oblik rekurzivne funkcije:
 [code:1]
 void unesi_cvorove( TREE *T ){
 
 upisi broj djece za cvor *T;
 
 while( broj_djece > 0 ){
 unesi dijete za cvor *T;
 broj_djece--;
 }
 
 // sada su unesena sva djeca od cvora *T
 
 sada pomocnim pointerom odi po svoj djeci od *T
 i unosi djecu za njih
 
 // pozovi funkciju unesi_cvorove( ... )  na pomocnom pointeru
 
 }
 [/code:1]
 
 kako unositi djecu, ovisi o načinu implementacije, kao i "hodanje" po djeci nekog čvora.
 
 Naravno ja sam pretpostavio da je početni čvor ( KORIJEN ) već alociran i ima neku oznaku, te da u main funkciji samo pozoveš tu funkciju na njemu.[/quote]
 
 meni je isto zadatak osmisliti unos podataka tipa char, s tim da mi je implementacije cvor->(prvo dijete, brat) pomocu pointera
 probala sam nerekurzivnu verziju, nije mi jasno sto ne funkcionira
 [code:1]
 int main()
 {
 node n;
 labeltype l;
 int d,b;
 scanf("%c",&l);
 TREE T;
 n=MAKE_ROOT(l,&T);
 while(1)
 {
 scanf("%d", &d); scanf("%d", &b); //tu unosim 0 ili 1 jer svaki put ispitujem ima li cvor dijete i prvog brata
 if(d==1)
 {
 scanf("%c",&l);printf("\n%c\n",l);
 n=INSERT_CHILD(l,n,&T);
 n=PARENT(n,T);
 }
 if(b==1)
 {
 scanf("%c",&l);
 n=INSERT_SIBLING(l,n,&T);
 n=FIRST_CHILD(PARENT(n,T),T);
 }
 if(FIRST_CHILD(n,T)!=LAMBDA)
 {
 n=FIRST_CHILD(n,T);
 continue;
 }
 if(NEXT_SIBLING(n,T)!=LAMBDA)
 {
 n=NEXT_SIBLING(n,T);
 continue;
 }
 while((NEXT_SIBLING(n,T)==LAMBDA)&&(PARENT(n,T)!=LAMBDA))
 {
 n=PARENT(n,T);
 }
 if(PARENT(n,T)==LAMBDA)
 break;
 else
 {
 n=NEXT_SIBLING(n,T);
 }
 }
 return 0;
 
 }
 [/code:1][/code]
  	  | Cobs (napisa): |  	  | najpojednostavljeniji oblik rekurzivne funkcije: 
 
  	  | Kod: |  	  | void unesi_cvorove( TREE *T ){
 
 upisi broj djece za cvor *T;
 
 while( broj_djece > 0 ){
 unesi dijete za cvor *T;
 broj_djece--;
 }
 
 // sada su unesena sva djeca od cvora *T
 
 sada pomocnim pointerom odi po svoj djeci od *T
 i unosi djecu za njih
 
 // pozovi funkciju unesi_cvorove( ... )  na pomocnom pointeru
 
 }
 
 | 
 
 kako unositi djecu, ovisi o načinu implementacije, kao i "hodanje" po djeci nekog čvora.
 
 Naravno ja sam pretpostavio da je početni čvor ( KORIJEN ) već alociran i ima neku oznaku, te da u main funkciji samo pozoveš tu funkciju na njemu.
 | 
 
 meni je isto zadatak osmisliti unos podataka tipa char, s tim da mi je implementacije cvor→(prvo dijete, brat) pomocu pointera
 probala sam nerekurzivnu verziju, nije mi jasno sto ne funkcionira
 
 [/code] 	  | Kod: |  	  | int main()
 {
 node n;
 labeltype l;
 int d,b;
 scanf("%c",&l);
 TREE T;
 n=MAKE_ROOT(l,&T);
 while(1)
 {
 scanf("%d", &d); scanf("%d", &b); //tu unosim 0 ili 1 jer svaki put ispitujem ima li cvor dijete i prvog brata
 if(d==1)
 {
 scanf("%c",&l);printf("\n%c\n",l);
 n=INSERT_CHILD(l,n,&T);
 n=PARENT(n,T);
 }
 if(b==1)
 {
 scanf("%c",&l);
 n=INSERT_SIBLING(l,n,&T);
 n=FIRST_CHILD(PARENT(n,T),T);
 }
 if(FIRST_CHILD(n,T)!=LAMBDA)
 {
 n=FIRST_CHILD(n,T);
 continue;
 }
 if(NEXT_SIBLING(n,T)!=LAMBDA)
 {
 n=NEXT_SIBLING(n,T);
 continue;
 }
 while((NEXT_SIBLING(n,T)==LAMBDA)&&(PARENT(n,T)!=LAMBDA))
 {
 n=PARENT(n,T);
 }
 if(PARENT(n,T)==LAMBDA)
 break;
 else
 {
 n=NEXT_SIBLING(n,T);
 }
 }
 return 0;
 
 }
 
 | 
 
 
 |  | 
	
		| [Vrh] |  | 
	
		| Vanja_ Forumaš(ica)
 
  
 
 Pridružen/a: 21. 11. 2009. (14:38:39)
 Postovi: (2C)16
 
 
 | 
			
				|  Postano: 15:42 sub, 15. 1. 2011    Naslov: |         |  
				| 
 |  
				| imam zadatak za domacu zadacu sa dinamickim programiranjem...
imam zadatak za domacu zadacu sa dinamickim programiranjem...
 kako funkcionira sljedeci problem:
 
 duljina niza, odnosno velicina polja mi nije zadana. tj. korisnik unosi duljinu niza, odnosno velicinu polja, i tek nakon toga bi se valjda trebalo sve kreirati.
 
 u skripti je to opisano ovako:
 '' float M[D1][D2];
 int w[D1];
 float p[D1]; ''
 
 kako to funkcionira u sintaksi? tipa korisnik unese n i m, a meni bi trebali: polje M[n][m], i w[n] i p[n].
 
 Hvala! :)
 
 kako funkcionira sljedeci problem:
 
 duljina niza, odnosno velicina polja mi nije zadana. tj. korisnik unosi duljinu niza, odnosno velicinu polja, i tek nakon toga bi se valjda trebalo sve kreirati.
 
 u skripti je to opisano ovako:
 '' float M[D1][D2];
 int w[D1];
 float p[D1]; ''
 
 kako to funkcionira u sintaksi? tipa korisnik unese n i m, a meni bi trebali: polje M[n][m], i w[n] i p[n].
 
 Hvala!
   
 
 |  | 
	
		| [Vrh] |  | 
	
		|  |