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

Największy element/najmniejszy - C

Object Storage Arubacloud
0 głosów
550 wizyt
pytanie zadane 2 listopada 2018 w C i C++ przez gorgonkowa Obywatel (1,810 p.)

Siemka. Chciałabym się Was spytać, jak zrobić program, który wypisze na ekran największy i najmniejszy element, i co najważniejsze - użytkownik sam wpisuje ilość danych. Próbowałam na podstawie tego kodu:
 

#include <stdlib.h>

typedef struct
{
    char nazwisko[20], imie[20];
    int rok_ur;
    float srednia;
} TDane;

typedef struct
{
    TDane d;
    struct TElement* next;
} TElement;

typedef TElement* TWsk;

int main()
{
    TDane x;
    TWsk P;
    P=NULL;
    WprowadzDane(&P);
    printf("\nWprowadzono nastepujace dane: \n");
    UsunStos(&P);
    return 0;
}

int WprowadzStudenta(TDane *x)
{
    printf("Podaj nazwisko: ");
    scanf("%s", x->nazwisko);
    printf("Podaj imie: ");
    scanf("%s", x->imie);
    printf("Podaj rok urodzenia: ");
    scanf("%d", &x->rok_ur);
    printf("Podaj srednia: ");
    scanf("%f", &x->srednia);
    return 0;
}

int WyswietlStudenta(TDane x)
{
    printf("%s %s %d %4.2f\n", x.nazwisko, x.imie, x.rok_ur, x.srednia);
    return 0;
}

int NaStos(TWsk *P, TDane x)
{
    TWsk Q;
    Q=(TElement*)malloc(sizeof(TElement));
    Q->d=x;
    Q->next=(*P);
    (*P)=Q;
    return 0;
}

int ZeStosu(TWsk *P, TDane *x)
{
    TWsk Q;
    if(P!=NULL)
    {
        Q=(*P);
        *x=Q->d;
        (*P)=Q->next;
        free(Q);
    }
    return 0;
}

int WprowadzDane(TWsk *P)
{
    int n, i;
    TDane x;
    printf("Dane ilu osob chcesz wprowadzic?: ");
    scanf("%d", &n);
    for(i=1; i<=n; i++)
    {
        printf("%d osoba: \n", i);
        WprowadzStudenta(&x);
        NaStos(&(*P), x);
    }
    return 0;
}

int UsunStos(TWsk *P)
{
    TDane x;
    while((*P)!=NULL)
    {
        ZeStosu(&(*P), &x);
        WyswietlStudenta(x);
    }
    return 0;
}

int WyswietlStos(TWsk P)
{
    while (P!=NULL)
    {
        WyswietlStudenta(P->d);
        P=P->next;
    }
    return 0;
}

Zrobić tak:
 

int NajwiekszyElement(TWsk P)
{
    int najwiekszy = 0;
    int ile = 0;
    while(P!=NULL)
    {
        if(P->d.rok_ur>najwiekszy)
        najwiekszy = P->d.rok_ur;
        ++ile;
        P = P->next;
    }
    if(ile==0)
    {
        printf("Brak najwiekszego elementu!");
        return 0;
    }

    return 0;
}

W głowie wiem, że największy element jest tylko wtedy, gdy jest on większy od wszystkich pozostałych, jednak tutaj nie wiem czy czegoś nie pomieszałam. Byłabym wdzięczna za pomoc.

2 odpowiedzi

0 głosów
odpowiedź 2 listopada 2018 przez RafalS VIP (122,820 p.)

Polecam zwrocic wynik i potestowac czy dziala

return najwiekszy;

Na moje oko powinno zadzialac o ile lata sa dodatnie.

komentarz 2 listopada 2018 przez gorgonkowa Obywatel (1,810 p.)
Niestety, nie zwracam wyniku po return najwiekszy. Może te warningi coś blokują:
1) Assignment from incompatible pointer type [-Wincompatible-pointer-types]

2) Incompatible implicit declaration of built-in function "printf"
3) Note: include <stdio.h> or provide a declaration "printf"

Te warningi wyrzuca z tej funkcji. Czy są one w jakiś sposób istotne? :)
komentarz 2 listopada 2018 przez Marcin Siniarski Gaduła (4,420 p.)
Wystarczy wygooglować, naprawdę
1) Nie poprawne typy wskaźników. Sprawdź czy przypisujesz wskaźnik do odpowiedniej zmiennej
2) Aby używać printf potrzebujesz nagłówka stdio.h
0 głosów
odpowiedź 2 listopada 2018 przez Bondrusiek Maniak (61,410 p.)

Witam,

moi zdaniem możesz poprawić kod funkcji

int NajwiekszyElement(TWsk* P) //P powinno być wskaźnikiem aby móc przyrównać do NULL //i -> do obsługi elementów
{
   if(P == NULL){
       printf("Brak najwiekszego elementu!");
       return -1; //jesli P jest pustym wskaźnikiem zwraca -1
   }
//najwiekszy element to jest o zerowym indeksie
    int najwiekszy = P->d.rok;
    P = P->next;   
//w petli jesli istnieją są porównywalne elementy i zamieniane dla największej //wartości 
    while(P!=NULL)
    {
        if(P->d.rok_ur>najwiekszy)
{
        najwiekszy = P->d.rok_ur;
}
        P = P->next;
    }

 //zwraca najwieksza wartosc dla rok
    return najwiekszy;
}

 

Podobne pytania

0 głosów
2 odpowiedzi 1,438 wizyt
+3 głosów
6 odpowiedzi 1,810 wizyt
pytanie zadane 4 lipca 2016 w HTML i CSS przez jankiel89 Początkujący (450 p.)
0 głosów
1 odpowiedź 2,315 wizyt
pytanie zadane 24 listopada 2017 w C i C++ przez niezalogowany

92,632 zapytań

141,500 odpowiedzi

319,879 komentarzy

62,013 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...