Czy rozwiązanie zadania jest w miarę poprawne?

0

Witam. Oto polecenia:

Farmer zwrócił się do Ciebie z prośbą byś napisał program, który będzie przechowywał informacje o rodzajach zwierząt jakie posiada. Zwierzęta to krowa, koza, kura, pies i świnia. Cechy tych zwierząt to nazwa, waga, wiek(podany w tygodniach), oraz data nabycia(zakupu). Farmer dodał, iż krowę i świnię kupił 24-04-08r od znajomego, pies przybłąkał się 6.05.02r, natomiast kozę i kurę dostał w prezencie od wójta 23.02.09. Niestety resztę cech musisz określić sam, na podstawie przyjętych średnich(google) dla tych zwierząt. Dane mają być zawarte w strukturze. Rezultatem programu ma być:

a) pierwszy program? wyświetlenie wszystkich danych w przejrzysty i zrozumiały dla użytkownika sposób, użytkownik nic nie podaje, program wyświetla tylko dane.
b) drugi program? program ma poprosić o wprowadzenie nazwy i wagi(w kilogramach) zwierzęcia(mają być wprowadzone trzy zwierzaki) , oraz wyświetleniu danych w odwrotny sposób do tego w jaki zostały wprowadzone, oraz zachowaniu takiej kompozycji

Moje rozwiązanie: (zrobiłem 2 w 1 :D. A dane wymyśliłem ;))

#include <iostream>
#include <string>
int main()
{
    //PROGRAM PIERWSZY
    struct zwierzaki { std::string nazwa; int waga; int wiek; std::string data; };
    zwierzaki z[5]= {
        {"krowa", 50, 5, "24-04-08r"},
        {"koza", 60, 6, "23.02.09"},
        {"kura", 70, 7, "23.02.09"},
        {"pies", 80, 8, "6.05.02r"},
        {"swinia", 90, 9, "24-04-08r"} };
    for (int wypisz=0; 5>wypisz; wypisz++)
    {
        std::cout << "Nazwa: " << z[wypisz].nazwa << ". Waga (w kg): " << z[wypisz].waga << ". Wiek (w tygodniach): " << z[wypisz].wiek << ". Data zakupu: " << z[wypisz].data << std::endl;
    }
    //PROGRAM DRUGI
    std::cout << "---------------------------" << std::endl;
    struct baza { std::string nazwa2; float waga2; };
    baza z2[3];
    for (int i=0; 3>i; i++)
    {
        std::cout<< "Podaj nazwe zwierzaka: ";
        std::cin >> z2[i].nazwa2;
        std::cout<< "Podaj wage zwierzaka (w kg): ";
        std::cin >> z2[i].waga2;
    }
    for (int i2=2; -1<i2; i2--)
    {
        std::cout << "Nazwa: " << z2[i2].nazwa2 << ". Waga: " << z2[i2].waga2<< std::endl;
    }
    return 0;
}
  1. Czy programy są wykonane poprawnie? (działają jak trzeba, ale czy coś powinno być zrobione "inaczej" :p?).
  2. Datę postanowiłem zapisać jako string, czy to dobre i poprawne rozwiązanie?

zamiana znacznika <code> na <quote> - @furious programming

1

#Nie rob identyfikator w jezyku polskim.
#Struktura zazwyczaj nie powinna miec nazwy w liczbie mnogiej.
#Nadawaj dziwnym wartosciom w kodzie nazwy.
#Dziel problem na male funkcje/klasy. Dlaczego wypisywanie jest zrobione recznie? Dlaczego wartosci sa wpisywane do struktury po kolei, a nie uzywajac konstruktora? Dlaczego oba 'programy' sa wrzucone do jednego maina? etc, etc.
#Uzywaj mozliwie najbardziej konkretnego typu do przechowywania danych (data to nie string, wiek i waga to nie int)

1

2.Dlaczego?

Bo przechowujesz informacje o jednym zwierzaku, a nie o kilku.

3.Jakie dziwne wartości?

for (int i=0; 3>i; i++)
for (int wypisz=0; 5>wypisz; wypisz++)

Np. te 3 i 5.

for (int i2=2; -1<i2; i2--)

Tutaj to juz w ogole nie mam pojecia czemu jest 2 i -1 i czym sie kierowales to piszac.

4.Jak inaczej miałem zrobić pierwszy program skoro musiałem jakoś wpisać dane?

http://ideone.com/XT1cOt

#include <iostream>
using namespace std;

class Foo {
	int x, y;
	
	friend ostream& operator<<(ostream& out, const Foo& f) {
		return out << "x: " << f.x << "\ty: " << f.y;
	}
	
	friend istream& operator>>(istream& in, Foo& f) {
		return in >> f.x >> f.y;
	}

public:
	Foo(int x=0, int y=0): x(x), y(y) {}
};

int main() {
	Foo f;
	cin >> f;
	cout << f << endl;
	
	int x, y;
	cin >> x >> y;
	Foo f2(x, y);
	cout << f2 << endl;
	return 0;
}

Konstruktor? Co to?

http://www.cplusplus.com/doc/tutorial/classes/

5.Więc jaki typ dla daty, wieku i wagi?

http://en.cppreference.com/w/cpp/chrono/c/time_t
Dla dwoch pozostalych unsigned jest ok.

0

Więc jakiego typu zmienna przyda się do dat z myślnikami? (np. ta 24-04-08r)

1

@Min0s - takiego samego typu, jak dla daty z kropkami; Zwróć uwagę na to, że myślniki, kropki, przecinki i inne tego typu znaki nie są częścią wartości daty i czasu, a służą jedynie z ich formatowania przy wyświetlaniu;

Poza tym - http://bit.ly/1xatsWK

1 użytkowników online, w tym zalogowanych: 0, gości: 1