C++ - liczenie średniej w strukturze

0

Witam

Jak obliczyć średnią z danych wczytywanych z pliku do struktury?

Mam fragment kodu:

plik >> dane.srednia

W pliku podana jest średnia kilku studentów, ładnie są wczytywane do struktury. Jak teraz obliczyć srednie tych studentów?

Proszę o odpowiedź.!!

0

Dodać je do siebie i podzielić przez ich ilość?

0

Ale jak zsumować np. 4 danych typu float wczytywanych do jednej struktury dane.srednia?

"+=" nie działa... :/ Albo coś źle robię.

Jak ich ilość "mieć"? Jak z pliku ich ilość wyciągnąć?

0

Pokaż ten kod..

0

Kod jest OK, Chodzi mi o algorytm obliczania sredniej przy uzyciu struktury, do zmiennej dane.srednia wczytywane sa 4 wartosci w petli while.

0

Widzę, że się z tobą nie dogadamy.. Pokaż jak wygląda ta struktura!!! Tam jest jakiś Vector, Lista a może po prostu cztery zmienne a,b,c,d? Algorytm na liczenie średniej podał Ci byku jak byś nie zauważył, Panie "Kod" jest OK"

0

Struktura to 4 zmienne.

imie
nazwisko
grupa
srednia

0

Czyli wnioskuję, ze tworzysz 4 obiekty struktury, a nie wczytujesz wszystkich danych do jednego obiektu..

#include<iostream>
#include<vector>
using namespace std;
struct A{
    int srednia;
};
float Avarage(vector<A>tab){
    float suma=0;
    for(int i=0;i<tab.size();i++)
        suma += tab[i].srednia;
    return suma/tab.size();
}
int main(){
    vector<A>tab;
    for(int i=0;i<4;i++){
        A a;
        a.srednia = i+2;
        tab.push_back(a);
    }
    cout<<Avarage(tab);
    return 0;
}
0

W pliku mam 4 linijki, w każdej inne dane:

Treść pliku:

3.24 22 Adam Nowak B
4.43 20 Tomek Poreba A
4.23 19 Lukasz Kolak S
3.12 20 Tobiasz Kowalski F

I tak:

Z każdej linijki średnią (pierwsze pozycje) wczytuje do struktury " dane.srednia. " Imie wczytuje do dane.imie itd.

Chodzi o to, aby po wczytaniu wszystkich średnich do "dane.srednia" móc obliczyć średnią arytmetyczną.

P.S. Wczytuje w petli while.

0

Powiedz mi, czy Ty nie widzisz, że za każdym razem nadpisujesz do dane.srednia nowe dane i suma sumarum na końcu nie będziesz miał w pamięci tych wartości, tylko wartość ostatniej linijki
3.12 20 Tobiasz Kowalski F
Więc kod nie jest ok, tylko jest do du**. Tak jak mówiłem pokaż cały kod inaczej nic nie zdziałamy..

0

dziala to tak jak chcialem, bo potem wyswietlam elementy w petli i jest wszystko ok.

Wszystkie elementy mi wyswietla prawidlowo z pliku. Tak samo jak wykonuje na nich operacje zamiany itd.

jak zrobic wiec, by moc obliczyc srednia tych danych?

0

Skoro działa tak jak chciałeś, to dlaczego nie potrafisz obliczyć średniej?:) Pokażesz łaskawie ten kod? Nie wróżymy tutaj z fusów.Pewnie Wypisuje Ci je tylko w momencie wczytania z pliku. W takim razie stwórz zmienną pomocniczą i zapisz w niej sumę wszystkich wczytywanych elementów, później podziel przez ilość elementów.. Jeżeli to nie zadziała, to albo pokaż kod, albo nas nie męcz..

0

Ale czego kod, skoro nie mam kodu tego algorytmu obliczania średniej?

0

Jak nie masz algorytmu? Sumujesz wszystko i dzielisz przez ilość elementów, koniec algorytmu. Człowieku, napisz, żeś w końcu o co Ci chodzi.

0

Możesz ją obliczyć nie wczytując do pamięci na raz wszystkich elementów:

#include<iostream>
#include<string>
#include<fstream>
using namespace std;
struct Dane{
    string imie;
    string nazwisko;
    string grupa;
    int wiek;
    float srednia;
};
int main(){
    ifstream in("plik.txt");
    Dane temp;
    float suma = 0;
    while(in>>temp.srednia>>temp.wiek>>temp.imie>>temp.nazwisko>>temp.grupa){
        suma += temp.srednia;
    }
    in.close();
    cout<<suma/4<<endl;
    return 0;
}

Możesz również obliczyć to wczytując do pamięci wszystkie elementy, gdybyś chciał później wykonywać na nich jakieś operacje:

#include<iostream>
#include<vector>
#include<string>
#include<fstream>
using namespace std;
struct Dane{
    string imie;
    string nazwisko;
    string grupa;
    int wiek;
    float srednia;
};
float Avarage(vector<Dane>tab){
    float suma=0;
    for(int i=0;i<tab.size();i++)
        suma += tab[i].srednia;
    return suma/tab.size();
}
int main(){
    vector<Dane>tab;
    ifstream in("plik.txt");
    Dane temp;
    while(in>>temp.srednia>>temp.wiek>>temp.imie>>temp.nazwisko>>temp.grupa){
        tab.push_back(temp);
    }
    in.close();
    cout<<Avarage(tab);
    return 0;
}

I ogólnie nie mogę już Ciebie czytać człowieku..

0

cout<<suma/4<<endl;

Chodzi o tą czwórkę. Jesli w pliku dodam studentów, to aby moc obliczyć większą liczbe studentów trzeba by ingerować w kod.

Prosze jeszcze o poradę, jak to "zautomatyzować" . Jeśli w pliku będę miał np. 7 studentów, to musiałbym kod zmieniać... a tak to chciałbym to jakoś "zautomatyzxować"

0

Dodajesz licznik, który zwiększasz po każdym obiegu pętli. Później dzielisz sume, przez licznik. Widzę, że jesteś gorzej niż zielony.. ale proszę zrób chociaż to sam i pokaż, że nie na darmo naklepałem te kilka linijek..

0

Gotowe. Dzięki za podpowiedź :)

Programowanie nie było moją pasją nigdy, no ale zaliczyć trzeba.

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