Chyba v programu – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Chyba v programu – C / C++ – Fórum – Programujte.comChyba v programu – C / C++ – Fórum – Programujte.com

 

choice_
~ Anonymní uživatel
7 příspěvků
3. 6. 2007   #1
-
0
-

Ahojte,chtel jsem se zeptat jsetli byste mi nemohli poradit s jednim programem musim mit tu definici struktura ve funkci void,snazim se to do te funkci nasekat,ale kdyz to udelam tak mi to nejede,nepomohl by mi s tim nekdo prosim vas.ten kod je nasledujici



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct struktura_s struktura_t;
struct struktura_s
{
int pocet;
char *slovo;
struktura_t *dalsi;
int celkem_slov;
};

void *Pocitej_Slova(char *slovo, void *parametr)
{
if(!parametr) {
int i=0;
char *kopie = malloc(sizeof(char)*(strlen(slovo)+1));
struktura_t *nova = malloc(sizeof(struktura_t));

while(slovo[i]){kopie[i]=slovo[i]; i++;}
kopie[i]=0x0;

nova->pocet = 1;
nova->slovo = kopie;
nova->celkem_slov = 1;
nova->dalsi = NULL;
return nova;
}

else if(!slovo) {
int slov, i = 0;
struktura_t *prvek = (struktura_t*) parametr;
void **pole = (void**) malloc(2*sizeof(void*));

slov = (prvek->celkem_slov) ;

pole[0] = (char*) malloc(slov*sizeof(char*));
pole[1] = (int*) malloc(slov*sizeof(int*));

((char **)(pole[0]))[slov] = NULL;
((int *)(pole[1]))[slov] = 0;

while(slov>i) {
((char **)(pole[0]))[i] = prvek->slovo;
((int *)(pole[1]))[i] = prvek->pocet;
prvek = prvek->dalsi;
i++;}



return pole;
}


else{
int i, stav;
struktura_t *prvek, *pomocny_prvek, *new_prvek, *zacatek;
char *kopie = malloc(sizeof(char)*(strlen(slovo)+1));
new_prvek = malloc(sizeof(struktura_t));
zacatek = malloc(sizeof(struktura_t));
prvek = (struktura_t*) parametr;
zacatek = (struktura_t*) parametr;
for(i=0; slovo[i]!=0x0;i++) kopie[i]=slovo[i]; kopie[i]=0x0;

while(1)
{stav = strcmp(kopie, prvek->slovo);

if(!stav) {prvek->pocet = prvek->pocet + 1; return parametr;}

else if(stav < 0) {
new_prvek->dalsi = prvek;
new_prvek->celkem_slov = zacatek->celkem_slov +1;
parametr = new_prvek;
break;}

else if(stav > 0) {
if(!prvek->dalsi) {
prvek->dalsi = new_prvek;
new_prvek->dalsi = NULL;
break;}

else if((strcmp(kopie, (prvek->dalsi)->slovo)>0)||(strcmp(kopie, (prvek->dalsi)->slovo)==0))
{prvek = prvek->dalsi; continue;}

else {pomocny_prvek = prvek->dalsi;
prvek->dalsi = new_prvek;
new_prvek->dalsi = pomocny_prvek;
break;}}

prvek = prvek->dalsi;}

new_prvek->slovo = kopie;
new_prvek->pocet = 1;
zacatek->celkem_slov = zacatek->celkem_slov + 1;
parametr = (void*)parametr;
return parametr;
}
}



int main(int argc, char *argv[])
{
void *p;

p = Pocitej_Slova("nazdar", NULL);
p = Pocitej_Slova("ahoj", p);
p = Pocitej_Slova("cau", p);
p = Pocitej_Slova("nazdar", p);
p = Pocitej_Slova("nazdar", p);
p = Pocitej_Slova(NULL, p);

//printf("\"%s\" %d\n", ((char **)(p[0]))[2], ((int*)(p[1]))[2]);

system("PAUSE");
return 0;
}

Nahlásit jako SPAM
IP: ...–
3. 6. 2007   #2
-
0
-

Ten řádek "typedef.." jsem moc nepochopil?!
Potom jsem nenašel žádnou funkci "vod"?!
OMG, proč to chceš strkat do funkce?!

Nahlásit jako SPAM
IP: ...–
choice_
~ Anonymní uživatel
7 příspěvků
3. 6. 2007   #3
-
0
-

Promin myslel jsem do funkce void.Rekl nam to ucitel ze to tak mame uelat,ze vsechno ma byt v ty jedny funkci vis.Ma to byt pomoci struktury,tak jsem ji zadefinoval,ale ted bych ji potreboval mit v ty funkci,to cely hodit do funkce void,uz jsem to zkousel,ale nedari se me to.

Nahlásit jako SPAM
IP: ...–
3. 6. 2007   #4
-
0
-

Myslíš do té funkce Pocitej_Slova? A zkoušel jsi už CTRL+C ? ;-) Copak ti píše compilátorek?

Nahlásit jako SPAM
IP: ...–
choice_
~ Anonymní uživatel
7 příspěvků
3. 6. 2007   #5
-
0
-

Jj myslim.To vis ze zkousel,jinak bych sem ani nepsal,mozna to delam blbe jak to tam davam,nevim,kazdopadne po tym co to tam vlozim,my to nejede.

Nahlásit jako SPAM
IP: ...–
3. 6. 2007   #6
-
0
-

Co ti nejde? Zcompilovat, zlinkovat, spustit, program se nechová tak, jak si chtěl, program padá???

Nahlásit jako SPAM
IP: ...–
choice_
~ Anonymní uživatel
7 příspěvků
3. 6. 2007   #7
-
0
-

No prave to zkompilovat,ikdyz ted co mam ten zdrojak tak to jede,ale po uprave,kdyz vlozim tu definici struktury do void tak uz nee,takze to delam nejak blbe.

Nahlásit jako SPAM
IP: ...–
3. 6. 2007   #8
-
0
-

Tak jsme se prokousali kousek dal :-) Hod sem ten zdrojak co nefunguje a hlasky compilatoru..

Nahlásit jako SPAM
IP: ...–
choice_
~ Anonymní uživatel
7 příspěvků
3. 6. 2007   #9
-
0
-

Tak jsem to zkusil takhle:



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void *Pocitej_Slova(char *slovo, void *parametr)
{
typedef struct struktura_s struktura_t;
struct struktura_s
{
int pocet;
char *slovo;
struktura_t *dalsi;
int celkem_slov;
};


{
if(!parametr) {
int i=0;
char *kopie = malloc(sizeof(char)*(strlen(slovo)+1));
struktura_t *nova = malloc(sizeof(struktura_t));

while(slovo[i]){kopie[i]=slovo[i]; i++;}
kopie[i]=0x0;

nova->pocet = 1;
nova->slovo = kopie;
nova->celkem_slov = 1;
nova->dalsi = NULL;
return nova;
}

else if(!slovo) {
int slov, i = 0;
struktura_t *prvek = (struktura_t*) parametr;
void **pole = (void**) malloc(2*sizeof(void*));

slov = (prvek->celkem_slov) ;

pole[0] = (char*) malloc(slov*sizeof(char*));
pole[1] = (int*) malloc(slov*sizeof(int*));

((char **)(pole[0]))[slov] = NULL;
((int *)(pole[1]))[slov] = 0;

while(slov>i) {
((char **)(pole[0]))[i] = prvek->slovo;
((int *)(pole[1]))[i] = prvek->pocet;
prvek = prvek->dalsi;
i++;}
return pole;
}


else{
int i, stav;
struktura_t *prvek, *pomocny_prvek, *new_prvek, *zacatek;
char *kopie = malloc(sizeof(char)*(strlen(slovo)+1));
new_prvek = malloc(sizeof(struktura_t));
zacatek = malloc(sizeof(struktura_t));
prvek = (struktura_t*) parametr;
zacatek = (struktura_t*) parametr;
for(i=0; slovo[i]!=0x0;i++) kopie[i]=slovo[i]; kopie[i]=0x0;

while(1)
{stav = strcmp(kopie, prvek->slovo);

if(!stav) {prvek->pocet = prvek->pocet + 1; return parametr;}

else if(stav < 0) {
new_prvek->dalsi = prvek;
new_prvek->celkem_slov = zacatek->celkem_slov +1;
parametr = new_prvek;
break;}

else if(stav > 0) {
if(!prvek->dalsi) {
prvek->dalsi = new_prvek;
new_prvek->dalsi = NULL;
break;}

else if((strcmp(kopie, (prvek->dalsi)->slovo)>0)||(strcmp(kopie, (prvek->dalsi)->slovo)==0))
{prvek = prvek->dalsi; continue;}

else {pomocny_prvek = prvek->dalsi;
prvek->dalsi = new_prvek;
new_prvek->dalsi = pomocny_prvek;
break;}}

prvek = prvek->dalsi;}

new_prvek->slovo = kopie;
new_prvek->pocet = 1;
zacatek->celkem_slov = zacatek->celkem_slov + 1;
parametr = (void*)parametr;
return parametr;
}
}



int main(int argc, char *argv[])
{
void *p;

p = Pocitej_Slova("nazdar", NULL);
p = Pocitej_Slova("ahoj", p);
p = Pocitej_Slova("cau", p);
p = Pocitej_Slova("nazdar", p);
p = Pocitej_Slova("nazdar", p);
p = Pocitej_Slova(NULL, p);
system("PAUSE");
return 0;
}

a pise to,jinak to delam v dev c.


In function `Pocitej_Slova':
113 syntax error at end of input

jinak ta chyba se tyka te posledni }
takze asi bude nekde chyba v uzavorkovani ne.

Nahlásit jako SPAM
IP: ...–
choice_
~ Anonymní uživatel
7 příspěvků
4. 6. 2007   #10
-
0
-

Nevite v cem je problem,nebo jak by mi to melo spravne vypadat.

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
4. 6. 2007   #11
-
0
-



#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void *Pocitej_Slova(char *slovo, void *parametr)
{
typedef struct struktura_s struktura_t;
struct struktura_s
{
int pocet;
char *slovo;
struktura_t *dalsi;
int celkem_slov;
};



if(!parametr) {
int i=0;
char *kopie = malloc(sizeof(char)*(strlen(slovo)+1));
struktura_t *nova = malloc(sizeof(struktura_t));

while(slovo[i]){kopie[i]=slovo[i]; i++;}
kopie[i]=0x0;

nova->pocet = 1;
nova->slovo = kopie;
nova->celkem_slov = 1;
nova->dalsi = NULL;
return nova;
}

else if(!slovo) {
int slov, i = 0;
struktura_t *prvek = (struktura_t*) parametr;
void **pole = (void**) malloc(2*sizeof(void*));

slov = (prvek->celkem_slov) ;

pole[0] = (char*) malloc(slov*sizeof(char*));
pole[1] = (int*) malloc(slov*sizeof(int*));

((char **)(pole[0]))[slov] = NULL;
((int *)(pole[1]))[slov] = 0;

while(slov>i) {
((char **)(pole[0]))[i] = prvek->slovo;
((int *)(pole[1]))[i] = prvek->pocet;
prvek = prvek->dalsi;
i++;}
return pole;
}


else{
int i, stav;
struktura_t *prvek, *pomocny_prvek, *new_prvek, *zacatek;
char *kopie = malloc(sizeof(char)*(strlen(slovo)+1));
new_prvek = malloc(sizeof(struktura_t));
zacatek = malloc(sizeof(struktura_t));
prvek = (struktura_t*) parametr;
zacatek = (struktura_t*) parametr;
for(i=0; slovo[i]!=0x0;i++) kopie[i]=slovo[i]; kopie[i]=0x0;

while(1)
{stav = strcmp(kopie, prvek->slovo);

if(!stav) {prvek->pocet = prvek->pocet + 1; return parametr;}

else if(stav < 0) {
new_prvek->dalsi = prvek;
new_prvek->celkem_slov = zacatek->celkem_slov +1;
parametr = new_prvek;
break;}

else if(stav > 0) {
if(!prvek->dalsi) {
prvek->dalsi = new_prvek;
new_prvek->dalsi = NULL;
break;}

else if((strcmp(kopie, (prvek->dalsi)->slovo)>0)||(strcmp(kopie, (prvek->dalsi)->slovo)==0))
{prvek = prvek->dalsi; continue;}

else {pomocny_prvek = prvek->dalsi;
prvek->dalsi = new_prvek;
new_prvek->dalsi = pomocny_prvek;
break;}}

prvek = prvek->dalsi;}

new_prvek->slovo = kopie;
new_prvek->pocet = 1;
zacatek->celkem_slov = zacatek->celkem_slov + 1;
parametr = (void*)parametr;
return parametr;
}
}



int main(int argc, char *argv[])
{
void *p;

p = Pocitej_Slova("nazdar", NULL);
p = Pocitej_Slova("ahoj", p);
p = Pocitej_Slova("cau", p);
p = Pocitej_Slova("nazdar", p);
p = Pocitej_Slova("nazdar", p);
p = Pocitej_Slova(NULL, p);
system("PAUSE");
return 0;
}

Nahlásit jako SPAM
IP: ...–
choice_
~ Anonymní uživatel
7 příspěvků
4. 6. 2007   #12
-
0
-

To jura:diky moc,snad to tak bude ucitelovi stacit

Nahlásit jako SPAM
IP: ...–
Jura
~ Anonymní uživatel
637 příspěvků
4. 6. 2007   #13
-
0
-

To choice_:
To nevím, já pouze odstranil jednu složenou závorku a zkompiloval. Správnost algoritmu jsem nezkoušel...

Nahlásit jako SPAM
IP: ...–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

Chyba v programu — založil vasek.t

Chyba v programu — založil

Chyba programu — založil bbeni

Chyba programu - switch — založil nevim

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý