Struktury, wskaźniki, wyświetlanie/wczytywanie

Odpowiedz Nowy wątek
2019-02-10 17:18
0

Siemka, chciałem potwierdzić czy zadanie zgadza się z treścią polecenia i zapytać o jedną rzecz.
Treść zadania:
W programie zdefiniuj strukturę TStudent o polach: nazwisko, imię, srednia. Napisz funkcje wczytujące z klawiatury i wypisujące na ekran dane studenta. Parametrem powyższych funkcji ma być struktura przekazana przez wskaźnik. Rozbuduj program tak, aby tworzył bazę studentów. Wczytaj liczbę studentów, przydziel pamięć i wczytaj dane. Napisz funkcję obliczającą i zwracającą średnią wszystkich studentów.

Nie jestem pewien czy spełniam w 100% polecenie i myślałem jeszcze o tym jak wyświetlić na ekranie dane wybranego przez siebie studenta, //wyswietl(wektor_stud[0]); takie coś jest błędne bo funkcja wyświetl nie przyjmuje wektora tylko zmienną typu Tstudent, czy w takim razie musiałbym zmienić argument w funkcji wyświetl i jest to jedyny sposób?

#include <iostream>
#include <vector>
using namespace std;

struct Tstudent
{
    string imie;
    string nazwisko;
    double srednia;
};

Tstudent wczytaj(Tstudent *student)
{
    cout<<"Imie"<<endl;
    cin>>student->imie;
    cout<<"Nazwisko"<<endl;
    cin>>student->nazwisko;
    cout<<"Srednia"<<endl;
    cin>>student->srednia;
    return *student;
}
void wyswietl(Tstudent *student)
{
    cout<<student->imie<<endl;
    cout<<student->nazwisko<<endl;
    cout<<student->srednia<<endl;
}
double f_srednia(vector<Tstudent> wektor){
    double srednia;
    for(int i=0; i<wektor.size(); i++){
        srednia = srednia + wektor.at(i).srednia;
    }
    return srednia/wektor.size();
}
int main()
{
    int liczba_studentow;
    cout<<"Podaj liczbe studentow "<<endl;
    cin>>liczba_studentow;
    vector<Tstudent> wektor_stud;
    Tstudent *stud = new Tstudent;

    for(int i=0; i<liczba_studentow; i++)
    {
        cout<<"Dane "<<i+1<<" studenta. "<<endl;
        wektor_stud.push_back(wczytaj(stud));

    }
    cout<<"Srednia "<<wektor_stud.size()<<" studentow = "<<f_srednia(wektor_stud);
    //wyswietl(wektor_stud[0]);
        return 0;
    }
edytowany 1x, ostatnio: Tomek Nadrowski, 2019-02-10 17:20

Pozostało 580 znaków

2019-02-11 10:12
DRK
0
  1. Brakuje #include <string>.
  2. W funkcji f_srednia zmienną srednia musisz zainicjować wartością 0, żeby wynik był poprawny.
  3. Funkcja wyswietl przyjmuje wskaźnik do struktury, więc trzeba jej podać adres konkretnego elementu wektora:
    for (int i = 0; i < wektor_stud.size(); ++i)
    {
        wyswietl(&wektor_stud[i]);
    }
  4. Skoro funkcja wczytaj ustawia wartości struktury przez wskaźnik, to nie musi nic zwracać:
    wczytaj(stud);
    wektor_stud.push_back(*stud);
  5. Przydzieliłeś pamięć dynamicznie operatorem new, więc powinieneś ją zwolnić, gdy już nie jest używana:
    delete stud;
edytowany 1x, ostatnio: DRK, 2019-02-11 10:31

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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