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