Hi!
Jestem na początku swojej drogi w programowaniu w C++
Przerabiając książkę napotkałem w rozdz.6 'Funkcje' zadanie do zrobienia "Estymator pracy malarskiej" Od użytkownika należy pobrać ilość pokoi, ilość metrów[2] w każdym pokoju oraz cenę za 1 litr farby. W zadaniu określone jest, że na każde 60m2 ściany potrzeba jest 1 litr farby oraz 8h godzin pracy.
Oplata za godzinę pracy wynosi 25zl.
Postanowiłem sobie utrudnić zadanie i nie pisać kodu za pomocą procedur tylko użyć Klasy (<- dopiero będę przerabiać w rozdz.13)
Stworzyłem sobie na początek oto taki mały program.
Chciałbym skorzystać z waszego doświadczenia oraz poprosić o pomoc.
- Czy moglibyście udzielić mi wskazówek i napisać co jest w nim do poprawy?
- Czy ktoś może wyjaśnić, co oznacza to ostrzeżenie
warning: padding class 'Estymator' with 4 bytes to align 'metry_kwadratowe'
i jak mam się do niego odnieść? - Czy zaimplementowany w tej klasie konstruktor i destruktor jest poprawny?
- Jak zamienić double na godziny i minuty?
Zadanie wymaga tylko wypisania całkowitego kosztu pracy, ale dla weryfikacji
wyświetlam sobie dodatkowe informacje m.in czas. I tutaj są dziwne rzeczy.
ogólne program daje poprawne wyniki np. dla
2 pokoi po 30m2 każdy i 10zł za 1 litr farby daje 8 godni pracy
1 pokój 15m2 10zł za litr farby daje 2 godziny pracy
1 pokój 30m2 10zł za litr farby daje 4 godziny pracy
ale dla np
1 pokój 44m2 10zł za litr farby daje 5,87h pracy <- i to mnie niepokoi
Wszelkie uwagi/sugestie mile widziane.
Poniżej moje rozwiązanie
#include <iostream>
#include <iomanip>
#include <cstring>
using namespace std;
class Estymator
{
private:
static const int stawka_godziny_pracy = 25;
int liczba_pokoi;
double metry_kwadratowe, suma_metrow_kwadratowych;
double ilosc_litrow_farby;
double cena_litra_farby;
double ilosc_godzin;
double calkowity_koszt_malowania, calkowity_koszt_farby;
double koszt_pracy;
public:
Estymator(){}
Estymator(int lp, double smk, double clf)
{
this->liczba_pokoi = lp;
this->suma_metrow_kwadratowych = smk;
this->cena_litra_farby = clf;
}
~Estymator(){}
void setLiczbaPokoi(int);
double getLiczbaPokoi() const;
void setMetry_kwadratowe_pokoju(int);
double getMetry_kwadratowe_pokoju() const;
void setCena_litra_farby(double);
double getCena_litra_farby() const;
void podsumowanie();
};
void Estymator::setLiczbaPokoi(int lp)
{
liczba_pokoi = lp;
}
double Estymator::getLiczbaPokoi() const
{
return liczba_pokoi;
}
void Estymator::setCena_litra_farby(double clf)
{
cena_litra_farby = clf;
}
double Estymator::getCena_litra_farby() const
{
return cena_litra_farby;
}
void Estymator::podsumowanie()
{
cout << "\n\t\tPodsumowanie" << "\n";
cout << "\tLiczba pokoi: " << liczba_pokoi << endl;
cout << "\tCalkowita suma [m]2 : " << suma_metrow_kwadratowych << endl;
cout << "\tCena 1 litra farby wynosi: " << cena_litra_farby << " zl" << endl;
//na 60m2 = 1l farby + 8h godzin pracy oplata za godzinepracy 25zl
ilosc_litrow_farby = suma_metrow_kwadratowych / 60;
ilosc_godzin = ilosc_litrow_farby * 8;
calkowity_koszt_farby = ilosc_litrow_farby * cena_litra_farby;
koszt_pracy = ilosc_godzin * stawka_godziny_pracy;
calkowity_koszt_malowania = koszt_pracy + calkowity_koszt_farby;
cout << "\tCalkowita ilosc godzin pracy : " << ilosc_godzin << endl;
cout << "\tCalkowita szacunkowa cena tego malowania wynosi : " << calkowity_koszt_malowania << " zl" << endl;
}
void Estymator::setMetry_kwadratowe_pokoju(int lp)
{
suma_metrow_kwadratowych = 0; //reset
for(int i = 0; i < lp; ++i)
{
cout << "Ile m[2] w " << i+1 << " pomieszczeniu: ";
cin >> metry_kwadratowe;
suma_metrow_kwadratowych += metry_kwadratowe;
}
}
double Estymator::getMetry_kwadratowe_pokoju() const
{
return suma_metrow_kwadratowych;
}
int main()
{
cout << fixed << setprecision( 2 );
cout << "\t\t\tEstymator pracy malarskiej" << endl;
char znak;
Estymator obj, *inz;
int liczba_pokoi = 0;
double cena_litra_farby = 0;
inz = new Estymator(1,60,10);
inz->podsumowanie();
delete inz;
cout << "\n";
while(1)
{
cout << "Ile pokoi do pomalowania: ";
cin >> liczba_pokoi;
obj.setLiczbaPokoi(liczba_pokoi);
obj.setMetry_kwadratowe_pokoju(liczba_pokoi);
cout << "Cena za 1 litr farby: ";
cin >> cena_litra_farby;
obj.setCena_litra_farby(cena_litra_farby);
obj.podsumowanie();
cout << "\n\t\tZnak 'q' konczy program. Kontynuowac ? ";
cin >> znak;
if(znak == 'q') break;
}//end loop while
cout << "\t\tKoniec programu." << endl;
getchar();
return 0;
}