Program do wyznaczenia max i min z ciągu liczb, który ma określoną długość

0

Witam,
mam do napisania program, który będzie wypisywał wartości max i min z ciągu liczb, którego długość wcześniej określam. Szukałem podobnych zadań, lecz albo nie znalazłem albo zrobiłem tak samo jak było wyjaśnione,a a nie wychodzi dalej ;)
Proszę o pomoc w czym jest problem w kodzie.

#include<iostream>
using namespace std;
int main()
{
    int maks,minim,len,tmp;
    cout<<"podaj liczbe wyrazow ciagu"<<endl;
    cin>>len;
    if (len>0)
    {
        maks=minim=tmp;

        for (int i=0;i<len;i++)
        {
            cout<<"podaj wyraz ciagu"<<endl;
            cin>>tmp;

            if (tmp>maks)
            {
                maks=tmp;
            }
            if (tmp<minim)
            {
                minim=tmp;
            }
        }
        cout<<"max="<<maks<<endl;
        cout<<"min="<<minim<<endl;
    }
    else
    {
        cout<<"brak danych"<<endl;
    }
    return 0;
}

Pozdrawiam.

1

Nie inicjujesz zmiennych. Wiersz

maks=minim=tmp;

winien być po wczytaniu pierwszego wyrazu nciągu.

0

ale jeśli wpiszę tą linię już w pętli for to jako wynik wypisze mi ostatni wczytany przeze mnie wyraz ciągu. jeśli przy obecnym położeniu tej linii wpisze nad nią cin>>tmp; to przy uruchamianiu programu muszę podać 2 wartości i dopiero zaczyna działać pętla for...choć wtedy program wypisuje dobre wyniki. pewnie jest to proste ale nie wiem co i gdzie wpisać...

2

To daj jedno pytanie przed pętlą , i do min i max podstaw odpowiedź, to będzie poprawna konstrukcja:

#include<iostream>
using namespace std;
int main()
{
    int maks,minim,len,tmp;
    cout<<"podaj liczbe wyrazow ciagu"<<endl;
    cin>>len;
    if (len>0)
    {
        cout<<"podaj wyraz ciagu"<<endl;
        cin>>tmp;
        maks=minim=tmp;

        for (int i=1;i<len;i++)
        {
            cout<<"podaj wyraz ciagu"<<endl;
            cin>>tmp;
            if (tmp>maks)
            {
                maks=tmp;
            }
            if (tmp<minim)
            {
                minim=tmp;
            }
        }
        cout<<"max="<<maks<<endl;
        cout<<"min="<<minim<<endl;
    }
    else
    {
        cout<<"brak danych"<<endl;
    }
    return 0;
}

Nie zapomnij że w takim przypadku pętlę zaczynamy od i = 1

2

Zamień

maks = minim = tmp

na

maks = numeric_limits<int>::min();
minim = numeric_limits<int>::max();

trzeba oczywiście dołączyć nagłówek <limits>

0

faktycznie, można było tak zrobić. dzięki za pomoc :)

0

Dla kolegi Tworka wersja 2.0, przeniosłem deklarację maks i minim poniżej wczytania pierwszej liczby. Aczkolwiek u mnie już poprzednia działała dobrze

#include<iostream>
using namespace std;
int main()
{
    int len = 0,tmp = 0;
    cout<<"podaj liczbe wyrazow ciagu"<<endl;
    cin>>len;
    if (len>0)
    {
        cout<<"podaj wyraz ciagu"<<endl;
        cin>>tmp;
        int maks = tmp;
        int minim = tmp;

        for (int i=1;i<len;i++)
        {
            cout<<"podaj wyraz ciagu"<<endl;
            cin>>tmp;
            if (tmp>maks)
            {
                maks=tmp;
            }
            if (tmp<minim)
            {
                minim=tmp;
            }
        }
        cout<<"max="<<maks<<endl;
        cout<<"min="<<minim<<endl;
    }
    else
    {
        cout<<"brak danych"<<endl;
    }
    return 0;
}

4

Nie łatwiej użyć minmax_element?

constexpr int N = 10;
vector<int> data(N);
copy_n(istream_iterator<int>(cin), N, data.begin());
auto result = minmax_element(data.cbegin(), data.cend());
DBG(*result.first);
DBG(*result.second);

http://melpon.org/wandbox/permlink/1gQbg6ivwrLapxsV

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