diff --git a/receptor/00.txt~ b/receptor/00.txt~ deleted file mode 100644 index 1794372ea2321e047044df2815bfbba2aba5914d..0000000000000000000000000000000000000000 --- a/receptor/00.txt~ +++ /dev/null @@ -1,2 +0,0 @@ -1 -01.txt diff --git a/receptor/01.txt~ b/receptor/01.txt~ deleted file mode 100644 index 9b6399e5481eb48af7cc3faeaae608190e834667..0000000000000000000000000000000000000000 --- a/receptor/01.txt~ +++ /dev/null @@ -1,26 +0,0 @@ -Kelt tészta (pizza) -2 (nehezseg) -45 perc -Hozzavalok: -5 fő részére -1 kg liszt -250 ml tej -1 evokanal cukor -2 kocka élesztõ -1 dl olivaolaj -4 dl langyos víz -fokhagyma granulátum -pizzafûszerkeverék -só - -Elkeszites: -9 lépésből áll -1. egy korsóba: langyos tej, cukor, élesztõ -2. korsó tartallmát villával elkeverni és valamivel lefedni 3-4 percre -3. lisztbe bele a korsó tartalma és ujjal kicsit elkeverni -4. takarja le 15 perce -5. adja hozzá az olajat, fokh. granulátumot, sót, fûszerkeveréket -6. kézzel elkeverni a vizet amit kis adagokban adunk hozzá a liszthez -7. két kézzel összegyúrni -8. 15 percet hagyd állni -9. serpenyõ alját lissztel vagy olajjal kend ki.... diff --git a/receptor/main.c b/receptor/main.c index b0e5e993927e1500d9d4b63027b209850a1e8595..c65d15165afa36a43ef9194e1c9e1451a98783b2 100644 --- a/receptor/main.c +++ b/receptor/main.c @@ -1,242 +1,12 @@ +#ifndef INCLUDES +#define INCLUDES #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> +#endif #include "receptor.h" #define TESZT - -Recept* Beolvas_recept(FILE *fp,char * fajlnev); -Hozzavalo* Beolvas_hozzavalo(char *str); - - -void Lista_hoz_beszur(Hozzavalo *uj,Lista_hoz *lista) -{ - uj->kovetkezo=lista->eleje->kovetkezo; - lista->eleje->kovetkezo=uj; - uj->kovetkezo->elozo=uj; - uj->elozo=lista->eleje; - -} - -void Lista_rec_beszur(Recept *uj,Lista_rec *lista) -{ - uj->kovetkezo=lista->eleje->kovetkezo; - lista->eleje->kovetkezo=uj; - uj->kovetkezo->elozo=uj; - uj->elozo=lista->eleje; -} - - -void Lista_hoz_init(Lista_hoz *lista) -{ - lista->eleje=(Hozzavalo*)malloc(sizeof(Hozzavalo)); - lista->vege=(Hozzavalo*)malloc(sizeof(Hozzavalo)); - lista->eleje->kovetkezo=lista->vege; - lista->eleje->elozo=NULL; - lista->vege->kovetkezo=NULL; - lista->vege->elozo=lista->eleje; -} - -void Lista_rec_init(Lista_rec *lista) -{ - lista->eleje=(Recept *) malloc(sizeof(Recept)); - lista->vege=(Recept*) malloc(sizeof(Recept)); - lista->eleje->kovetkezo=lista->vege; - lista->eleje->elozo=NULL; - lista->vege->kovetkezo=NULL; - lista->vege->elozo=lista->eleje; -} - -/** Beolvassa a 00.txt fájlban tárolt fájlneveket, és létrehozza a láncolt listát a receptekből -* Meghívja a Beolvas_recept, Lista_rec_beszur függvényeket. -* @param lista Egy strázsa, a recepteken. -* @param temp (max 100) ideiglenes puffer beolvasáshoz -* @param fajlnev (max 50) éppen kiolvasandó fájl nevét tárolja -* @param fp_00 FILE pointer a 00.txt fájlra -* @param fp File pointer az éppen beolvasasndó fájlra mutat -* @param ujelem Recept pointer, ebben tárolódik az újonnan beolvasott recept, ekkor még nincs neki foglalva hely -* @param db_rec a 00.txt első sorában tárolt szám, megadja a receptek számát -*/ -void Main_receptek(Lista_rec *lista) -{ -#ifdef TESZT -fprintf(stdout,"Main receptek függvény: \n"); -#endif - char temp[100]=""; - char fajlnev[50]; - - FILE *fp_00=NULL; - FILE *fp=NULL; - Recept *ujelem; - Lista_rec_init(lista); - - fp_00=fopen("00.txt","rt"); - if(fp_00==NULL) printf("Nem sikerult megnyitni a fajlt!\n"); - else{ - //Beolvassuk hány db recept van - int db_rec,i,k; - fgets(temp,5,fp_00); - db_rec=atoi(temp); - #ifdef TESZT - fprintf(stdout,"Receptek száma: %d\n",db_rec); - #endif - for(i=0;i<db_rec;i++) - { - fgets(temp,50,fp_00); - k=0; - while(temp[k]!='\n') - { - fajlnev[k++]=temp[k]; - } - fajlnev[k]='\0'; - fp=fopen(fajlnev, "rt"); - if (fp==NULL) printf("Nem sikerult megnyitni a fajlt!\n"); - else - { - ujelem=Beolvas_recept(fp,fajlnev); - Lista_rec_beszur(ujelem,lista); - } - } - } - #ifdef TESZT - 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. -* Meghívja Lista_hoz_init, Beolvas_hozzavalo, Lista_hoz_beszur függvényeket. -* @param fp FILE pointer receptre mutatat. -* @param fajlnev a forrásfájl neve kiterjesztéssel. -* @param uj_rec dinamikusan foglalt terület egy recept számára. -* @param temp ideiglenes puffer fájlból olvasáshoz. -* @param temp_int ideiglenes puffer számok tárolásához. -* @param allapot definiált típus, mely irányít egy switch-et, kettéválasztja a beolvasás első részét a hozzávalók beolvasásástól. -* @param lista_hozza Strázsa a hozzávalók láncolt listáján. (!Dinamikusan foglalt) -* @param temp_hozza ideiglenes tároló az éppen beolvasni kívánt hozzávalónak. -* @return pointer az ujonnan létrehozott receptre, NULL, ha nem tudott dinamikusan foglalni helyet -*/ -Recept* Beolvas_recept(FILE *fp,char * fajlnev) -{ - #ifdef TESZT - fprintf(stdout,"Beolvas_recept függvény: \n"); - #endif - - Recept* uj_rec=(Recept*)malloc(sizeof(Recept)); - if(uj_rec!=NULL) - { - char temp[100]; - int temp_int; - - strcpy(uj_rec->fajlnev,fajlnev); - - //NÉV beolvasása - fgets(temp,100,fp); - strcpy(uj_rec->nev,temp); - - //nehézségi szint beolvasása - fgets(temp,100,fp); - sscanf(temp,"%d ",&temp_int); - uj_rec->nehezseg=temp_int; - - //becsült elkészítési idő beolvasása - fgets(temp,100,fp); - sscanf(temp,"%d ",&temp_int); - uj_rec->fozesi_ido=temp_int; - - #ifdef TESZT - fprintf(stdout,"Recept: %s\n",uj_rec->fajlnev); - #endif - - //Hozzávalók beolvasása - beolvasas allapot; - allapot=elso_szakasz; - - Lista_hoz *lista_hozza=(Lista_hoz*)malloc(sizeof(Lista_hoz)); - if(lista_hozza!=NULL) - { - Lista_hoz_init(lista_hozza); - - Hozzavalo *temp_hozza; - #ifdef TESZT - fprintf(stdout,"Hozzávalók beolvasása: \n"); - #endif - while(fgets(temp,100,fp) && strstr(temp,"Elkeszites:")==NULL) - { - switch(allapot) - { - case elso_szakasz: - if(strstr(temp,"Hozzavalok:")!=NULL) - { - allapot=hozzavalok_beolvas; - fgets(temp,100,fp); - sscanf(temp,"%d ",&temp_int); - uj_rec->fo=temp_int; - } - break; - - case hozzavalok_beolvas: - temp_hozza=Beolvas_hozzavalo(temp); - if(temp_hozza==NULL) printf("Hiba a hozzavalok letrehozasanal!\n"); - else Lista_hoz_beszur(temp_hozza,lista_hozza); - break; - } - } - uj_rec->hozzavalok=lista_hozza; - } - } - #ifdef TESZT - fprintf(stdout,"----Beolvas_recept Vége"); - #endif - return uj_rec; -} - -/** Paraméterkén átvesz egy sornyi beolvasott hozzávalót, amivel aztán feltölt egy Hozzavalo típusú dinamikusan fogalalt változót. -* @param str -* @param uj_hozz -* @param ujmenny -* @param ujmertek -* @param ujnev -* @return Értelmezett hozzávalóra mutatott pointerrel, NULL, ha nem sikerült dinamikusan memóriát foglalni. -*/ -Hozzavalo* Beolvas_hozzavalo(char *str) -{ - #ifdef TESZT - fprintf(stdout,"Beolvas_hozzavalo függvény: \n"); - #endif - Hozzavalo* uj_hozz=(Hozzavalo*)malloc(sizeof(Hozzavalo)); - if(uj_hozz!=NULL) - { - char ujmenny[255],ujmertek[255],ujnev[255]; - sscanf(str,"%s %s ",ujmenny,ujmertek); - - if(isdigit(ujmenny[0])) - { - int i,k; - uj_hozz->mennyiseg=atoi(ujmenny); - i=0; - while(strcmp(mertekegysegek_szovegben[i],ujmertek) && strcmp(mertekegysegek_szovegben[i],"")) i++; - if(!strcmp(mertekegysegek_szovegben[i],ujmertek)) uj_hozz->mertekegyseg=i; - else uj_hozz->mertekegyseg=ismeretlen; - - - k=strlen(ujmenny)+strlen(ujmertek)+2; - for(i=0;k<=(strlen(str));i++) ujnev[i]=str[k++]; - } - else - { - strcpy(ujnev,str); - uj_hozz->mennyiseg=-1; - uj_hozz->mertekegyseg=-1; - } - - strcpy(uj_hozz->nev,ujnev); - #ifdef TESZT - fprintf(stdout,"%s",ujnev); - fprintf(stdout,"----Beolvas_hozzavalo Vége\n"); - #endif - } - return uj_hozz; -} int main() { @@ -245,29 +15,25 @@ int main() int i; menu fomenu; fomenu=alap; - printf("Udvozlom a Receptor programban!\n"); - printf("Válasszon a felsorolt lehetőségek közül:\n"); - printf("1. Recept fajlok betoltese.\n"); - printf("2. Rendelkezesre allo alapanyagok megadasa:"); - printf("3. Keresd meg a legalkalmasabb receptet.\n"); - printf("4. Kilépés\n\n"); while(fomenu>=0 && fomenu<4) - { + { + printf("\nUdvozlom a Receptor programban!\n"); + printf("Valasszon a felsorolt lehetosegek kozul:\n"); + printf("1. Recept fajlok betoltese.\n"); + printf("2. Rendelkezesre allo alapanyagok megadasa:\n"); + printf("3. Keresd meg a legalkalmasabb receptet.\n"); + printf("4. Kilépés\n\n"); switch(fomenu) { case alap: scanf("%d",&i); - fomenu=betolt_adatok; + fomenu=i; break; case betolt_adatok: Main_receptek(&receptek); #ifdef TESZT fprintf(stdout,"MAIN PROGRAM\n"); #endif - //kiir(&receptek); - szabadit_hozzavalok(receptek.eleje); - //szabadit_elkeszites(receptek.) - szabadit_receptek(receptek.eleje); fomenu=alap; break; case alapanyagok_beker: @@ -275,10 +41,13 @@ int main() fomenu=alap; break; case kereses: - printf("Funkcio meg nem elerheto\n"); + kiir(&receptek); fomenu=alap; break; - default: + default: + szabadit_hozzavalok(receptek.eleje); + //szabadit_elkeszites(receptek.) + szabadit_receptek(receptek.eleje); break; } } diff --git a/receptor/receptor.cbp b/receptor/receptor.cbp index 86b4e18581cb0964d9dfcff7c2c8ac581abee15b..4d73c13de2b7416272e9b881687b19bf14ac2542 100644 --- a/receptor/receptor.cbp +++ b/receptor/receptor.cbp @@ -19,6 +19,9 @@ <Compiler> <Add option="-Wall" /> </Compiler> + <Unit filename="beolvasofv.c"> + <Option compilerVar="CC" /> + </Unit> <Unit filename="debugmalloc.h" /> <Unit filename="main.c"> <Option compilerVar="CC" /> diff --git a/receptor/receptor.h b/receptor/receptor.h index 61b55ed608e9e3707eec9499087b655352f7fc2b..138f81c3090991f14776877099c14d7550e07a39 100644 --- a/receptor/receptor.h +++ b/receptor/receptor.h @@ -1,5 +1,12 @@ -#define TESZT - +#ifndef FEJLEC +#ifndef INCLUDES +#define INCLUDES +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#endif +#define FEJLEC typedef enum menu { alap=0, betolt_adatok=1, @@ -33,7 +40,7 @@ typedef struct Recept{ char nev[100]; char fajlnev[100]; int nehezseg; - int fozesi_ido; //percben kifejezve + int fozesi_ido; Lista_hoz *hozzavalok; int fo; //hány fő részére int elkeszites_db; @@ -47,120 +54,18 @@ typedef struct Lista_rec{ Recept *eleje; Recept *vege; }Lista_rec; - -char mertekegysegek_szovegben[][15]={"mg","g","dkg","kg","ml","cl","dl","l","db","teaskanal","kiskanal", -"evokanal","merokanal","pár","fej","gerezd","szelet","csomag",""}; - -void Beolvas_elkeszites() -{ - /* - //hány utasítás lesz? - int i; - ujelem->elkeszites_db=atoi(temp); - - //!a hívó feladata felszabadítani - lista_elem->elkeszites= (char **) malloc(lista_elem->elkeszites_db*sizeof(char*)); - - for(i=0;i<lista_elem->elkeszites_db;i++) - { - fgets(temp,400,fp); - lista_elem->elkeszites[i]=(char *) malloc((strlen(temp)+1)*sizeof(char)); - strcpy(lista_elem->elkeszites[i],temp); - } - fgets(temp,400,fp); - break;*/ -} - -void kiir(Lista_rec *lista) -{ - Recept *egyik; - Hozzavalo *i; - printf("Az on valasztasa a %s receptje\n",lista->eleje->kovetkezo->nev); - printf("Nehezsegi szint: %2d/10\n",lista->eleje->kovetkezo->nehezseg); - printf("\r"); - printf("Varhato idotartam: %d perc\n",lista->eleje->kovetkezo->fozesi_ido); - - i=lista->eleje->kovetkezo->hozzavalok; - printf("Hozzavalók: \n"); - while(i!=lista->eleje->kovetkezo->hozzavalok->eleje) - { - if(i->mennyiseg>0) - { - printf("%d %s %s\n",i->mennyiseg,mertekegysegek_szovegben[i->mertekegyseg],i->nev); - } - else - { - printf("%s\n",i->nev); - } - i=i->elozo; - } - //!Meg kell írni, hogy csak egyet olvasson be amire szükségünk van - /*printf("\nElkeszites:\n"); - int k; - for(k=0;k<lista->eleje->kovetkezo->elkeszites_db;k++) - { - printf("%s\n",lista->eleje->kovetkezo->elkeszites[k]); - }*/ -} - -//A hozzávalóknak foglalt dinamikus memória területet felszabadítja - -void szabadit_hozzavalok(Recept *eleje) -{ - #ifdef TESZT - fprintf(stdout,"Szabadit_hozzavalok: \n"); - #endif - int db=0; - Recept *mozgo_rec; - Hozzavalo *mozgo_hoz,*kov; - for(mozgo_rec=eleje->kovetkezo;mozgo_rec->kovetkezo!=NULL;mozgo_rec=mozgo_rec->kovetkezo) - { - for(mozgo_hoz=mozgo_rec->hozzavalok->eleje->kovetkezo;mozgo_hoz->kovetkezo!=NULL;) - { - kov=mozgo_hoz->kovetkezo; - free(mozgo_hoz); - db++; - mozgo_hoz=kov; - } - free(mozgo_rec->hozzavalok->eleje); - free(mozgo_rec->hozzavalok->vege); - } - #ifdef TESZT - fprintf(stdout,"Felszabaditott hozzavalok: %d\n",db); - fprintf(stdout,"----Szabadit_hozzavalok Vége\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); -} +void Lista_hoz_beszur(Hozzavalo *uj,Lista_hoz *lista); +void Lista_rec_beszur(Recept *uj,Lista_rec *lista); +void Lista_hoz_init(Lista_hoz *lista); +void Lista_rec_init(Lista_rec *lista); +void Main_receptek(Lista_rec *lista); +Recept* Beolvas_recept(FILE *fp,char * fajlnev); +Hozzavalo* Beolvas_hozzavalo(char *str); +void kiir(Lista_rec *lista); +void szabadit_hozzavalok(Recept *eleje); +void szabadit_elkeszites(char** pt,int db); +void szabadit_receptek(Recept *eleje); -//A recept struktúráknak dinamikusan foglalt memóriát felszabadítja -void szabadit_receptek(Recept *eleje) -{ - #ifdef TESZT - fprintf(stdout,"Szabadit_receptek: \n"); - #endif - int db=0; - Recept *akt,*kov; - for(akt=eleje->kovetkezo;akt->kovetkezo!=NULL;) - { - kov=akt->kovetkezo; - free(akt); - db++; - akt=kov; - } - free(eleje); - #ifdef TESZT - fprintf(stdout,"Felszabaditott receptek: %d\n",db); - fprintf(stdout,"----Szabadit_hozzavalok Vége\n"); - #endif -} +#endif //FEJLEC