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

Tablica max i min + pozycja

Object Storage Arubacloud
0 głosów
3,124 wizyt
pytanie zadane 10 marca 2018 w C i C++ przez giedymin33 Początkujący (290 p.)

Co jest źle? Potrzebuje też pozyskać pozycje MIN i MAX w tablicy i ją wyświetlić przy wyświetleniu jaki element jest najmniejszy i najwiekszy

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

int main()
{
    int tab[15];
    int i,max,min;

    max=0;
    min=0;
    printf("Witam. Wczytaj 15 roznych liczb do tablicy.\n");
    printf("Kontynuuj ENTEREM\n");
    getch();

    for (i=1;i<=15;i++)
    {
        printf("Podaj %d liczbe do tablicy: ",i);
        scanf("%d",&tab[i]);
    }
    min=tab[0];

    for (i=0;i<15;i++)
    {
        if (tab[i]<min)
        {
            min=tab[i];
        }
    }
    printf("Element minimalny  to:%d \n",min);

    max=tab[0];
    for (i=0;i<15;i++)
    {
        if (tab[i]>max)
        {
            max=tab[i];
        }
    }
    printf("Element maksymalny  to:%d \n",max);



    return 0;
}

 

5 odpowiedzi

0 głosów
odpowiedź 11 marca 2018 przez mokrowski Mędrzec (155,460 p.)
wybrane 14 marca 2018 przez giedymin33
 
Najlepsza

Koledzy pokazali Ci elementarne błędy. Ja zaproponuję dalszy tok...

Masz błąd koncepcyjny. Określenie wartości min i max można wykonać w 1 przebiegu pętli. Zbędne są 2 przebiegi.

Przed wykonaniem pętli wartość min powinna wynosić maksymalną wartość int którą pobierzesz z <limits.h> ( będzie to INT_MAX) a wartość max powinna wynosić minimalną wartość dla typu int (INT_MIN).

Typem indeksu powinien być size_t.

Poprawna sygnatura funkcji main(...) to: int main(void)

Pierwsza poprawka:

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

int main(void)
{
    int tab[15];
    size_t i;
    int max = INT_MIN;
    int min = INT_MAX;

    printf("Witam. Wczytaj 15 roznych liczb do tablicy.\n");
    printf("Kontynuuj ENTEREM\n");

    for (i = 0; i < 15; ++i)
    {
        printf("Podaj %zu liczbe do tablicy: ", i + 1);
        scanf("%d", &tab[i]);
    }

    for (i = 0; i < 15; ++i)
    {
        if (tab[i] < min)
        {
            min = tab[i];
        }
        if(tab[i] > max)
        {
            max = tab[i];
        }
    }

    printf("Element minimalny  to: %d\n", min);
    printf("Element maksymalny  to: %d\n", max);

    return 0;
}

Bardziej ogólne podejście do problemu to:

1. Wczytaj dane do tablicy.

2. Znajdź wartość minimalną i maksymalną.

3. Wypisz wartość minimalną i maksymalną.

Podział na funkcje:

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

int max = INT_MIN;
int min = INT_MAX;

void read_values(int * tab, size_t size)
{
    size_t i;
    printf("Witam. Wczytaj 15 roznych liczb do tablicy.\n");
    printf("Kontynuuj ENTEREM\n");
    for (i = 0; i < size; ++i)
    {
        printf("Podaj %zu liczbe do tablicy: ", i + 1);
        scanf("%d", &tab[i]);
    }
}

void min_max(int * tab, size_t size)
{
    size_t i;
    for (i = 0; i < size; ++i)
    {
        if (tab[i] < min)
        {
            min = tab[i];
        }
        if(tab[i] > max)
        {
            max = tab[i];
        }
    }
}

void show_result(void)
{
    printf("Element minimalny  to: %d\n", min);
    printf("Element maksymalny  to: %d\n", max);
}

int main(void)
{
    int tab[15];

    read_values(tab, 15);
    min_max(tab, 15);
    show_result();

    return 0;
}

Sukces (czyli wszystko poszło dobrze) z main(..), jest wartość EXIT_SUCCESS z <stdlib.h>.

Wartość minimalna i maksymalna z tablicy to para wartości. Można zrobić z tego strukturę.

Do wyświetlenia wartości, można przekazać strukturę.

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

typedef struct {
    int min_value;
    int max_value;
} min_max_t;

void read_values(int * tab, size_t size)
{
    size_t i;
    printf("Witam. Wczytaj %zu roznych liczb do tablicy.\n", size);
    printf("Kontynuuj ENTEREM\n");
    for (i = 0; i < size; ++i)
    {
        printf("Podaj %zu liczbe do tablicy: ", i + 1);
        scanf("%d", &tab[i]);
    }
}

min_max_t min_max(int * tab, size_t size)
{
    int max = INT_MIN;
    int min = INT_MAX;
    size_t i;
    for (i = 0; i < size; ++i)
    {
        if (tab[i] < min)
        {
            min = tab[i];
        }
        if(tab[i] > max)
        {
            max = tab[i];
        }
    }
    min_max_t result = {min, max};
    return result;
}

void show_result(min_max_t value)
{
    printf("Element minimalny  to: %d\n", value.min_value);
    printf("Element maksymalny  to: %d\n", value.max_value);
}

int main(void)
{
    int tab[15];

    read_values(tab, 15);
    min_max_t result = min_max(tab, 15);
    show_result(result);

    return EXIT_SUCCESS;
}

W kodzie powtarza się "magiczna wartość" 15. Należy ją zdefiniować do ponownego użycia. Konserwatywnym rozwiązaniem jest #define:

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

#define NUM_ELEMENTS 15

typedef struct {
    int min_value;
    int max_value;
} min_max_t;

void read_values(int * tab, size_t size)
{
    size_t i;
    printf("Witam. Wczytaj %zu roznych liczb do tablicy.\n", size);
    printf("Kontynuuj ENTEREM\n");
    for (i = 0; i < size; ++i)
    {
        printf("Podaj %zu liczbe do tablicy: ", i + 1);
        scanf("%d", &tab[i]);
    }
}

min_max_t min_max(int * tab, size_t size)
{
    int max = INT_MIN;
    int min = INT_MAX;
    size_t i;
    for (i = 0; i < size; ++i)
    {
        if (tab[i] < min)
        {
            min = tab[i];
        }
        if(tab[i] > max)
        {
            max = tab[i];
        }
    }
    min_max_t result = {min, max};
    return result;
}

void show_result(min_max_t value)
{
    printf("Element minimalny  to: %d\n", value.min_value);
    printf("Element maksymalny  to: %d\n", value.max_value);
}

int main(void)
{
    int tab[NUM_ELEMENTS];

    read_values(tab, NUM_ELEMENTS);
    min_max_t result = min_max(tab, NUM_ELEMENTS);
    show_result(result);

    return EXIT_SUCCESS;
}

 

0 głosów
odpowiedź 10 marca 2018 przez Tomasz90 Nałogowiec (25,140 p.)
linia 15 - wychodzisz poza zakres tablicy
0 głosów
odpowiedź 10 marca 2018 przez mbabane Szeryf (79,280 p.)

Linia 13 tam powinno być zdaje się getchar().

Błąd masz też w pierwszej pętli for, w której pobierasz dane od użytkownika, chodzi o to że pomijasz pierwszy element tablicy (tab[0]) i wychodzisz poza zakres w tej pętli.

Co do indeksów to musisz po prostu w jakiś sposób zapamiętać i wyświetlić odpowiednią wartość po zakończeniu szukania (podobnie jak ze zmienną max min),

0 głosów
odpowiedź 10 marca 2018 przez Paweł Dymek Bywalec (2,300 p.)

Ostatnia kwestia, to w gruncie rzeczy nie jest błąd sam w sobie, ale zmienne min i max to zmienne pomocnicze pozwalające chwilowo zapamiętać najniższą a potem najwyższa wartość. Nie potrzebujesz do tego dwóch zmiennych, wystarczy jedna

int tmp=tab[0];

i możesz użyć jej w obu pętlach, bo po znalezieniu najniższej i wypisaniu na ekran już jej nie potrzebujesz.

0 głosów
odpowiedź 10 marca 2018 przez Beginer Pasjonat (22,110 p.)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

int main()
{
    int tab[15];
    int i, max, min, indeks;

    max = 0;
    min = 0;
    printf("Witam. Wczytaj 15 roznych liczb do tablicy.\n");
    printf("Kontynuuj ENTEREM\n");
    getch();

    for (i = 0; i < 15; i++)
    {
        printf("Podaj %i.liczbe do tablicy: ", i + 1);
        scanf("%d", &tab[i]);
    }

    min = tab[0];
    indeks = 0;
    for (i = 0; i < 15; i++)
    {
        if (tab[i] < min)
        {
            indeks = i;
            min = tab[i];
        }
    }
    printf("Element minimalny to: %i \n", min);
    printf("Element minimalny ma indeks: %i \n", indeks);

    max = tab[0];
    for (i = 0; i < 15; i++)
    {
        if (tab[i] > max)
        {
            indeks = i;
            max = tab[i];
        }
    }
    printf("Element maksymalny to: %i \n", max);
    printf("Element maksymalny ma indeks: %i \n", indeks);

    return 0;
}

Powyżej zamieściłem kompletny, poprawiony kod programu.

P.S. Brakowało nagłówka conio.h

Zwróc również uwagę, że wyświetlane indeksy dla min i max będą o jedność mniejsze, poniewaz indeksy tablic zaczynaja sie od zera.

Podobne pytania

0 głosów
1 odpowiedź 1,587 wizyt
pytanie zadane 29 maja 2018 w JavaScript przez C1chutki Nowicjusz (120 p.)
0 głosów
1 odpowiedź 1,265 wizyt
pytanie zadane 19 grudnia 2017 w Java przez Ohnne Nowicjusz (180 p.)
0 głosów
1 odpowiedź 1,350 wizyt
pytanie zadane 14 maja 2016 w C i C++ przez Evelek Nałogowiec (28,960 p.)

92,568 zapytań

141,424 odpowiedzi

319,629 komentarzy

61,956 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!

...