Programowanie obiektowe, podstawy, średnia z wartości w tablicy

0

W metodzie głównej utworzyłem sobie tablicę, oraz wprowadzam dane do tej tablicy z klawiatury. Uczę się dopiero programowania obiektowego w c++, zatem mam pytanie. Chciałbym utworzyć klasę Statystyka, a w niej metodę, która obliczy mi średnią z wartości tablicowych.

# include <stdio.h>
# include <iostream.h>
# include <conio.h>

int main(void)
{
    cout<<"Wprowadz dane do tablicy:"<<endl;
    int tablica[5];
    for(int i=0;i<5;i++)
    {
            cout<<"Wprowadz liczbe calkowita"<<endl;
            cin>>tablica[i];
    }
    for(int i=0;i<5;i++)
    {
            cout<<"Efekt:"<<tablica[i]<<endl;
    }
    getch();
    return 0;
} 

Proszę o wytłumaczenie. Programowanie wchodzi mi bardzo opornie, wcześniej miałem C#, ale teraz mamy C++ i muszę ogarnąć pewne elementy..

Dopisałem, ale pewnie źle bo mam 4 błędy:

class Statystyka
{
      int tablica[5]; //Wchodzi Tablica z metody głównej?
      int suma=0; //Deklaruje suma=0?
      
};
void Statystyka::srednia(int tablica[5]) //Tu nie wiem co dalej :(
{
    for(int i=0;i<5;i++)
    {
           suma=suma+tablica[i];
    }
    
} 
0

To jest dobrze, ale musisz jeszcze zadeklarować tą metodę w klasie i umożliwić sposób zmiany tablicy z zewnątrz. Oraz nie powinieneś przekazywać parametru, klasa ma swoje własne pola. I jeszcze kilka poprawek...

class Statystyka
{
    private:
        int tablica[5]; 
    public:
        int srednia();
        void zmienWartosc(int indeks, int wartosc); // można też zrobić "Dodaj wartość" automatycznie dodające na koniec
};

int Statystyka::srednia() // zakładam że liczymy średnią z wszystkich elementów?
{
    int suma = 0;
    for(int i=0;i<5;i++)
    {
           suma=suma+tablica[i];
    }    
    return suma / 5;
} 

void Statystyka::zmienWartosc(int indeks, int wartosc)
{
    tablica[indeks] = wartosc;
}

Nie kompilowałem kodu, ale powinno być ok.

0

Nie tak.
Po pierwsze to tablicę utworzyłeś w funkcji głównej, nie w metodzie.
Po drugie wywal conio.h.
Po trzecie pomyśl czy statystyka na pewno będzie klasą? Może lepiej będzie mieć klasę MojaTablica, która będzie implementowała funkcję wczytywania liczb oraz funkcję średnia?
Tylko jeszcze przyda się jakieś sprawdzanie czy wczytywane liczby to liczby.

To będzie coś takiego:

class MojaTablica{
	private:
		int tab[100];
	public:
		void wprowadz_dane();
		void srednia();
}

void MojaTablica::srednia(){
	//Tu kod obliczający średnią. 
	// do tablicy dostajesz się poprzez this->tab
}
0

Możesz mi napisać drugi fragment kodu bo za bardzo właśnie nie wiem jak. "Słówko this oznacza, że funkcja odwołuje się do pól klasy(a konkretniej jej przyszłej instancji), w której została zdefiniowana." Wszystko pięknie na wiki, ale brak przykładu, a to boli :(

0

this jest wskaźnikiem do obiektu na rzecz którego jest wywoływana metoda, czyli konkretnej instancji danej klasy. Dzięki temu metoda wie na jakim obiekcie pracuje. Ten wskaźnik jest do metody przekazywany niejawnie.

Imho pomysł matiit nie jest najlepszy. MSM dał lepsze rozwiązanie

0

Rozumiem, ale nie wiem jak za pomoc a-> odwołać się do tablicy.

0

Tzn.? Po co się chcesz do niej odwoływać i gdzie?

0
 // class MojaTablica{
        private:
                int tablica[5];
        public:
                void wprowadz_dane();
                void srednia();
}
 
void MojaTablica::srednia(){
     int suma=0;
float srednia;
        for(int i=0;i<5;i++)
        {
                suma=suma+tablica[i];
        }
srednia=suma/5;
//Tu kod obliczający średnią. 
        // do tablicy dostajesz się poprzez this->tab
} 
0

Teraz chciałbym za pomocą instrukcji warunkowej wywołać funkcję, aby wynik się pokazał:

 cout<<"s - oblicz srednia z tablicy"<<endl;
    cout<<"e - oblicz sume elementow tablicy"<<endl;
    cout<<"m - minimalna i maksymalna wartosc tablicy"<<endl;
    if(znak=='t')
    {
//co tu wpisać Panowie
    }

Pozdrawiam!

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