Programovacie jazyky, rady, poradňa...
njoko
Light Expert
Príspevky: 50 Registrovaný: 09 okt 2008, 13:32
Príspevok
od používateľa njoko » 10 dec 2008, 21:06
pada to lebo ze pisem do pamata kde nemam co robit, rsp na 000000atd
Kód: Vybrať všetko
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
struct zavisle{
char *ndruh;
struct zavisle *dalsi;
};
struct zviera{
char *druh;
int pocetz;
struct zavisle *zav;//alebo sem?
struct zviera * dalsie;
};
zviera *vytvor(zviera *prve) //vytvori prazdnu strukturu
{
prve=(zviera *)malloc(sizeof(zviera));
prve->dalsie=NULL;
return prve;
}
zavisle *vytvorz(zavisle *first) //vytvori prazdny zoznam
{
first=(zavisle *)malloc(sizeof(zavisle));
first->dalsi=NULL;
return first;
}
int main(){
zviera *prve;
zviera *akt;
zavisle *first;
zavisle *aktz;
char str[1024];
char *pch;
char *pom;
int i,g,e,j,f,max=0;
int a=0;
first=vytvorz(first);//vytvori sa sll
scanf("%d",&g);
prve=vytvor(prve);//vytvori sa sll obsahujuci aj sll
akt=prve;
aktz=first;
for(i=1;i<=g;i++)
{
getchar();
gets(str);
pch = strtok (str," ");
strcpy(akt->druh,str);
pch = strtok (NULL, " ");
akt->pocetz=atoi(pch);
e=atoi(pch);
for(j=1;j<=e;j++)
{
pch=strtok(NULL," ");
strcpy(aktz->ndruh,pch);
aktz->dalsi=(zavisle *)malloc(sizeof(zavisle));
aktz=aktz->dalsi;
}
aktz->dalsi=NULL;
akt->zav=aktz;// priradenie zoznamu do prvku nadzoznamu
akt->dalsie=(zviera *)malloc(sizeof(zviera));
akt=akt->dalsie;
}
akt->dalsie=NULL;
akt=prve;
for(f=1;f<=g;f++)
{
if(akt->pocetz>max)max=akt->pocetz;
printf("POCET JE %d\n",akt->pocetz);
printf("Druh je %s\n",akt->druh);
akt=akt->dalsie;
}
printf("Max je %d\n",max);
getchar();
return 0;
}
do vonkajsieho zoznamu to nacita ale potom ked ma do vnutorneho , teda sem
tak to vyhodi hento....nerozumiem ved to mam vytvorene funkciou vytvorz a tam je aj ten prvy clen alokovany tak co sa tomu nepaci.....dakujem za pomoc
neutronmind
Expert
Príspevky: 189 Registrovaný: 05 aug 2008, 14:17
Príspevok
od používateľa neutronmind » 10 dec 2008, 21:24
Skus poslat nejaky priklad vstupnych udajov...
njoko
Light Expert
Príspevky: 50 Registrovaný: 09 okt 2008, 13:32
Príspevok
od používateľa njoko » 10 dec 2008, 21:28
trebars
godzilla 2 mys bocian
bocian 1 mys
mys 0
samozrejme sa to ma dalej spracovavat, ale tu som sa zasekol
neutronmind
Expert
Príspevky: 189 Registrovaný: 05 aug 2008, 14:17
Príspevok
od používateľa neutronmind » 10 dec 2008, 21:30
No, tak nepouzivaj tam funkciu gets(), ale scanf(). gets() ti nacita cely riadok...
njoko
Light Expert
Príspevky: 50 Registrovaný: 09 okt 2008, 13:32
Príspevok
od používateľa njoko » 10 dec 2008, 21:33
a scanf nacita co? sak ja potrebujem cely riadok a potom ho rozdelujem (ten vstup este ma predtym na riadku nejake cislo, na henten konrenty je to 3)
neutronmind
Expert
Príspevky: 189 Registrovaný: 05 aug 2008, 14:17
Príspevok
od používateľa neutronmind » 10 dec 2008, 21:38
Predpokladam, ze riadok
godzilla 2 mys bocian
znamena, ze godzilla je zavisla na dvoch zvieratach, cize na mysi a bocianovi, spravne?
V tom pripade to skus riesit nasledovne
Kód: Vybrať všetko
scanf("%s", meno_zvierata);
scanf("%d", &pocet_zvierat_od_ktorych_je_zavisle);
zviera=(typ *)malloc(pocet_zvierat_od_ktorych_je_zavisle *sizeof(typ));
for (i=0; i<pocet_zvierat_od_ktorych_je_zavisle; i++)
scanf("%s", zviera[i]);
btw. prednedavnom som robil podobnu ulohu na jednu sutaz a riesil som to rekurziou, no moc do hlbky som tvoj zdrojak nestudoval, mozno ti to pojde aj bez nej.
//jj, mas pravdu
scanf("%s", zviera);
njoko
Light Expert
Príspevky: 50 Registrovaný: 09 okt 2008, 13:32
Príspevok
od používateľa njoko » 10 dec 2008, 21:42
asi to malo byt
dakujem, skusim, akurat tie zvierata budem asi ukladat so sll a nie do pola
edit, no spravil som to takto :
Kód: Vybrať všetko
scanf("%s", akt->druh);
scanf("%d", &akt->pocetz);
aktz=(zavisle *)malloc(akt->pocetz *sizeof(zavisle));
pocet=akt->pocetz;
for (i=0; i<pocet; i++)
{
scanf("%s", aktz->ndruh);
aktz=aktz->dalsi;
}
akt->dalsie=(zviera *)malloc(sizeof(zviera));
akt=akt->dalsie;
akurat po zbehnuti sa to hned zavrie a mlo by este cakat na znak hmmm to bude asi inde zadrhel
neutronmind
Expert
Príspevky: 189 Registrovaný: 05 aug 2008, 14:17
Príspevok
od používateľa neutronmind » 10 dec 2008, 22:00
To bude asi tym, ze v bufferi este daco zostalo, daj tam bud dvakrat getchar(), alebo system("pause");, alebo getch() z conio.h, alebo scanf()... Mas viacero moznosti...
njoko
Light Expert
Príspevky: 50 Registrovaný: 09 okt 2008, 13:32
Príspevok
od používateľa njoko » 10 dec 2008, 22:02
problemom je volba..
nefunguje....nejak to vykoumam
a sakra teraz mi to nejak neviem co...ked mam taky vstup ako som pisal tak taky vstup sa mi ani nepodari zadat lebo po zadani prveho riaku program skonci....
njoko
Light Expert
Príspevky: 50 Registrovaný: 09 okt 2008, 13:32
Príspevok
od používateľa njoko » 10 dec 2008, 22:39
kod :
Kód: Vybrať všetko
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#include <stdlib.h>
struct zavisle{
char *ndruh;
struct zavisle *dalsi;
};
struct zviera{
char *druh;
int pocetz;
struct zavisle *zav;//alebo sem?
struct zviera * dalsie;
};
zviera *vytvor(zviera *prve) //vytvori prazdnu strukturu
{
prve=(zviera *)malloc(sizeof(zviera));
prve->dalsie=NULL;
return prve;
}
zavisle *vytvorz(zavisle *first) //vytvori prazdny zoznam
{
first=(zavisle *)malloc(sizeof(zavisle));
first->dalsi=NULL;
return first;
}
int main(){
zviera *prve;
zviera *akt;
//zavisle *first;
zavisle *aktz;
char str[1024];
char *pch;
char *pom;
int i,g,e,j,f,pocet,max=0;
int a=0;
//first=vytvorz(first);//vytvori sa sll
scanf("%d",&g);
prve=vytvor(prve);//vytvori sa sll obsahujuci aj sll
akt=prve;
//aktz=first;
for(i=1;i<=g;i++)
{
scanf("%s", akt->druh);
scanf("%d", &akt->pocetz);
aktz=(zavisle *)malloc(akt->pocetz *sizeof(zavisle));
pocet=akt->pocetz;
for (i=0; i<pocet; i++)
{
scanf("%s", aktz->ndruh);
aktz=aktz->dalsi;
}
akt->dalsie=(zviera *)malloc(sizeof(zviera));
akt=akt->dalsie;
akt=prve;
for(f=1;f<=g;f++)
{
if(akt->pocetz>max)max=akt->pocetz;
printf("POCET JE %d\n",akt->pocetz);
printf("Druh je %s\n",akt->druh);
akt=akt->dalsie;
}
printf("Max je %d\n",max);
}
// tu som skusal aj getchar aj system("wait") aj scanf
return 0;
}
addictor
Medium Star
Príspevky: 419 Registrovaný: 28 dec 2007, 13:34
Bydlisko: MT / BA
Kontaktovať používateľa:
Príspevok
od používateľa addictor » 10 dec 2008, 23:22
skus pouzit debug... tam sa da pekne zistit, kde ti to tecie...
njoko
Light Expert
Príspevky: 50 Registrovaný: 09 okt 2008, 13:32
Príspevok
od používateľa njoko » 10 dec 2008, 23:25
nerozumiem...jediny sposob "debugu" ktory robievam(iny nejak hm) je cez pomocne vypisy, lenze ked sa to hned zavrie...
gwixt
Addict
Príspevky: 3912 Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can
Príspevok
od používateľa gwixt » 11 dec 2008, 8:43
no tak pouzivaj IDE kde sa da aj krokovat zdrojak
len tak btw po zbeznom prezreti zdrojaku ... kde alokujes pamat napr pre
ndruh, ktory pouzivas v tom
strcpy(aktz->ndruh,pch); ?? (C som uz dlho nevidel tak mozno trepem ... a mozno nie)
njoko
Light Expert
Príspevky: 50 Registrovaný: 09 okt 2008, 13:32
Príspevok
od používateľa njoko » 11 dec 2008, 9:23
ved tu
Kód: Vybrať všetko
aktz=(zavisle *)malloc(akt->pocetz *sizeof(zavisle)); sa alokuje pre ten zoznam, a ndruh je v nom
gwixt
Addict
Príspevky: 3912 Registrovaný: 24 sep 2005, 16:50
Bydlisko: Trash-Can
Príspevok
od používateľa gwixt » 11 dec 2008, 10:19
no v nom je sice ndruh .. ale to je len pointer na char (= 4B) ukazujuci niekam
addictor
Medium Star
Príspevky: 419 Registrovaný: 28 dec 2007, 13:34
Bydlisko: MT / BA
Kontaktovať používateľa:
Príspevok
od používateľa addictor » 11 dec 2008, 13:24
njoko napísal: nerozumiem...jediny sposob "debugu" ktory robievam(iny nejak hm) je cez pomocne vypisy, lenze ked sa to hned zavrie...
Ak pouzivas visualko (a predpokladam, ze si FIITkar druhal a toto potrebujes na DSA
, ak ne, tak sme mali podobnu ulohu) tak ked das F5, spusti ti debug... na dalsi prikas sa posunies bud F10 alebo F11, v zavislosti od toho, ci sa chces aj vnorit do danej funkcie, alebo nou iba prejst... a tam ti v tabulke vypisuje pre zadane premenne, co je v nich ulozene a da sa pekne odsledovat, ako sa to meni... ono je to tazko takto vysvetlovat... snad si aspon trosicku pochopil...
njoko
Light Expert
Príspevky: 50 Registrovaný: 09 okt 2008, 13:32
Príspevok
od používateľa njoko » 11 dec 2008, 13:47
pouzivam dev-c++,ale mam aj visual , len nejak blbne, skusim ,dakujem