Máme za ukol,udělat tenhle ukol,ale jsem z toho jaksi zmatená a nevím co stím nepomol by mi stím někdo,budu moc ráda,děkuju
to zadání je takové:
Pocitani slov
Zadání
Napište funkci v jazyce C zjišťující počet výskytů slov. Funkce bude volána opakovaně, pro každé slovo jednou.
Odevzdávejte soubor obsahující výhradně definici jediné funkce pojmenované a deklarované dle zadání. Soubor nesmí obsahovat direktivu #include. Veškeré potřebné datové typy apod. deklarujte lokálně.
Deklarace funkce
void *Pocitej_Slova(char *, void *);
Je-li hodnota prvního argumentu NULL, označuje konec zpracovávání. V opačném případě je zde uloženo další slovo ke zpracování.
Hodnota druhého argumentu je při prvním volání funkce NULL, při kazdém následujícím volání je vždy rovna návratové hodnotě funkce z předchozího volání (nápověda: tento argument je určen pro předávání interního stavu funkce mezi jednotlivými voláními).
Návratová hodnota při posledním volání funkce je ukazatel na dvourozměrné pole takové, že v prvním řádku jsou jednotlivá slova podle abecedy a ve druhém řádku jejich četnosti. Poslední hodnotou v prvním řádku musí být NULL a ve druhém 0.
[podtrzene]Příklad:[/podtrzene]
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(NULL,p);
printf("\"%s\" %d\n",((char **)(p[0]))[2],((int *)(p[1]))[2]);
/*
Vypise:
"nazdar" 2
*/
[podtrzene]Povolené knihovny:[/podtrzene]
stdlib.h
string.h
Fórum › C / C++
Prosím poradte mi budu vděčná
Wow :-O Jak mam sakra pripojit knihovny, kdyz nesmim pouzit #include ???
to Zelenáč> já to pochopil tak, že ty si tam to include dáš aji main a tak, ale odevzdávat se bude jenoim ta f-ce bez main a #include. Proč to tka komplikujou ale fakt netuším..
To Al:ano je to tak,normalně se v dev c nebo v jiném,programuje i s main a #include ale pak se ten ukol odezvdavá přes automat a tam se posilá jen samostatná funkce,neporadil by me s ti tedy nekdo,je to moc slozity sama tomu moc nerozumím,jinka studuju na UP obro informatika,tohle je jediný předmět v kterým tak lítám
http://forum.builder.cz -> C/C++
Odpoví bleskurychle na vše :)
sorrac rad by som pomohol ale toto zadanie ma jeden zadrhel koli ktoremu to niesom schopny napisat. Problemom je ten printf. Neviem ako inde, ale ja z gcc kompilatorom nemam sancu skompilovat tak hardcore pretypovanie void ukazatela. Nedivim ze si s tym nevies rady. Toto zadanie je dost humus. Dalsia vec je to ze su povolene len stdlib.h a string.h pritom printf je definovany v stdio.h cili dalsi zadrhel v zadani. Nechcem byt blby ale je to dost haluzne zadanie a neviem ci sa podary ho spravit tak aby profesor bol spokojny..
Btw mozno niekto pride na nejake salamunske riesenie ale priznam sa ze bez zmeny toho pritfu sa to asi neda skompilovat vid following test:
sn3d@sn3d-laptop:~/devel/_experiments/uloha$ cat main.c
#include <stdlib.h>
#include <string.h>
int main()
{
void *p;
printf("\"%s\" %d\n",((char **)(p[0]))[2],((int *)(p[1]))[2]);
}
sn3d@sn3d-laptop:~/devel/_experiments/uloha$ gcc main.c
main.c: In function ‘main’:
main.c:7: warning: incompatible implicit declaration of built-in function ‘printf’
main.c:7: warning: dereferencing ‘void *’ pointer
main.c:7: error: void value not ignored as it ought to be
main.c:7: warning: dereferencing ‘void *’ pointer
main.c:7: error: void value not ignored as it ought to be
A test zo zmienovanym stdio.h
sn3d@sn3d-laptop:~/devel/_experiments/uloha$ cat main.c
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
int main()
{
void *p;
printf("\"%s\" %d\n",((char **)(p[0]))[2],((int *)(p[1]))[2]);
}
sn3d@sn3d-laptop:~/devel/_experiments/uloha$ gcc main.c
main.c: In function ‘main’:
main.c:8: warning: dereferencing ‘void *’ pointer
main.c:8: error: void value not ignored as it ought to be
main.c:8: warning: dereferencing ‘void *’ pointer
main.c:8: error: void value not ignored as it ought to be
Mno, mam jeden napad. Kdyz uz si muzes definovat vlastni datovy typ uvnitr fce, tak bych si tam definoval napr. nejakou strukturu, ktera by mela polozky char* a int*(pozor musi to byt pointery) a potom samozrejme nejake pole techto struktur(jednorozmerne) - to se da jednoduse realokovat. Mno pridavani by se realizovalo normalne (nova struktura, alokace jednotlivych polozek, inicializace). A nakonec, kdyz bude druhy parametr roven NULL, pretransformovat to pole struktur na dvourozemrne(jendorozmerne??) pole na void.
Mno, nemam tu kompilator ani moc casu, ale mohlo by to vypadat asi nejak takto:
void *Pocitej_Slova(char * str, void * p)
{
typedef struct{
char * str;
int * count;
}Item;
static Item *items = NULL; // musi byt static
static int count = 0;
if(p == NULL){ // vytvoreni pole
items = (Item*)malloc(sizeof(Item));
items[0].str = strdup(str);
items[0].count = (int*)malloc(sizeof(int));
*(items[0].count) = 1;
}
// pridavani a realokoce
// transoframce
if(str == NULL)
{ // a ted je otazkopu jestli dvourozmerne pole(void**array) nebo jednorozmerne(void*p)
// a naplnit ho
void* *p = (void*)malloc(sizeof(void*)*(count+2)); // pro NULL a 0
int i;
for (i=0;i < count; ++i)
p[i] = (void*)items[i].str;
p[i] = NULL;
for(i=0; i < count; ++i)
p[count+i] =(void*) items[i].count;
p[count+i] = 0;
free((void*)items);
return p;
}
}
Ale jak rikam, je to jen myslenka, moznato nebude fungovat ale...
To janysek_: zkus napsat, jakou chybu hlásí
Byl-li zadavatel toho úkolu při smyslech a je-li současně z této planety, pak dle mého názoru cílem nemůže být nic jiného než test na podvádění winking smiley, protože je prakticky nepravděpodobné, že by úplný začátečník něco takového úspěšně vyřešil.
Takže se dá říct, že ten kdo to odevzdá úspěšně vyřešené:
1) uměl programovat v jazyce C už dávno před tím než nastoupil na onu školu,
2) nebo je génius a zvládl vstřebat k tomu potřebné znalosti v takto krátké době,
3) a nebo což bude asi nejpravděpodobnější podváděl a někdo to vypracoval za něj.
Z tohoto pohledu je zřejmé, že většina v tomto směru u zkoušejícího nemůže projít. Pominuli ty, kteří to nevypracují či vypracují nesprávně a jsou tím pádem jasní, tak ti co to odevzdají vypracované správně a jak jsem již zmínil neumí už dávno programovat v C či nejsou géniové tak neprojdou taky, protože zkoušející velmi lehce pozná, že nemají potřebné znalosti.
To Ota: přijde mi to pravděpodobné .... C neumím, ale taky mi zdá, že je to pro začátečníky příliš složitá úloha
To DeaLer,Ota:
No jo máte pravdu,ten učitel je blázen,v prvním semestru nám dal taky takovou jednu ulohu,s kterou si nikdo nevěděl rady,sem to dala jednymu známýmu který programuje 20 let a ten mi říkal že ten učitel musí být magor že nám dává ukoly, takový že je to pro člověka který dělá v C uz 2-3 roky a ne pul rok.No a ted nám dal další takovou ulohu:-(
ota:
kdepak sme vykopirovali cizy odpoved? nebyl to builder ? vite ze kopirovani jinych citaci bez udani autora je poruseni zakona ?
Zajímavé zadání... bud sem uplne blbej nebo nevim ale vubec sem z toho nepochopil co ma vlastne vsledny program delat...
V zadani totiz chybi zakladni informace, jako napriklad, jak bude vypadat vstup programu. Ta fce musi nad nejakyma datama pracovat a to jak ty data budou vypadat je docela klicove. Musis totiz vedet jestli ta fce ma cist nejaky textovy soubor nebo jestli si muzes jen tak deklarovat nejaky retezec. Kolik slov bude priblizne na vstupu? V zadani je ze v tom poli budou hledana slova s vykyty setrideny podle abecedy mas resit setrizovani podle abecedy, nebo ty hledane vyrazy uz podle abecedy budou. Jaky bude pocet hledanych vyrazu?
A nakonec? Budu resit hledani slov i ukladani do pole podle abecedy? Proc bych mel pouzit jedinou funkci ?
Nam vzdycky ucitele rikali kdyz byl nejaky projekt skus mi to odevzdat nabastlene vsecko v jedne funkci a bude zle...
Este by me zajimalo na jakou delas skolu a co to je za predmet pokud to neni tajne :-)
Este dotaz jakym zpusobem mas ty slova hledat?? Mas pouzit normalni buralni silu (porovnat slovo se zacatkem retezce posunout o jedno do prava atd. atd.) nebo mas pouzit nejaky apecialni algoritmus na vyhledavani slov v textu?
Pokud todle vsecko nebylo zadano ani nejsou kladeny zadne dalsi pozadavky dalo by se predpokladat ze ty slova nemusi byt ani ulozeny jako text (muzu uvazovat ze mi je nejaka chytra fce nacetla do pole)
char retezec_slov = {"Ahoj", "Ahoj", "Hello", "Nazdar", "Ahoj", "Cau", "Hello"};
Dale muzu predpokladat ze slova ktere budu hledat mi prijdou uz podle abecedy a nemusim se piplat s trizenim.
Hledat budu Ahoj, Cau, Hello, Nazdar v tomdle poradi
Takle se to smi ? Podle toho zadani bych rekl ze jo :-)
To Solo:no víš on nám k tomu nic neřekne jen nám dá zadání a tot vše,víc nám k tomu neřekne,jen že to máme do konce semestru udělat víš,Posílame mu to přes takový jeho automat,podel toho poznáme kde máme chybu a tak,když to máš špatně tak ti to vypíše protokol s chybami,jinak studuji na UP a je to přdmět softwarová laboratoř
No me neovlivnilo pohlavi tazatele, ja docela topiky "udelejte mi projekt" sleduju, ciste ze zvedavosti abych vedel kde se co dela za projekty jelikoz taky porad nejake delam.
Tady sem se dival uz driv a docela me tohle zadani zaujako hlavne, proto ze sem ho poradne nepochopil a taky proto ze to je nejstupidnejsi zadani co sem v zivote videl. Je to spatne zadano, chybi spousta dulezitych informaci zato je tam spousta hloupych pozadavku. Nevim jak pokroilci jsou studenti toho predmetu ale to zadani se nelibi ani mi a to uz sem v cecku neco napsal. Lidi co nemaj skusenosti s ukazatelama to znechuti a pravdepodobne se v tom nevyznaji ani kdyz to napisou a bude jim to fungovat. A pritom by to slo urcite udelat jednoduse. Tak me zajimalo jestli to nekdo vyresil :-)
do kdy je vubec termin odevzdani?
forum.ubuntu.cz
To Jura z 10.4:Koukala jsem na ten program,neco jsem zkousela,jen mi nejak nejde pochopit jak to ma tam s tim pretypovanim na konci...porad mi haze ze mu vadi ten void**.Mozna kdyby si mi pomohl to rozvest a trochu pochopit ten tvuj zdrojak,tak bychom neco vymysleli.Taky by me zajimalo spravne reseni,ktere ten jejich auto check vezme..
To klara:
Koukni na http://builder.cz z poslednich prispevku ve vlakne Program v C vyplyva, ze vam ucitel zadal patrne spatne zadani, takze jsem tu vsichni resili neresitelne. Jinak je tam dokonce hotove reseni, tak si to nejak prelouskej do vlastni podoby.
To Jura:Ja jsem zjistila,ze to musi byt napsany se strukturou,to je ten nejvetsi problem,uz mam dokonce neco nastinenyho co by mozna mohlo jit,ale nejak to nemuzu vychytat s tou strukturou a dinamickym polem void ** a int**..na buildru jsou reseni,ale jedno jde jen s prepsanim vystupu programu...
Nevim ale je to fakt divny.napada mne jen ulozit vzdycky retezec char(mezera nejake slovo-budouci char mezera) a pokud to plati tak ulozit potom vsechno porovnat ulozit promnene vypsat jenze to je uplne silene reseni ale mne nic jineho nenapada.............(ostatne mozna vsechno co sem ted napsal je kravina tak to radsi nepouzivej na konci kvetna jako argument proti ucitelove nedostatecne...)
sn3d: Já ti dám hardcore přetypování, když má funkce návratovou honotu tak musí něco vracer. :D (keyword return)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Poradte mi prosím... — založil Majox
Prosím poraďte — založil 14 letý kid
Prosím poraďte... — založil V. S.
PHP Prosím poradte mi... — založil Majox
Maturita- poraďte prosím — založil Dalibor
Moderátoři diskuze