Zwracanie struktury przez funkcję

Odpowiedz Nowy wątek
2018-12-28 22:29

Rejestracja: 1 rok temu

Ostatnio: 1 miesiąc temu

0

Witam, mam problem z tym zadaniem "napisać funkcję, która zwróci najwyższą osobę wśród osób podanych jako tablica.. Następnie wyświetl jej dane w programie głównym."

struktura:

struct Osoba {
    char imie[20];
    char nazwisko[20];
    int wiek;
    float waga;
    float wzrost;
};

dalej wczytuje sobie różne dane do tablicy osób i mam problem z działaniem funkcji:

Osoba najwyzsza(Osoba osoba[], int n) {
    float max = 0.0;
    for (int i = 0; i < n; i++) {
        if (max < osoba[i].wzrost) max = osoba[i].wzrost;
    }
    osoba[n].wzrost = max;

    return osoba[n];
}

int main(){
int n = 5;
Osoba osoba[5];
Osoba osobanaj = najwyzsza(osoba, n);
wyswietlanie(osobanaj); //funkcja do wyswietlania
}

w jaki sposób mogę zwrócić całą osobę o znalezionym największym wzroście?

Pozostało 580 znaków

kq
2018-12-28 22:35
kq
Moderator C/C++

Rejestracja: 6 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Szczecin

0
osoba[n].wzrost = max;

czemu modyfikujesz tablicę podczas szukania? W ogóle, n jest za dużym indeksem dla tej tablicy.

Skasuj całość i napisz od nowa, algorytm wygląda tak:

  • za największy przyjmij pierwszy element tablicy (zapamiętaj indeks albo wskaźnik)
  • każdy kolejny element
    • porównaj z obecnym największym
    • jeśli jest większy: zapamiętaj obecny (jego indeks/wskaźnik) jako największy
  • zwróć największy element

Pozostało 580 znaków

2018-12-28 22:47

Rejestracja: 1 rok temu

Ostatnio: 1 miesiąc temu

0

W jaki sposób mam zapamiętać wskaźnik/indeks? Nie bardzo wiem jak to zapisać
mam coś takiego na razie

Osoba najwyzsza(Osoba osoba[], int n) {
    float max = osoba[0].wzrost;
    for (int i = 0; i < n; i++) {
        if (osoba[i].wzrost>max) max = osoba[i].wzrost;
    }

Pozostało 580 znaków

kq
2018-12-28 22:52
kq
Moderator C/C++

Rejestracja: 6 lat temu

Ostatnio: 1 godzina temu

Lokalizacja: Szczecin

1
Osoba const& najwyzsza(Osoba* osoby, int liczba)
{
    Osoba* max = &osoby[0];
    for(int i = 1; i < liczba; i++) {
        if(max->wzrost < osoby[i].wzrost)
            max = &osoby[i];
    }
    return *max;
}

Pozostało 580 znaków

2018-12-28 22:55

Rejestracja: 1 rok temu

Ostatnio: 1 miesiąc temu

0

dziękuję

Pozostało 580 znaków

Odpowiedz

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