Wyświetlenie wartości minimalnej i maksymalnej z pobranych od użytkownika

0

Cześć, moim zadaniem jest pobranie 10 wartości wpisanych przez użytkownika a następnie wyświetlenie wartości minimalnej i maksymalnej. Po wykonaniu operacji program pyta użytkownika czy ten ma zakończyć działanie programu bądź je ponowić. Pierwsza operacja po wlączeniu programu jest wykonywana poprawnie i poprawnie wyświetla wartość min i max natomiast po ponowieniu programu w wartości max pojawiają się dziwnie wielkie wartości. Czym jest to spowodowane?

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

int main()
{
    int i = 0;
    int liczba;
    int max;
    int min;
    char wybor;

    while(i < 10){
        printf("Podaj wartosc nr %d: ", i+1);
        scanf("%d",&liczba);
        getchar();
        if(liczba > max){
            max = liczba;
        }
        if(liczba < min){
            min = liczba;
        }
        i++;
    }

    for(i = 1; i < 10; i++){
        if(liczba > max){
            max = liczba;
        }
        if(liczba < min){
            min = liczba;
        }
    }

        printf("\nNajwieksza liczba to: \n%d\n",max);
        printf("\nNajmniejsza liczba to: \n%d\n",min);

    do{
        printf("\nCzy chcesz zakonczyc program czy uruchomic go ponownie?\n");
        printf("\nWprowadz wartosc: \n");
        printf("T - aby uruchomic program ponownie");
        printf("\nN - aby zakonczyc dzialanie programu\n");
        scanf("%c",&wybor);
        getchar();
    }while(wybor != 'T' && wybor != 't' && wybor != 'N' && wybor != 'n');

    if(wybor == 'T' || wybor == 't'){
        printf("\nProgram zostal uruchomiony ponownie\n");
        main();
    }
    else if(wybor == 'N' || wybor == 'n'){
        printf("\nProgram zostal zakonczony\n");
    }

    return 0;
}
2

Rekurencyjne wywołanie maina, interesujące:), spróbuj może ustawić jakoś min i max, na początku programu.

0

Jak ustawie min = 0 i max = 0 to działa wartość max jednak jeśli liczba wprowadzona najmniejsza jest > 0 to wyswietla się 0. Co proponujesz na ponowienie programu zamiast wywołania maina

0

I słusznie, bo wtedy, min jest mniejsze, ustaw min tak, żeby pierwsza wprowadzona liczba zawsze byłą mniejsza; a co do rekurencyjnego maina to nie wiem, moze to normalne, tylko ja się nie spotkałem.

0

Zrobiłem tak i działa

int max = -9999999999999999;
int min = 9999999999999999;

Nie wiem co powie na to wykładowca haha

4

Są też takie rzeczy jak INT_MAX i INT_MIN :)

4

https://godbolt.org/z/1zsY68o9e

<source>: In function 'main':
<source>:16:12: warning: 'max' is used uninitialized [-Wuninitialized]
   16 |         if (liczba > max) {
      |            ^
<source>:8:9: note: 'max' was declared here
    8 |     int max;
      |         ^~~
<source>:19:12: warning: 'min' is used uninitialized [-Wuninitialized]
   19 |         if (liczba < min) {
      |            ^
<source>:9:9: note: 'min' was declared here
    9 |     int min;
      |         ^~~

Kompilator wszystko wyjaśnia
Wersja poprawiona: https://godbolt.org/z/baq4T8Tvc

2

Jak ktoś Ci każe ponawiać coś to próbuj to zrobić w pętli a potem ewentualnie zastanawiaj się nad rekurencją.

0

Ostatni raz w tym dziale pisałem jakieś trzy miesiące temu, także masz tu gotowca i do zobaczenia za kolejny kwartał.

#include <iostream>

namespace calc {
template <typename T>
T min(T x)
{
    return x;
}

template <typename T, typename... Rest>
T min(T x, Rest... rest)
{
    auto y = min(rest...);
    return x < y ? x : y;
}

template <typename T>
T max(T x)
{
    return x;
}

template <typename T, typename... Rest>
T max(T x, Rest... rest)
{
    auto y = max(rest...);
    return x < y ? y : x;
}
}

int main()
{
    bool work = true;
    while(work)
    {
        int max = std::numeric_limits<int>::min();
        int min = std::numeric_limits<int>::max();

        for(size_t i = 0; i < 10; ++i)
        {
            std::cout << "Podaj wartosc nr. " << i;
            int tmp = 0;
            std::cin >> tmp;
            std::cout << " [" << tmp << "]\n";
            
            max = calc::max(max, tmp);
            min = calc::min(min, tmp);
        }

        std::cout << "max [" << max << "] min [" << min << "]\n";
        std::cout << "Powtorzyc? [T/N] ";
        char q = 'n';
        std::cin >> q;
        std::cout << q << '\n';

        work = (q == 'T' || q == 't');
    }

    return 0;
}

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