• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++] ocena, ew. pomoc w poprawie kodu, klasy

Cloud VPS
0 głosów
304 wizyt
pytanie zadane 14 maja 2016 w C i C++ przez 9au5a Początkujący (280 p.)
edycja 14 maja 2016 przez 9au5a

Witam :)

Mam program który wczytuje dni tygodnia wraz z wartoscią liczbową (ignoruje złe nazwy dnia, ale akceptuje skrócenia; przy złej liczbie wyrzuca błąd), i zapisuje ta wartosc do odpowiedniego vecotora. Wlasciwie to brzmi absolutnie prymitywnie, program napisany, działa, ale teraz mam napisac dokladnie to samo, używając z góry podanej "konstrukcji" klasy, oto ona:

class Name_values 
{
public:
  Name_values(); // Standardkonstruktor 
  Name_values( string, vector<int> ); // Konstruktor
  void add_value( int ); // weiteren Wert speichern (zapisanie następnej wartości)
  void print_all( ) const; // 
  string get_name( ) const; // 
private:
  string name;
  vector<int> values;
};

Do tego program ma na koniec pokazac takze średnią arytmetyczna każdego dnia. (i na koniec pokazac ile było złych nazw dni).

No okey,program napisany, działa, ale jego wygląd...i ogólnie działanie..

-->konstruktor standardowy, nie mam pojęcia czy można tak robić, ale nie mam póki co (a nie zaczełam tego dziś) innych pomysłów

-->konstruktor ze string i vector<int> nie jest u mnie wgl używany

Oto plik main:

/* 
 * File:   main.cpp
 * Author: Paula
 * Name_values, Tag und wert eingeben, durschnitt berechnen, alles zeigen
 * Created on 6. Mai 2016, 22:47
 */

#include "headers.h"
#include "name_values.h"

int main() 
try {
    vector <Name_values> week{7}; //czy tak to zapisac?

    string temp_day{"noday"};
    int temp_value{0};
    int bad_day_name{0};
    bool found{0};//do sprawdzania poprawnosci nazwy dnia
    
    while (cin >> temp_day && temp_day!="q"  )
    {
        found=false; 
 
        cin >> temp_value;
        is_number(); 
        
        if(temp_day.size()==1)  //do uniknięcia niejednoznacznych nazw dni np "P"
        {
            cout << "Zu kurzer Name!" << endl; //
            bad_day_name++;
            continue;
        }
        
        for (unsigned int i{0}; i<7; i++) //sprawdza podnay dzien z kazdym w klasie
            if(confer(temp_day, week[i].get_name()))
            {
                week[i].add_value(temp_value); //jesli jakis był dobry to dodaje podana wartosc
                found=true;
            }
        if(!found)
            bad_day_name++;
    }
    
    for (unsigned int i{0}; i<7; i++)
        week[i].print_all();

   //pokazuje ile złych dni podano        
    if(bad_day_name)
    {
        if(bad_day_name==1)
            cout <<endl << "Es wurde " << bad_day_name <<" Wert wegen unzulässigem Tag abgelehnten.";
        else if (bad_day_name>1)   
            cout <<endl << "Es wurden " << bad_day_name <<" Werte wegen unzulässigem Tag abgelehnten.";
    }  
   return 0;
}

catch( exception& e ) 
{
    cerr << endl <<"FEHLER: " << e.what();
    return -2;
}

void error ( string s ) { 
    throw std::runtime_error{ s }; 
}
void is_number()
{
    if(cin.fail()) //method fail fuer cin
      error("Eigegebener Wert ist keine Zahl");
}
bool confer(string temp, string name)
{
    for (unsigned int i{0};i<temp.size(); i++)
    {
        if(temp[i]!=name[i])
            return false;
    }
    return true;
    
}

 klasa Name_values:
#include "name_values.h"
// wiec sobie pomyślałam, że będzie przecież ok, jak po prostu przy
// utworzeniu siedmiu objektów od razu każdy z nich dostanie odpowiednią nazwe dnia

Name_values::Name_values() : summe{0}
{
//    values{}; 
    static int i{1};
    switch (i)
    {
        case 1: name="Montag"; break;
        case 2: name="Dienstag"; break;
        case 3: name="Mittwoch"; break;
        case 4: name="Donnerstag"; break;
        case 5: name="Freitag"; break;
        case 6: name="Samstag"; break;
        case 7: name="Sonntag"; break;
        default: error("Name_values::Name_values(): Max 7 Tage!");
    }
    i++;
}
 //dalej nie wiem czy go wgl potrzebuje, jeśli tak to do czego
Name_values::Name_values(string n, vector<int> v)
{
    name=n;
    values=v;
}
void Name_values::add_value(int value)
//nie jestem pewna czy jest to poprawne w tej funkcji od razu obliczac sumę,
//czy może lepsza byłąby nowa funkcja?
{
    summe+=value;
    values.push_back(value);
}
void Name_values::print_all() const
{
    cout << endl << setw(10)<<name << " :";
    for (unsigned int i{0}; i<values.size();i++)
        cout << "   " << values[i];
    if (summe)
        cout << " Durchschnitt: " <<summe/values.size();
 
}
string Name_values::get_name() const
{
    return name;
}

Przykładowe działanie:

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 254 wizyt
pytanie zadane 19 marca 2019 w C i C++ przez Poczprogramista123 Bywalec (2,900 p.)
0 głosów
2 odpowiedzi 274 wizyt
pytanie zadane 7 kwietnia 2017 w Nasze projekty przez ThePatrykOOO Dyskutant (8,400 p.)
–1 głos
1 odpowiedź 237 wizyt
pytanie zadane 14 kwietnia 2017 w Nasze projekty przez Paweł Sypek Początkujący (440 p.)

93,460 zapytań

142,454 odpowiedzi

322,724 komentarzy

62,837 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...