Skip to content
Snippets Groups Projects
Commit 3ba84fc5 authored by tht_krisztian's avatar tht_krisztian
Browse files

Mertekegysegek, keresés átírva

parent b0c44d1b
Branches
No related tags found
No related merge requests found
......@@ -10,21 +10,6 @@
#endif
#define TESZT
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 megad_hozzavalok(Lista_hoz *strazsa);
void kiir_hozzavalok(Lista_hoz *hozzavalok);
void kiir_recept(Recept *recept);
void szabadit_hozzavalok(Recept *eleje);
void szabadit_elkeszites(char** pt,int db);
void szabadit_receptek(Recept *eleje);
char mertekegysegek_szovegben[][15]={"mg","g","dkg","kg","ml","cl","dl","l","db","teáskanál","kiskanál","evőkanál","merőkanál","pár","fej","gerezd","szelet","csomag","kocka",""};
void Lista_hoz_beszur(Hozzavalo *uj,Lista_hoz *lista)
{
uj->kovetkezo=lista->eleje->kovetkezo;
......@@ -63,13 +48,7 @@ void Lista_rec_init(Lista_rec *lista)
lista->vege->elozo=lista->eleje;
}
int mertekegyseg_megallapit(char *str)
{
int i=0;
while(strcmp(mertekegysegek_szovegben[i],str) && strcmp(mertekegysegek_szovegben[i],"")) i++;
if(!strcmp(mertekegysegek_szovegben[i],str)) return i;
else return ismeretlen;
}
/** 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.
......@@ -219,28 +198,32 @@ Recept* Beolvas_recept(FILE *fp,char * fajlnev)
*/
Hozzavalo* Beolvas_hozzavalo(char *str)
{
int i;
#ifdef TESZT2
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];
char ujmenny[255+1],ujmertek[255+1],ujnev[255+1];
for(i=0;i<256;i++)
{
ujmenny[i]=ujmertek[i]=ujnev[i]='\0';
}
sscanf(str,"%s %s ",ujmenny,ujmertek);
if(isdigit(ujmenny[0]))
{
int i,k;
uj_hozz->mennyiseg=atoi(ujmenny);
uj_hozz->mertekegyseg=mertekegyseg_megallapit(ujmertek);
uj_hozz->mertekegyseg=Mertekegyseg_init(ujmertek,atoi(ujmenny));
uj_hozz->mertekegyseg=Mertekegyseg_atvalto(uj_hozz->mertekegyseg,hash2(uj_hozz->mertekegyseg));
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;
uj_hozz->mertekegyseg.mennyiseg=-1;
uj_hozz->mertekegyseg.egyseg=-1;
}
ujnev[strlen(ujnev)-1]='\0';
......@@ -273,9 +256,9 @@ Hozzavalo* Beolvas_hozzavalo(char *str)
void megad_hozzavalok(Lista_hoz *strazsa)
{
char temp[150]="";
char ujnev[50];
char ujmertek[50];
char temp[150+1]="";
char ujnev[75+1];
char ujmertek[75+1];
int ujmenny;
Hozzavalo *uj;
Lista_hoz_init(strazsa);
......@@ -286,12 +269,15 @@ void megad_hozzavalok(Lista_hoz *strazsa)
while(!strstr(temp,"Mutasd"))
{
uj=(Hozzavalo*)malloc(sizeof(Hozzavalo));
sscanf(temp,"%[^:]:%d:%s",&ujnev,&ujmenny,&ujmertek);
uj->mennyiseg=ujmenny;
uj->mertekegyseg=mertekegyseg_megallapit(ujmertek);
sscanf(temp,"%[^:]:%d:%s",ujnev,&ujmenny,ujmertek);
uj->mertekegyseg=Mertekegyseg_init(ujmertek,ujmenny);
uj->mertekegyseg=Mertekegyseg_atvalto(uj->mertekegyseg,hash2(uj->mertekegyseg));
ujnev[strlen(ujnev)]='\0';
strcpy(uj->nev,ujnev);
Lista_hoz_beszur(uj,strazsa);
#ifdef TESZT
printf("%.0lf %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);
}
......@@ -304,9 +290,10 @@ void kiir_hozzavalok(Lista_hoz *hozzavalok)
printf("Hozzavalók: \n");
while(i!=hozzavalok->eleje)
{
if(i->mennyiseg>0)
if(i->mertekegyseg.mennyiseg>0)
{
printf("%d %s %s\n",i->mennyiseg,mertekegysegek_szovegben[i->mertekegyseg],i->nev);
printf("%.0lf %s %s\n",i->mertekegyseg.mennyiseg,Mertekegyseg_szovegben((i->mertekegyseg).egyseg),i->nev);
}
else
{
......
......@@ -9,34 +9,26 @@
#define TESZT
KeresesiFa *faba_beszur(double feltetel,Recept *rec_ptr,KeresesiFa *gyoker)
KeresesiFa *Faba_beszur(double feltetel,Recept *rec_ptr,KeresesiFa *gyoker)
{
if(gyoker==NULL)
{
KeresesiFa *uj=(KeresesiFa*)malloc(sizeof(KeresesiFa));
uj->kisebb=uj->nagyobb=NULL;
uj->kisebbegyenlo=uj->nagyobb=NULL;
uj->ertek=feltetel;
return uj;
}
if(rec_ptr!=gyoker->recept)
{
if(gyoker->ertek>feltetel) gyoker->kisebb=faba_beszur(feltetel,rec_ptr,gyoker->kisebb);
else if(gyoker->ertek<=feltetel) gyoker->nagyobb=faba_beszur(feltetel,rec_ptr,gyoker->nagyobb);
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;
}
int atvalthato(mertek hoz,mertek rec)
{
return 1;
}
int valto(mertek hoz,mertek rec)
{
return 1;
}
KeresesiFa *fa_epit(Lista_rec *rec_strazsa, Lista_hoz *alapanyagok, KeresesiFa *gyoker)
void Fa_epit(Lista_rec *rec_strazsa, Lista_hoz *alapanyagok, KeresesiFa **gyoker)
{
int db,kapcsolat, temp;
Recept *mozgo;
......@@ -55,20 +47,27 @@ KeresesiFa *fa_epit(Lista_rec *rec_strazsa, Lista_hoz *alapanyagok, KeresesiFa *
//végigmegy a megadott hozzávalókon
for(mozgo_inalap=alapanyagok->eleje->kovetkezo;mozgo_inalap->kovetkezo!=NULL;mozgo_inalap=mozgo_inalap->kovetkezo)
{
if(atvalthato(mozgo_inalap->mertekegyseg,mozgo_inrec->mertekegyseg)) temp+=2;
if((mozgo_inalap->mertekegyseg.egyseg)==(mozgo_inrec->mertekegyseg.egyseg)) temp+=2;
else temp+=1;
if(strstr(mozgo_inrec->nev,mozgo_inalap->nev))
{
temp+=((double)strlen(mozgo_inrec->nev)/strlen(mozgo_inalap->nev))*3;
temp+=(double)(mozgo_inalap->mennyiseg)*valto(mozgo_inalap->mertekegyseg,mozgo_inrec->mertekegyseg)/(mozgo_inrec->mennyiseg);
temp+=((double)strlen(mozgo_inrec->nev)/strlen(mozgo_inalap->nev))*2.5;
temp+=(double)(mozgo_inalap->mertekegyseg.mennyiseg)/(mozgo_inrec->mertekegyseg.mennyiseg)*1.5;
}
else temp+=1;
kapcsolat+=temp;
}
}
gyoker=faba_beszur((double)kapcsolat/db,mozgo,gyoker);
*gyoker=faba_beszur((double)kapcsolat/db,mozgo,*gyoker);
}
}
KeresesiFa *Fa_legnagyobb(KeresesiFa *gyoker)
{
if(gyoker!=NULL)
{
return Fa_legnagyobb(gyoker->nagyobb);
}
return gyoker;
}
void Fa_kirajzol(KeresesiFa *p)
......@@ -81,12 +80,22 @@ void Fa_kirajzol(KeresesiFa *p)
Fa_kirajzol(p->nagyobb);
for(i=0;i<(szint-1)*5;i++) putchar(' ');
printf("%d\n",(int)(p->ertek));
Fa_kirajzol(p->kisebb);
Fa_kirajzol(p->kisebbegyenlo);
szint--;
}
}
void fa_szabadit(KeresesiFa *gyoker)
int Fa_szabadit(KeresesiFa **gyoker)
{
return 1;
static int db;
if(*gyoker)
{
fa_szabadit(&(*gyoker)->kisebbegyenlo);
fa_szabadit(&(*gyoker)->nagyobb);
free(*gyoker);
db++;
*gyoker=NULL;
}
return db;
}
......@@ -13,37 +13,40 @@ int main()
{
//debugmalloc_naplofajl("dmalloc.txt");
Lista_rec receptek;
int i,exi=1;
int i,exi=1,db;
menu fomenu;
fomenu=alap;
Lista_hoz alapanyagok;
KeresesiFa *gyoker;
Recept *temp;
printf("Udvozlom 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");
while(fomenu>=0 && fomenu<5 && exi)
while(fomenu>=0 && fomenu<6 && exi)
{
switch(fomenu)
{
case alap:
case var:
scanf("%d",&i);
fomenu=i;
break;
case alap:
printf("Udvozlom 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");
fomenu=var;
break;
case betolt_adatok:
Main_receptek(&receptek);
#ifdef TESZT
fprintf(stdout,"Betoltottem\n");
#endif
fomenu=alap;
fomenu=var;
break;
case alapanyagok_beker:
megad_hozzavalok(&alapanyagok);
fomenu=alap;
fomenu=var;
break;
case kereses:
#ifdef TESZT
......@@ -53,10 +56,10 @@ int main()
kiir_hozzavalok(&alapanyagok);
printf("Alapanyagok kiirva\n");
#endif //TESZT
gyoker=fa_epit(&receptek,&alapanyagok,NULL);
fa_epit(&receptek,&alapanyagok,&gyoker);
printf("Kesz a fa\n");
Fa_kirajzol(gyoker);
fomenu=alap;
fomenu=var;
break;
case kilep:
szabadit_hozzavalok(receptek.eleje);
......
......@@ -28,6 +28,9 @@
<Unit filename="main.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="mertekegysegek.c">
<Option compilerVar="CC" />
</Unit>
<Unit filename="receptor.h" />
<Extensions>
<code_completion />
......
......@@ -8,26 +8,41 @@
#endif
#define FEJLEC
typedef enum menu {
alap=0,
betolt_adatok=1,
alapanyagok_beker=2,
kereses=3,
kilep=4
var=0,
alap=1,
betolt_adatok=2,
alapanyagok_beker=3,
kereses=4,
kilep=5
}menu;
typedef enum MERTEKEGYSEGEK{
mg=0,g,dkg,kg,ml,cl,dl,l,db,teaskanal,kiskanal,evokanal,merokanal,par,fej,gerezd,szelet,csomag,kocka,ismeretlen
} MERTEKEGYSEGEK;
typedef enum VALTOSZAMOK
{ v_mg=1,v_ml=1,v_g=10,v_cl=10,v_dkg=100,v_dl=100,v_l=1000,v_kg=10000,v_teaskanal_ml=15,
v_kiskanal_ml=15,v_evokanal_ml=15,v_merokanal_ml=65
} VALTOSZAMOK;
typedef struct Mertek{
char nev[20];
MERTEKEGYSEGEK egyseg;
double mennyiseg;
}Mertek;
typedef enum beolvasas{
elso_szakasz,
hozzavalok_beolvas
} beolvasas;
typedef enum mertek{
/*typedef enum mertek{
mg=0,g,dkg,kg,ml,cl,dl,l,db,teaskanal,kiskanal,evokanal,merokanal,par,fej,gerezd,szelet,csomag,ismeretlen
} mertek;
} mertek;*/
/** Egy hozzávalót tároló struktúra.*/
typedef struct Hozzavalo{
char nev[100];
int mennyiseg;
mertek mertekegyseg;
Mertek mertekegyseg;
struct Hozzavalo *elozo;
struct Hozzavalo *kovetkezo;
} Hozzavalo;
......@@ -59,7 +74,7 @@ typedef struct KeresesiFa
{
Recept * recept;
double ertek;
struct KeresesiFa *kisebb,*nagyobb;
struct KeresesiFa *kisebbegyenlo,*nagyobb;
}KeresesiFa;
//beolvasfv.c
......@@ -78,12 +93,18 @@ void szabadit_elkeszites(char** pt,int db);
void szabadit_receptek(Recept *eleje);
//kereses.c
KeresesiFa *faba_beszur(double feltetel,Recept *rec_ptr,KeresesiFa *gyoker);
int atvalthato(mertek hoz,mertek rec);
int valto(mertek hoz,mertek rec);
KeresesiFa *fa_epit(Lista_rec *rec_strazsa, Lista_hoz *alapanyagok, KeresesiFa *gyoker);
void fa_szabadit(KeresesiFa *gyoker);
KeresesiFa *Faba_beszur(double feltetel,Recept *rec_ptr,KeresesiFa *gyoker);
void Fa_epit(Lista_rec *rec_strazsa, Lista_hoz *alapanyagok, KeresesiFa **gyoker);
int Fa_szabadit(KeresesiFa **gyoker);
void Fa_kirajzol(KeresesiFa *p);
//mertekegysegek.c
MERTEKEGYSEGEK hash(char *str);
Mertek Mertekegyseg_init(char *str,int menny);
char* Mertekegyseg_szovegben(MERTEKEGYSEGEK i);
Mertek hash2(Mertek alany);
Mertek Mertekegyseg_atvalto(Mertek alany,Mertek referencia);
#endif //FEJLEC
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment