• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

struktury wskaznik

0 głosów
346 wizyt
pytanie zadane 31 stycznia 2020 w C i C++ przez rysiek5555 Początkujący (300 p.)

Mam strukturę uczen która ma (imie,nazwisko, rok studiow i date urodzenia), Mam napisac funkcje ktora zwraca indeks ucznia, ktory jest najstarszy na wskazanym roku(jesli jest takich uczniów kilku to zwraca indeks pierwszego z nich).

int najstarszy(G , ilość, rok)

struct uczen *G; int ilość; int rok 

G jest wskaznikiem do struktury, ilosc podajemy dla ilu uczniow przeprowadzic analize.

#include <stdio.h>
#include <stdlib.h>

struct uczen
{
    char imie[10];
    char nazwisko[30];
    int  rok;
    char data[15];
};

int najstarszy(G,ilosc,rok)
struct uczen*G;int ilosc;int rok;
{





}

Mógłby ktoś pomoc nakierować jak to zrobić już godzinę szukam pomysłu. Wystarczy napisać tylko tą funkcję bez funkcji main. Dopiero uczę się struktur. 

komentarz 31 stycznia 2020 przez adrian17 Mentor (355,180 p.)
int najstarszy(G,ilosc,rok)
struct uczen*G;int ilosc;int rok;

Popraw tą deklarację funkcji, to nie lata osiemdziesiąte, od kilkudziesięciu lat mamy standard C :P

1 odpowiedź

0 głosów
odpowiedź 31 stycznia 2020 przez Bondrusiek Maniak (61,460 p.)

Po kolei. Możesz to zrobić tak:

Najpierw tworzysz strukturę, która posiada pewne pol w tym przypadku(imie, nazwisko, rok, data). W kolejnym kroku tworzysz tablice statyczną bądź dynamiczną. Następnie wypełniasz stworzoną strukturę danymi a na końcu dane do funkcji, która zwraca indeks osoby najstarszej.

#include <cstdio>
#include <cstdlib>

using namespace std;

struct uczen
{
    char imie[10];
    char nazwisko[30];
    int  rok;
    char data[15];
};
int najstarszy(uczen uczniowie[], int  ilosc);
int main()
{
    uczen* uczniowie = (uczen*) malloc(4);
    uczniowie[0].rok = 1999;
    uczniowie[1].rok = 2000;
    uczniowie[2].rok = 1994;
    uczniowie[3].rok = 2001;
    printf("Najstarszy uczen ma index %d\n", najstarszy(uczniowie, 4));
    free(uczniowie);
    return 0;
}

int najstarszy(uczen uczniowie[], int  ilosc)
{
    int index = 0;
    int najstarszy = uczniowie[0].rok;
    for( int i = 1; i < ilosc; ++i)
    {
        if( uczniowie[i].rok < najstarszy)
        {
            najstarszy = uczniowie[i].rok;
            index = i;
        }
    }
    return index;
}

 

komentarz 31 stycznia 2020 przez adrian17 Mentor (355,180 p.)
uczen* uczniowie = (uczen*) malloc(4);

Ten malloc() jest błędny (on nie działa jak `new`, tutaj podajesz liczbę bajtów).

komentarz 31 stycznia 2020 przez adrian17 Mentor (355,180 p.)
I to miało liczyć "na zadanym roku"; a w tym kodzie ani nie filtrujesz po roku, ani nie patrzysz na datę.

Ale ogólnie idea OK.
komentarz 31 stycznia 2020 przez Bondrusiek Maniak (61,460 p.)
Ok, dzięki za ocenę. To rozwiązanie tak na szybko. Na pewno da się to zrobić dużo lepiej.

Podobne pytania

0 głosów
1 odpowiedź 374 wizyt
pytanie zadane 7 marca 2021 w Sprzęt komputerowy przez Cixo Gaduła (4,070 p.)
0 głosów
0 odpowiedzi 626 wizyt
pytanie zadane 17 stycznia 2019 w Visual Basic przez Szymonwest Nowicjusz (120 p.)
0 głosów
1 odpowiedź 363 wizyt
pytanie zadane 14 października 2017 w HTML i CSS przez niezalogowany

93,733 zapytań

142,669 odpowiedzi

323,287 komentarzy

63,293 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...