From 18abc7ce91e85785c20a1b4c2b933694dbd8bf29 Mon Sep 17 00:00:00 2001 From: tht_krisztian <tht_krisztian@sch.bme.hu> Date: Sun, 8 Dec 2013 22:40:11 +0100 Subject: [PATCH] =?UTF-8?q?Dokument=C3=A1ci=C3=B3=20el=C5=91tt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- receptor/beolvasofv.c | 153 ++++++++++++------------- receptor/kereses.c | 233 ++++++++++++++++++++------------------ receptor/main.c | 33 +++--- receptor/mertekegysegek.c | 34 +++++- receptor/receptor.h | 13 +-- 5 files changed, 242 insertions(+), 224 deletions(-) diff --git a/receptor/beolvasofv.c b/receptor/beolvasofv.c index df271be..d3453d4 100644 --- a/receptor/beolvasofv.c +++ b/receptor/beolvasofv.c @@ -9,7 +9,11 @@ #include <ctype.h> #endif #define TESZT - + +/**Egy Hozzavalo elemekből álló láncolt lista elejére beszúr egy elemet. +* @param uj Beszúrandó elem. +* @param lista Láncolt lista strázsája. +*/ void Lista_hoz_beszur(Hozzavalo *uj,Lista_hoz *lista) { uj->kovetkezo=lista->eleje->kovetkezo; @@ -19,6 +23,10 @@ void Lista_hoz_beszur(Hozzavalo *uj,Lista_hoz *lista) } +/**Egy Recept elemekből álló láncolt lista elejére beszúr egy elemet. +* @param uj Beszúrandó elem. +* @param lista Láncolt lista strázsája. +*/ void Lista_rec_beszur(Recept *uj,Lista_rec *lista) { uj->kovetkezo=lista->eleje->kovetkezo; @@ -27,7 +35,10 @@ void Lista_rec_beszur(Recept *uj,Lista_rec *lista) uj->elozo=lista->eleje; } - +/**Hozzavalo láncolt lista inicializálása szolgáló függvény. +* Dinamikus memóriát foglal, amit a hívó feladata felszabadítani! +* @param lista Inicializálandó láncolt lista strázsája. +*/ void Lista_hoz_init(Lista_hoz *lista) { lista->eleje=(Hozzavalo*)malloc(sizeof(Hozzavalo)); @@ -38,6 +49,10 @@ void Lista_hoz_init(Lista_hoz *lista) lista->vege->elozo=lista->eleje; } +/**Recept láncolt lista inicializálása szolgáló függvény. +* Dinamikus memóriát foglal, amit a hívó feladata felszabadítani! +* @param lista Inicializálandó láncolt lista strázsája. +*/ void Lista_rec_init(Lista_rec *lista) { lista->eleje=(Recept *) malloc(sizeof(Recept)); @@ -62,9 +77,6 @@ void Lista_rec_init(Lista_rec *lista) */ void Main_receptek(Lista_rec *lista) { -#ifdef TESZT3 -fprintf(stdout,"Main receptek függvény: \n"); -#endif char temp[100]=""; char fajlnev[50]; @@ -79,9 +91,6 @@ fprintf(stdout,"Main receptek függvény: \n"); int db_rec,i,k; fgets(temp,5,fp_00); db_rec=atoi(temp); - #ifdef TESZT2 - fprintf(stdout,"Receptek száma: %d\n",db_rec); - #endif for(i=0;i<db_rec;i++) { fgets(temp,50,fp_00); @@ -102,9 +111,6 @@ fprintf(stdout,"Main receptek függvény: \n"); } fclose(fp); fclose(fp_00); - #ifdef TESZT3 - fprintf(stdout,"----Main Receptek Vége\n"); - #endif } /** Paraméterként átvett fájlból beolvassa a recept nevét,nehézségét,elk.idejét. *! Dinamikus memóriát foglal, amit a hívó feladata felszabadítani. @@ -121,10 +127,8 @@ fprintf(stdout,"Main receptek függvény: \n"); */ Recept* Beolvas_recept(FILE *fp,char * fajlnev) { - #ifdef TESZT3 - fprintf(stdout,"Beolvas_recept függvény: \n"); - #endif - + beolvasas allapot; + Lista_hoz *lista_hozza; Recept* uj_rec=(Recept*)malloc(sizeof(Recept)); if(uj_rec!=NULL) { @@ -145,22 +149,15 @@ Recept* Beolvas_recept(FILE *fp,char * fajlnev) sscanf(temp,"%d ",&temp_int); uj_rec->fozesi_ido=temp_int; - #ifdef TESZT2 - fprintf(stdout,"Recept: %s\n",uj_rec->fajlnev); - #endif - beolvasas allapot; allapot=elso_szakasz; - Lista_hoz *lista_hozza=(Lista_hoz*)malloc(sizeof(Lista_hoz)); + lista_hozza=(Lista_hoz*)malloc(sizeof(Lista_hoz)); if(lista_hozza!=NULL) { Lista_hoz_init(lista_hozza); Hozzavalo *temp_hozza; - #ifdef TESZT3 - fprintf(stdout,"Hozzávalók beolvasása: \n"); - #endif while(fgets(temp,100,fp) && strstr(temp,"Elkeszites:")==NULL) { switch(allapot) @@ -185,9 +182,6 @@ Recept* Beolvas_recept(FILE *fp,char * fajlnev) uj_rec->hozzavalok=lista_hozza; } } - #ifdef TESZT3 - fprintf(stdout,"----Beolvas_recept Vége"); - #endif return uj_rec; } @@ -202,9 +196,6 @@ Recept* Beolvas_recept(FILE *fp,char * fajlnev) Hozzavalo* Beolvas_hozzavalo(char *str) { int i; - #ifdef TESZT3 - fprintf(stdout,"Beolvas_hozzavalo függvény: \n"); - #endif Hozzavalo* uj_hozz=(Hozzavalo*)malloc(sizeof(Hozzavalo)); if(uj_hozz!=NULL) { @@ -231,14 +222,21 @@ Hozzavalo* Beolvas_hozzavalo(char *str) ujnev[strlen(ujnev)-1]='\0'; strcpy(uj_hozz->nev,ujnev); - #ifdef TESZT3 - fprintf(stdout,"%s",ujnev); - fprintf(stdout,"----Beolvas_hozzavalo Vége\n"); - #endif } return uj_hozz; -} - +} + +/**A rendelkezésre álló alapanyagokat beolvassa fájlból. +Dinamikus memóriát foglal, amit a hívó feladata felszabdítani! +* @param fajlnev A szöveges dokumentum neve, ami tartalmazza a hozzávalókat. +* @param strazsa A feltöltendő hozzávalók láncolt listája. +* @param fp Fájlra mutató pointer. +* @param temp Ideiglenes puffer. +* @param ujnev Ideiglenes puffer. +* @param ujmertek Ideiglenes puffer. +* @param ujmenny Ideiglenes puffer. +* @param uj Ideiglenes puffer, az új Hozzavalo elemnek. +*/ void otthoni_hozzavalok_fajlbol(char * fajlnev,Lista_hoz *strazsa) { FILE *fp; @@ -261,14 +259,19 @@ void otthoni_hozzavalok_fajlbol(char * fajlnev,Lista_hoz *strazsa) ujnev[strlen(ujnev)]='\0'; strcpy(uj->nev,ujnev); Lista_hoz_beszur(uj,strazsa); - #ifdef TESZT - printf("%.0f %s %s\n",uj->mertekegyseg.mennyiseg,Mertekegyseg_szovegben(uj->mertekegyseg.egyseg),uj->nev); - #endif } fclose(fp); } } - + +/**A rendelkezésre álló alapanyagokat beolvassa szabvány bemenetről +* Dinamikus memóriát foglal, amit a hívó feladata felszabadítani! +* @param strazsa A feltöltendő hozzávalók láncolt listája.* @param temp Ideiglenes puffer. +* @param ujnev Ideiglenes puffer. +* @param ujmertek Ideiglenes puffer. +* @param ujmenny Ideiglenes puffer. +* @param uj Ideiglenes puffer, az új Hozzavalo elemnek. +*/ void megad_hozzavalok(Lista_hoz *strazsa) { char temp[150+1]=""; @@ -291,20 +294,18 @@ void megad_hozzavalok(Lista_hoz *strazsa) ujnev[strlen(ujnev)]='\0'; strcpy(uj->nev,ujnev); Lista_hoz_beszur(uj,strazsa); - #ifdef TESZT - printf("%.0f %s\n",uj->mertekegyseg.mennyiseg,Mertekegyseg_szovegben(uj->mertekegyseg.egyseg)); - #endif printf("Kerem adja meg a rendelkezesre allo hozzavalokat:(alapanyag_neve:mennyiseg:mertekegyseg)\n"); fgets(temp,150,stdin); } } - +/**Egy Hozzavalok-ból álló láncolt listát kiir. A cél lehet egy fájl vagy a szabvány kimenet. +* @param hozzavalok Láncolt lista strázsája Hozzavalo elemekből. +* @param out Fájlra mutató pointer +* @param i Iteráló pointer. +*/ void kiir_hozzavalok(Lista_hoz *hozzavalok, FILE *out) { Hozzavalo *i; - Mertek kilogramm,deciliter; - kilogramm.egyseg=kg; - deciliter.egyseg=dl; i=hozzavalok->vege->elozo; fprintf(out,"Hozzavalók: \n"); while(i!=hozzavalok->eleje) @@ -320,11 +321,15 @@ void kiir_hozzavalok(Lista_hoz *hozzavalok, FILE *out) i=i->elozo; } } - -void kiir_recept(Recept *recept) +/**Egy recept kiirására alkalmas függvény. +* @param recept A fájlba irandó recept. +* @param fajlnev A fájl neve. +* @param out Fájlra muatató pointer. +*/ +void kiir_recept(Recept *recept,char *fajlnev) { FILE *out; - out=fopen("eredmeny.txt","wt"); + out=fopen(fajlnev,"wt"); fprintf(out,"%s\n",recept->nev); fprintf(out,"Nehezsegi szint: %2d/10\n",recept->nehezseg); fprintf(out,"Varhato idotartam: %d perc\n\n",recept->fozesi_ido); @@ -333,6 +338,13 @@ void kiir_recept(Recept *recept) fclose(out); } +/**Mivel az elkészítés menete nem fontos információ a program szempontjából, ez beolvas és kiirja egy adott nevü fájlból az elkészítést egy másikba. +* @param fajlnev A mentés helyéül szolgáló szöveges dokumentum neve. +* @param out Fájlra mutató pointer +* @param fp Fájlra mutató pointer +* @param i Iterátor. +* @param temp ideiglenes puffer a szöveges dokumentum sorainak. +*/ void beolvas_kiir_elkeszites(char *fajlnev, FILE *out) { FILE *fp; @@ -352,13 +364,14 @@ void beolvas_kiir_elkeszites(char *fajlnev, FILE *out) fprintf(out,"\nJo etvagyat!"); } -/*A hozzávalóknak foglalt dinamikus memória területet felszabadítja*/ - +/**Dinamikusan foglalt memória felszabadító függvény. Az összes receptben felszabadítja a Hozzavalók láncolt listájának elemeit. +* @param strazsa A Receptek láncolt listájának első eleme. +* @param mozgo_rec Iterátor az egyes Recepteken. +* @param mozgo_hoz Iterátor az egyes Hozzávalókon. +* @param kov Ideiglenes tároló a következő elem címének tárolására. +*/ void szabadit_hozzavalok(Recept *strazsa) { - #ifdef TESZT - fprintf(stdout,"Szabadit_hozzavalok: \n"); - #endif int db=0; Recept *mozgo_rec; Hozzavalo *mozgo_hoz,*kov; @@ -374,31 +387,17 @@ void szabadit_hozzavalok(Recept *strazsa) free(mozgo_rec->hozzavalok->eleje); free(mozgo_rec->hozzavalok->vege); } - #ifdef TESZT - fprintf(stdout,"Felszabaditott hozzavalok: %d\n",db); - fprintf(stdout,"----Szabadit_hozzavalok Vege\n"); - #endif } -//Az elkészítés módját tároló char mátrixnak foglalt területet felszabadítja -void szabadit_elkeszites(char** pt,int db) -{ - int i; - for(i=0;i<db;i++) - { - free(pt[i]); - } - free(pt); -} - -//A recept struktúráknak dinamikusan foglalt memóriát felszabadítja +/**Dinamikusan foglalt memória felszabadító függvény. Az összes receptet felszabadítja. +* @param eleje Receptek láncolt lista első eleme. +* @param akt Ideiglenes puffer. +* @param kov Ideiglenes puffer. +*/ void szabadit_receptek(Recept *eleje) { - #ifdef TESZT - fprintf(stdout,"Szabadit_receptek: \n"); - #endif - int db=0; Recept *akt,*kov; + int db; for(akt=eleje->kovetkezo;akt->kovetkezo!=NULL;) { kov=akt->kovetkezo; @@ -407,9 +406,5 @@ void szabadit_receptek(Recept *eleje) akt=kov; } free(eleje); - #ifdef TESZT - fprintf(stdout,"Felszabaditott receptek: %d\n",db); - fprintf(stdout,"----Szabadit_hozzavalok Vege\n"); - #endif } -#endif // BEOLVASO_FV +#endif diff --git a/receptor/kereses.c b/receptor/kereses.c index 88fe993..0d3459a 100644 --- a/receptor/kereses.c +++ b/receptor/kereses.c @@ -8,6 +8,12 @@ #endif #define TESZT +/**Megadja egy Hozzavalok láncolt lista elemszámát. +* @param alapanyagok Hozzavalok láncolt listájának strázsája. +* @param mozgo Iterátor a Hozzavalokon +* @param db Összegző változó. +* @return Visszatér a láncolt lista elemszámával, a strázsákat nem számolva. +*/ int alapanyagok_szama(Lista_hoz *alapanyagok) { Hozzavalo *mozgo; @@ -16,6 +22,12 @@ int alapanyagok_szama(Lista_hoz *alapanyagok) return db; } +/**Megadja egy Receptek láncolt lista elemszámát. +* @param receptek Receptek láncolt listájának strázsája. +* @param mozgo Iterátor a Hozzavalokon +* @param db Összegző változó. +* @return Visszatér a láncolt lista elemszámával, a strázsákat nem számolva. +*/ int Receptek_szama(Lista_rec *receptek) { Recept *mozgo; @@ -23,7 +35,11 @@ int Receptek_szama(Lista_rec *receptek) for(mozgo=receptek->eleje->kovetkezo;mozgo!=receptek->vege;mozgo=mozgo->kovetkezo) db++; return db; } - +/**Kiírja a képernyőre az adatbázisban szereplő receptek listáját. +* @param receptek Receptek láncolt listájának strázsája. +* @param db Megszámozza a recepteket, úgy írva a képernyőre. +* @param mozgo Iterátor a recepteken. +*/ void Receptek_listaz(Lista_rec *receptek) { Recept *mozgo; @@ -35,7 +51,21 @@ void Receptek_listaz(Lista_rec *receptek) printf("%d. %s\n",db,mozgo->nev); } } - +/**Ez a függvény végzi az adatbázisban szereplő receptek rangsorolását, a megadott alapanyagokkal összevetve. +Dinamikusan foglal memóriát, aminek felszabadítása a hívó feladata. +* @param receptek A Receptek adatbázis láncolt listájának strázsája. +* @param alapanyagok Az előre megadott alapanyagok, keresési szempontok. +* @param meret Paraméter listán visszaadott mérete a függvény által létrehozott tömbnek. +* @param i_rec A tömb feltöltésére használt iterátor. +* @param kapcsolat A recept egy hozzávalójának és a megadott alapanyagok közti kapcsolat. +* @param temp ideiglenes puffer, az egyes alapanyagok kapcsolatának összegzésére. +* @param halo Egy recept összes Hozzávalójának kapcsolata a megadott alapanyagokkal. +* @param mozgo Iterátor a recepteken. +* @param mozgo_inrec Iterátor a receptekben levő hozzávalókon. +* @param mozgo_inalap Iterátor az alapanyagokban levő hozzávalókon. +* @param tomb KeresesiLista típusú elemek tömbje. +* @return A létrehozott tomb első elemére mutató pointerrel, NULL, ha az adatbázisban nincs recept. +*/ KeresesiLista *Keresesi_lista_letrehoz(Lista_rec *receptek, Lista_hoz *alapanyagok,int *meret) { int i_rec; @@ -43,68 +73,86 @@ KeresesiLista *Keresesi_lista_letrehoz(Lista_rec *receptek, Lista_hoz *alapanyag Recept *mozgo; Hozzavalo *mozgo_inrec; Hozzavalo *mozgo_inalap; - KeresesiLista *tomb; + KeresesiLista *tomb=NULL; *meret=Receptek_szama(receptek); - tomb=(KeresesiLista*)malloc((*meret)*sizeof(KeresesiLista)); - i_rec=0; - //végigmegy a recepteken - for(mozgo=receptek->eleje->kovetkezo;mozgo!=receptek->vege;mozgo=mozgo->kovetkezo) + if(*meret!=0) { - halo=0; - //túlindexelés ellen - if(i_rec<meret) + tomb=(KeresesiLista*)malloc((*meret)*sizeof(KeresesiLista)); + i_rec=0; + //végigmegy a recepteken + for(mozgo=receptek->eleje->kovetkezo;mozgo!=receptek->vege;mozgo=mozgo->kovetkezo) { - tomb[i_rec].rec=mozgo; - //végigmegy a hozzávalókon a receptben - for(mozgo_inrec=mozgo->hozzavalok->eleje->kovetkezo;mozgo_inrec!=mozgo->hozzavalok->vege;mozgo_inrec=mozgo_inrec->kovetkezo) + halo=0; + //túlindexelés ellen + if(i_rec<meret) { - kapcsolat=0; - //végigmegy a megadott hozzávalókon - for(mozgo_inalap=alapanyagok->eleje->kovetkezo;mozgo_inalap->kovetkezo!=NULL;mozgo_inalap=mozgo_inalap->kovetkezo) + tomb[i_rec].rec=mozgo; + //végigmegy a hozzávalókon a receptben + for(mozgo_inrec=mozgo->hozzavalok->eleje->kovetkezo;mozgo_inrec!=mozgo->hozzavalok->vege;mozgo_inrec=mozgo_inrec->kovetkezo) { - temp=0; - if(strstr(mozgo_inrec->nev,mozgo_inalap->nev)) + kapcsolat=0; + //végigmegy a megadott hozzávalókon + for(mozgo_inalap=alapanyagok->eleje->kovetkezo;mozgo_inalap->kovetkezo!=NULL;mozgo_inalap=mozgo_inalap->kovetkezo) { - if((mozgo_inalap->mertekegyseg_SI.egyseg)==(mozgo_inrec->mertekegyseg_SI.egyseg)) + temp=0; + if(strstr(mozgo_inrec->nev,mozgo_inalap->nev)) { - temp+=15; - temp+=(double)(mozgo_inalap->mertekegyseg_SI.mennyiseg)/(mozgo_inrec->mertekegyseg_SI.mennyiseg)*2.5; + if((mozgo_inalap->mertekegyseg_SI.egyseg)==(mozgo_inrec->mertekegyseg_SI.egyseg)) + { + temp+=15; + temp+=(double)(mozgo_inalap->mertekegyseg_SI.mennyiseg)/(mozgo_inrec->mertekegyseg_SI.mennyiseg)*2.5; + } + temp+=((double)strlen(mozgo_inrec->nev)/strlen(mozgo_inalap->nev))*15; } - temp+=((double)strlen(mozgo_inrec->nev)/strlen(mozgo_inalap->nev))*15; + else temp+=2; + kapcsolat+=temp; } - else temp+=2; - //temp/=2; - kapcsolat+=temp; + halo+=kapcsolat/alapanyagok_szama(alapanyagok); } - halo+=kapcsolat/alapanyagok_szama(alapanyagok); + tomb[i_rec].ertek=halo/alapanyagok_szama(mozgo->hozzavalok); + i_rec++; } - tomb[i_rec].ertek=halo/alapanyagok_szama(mozgo->hozzavalok); - i_rec++; } } return tomb; } - +/**Hasonlító függvény, az alapanyagokkal vett sorrend szerint csökkenő. +* @param a Egyik elem. +* @param b Másik elem. +*/ double Keresesi_Lista_hasonlit_ertek(KeresesiLista *a,KeresesiLista *b) { return ((a->ertek)-(b->ertek)); } +/**Hasonlító függvény, nehézség szerint növekvő. +* @param a Egyik elem. +* @param b Másik elem. +*/ double Keresesi_Lista_hasonlit_nehezseg(KeresesiLista *a,KeresesiLista *b) { return((b->rec->nehezseg)-(a->rec->nehezseg)); } +/**Hasonlító függvény, főzésiidő szerint növekvő. +* @param a Egyik elem. +* @param b Másik elem. +*/ double Keresesi_Lista_hasonlit_fozesiido(KeresesiLista *a,KeresesiLista *b) { return((b->rec->fozesi_ido)-(a->rec->fozesi_ido)); } -void lista_rendez(KeresesiLista *tomb,int meret,double (*kisebb)(KeresesiLista *, KeresesiLista *)) { +/**Egy adott feltétel szerint rendező algoritmus +* @param tomb A tömb első elemére muatató pointer. +* @param meret A megadott tömb elemeinek száma. +* @param hasonlit Függyvényre mutató pointer, amely egy komparátor függvény. +*/ +void lista_rendez(KeresesiLista *tomb,int meret,double (*hasonlit)(KeresesiLista *, KeresesiLista *)) { int i,j; for(i=meret-1;i>0;i--) { for(j=0;j<i;j++) { - if(kisebb(&tomb[j+1],&tomb[j])>0) + if(hasonlit(&tomb[j+1],&tomb[j])>0) { KeresesiLista temp=tomb[j]; tomb[j]=tomb[j+1]; @@ -113,7 +161,14 @@ void lista_rendez(KeresesiLista *tomb,int meret,double (*kisebb)(KeresesiLista * } } } - +/**A Listát rendező függvény. Először csökkenő sorrendbe állítja az alapanyagok szerint. Azután, megadott nehézségi szint és főzési idő szerint sorba állítja. +*Sorbaállítási hierarchia: 1. rendelkezésre álló alapanyagok szerint 2. főzési idő 3. nehézségi szint +* @param tomb A tömb első elemére muatató pointer. +* @param meret A megadott tömb elemeinek száma. +* @param nehezseg A felhasználó által megadott maximális nehézségi fokozat. +* @param ido A felhasználó által megadott maximális főzési idő. +* @param i Iterátor, ami segít csak egyes elemeket rendezni. +*/ void Keresesi_Lista_rendez(KeresesiLista *tomb, int meret,int nehezseg,int ido) { int i; @@ -131,95 +186,47 @@ void Keresesi_Lista_rendez(KeresesiLista *tomb, int meret,int nehezseg,int ido) lista_rendez(tomb,i+1,Keresesi_Lista_hasonlit_ertek); } } - - -KeresesiFa *Faba_beszur(double feltetel,Recept *rec_ptr,KeresesiFa *gyoker) +/**Létrehoz egy bevásárlólistát, amit végül visszaad a kiválasztott recepthez, hogy milyen alapanyagokra van szükség a boltból. +* @param rec Kiválasztott receptre muatató pointer. +* @param alapanyagok Megadott alapanyagok láncolt listája. +* @param bevlista Bevásárlólista láncolt listája. +* @param temp Új elemnek, ideiglenes tároló. +* @param mozgo_inrec Receptben levő hozzávalók iterátora. +* @param mozgo_inalap Receptben levő hozzávalók iterátora. +* @return Visszatér a bevásárlólista láncolt listájával, NULL, ha a meglevő alapanyagokból elkészíthető a recept. +*/ +Lista_hoz *bevasarlolista(Recept *rec,Lista_hoz *alapanyagok) { - if(gyoker==NULL) - { - KeresesiFa *uj=(KeresesiFa*)malloc(sizeof(KeresesiFa)); - uj->kisebbegyenlo=uj->nagyobb=NULL; - uj->ertek=feltetel; - return uj; - } - if(rec_ptr!=gyoker->recept) - { - if(gyoker->ertek>=feltetel) gyoker->kisebbegyenlo=Faba_beszur(feltetel,rec_ptr,gyoker->kisebbegyenlo); - else if(gyoker->ertek<feltetel) gyoker->nagyobb=Faba_beszur(feltetel,rec_ptr,gyoker->nagyobb); - } - return gyoker; -} - + Lista_hoz *bevlista; + Lista_hoz_init(bevlista); - -KeresesiFa *Fa_epit(Lista_rec *rec_strazsa, Lista_hoz *alapanyagok, KeresesiFa **gyoker) -{ - int db,kapcsolat, temp; - Recept *mozgo; - Hozzavalo *mozgo_inrec; - Hozzavalo *mozgo_inalap; - //végigmegy a recepteken - for(mozgo=rec_strazsa->eleje->kovetkezo;mozgo=NULL;mozgo=mozgo->kovetkezo) + int eleme; + Hozzavalo *temp; + Hozzavalo *mozgo_inrec,*mozgo_inalap; + for(mozgo_inrec=rec->hozzavalok->eleje->kovetkezo;mozgo_inrec!=rec->hozzavalok->vege;mozgo_inrec=mozgo_inrec->kovetkezo) { - db=0; - kapcsolat=0; - //végigmegy egy adott receptben a hozzávalókon - for(mozgo_inrec=mozgo->hozzavalok->eleje->kovetkezo;mozgo_inrec!=mozgo->hozzavalok->vege;mozgo_inrec=mozgo_inrec->kovetkezo) + eleme=0; + for(mozgo_inalap=alapanyagok->eleje->kovetkezo;!eleme && mozgo_inalap!=alapanyagok->vege;mozgo_inalap=mozgo_inalap->kovetkezo) { - db++; - temp=0; - //végigmegy a megadott hozzávalókon - for(mozgo_inalap=alapanyagok->eleje->kovetkezo;mozgo_inalap->kovetkezo!=NULL;mozgo_inalap=mozgo_inalap->kovetkezo) + if(strstr(mozgo_inrec->nev,mozgo_inalap->nev)) { - if((mozgo_inalap->mertekegyseg.egyseg)==(mozgo_inrec->mertekegyseg.egyseg)) temp+=2; - else temp+=1; - if(strstr(mozgo_inrec->nev,mozgo_inalap->nev)) + eleme=1; + temp=(Hozzavalo*)malloc(sizeof(Hozzavalo)); + strcpy(temp->nev,mozgo_inrec->nev); + temp->mertekegyseg_SI.egyseg=mozgo_inrec->mertekegyseg_SI.egyseg; + temp->mertekegyseg_SI.mennyiseg=(mozgo_inrec->mertekegyseg_SI.mennyiseg)-(mozgo_inrec->mertekegyseg_SI.mennyiseg); + if(temp->mertekegyseg_SI.mennyiseg>0) { - temp+=((double)strlen(mozgo_inrec->nev)/strlen(mozgo_inalap->nev))*2.5; - temp+=(double)(mozgo_inalap->mertekegyseg.mennyiseg)/(mozgo_inrec->mertekegyseg.mennyiseg)*1.5; + Lista_hoz_beszur(temp,bevlista); + temp=NULL; } - else temp+=1; - kapcsolat+=temp; } } - *gyoker=Faba_beszur((double)kapcsolat/db,mozgo,*gyoker); - } -} - -KeresesiFa *Fa_legnagyobb(KeresesiFa *gyoker) -{ - if(gyoker!=NULL) - { - return Fa_legnagyobb(gyoker->nagyobb); - } -} - -void Fa_kirajzol(KeresesiFa *p) -{ - static int szint; - int i; - if(p!=NULL) - { - szint++; - Fa_kirajzol(p->nagyobb); - for(i=0;i<(szint-1)*2;i++) putchar(' '); - printf("%ds\n",p->recept->nehezseg); - Fa_kirajzol(p->kisebbegyenlo); - szint--; - } -} - -int Fa_szabadit(KeresesiFa **gyoker) -{ - static int db; - - if(*gyoker) - { - Fa_szabadit(&(*gyoker)->kisebbegyenlo); - Fa_szabadit(&(*gyoker)->nagyobb); - free(*gyoker); - db++; - *gyoker=NULL; + if(!eleme) + { + Lista_hoz_beszur(mozgo_inrec,bevlista); + } } - return db; + if(alapanyagok_szama(bevlista)!=0) return bevlista; + else return NULL; } diff --git a/receptor/main.c b/receptor/main.c index 303393c..8ccb4b7 100644 --- a/receptor/main.c +++ b/receptor/main.c @@ -11,20 +11,18 @@ int main() { - //debugmalloc_naplofajl("dmalloc.txt"); Lista_rec receptek; int i,quit=0,nehezseg,ido,lista_meret; double temp; char *str; char c; + FILE *fp; menu fomenu; fomenu=alap; - Lista_hoz alapanyagok; + Lista_hoz alapanyagok,*bevlista; KeresesiLista *lista; - //KeresesiFa *gyoker; while(!quit) - { - + { switch(fomenu) { case var: @@ -45,9 +43,6 @@ int main() case betolt_adatok: Main_receptek(&receptek); - #ifdef TESZT - fprintf(stdout,"Betoltottem\n"); - #endif printf("\n%d darab recept\n",Receptek_szama(&receptek)); Receptek_listaz(&receptek); //kiir_recept((*receptek.eleje).kovetkezo); @@ -74,20 +69,22 @@ int main() printf("\n"); lista=Keresesi_lista_letrehoz(&receptek,&alapanyagok,&lista_meret); Keresesi_Lista_rendez(lista,lista_meret,nehezseg,ido); - for(i=0;i<lista_meret;i++) + i=0; + c='1'; + while(c!='i' && c!='I' && c!='n' && c!='N') { - temp=lista[i].ertek; - str=lista[i].rec->nev; - ido=lista[i].rec->fozesi_ido; - nehezseg=lista[i].rec->nehezseg; - printf("%2.2f pont %d perc %d/10 %s\n",temp,ido,nehezseg,str); + printf("Az idealis valasztas önnek: a %s\n",lista[i].rec->nev); + printf("Megfelel? (I/N) "); + scanf("%c",&c); + if(c=='n' || c=='N') i++; } + printf("A receptet megtalálja a fajlok közt!\n"); + bevlista=bevasarlolista(lista[i].rec,&alapanyagok); + fp=fopen("bevasarlolista.txt","wt"); + kiir_hozzavalok(bevlista,fp); + fclose(fp); free(lista); lista=NULL; - /*gyoker=Fa_epit(&receptek,&alapanyagok,NULL); - printf("Kesz a fa\n"); - Fa_kirajzol(gyoker); - db=Fa_szabadit(&gyoker);*/ fomenu=var; break; diff --git a/receptor/mertekegysegek.c b/receptor/mertekegysegek.c index 8dcadf5..b61a990 100644 --- a/receptor/mertekegysegek.c +++ b/receptor/mertekegysegek.c @@ -9,7 +9,11 @@ char mertekegysegek_szovegben[][15]={"mg","g","dkg","kg","ml","cl","dl","l","db" "kiskanál","kiskanal","kk","evőkanál","evokanal","ek","merőkanál","merokanal", "mk","pár","par","fej","gerezd","szelet","sz","csomag","cs","kocka",""}; - +/**Hash tábla mely megfelelteti egy karaktertömböt egy mértékegységnek. +* @param str Adott karaktertömb. +* @param i Iterátor a mertekegysegek_szovegben a mertekegysegek tömbjén. +* return Visszatér egy számmal ami megfeleltethető egy mértékegységnek. +*/ MERTEKEGYSEGEK hash(char *str) { int i=0; @@ -23,7 +27,12 @@ MERTEKEGYSEGEK hash(char *str) if(i==27 || i==28) return csomag; return i; } - +/**Inicializál egy Mertek változót. +* @param str Mértékegysége beolvasott szövegben. +* @param menny Beolvasott mennyiség. +* @param uj uj változó, melybe feltöltjük az adatokat. +* @return Visszatér az inicializált struktúrával. +*/ Mertek Mertekegyseg_init(char *str,int menny) { Mertek uj; @@ -32,6 +41,10 @@ Mertek Mertekegyseg_init(char *str,int menny) return uj; } +/**Egy adott mértékegységet visszaadja szövegben +* @param i Egy mértékegység. +* @return Visszaad egy karaktertömböt a mértékegységgel. +*/ char* Mertekegyseg_szovegben(MERTEKEGYSEGEK i) { switch(i) @@ -48,6 +61,11 @@ char* Mertekegyseg_szovegben(MERTEKEGYSEGEK i) return mertekegysegek_szovegben[i]; } +/**Hash tábla, mely megad egy Mertek változót mennyivel kell szorozni, hogy egy egységes mértékrendszert kapjunk. Például a folyadékokat ml-ben, tömeg mértékegységeket mg-ban. +* @param alany Egységes mértékrendszerben átváltani kívánt mértékegység. +* @param uj ideiglenes tároló +* @return Visszaad egy Mertek típusú változót. +*/ Mertek hash2(Mertek alany) {//mg=0,g,dkg,kg,ml,cl,dl,l,db,teaskanal,kiskanal,evokanal,merokanal Mertek uj; @@ -67,14 +85,22 @@ Mertek hash2(Mertek alany) } return uj; } - +/**E függvény egységes mértékrendszerbe váltja a mértékegységeket. +* @param alany Átváltani kívánt mértékegység. +* @param referencia Az átváltáshoz szükséges szorzót és az új mértékegységet tároló változó. +* @return Visszatér a mostmár egységes mértékrendszerbeli mértékegységgel. +*/ Mertek Mertekegyseg_atvalto(Mertek alany,Mertek referencia) { alany.egyseg=referencia.egyseg; alany.mennyiseg*=referencia.mennyiseg; return alany; } - +/**E függvény egységes mértékrendszerből visszaváltja a mértékegységeket. +* @param alany Átváltani kívánt mértékegység. +* @param referencia Az átváltáshoz szükséges szorzót és az új mértékegységet tároló változó. +* @return Visszatér a kívánt mértékrendszerbeli mértékegységgel. +*/ Mertek Mertekegyseg_visszavalto(Mertek alany, Mertek referencia) { alany.egyseg=referencia.egyseg; diff --git a/receptor/receptor.h b/receptor/receptor.h index 798e469..ccbbec2 100644 --- a/receptor/receptor.h +++ b/receptor/receptor.h @@ -93,10 +93,9 @@ Hozzavalo* Beolvas_hozzavalo(char *str); void otthoni_hozzavalok_fajlbol(char * fajlnev,Lista_hoz *strazsa); void megad_hozzavalok(Lista_hoz *strazsa); void kiir_hozzavalok(Lista_hoz *hozzavalok, FILE *out); -void kiir_recept(Recept *recept); +void kiir_recept(Recept *recept,char *fajlnev); void beolvas_kiir_elkeszites(char * fajlnev, FILE *out); void szabadit_hozzavalok(Recept *eleje); -void szabadit_elkeszites(char** pt,int db); void szabadit_receptek(Recept *eleje); /*kereses.c*/ @@ -104,13 +103,7 @@ int Receptek_szama(Lista_rec *receptek); void Receptek_listaz(Lista_rec *receptek); KeresesiLista *Keresesi_lista_letrehoz(Lista_rec *receptek, Lista_hoz *alapanyagok,int *meret); void Keresesi_Lista_rendez(KeresesiLista *tomb, int meret,int nehezseg,int ido); - -int Receptek_szama(Lista_rec *receptek); -void Receptek_listaz(Lista_rec *receptek); -KeresesiFa *Faba_beszur(double feltetel,Recept *rec_ptr,KeresesiFa *gyoker); -KeresesiFa *Fa_epit(Lista_rec *rec_strazsa, Lista_hoz *alapanyagok, KeresesiFa **gyoker); -int Fa_szabadit(KeresesiFa **gyoker); -void Fa_kirajzol(KeresesiFa *p); +Lista_hoz *bevasarlolista(Recept *rec,Lista_hoz *alapanyagok); /*mertekegysegek.c*/ MERTEKEGYSEGEK hash(char *str); @@ -121,5 +114,5 @@ Mertek Mertekegyseg_atvalto(Mertek alany,Mertek referencia); Mertek Mertekegyseg_visszavalto(Mertek alany, Mertek referencia); -#endif //FEJLEC +#endif -- GitLab