Funkce na nejčastěji se opakující odebrané jídlo – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Funkce na nejčastěji se opakující odebrané jídlo – C / C++ – Fórum – Programujte.comFunkce na nejčastěji se opakující odebrané jídlo – C / C++ – Fórum – Programujte.com

 

Deivson0
Duch
21. 12. 2013   #1
-
0
-

   

~~Ahoj, mám následující zadání:


~~Menza vaří 5 obědů denně, každé jídlo má svou cenu, ID, popis a energetickou hodnotu. V CSV souboru jsou uloženy jídelníčky pro dny v určitém období. Pro konkrétní obědy strávníka, určené v jiném CSV souboru způsobem datum, jídlo číslo X, zapište do výstupního souboru podle voleb z klávesnice pro zadané období:

přehled všech odebraných jídel, jejich kumulativní cenu a celkovou cenu a počet jídel, energetickou hodnotu odebraných jídel jednotlivě, kumulativně a celkově a průměrnou energetickou hodnotu z odebraných jídel, nejčastěji se opakující odebrané jídlo. Berte v úvahu, že strávník nemusí odebrat stravu každý den. ID určuje jednoznacně o jaké jídlo se jedná, využijte toho při určení opakujících se jídel.


~~Poznámky: jména vstupních a výstupních souboru musí být možno zadat v bežící aplikaci (nesmí být nemenitelne zadána jen ve zdrojovém kódu programu), nepoužívejte diakritiku v názvech souborů, odevzdávejte .zip archiv s požadovaným obsahem, nevkládejte do odevzdávaného souboru balast (.obj/.pch/.pdb soubory a další soubory, které se ze zdrojových kódů vygenerují při překladu), velikost odevzdávaného archinu nesmí překročit 7 MiB (delší soubor bude odmítnut).


Můj problém: Nevím si vůbec rady s vytvořením funkce na nejčastěji se opakující odebrané jídlo. Zde přikládům csv soubor s vytvořeným jídelníčkem a mými objednávkami a můj zdrojový kód:

CSV soubor Jídelníček:

1,"Spanelsky ptacek /hovezi, vejce, uzenina,okurek/, dusena ryze",41,215 2,"Perstynsky veprovy platek /uzenina,zampiony/, testovinova ryze",37,300 3,"Zapecene testoviny se spenatem a uzenym, okurek",37,250 4,"1ks varene vejce, fazolky na smetane, varene brambory",36,350 5,"Veprovy platek zapeceny s nivou a anglickou slaninou, smazene hranolky",51,500 6,"Kureci smes s bylinkovou omackou, testoviny",47,400 7,"Zapekane palacinky s tvarohem",39,450 8,"Soulet s hrachem a zeleninou, okurek",22,410 9,"Jizersky drak /hovezi,cesnek/, smazene hranolky",50,1000 10,"Veprove kostky po vidensku /cibule/, dusena ryze",35,600 11,"Uzene maso, krenová omacka, houskove knedliky",39,700 12,"Bramborory gulas s fazolovymi lusky, chleb Moskva",39,550 13,"Mamincino kure /testoviny,jatra,zampiony/",39,900 14,"Pekingske maso /veprove,zampiony,solamyl/, kari ryze",37,600 15,"Sekany veprovy rizek s celerem, mastene brambory",40,350 16,"Kynuty makovy zavin",33,200 17,"Hovezi varene /zadni/, duseny spenat, varene brambory",49,850 18,"Ohnive maso /veprove,leco,feferony/, spagety",36,1000 19,"Pecena krkovicka, strapacky se zelim",40,325 20,"Zampionova cina /zampiony,paprika,rajcata/, dusena ryze",30,450

CSV soubor Můj výběr:

1.12.2013,3
2.12.2013,5
4.12.2013,10

Zdrojový kód:


#include <iostream>
#include <fstream>
#include <iomanip>
#include <sstream>
#include <string>

using namespace std;

typedef struct
{
    int id;
    string nazev;
    int cena;
    int energie;

}jidlo;

typedef struct
{
    string datum;
    int id;
}objednani;
/** \brief Vypocet druhe mocniny
 *
 * \param n Cislo, ktere mocnime
 * \return Mocnina cisla n
 *
 * Funkce pro vypocet druhe mocniny zadaneho cisla
 */
int mocnina(int n)
{
    return n*n;
}

bool prevedeni(string a,int&b)
{
    istringstream iss(a);
    iss>>b;
    return iss.good();

}

jidlo *nacitani(string nazev_souboru,int &velikost_pole)
{
   ifstream soubor_jidel(nazev_souboru.c_str());
   string obed;
   int pozice=0;
   for(velikost_pole=0;;velikost_pole++)
   {
       getline(soubor_jidel,obed);
       if(soubor_jidel.eof())
       {
           break;
       }
       if(obed.length()==0)
       {
           cout<<"Nespravny vstup."<<endl;
       }


    }

   jidlo *pole=new jidlo[velikost_pole];
    soubor_jidel.clear();
    soubor_jidel.seekg(ios_base::beg);
    string jidlo1;
    while(true)
    {
    getline(soubor_jidel,jidlo1);
    if(soubor_jidel.eof())
    {
        break;
    }
if(!soubor_jidel.bad())
{
int pos=jidlo1.find(',');
string str1=jidlo1.substr(0,pos);
int pos1=jidlo1.find('"')+1;
int pos2=jidlo1.find('"',pos1)-3;
string str2=jidlo1.substr(pos1,pos2);
int pos3=jidlo1.find(',',pos2);
int pos4=jidlo1.find(',',pos3)-pos2-1;
string str3=jidlo1.substr(pos3+1,pos4-1);
int pos5=jidlo1.find(',',pos3);
string str4=jidlo1.substr(pos5+4);
jidlo j;
prevedeni(str1,j.id);
j.nazev=str2;
prevedeni(str3,j.cena);
prevedeni(str4,j.energie);
pole[pozice]=j;
pozice++;
    }
    else
    {
        cout<<"Nespravny vstup."<<endl;
    }
}
    return pole;
}

objednani *nacitani1(string jmeno_souboru, int &velikost_pole1)
{
    ifstream soubor_objednavek(jmeno_souboru.c_str());
   string objednavka;
   int pozice1=0;
   for(velikost_pole1=0;;velikost_pole1++)
   {
       getline(soubor_objednavek,objednavka);
       if(soubor_objednavek.eof())
       {
        break;
       }
       if(objednavka.length()==0)
       {
           cout<<"Nespravny vstup."<<endl;
       }


   }


   objednani *pole1=new objednani[velikost_pole1];
    soubor_objednavek.clear();
    soubor_objednavek.seekg(ios_base::beg);
    string chut;
   while(true)
   {
       getline(soubor_objednavek,chut);
       if(soubor_objednavek.eof())
       {
           break;
       }
    if(!soubor_objednavek.bad())
    {
    int poz1=chut.find(',');
    string podretezec1=chut.substr(0,poz1);
    string podretezec2=chut.substr(poz1+1);
    objednani x;
    x.datum=podretezec1;
    prevedeni(podretezec2,x.id);
    pole1[pozice1]=x;
    pozice1++;
    }
       else
       {
           cout<<"Nespravny vstup."<<endl;
       }

   }

return pole1;

}

jidlo *sekvencni_vyhledavani(jidlo *pole,int velikost_pole,int id)
{
    for(int i=0;i<velikost_pole;i++)
    {
        if(pole[i].id==id)
        {
            return &pole[i];
        }
    }
    return NULL;

}

int cena(jidlo *jidelnicek,int pocet_jidelnicek, objednani *muj_vyber, int pocet_muj_vyber)
{
    int celkova_cena=0;
    for(int i=0;i<pocet_muj_vyber;i++)
    {
      celkova_cena+=sekvencni_vyhledavani(jidelnicek,pocet_jidelnicek,muj_vyber[i].id)->cena;
    }
    return celkova_cena;
}

int * kumul_cena(jidlo *jidelnicek,int pocet_jidelnicek,objednani *muj_vyber,int pocet_muj_vyber)
{
   int kumulativ_cena=0;
    int *pole_cen=new int[pocet_muj_vyber];
    for(int i=0;i<pocet_muj_vyber;i++)
    {
        kumulativ_cena+=sekvencni_vyhledavani(jidelnicek,pocet_jidelnicek,muj_vyber[i].id)->cena;
        pole_cen[i]=kumulativ_cena;
    }
    return pole_cen;
}
int * kumul_energie(jidlo*jidelnicek,int pocet_jidelnicek,objednani *muj_vyber,int pocet_muj_vyber)
{
    int kumulativni_energie=0;
    int *pole_energii=new int[pocet_muj_vyber];
    for(int i=0;i<pocet_muj_vyber;i++)
    {
        kumulativni_energie+=sekvencni_vyhledavani(jidelnicek,pocet_jidelnicek,muj_vyber[i].id)->energie;
        pole_energii[i]=kumulativni_energie;
    }
    return pole_energii;
}
int energie(jidlo *jidelnicek,int pocet_jidelnicek, objednani *muj_vyber, int pocet_muj_vyber)
{
    int celkova_energie=0;
    for(int i=0;i<pocet_muj_vyber;i++)
    {
       celkova_energie+=sekvencni_vyhledavani(jidelnicek,pocet_jidelnicek,muj_vyber[i].id)->energie;
    }
    return celkova_energie;
}
int prumerna_enrgie(jidlo *jidelnicek,int pocet_jidelnicek, objednani *muj_vyber, int pocet_muj_vyber)
{
    return energie(jidelnicek,pocet_jidelnicek,muj_vyber,pocet_muj_vyber)/pocet_muj_vyber;
}
int prumerna_cena(jidlo *jidelnicek,int pocet_jidelnicek,objednani *muj_vyber,int pocet_muj_vyber)
{
    return cena(jidelnicek,pocet_jidelnicek,muj_vyber,pocet_muj_vyber)/pocet_muj_vyber;
}

int main()
{
    string menza;
    cout<<"Zadej nazev jidelnicku:"<<endl;
    cin>>menza;
    int velikost_pole;
jidlo*jidelnicek=nacitani(menza,velikost_pole);
for(int i=0;i<velikost_pole;i++)
{
    cout<<jidelnicek[i].nazev<<endl;
}


string menu;
cout<<"Zvol jidlo:"<<endl;
cin>>menu;

int velikost_pole1;
objednani*muj_vyber=nacitani1(menu,velikost_pole1);
int*kumulativni_ceny=kumul_cena(jidelnicek,velikost_pole,muj_vyber,velikost_pole1);
int*kumulativni_energie=kumul_energie(jidelnicek,velikost_pole,muj_vyber,velikost_pole1);
for(int i=0;i<velikost_pole1;i++)
{
    cout<<muj_vyber[i].datum<<" "<<muj_vyber[i].id<<" "<<kumulativni_ceny[i]<<" "<<sekvencni_vyhledavani(jidelnicek,velikost_pole,muj_vyber[i].id)->energie<<" "<<kumulativni_energie[i]<<endl;
}
cout<<"Celkova cena: "<<cena(jidelnicek,velikost_pole,muj_vyber,velikost_pole1)<<endl;
cout<<"Prumerna cena: "<<prumerna_cena(jidelnicek,velikost_pole,muj_vyber,velikost_pole1)<<endl;
cout<<"Celkovy pocet jidel: "<<velikost_pole1<<endl;
cout<<"Celkova energie: "<<energie(jidelnicek,velikost_pole,muj_vyber,velikost_pole1)<<endl;
cout<<"Prumerna energeticka hodnota: "<<prumerna_enrgie(jidelnicek,velikost_pole,muj_vyber,velikost_pole1)<<endl;


delete [] jidelnicek;
delete [] muj_vyber;

    return 0;
}
Nahlásit jako SPAM
IP: 90.177.86.–
Deivson0
Duch
21. 12. 2013   #2
-
0
-

#1 Deivson U toho csv souboru Jídelníček se mi to zde špatně zkopírovalo. Správně mají být informace o jednom jídle na jednom řádku.

Nahlásit jako SPAM
IP: 90.177.86.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 23 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý