Funkcja w klasie - nieznana wartosc

0

Witam, mam do napisania program ktory z podanych danych wypisze ich sume w danym przedziale, oraz parametry statystyczne jak modalna, srednia etc. Ale o tamte na razie mniejsza bo obecnie głowie sie nad jedna rzecza.
Otoz po zrobieniu funkcji zliczajacej odpowiednie dane w przedzialach wypisuje ja potem w programie glownym. Niestety funkcja wypisuje jakas liczbe ktora kompletnie niewiem skad sie wziela i jak temu zaradzic.
Daje moj kod:

#include <iostream>

using namespace std;

class Zaklad1 {
    public:
        int tab_Z1[55]={22, 26, 27, 27, 9,
                        11, 29, 33, 27, 28,
                        30, 31, 14, 33, 30,
                        16, 20, 18, 34, 33,
                        34, 30, 29, 24, 29,
                        29, 27, 42, 54, 60,
                        52, 36, 37, 43, 57,
                        39, 40, 36, 50, 44,
                        33, 31, 42, 49, 32,
                        36, 41, 32, 48, 31,
                        26, 36, 38, 37, 38};
        int przedzial_z1();
};

class Zaklad2 {
    public:
        int tab_Z2[65]={38, 37, 22, 31, 64,
                        39, 30, 26, 42, 44,
                        46, 41, 27, 34, 39,
                        16, 46, 60, 37, 36,
                        30, 26, 36, 51, 27,
                        32, 26, 20, 41, 27,
                        40, 44, 26, 19, 18,
                        54, 49, 28, 42, 43,
                        39, 38, 41, 50, 24,
                        33, 38, 36, 18, 53,
                        50, 59, 40, 36, 16,
                        36, 39, 48, 46, 58,
                        33, 43, 37, 44, 40};
        int przedzial_z2();
};


int Zaklad1::przedzial_z1()
{
    int suma_15=0;
    int suma_25=0;
    int suma_35=0;
    int suma_45=0;
    int suma_55=0;
    int suma_65=0;
    for (int i=0;i<55;i++)
    {
        if (tab_Z1[i]<15)
            suma_15=suma_15+1;
        else
            if (tab_Z1[i]<25)
            suma_25=suma_25+1;
        else
            if (tab_Z1[i]<35)
            suma_35=suma_35+1;
        else
            if (tab_Z1[i]<45)
            suma_45=suma_45+1;
        else
            if (tab_Z1[i]<55)
            suma_55=suma_55+1;
        else
            if (tab_Z1[i]<65)
            suma_65=suma_65+1;
    }
    cout<<"Przedzial dla Zakladu I"<<endl;
    cout<<"5 - 15: "<<suma_15<<endl;
    cout<<"15 - 25: "<<suma_25<<endl;
    cout<<"25 - 35: "<<suma_35<<endl;
    cout<<"35 - 45: "<<suma_45<<endl;
    cout<<"45 - 55: "<<suma_55<<endl;
    cout<<"55 - 65: "<<suma_65<<endl;
}

int Zaklad2::przedzial_z2()
{
    int suma_15=0;
    int suma_25=0;
    int suma_35=0;
    int suma_45=0;
    int suma_55=0;
    int suma_65=0;
    for (int i=0;i<65;i++)
    {
        if (tab_Z2[i]<15)
            suma_15=suma_15+1;
        else
            if (tab_Z2[i]<25)
            suma_25=suma_25+1;
        else
            if (tab_Z2[i]<35)
            suma_35=suma_35+1;
        else
            if (tab_Z2[i]<45)
            suma_45=suma_45+1;
        else
            if (tab_Z2[i]<55)
            suma_55=suma_55+1;
        else
            if (tab_Z2[i]<65)
            suma_65=suma_65+1;
    }
    cout<<"Przedzial dla Zakladu II"<<endl;
    cout<<"5 - 15: "<<suma_15<<endl;
    cout<<"15 - 25: "<<suma_25<<endl;
    cout<<"25 - 35: "<<suma_35<<endl;
    cout<<"35 - 45: "<<suma_45<<endl;
    cout<<"45 - 55: "<<suma_55<<endl;
    cout<<"55 - 65: "<<suma_65<<endl;
}



int main()
{
    Zaklad1 zI;
    Zaklad2 zII;
//Wypisuje dane Zakladu I
    cout<<"Zaklad I: ";
    for (int i=0;i<55;++i)
       {
            if (i%5!=0)
            cout<<zI.tab_Z1[i]<<" ";
            else
            {
                cout<<"\n";
                cout<<zI.tab_Z1[i]<<" ";
            }
       }
//Wypisuje dane Zakladu II
    cout<<endl<<endl<<"Zaklad II: ";
    for (int i=0;i<65;++i)
       {
            if (i%5!=0)
            cout<<zII.tab_Z2[i]<<" ";
            else
            {
                cout<<"\n";
                cout<<zII.tab_Z2[i]<<" ";
            }
       }

    cout<<endl<<endl<<endl<<"Podzial na 6 przedzialow od 5 do 65 i zsumowanie wartosci tych przedzialow"<<endl<<endl;
    cout<<zI.przedzial_z1()<<endl<<endl;
    cout<<zII.przedzial_z2()<<endl;


    cout<<endl<<endl;
    return 0;
}

I tak, powinno wypisac wylacznie to co jest w funkcji tzn 5-15: itd, okej wypisuje ale na samym koncu wypisuje 7znakowa liczbe.

Co jest tu nie tak i co nalezaloby poprawic? Bede bardzo wdzieczny za pomoc.

2

Co jest tu nie tak i co nalezaloby poprawic?

Wszystko: duplikacje kodu, mieszanie interfejsu z logika, niezrozumienie idei klas, magiczne cyferki w kodzie, drabinki ifow, drabinki nic nie mowiacych zmiennych, drabinki coutow, nazewnictwo, niekonsekwencje w formatowaniu, masa niepotrzebnych flushowan strumienia.

0

Wszystko: duplikacje kodu, - gdzie niby duplikacja kodu? mam pisac osobna funkcje dla wyswietlenia przedzialow? bez przesady.
mieszanie interfejsu z logika, - czyli?
niezrozumienie idei klas, - rozumiem idee klas :)
magiczne cyferki w kodzie, - nie w kodzie tylko w wyniku pojawiaja sie magiczne cyferki :) czytanie ze zrozumieniem.
drabinki ifow, - to zrob mi podzial danych z tablicy na przedzialy bez drabinki ifow :)
drabinki nic nie mowiacych zmiennych, - pokaz mi te zmienne bo ja ich nie widze :)
drabinki coutow, - zrob to bez drabinki :)
nazewnictwo, - jest takie aby bylo mozna sie polapac co jest co, jesli twoje nazewnictwo polega na x y z to ci wspolczuje
niekonsekwencje w formatowaniu, - czyli?
masa niepotrzebnych flushowan strumienia - czyli?

0

gdzie niby duplikacja kodu?

Widziałeś metody przedzial_z1 oraz przedzial_z2?
Są prawie identyczne, więc po co dwie osobne klasy do tego?

mieszanie interfejsu z logika, - czyli?

Czyli: dlaczego przedzial_z1 oraz ta druga cokolwiek wyświetlają? Powinny tylko zwracać wartość.

to zrob mi podzial danych z tablicy na przedzialy bez drabinki ifow

Mapa oraz druga statyczna tablica 15, 25, 35 (...) albo pojedynczy if. Nasuwa Ci się już rozwiązanie?

niekonsekwencje w formatowaniu, - czyli?

Ponownie zapytam: widziałeś metody przedzial_z1 oraz przedzial_z2?

masa niepotrzebnych flushowan strumienia - czyli?

Chodzi mu o endl, z tego co widzę.

0

2 klasy dla 2 osobnych Zakladow. To jest dopiero poczatek kodu wiec 2 klasy musza byc.
Jesli nie maja wypisywac czegokolwiek tylko zwracac to tu jest moje pytanie - jak? Jesli w programie glownym wtedy wstawie couty przedzialowe z funkcji to jak do danego przedzialu zwrocic po kolei suma_15 suma_25 itd? Probowalem - nie potrafie dlatego zrobilem couty w funkcji.
Co do drabinki ifow nie, nie nasuwa mi wlasnie rozwiazanie...
Chciałbym jeszcze tylko dodać, ze to moje początki z programowaniem na studiach dlatego nic mi nie mowi pojecie mapy ;/

Ale ponownie powiem czytanie ze zrozumieniem, nie chcialem abyscie mi wytykali co gdzie zle tylko dlaczego pokazuje w programie wartosc ktorej wgl nie ma ?

1

Błąd o który Ci chodzi to:

cout<<zI.przedzial_z1()<<endl<<endl;
cout<<zII.przedzial_z2()<<endl;

Nie rób cout tylko je normalnie wywołaj bo w nich wypisujesz.
Coś takiego

zI.przedzial_z1();
zII.przedzial_z2()

Ewentualnie między nie wstaw znak nowej linii.

0

szweszwe dzięki, ze ja na to nie wpadłem ;/. już wszystko jest okej dzieki :)

0

niezrozumienie idei klas, - rozumiem idee klas :)
...
2 klasy dla 2 osobnych Zakladow. To jest dopiero poczatek kodu wiec 2 klasy musza byc.

No czyli nie rozumiesz. Nie powinno się tak projektować klas. Powinna być jedna klasa tego typu, bo obie realizują to samo. Dane powinny być podawane do funkcji/obiektu, a nie trzymane na sztywno w klasie.

drabinki ifow, - to zrob mi podzial danych z tablicy na przedzialy bez drabinki ifow :)
drabinki coutow, - zrob to bez drabinki :)

Wystarczy prosta pętla w tym przypadku.

niekonsekwencje w formatowaniu, - czyli?

głównie wcięcia

duplikacje kodu, - gdzie niby duplikacja kodu? mam pisac osobna funkcje dla wyswietlenia przedzialow?

Troche to ironicznie brzmi, bo właśnie to zrobiłeś w swoim kodzie.

Więcej pokory by ci się przydało

0

na razie obie realizuja to samo, w dalszej czesci kodu czeka nieco wiecej zabawy dlatego mam 2 klasy. Dodatkowo chce oprocz zrobienia samego programu pocwiczyc na nim klasy dlatego nie widze innego rozwiazania.
W przypadku tych ifow jak ta petla powinna wyglad? Osobiscie nic mi do glowy nie przychodzi to jedyny sposob na jaki wpadlem. A co do wciec to niewiem w czym problem? Wciecia robie tak aby kod byl czytelny uwzgledniajac wszystko po kolei, przeciez nie bede pisal wszystko linia pod linia...

Bylbys w stanie mi pokazac jak zrobic ta petle dla ifow i coutow i ewentualnie jak zrobic zwracanie z tych funkcji zamiast wypisywania?

0

gdzie niby duplikacja kodu?

Spojrz na swoje: pola, klasy, metody, main.

niezrozumienie idei klas, - rozumiem idee klas :)

Kod mowi co innego, komu mam uwierzyc?

magiczne cyferki w kodzie

A 65 przy for w main to nie jest magiczna cyferka?

pokaz mi te zmienne bo ja ich nie widze :)

    int suma_15=0;
    int suma_25=0;
    int suma_35=0;
    int suma_45=0;
    int suma_55=0;
    int suma_65=0;

drabinki coutow, - zrob to bez drabinki :)

Prymitywnie badz Nie

nazewnictwo, - jest takie aby bylo mozna sie polapac

zI, i od razu wiadomo co autor mial na mysli.

niekonsekwencje w formatowaniu

Spojrz na for w main i for w metodzie.

masa niepotrzebnych flushowan strumienia - czyli?

W programowaniu, jak i w medycynie, przed uzyciem nalezy skonsultowac sie z trescia ulotki.

nie chcialem abyscie mi wytykali co gdzie zle tylko dlaczego pokazuje w programie wartosc ktorej wgl nie ma

To czemu w Twoim poscie, jest tylko jedno pytanie, ktore mowi o czyms zupelnie innym?

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