Tablica losowych 1000 liczb z okreslonego przedzialu oraz max/min element

0

Witam,
dopiero co zalozylem tutaj konto by poprosic was o pomoc. Mam za zadanie stworzyc program losujacy 1000 liczb z przedzialu podanego przez uzytkownika. Udalo mi sie i program dziala, ale pozniej musze wylosowac najwiekszy i najmniejszy element, wiec dolozylem do tamtego programu tablice. Tutaj pojawia sie problem, bo nie wychodzi mi to :/ Program sie kompiluje, ale wyswietla jakies dziwne rzeczy...

#include <iostream>
#include <ctime>
#include <cstdlib>

using namespace std;

int a, b, tab[1000], najwiekszy, najmniejszy;

int main()
{
    srand(time(NULL));

    cout<<"Podaj przedzial liczb, z ktorego mam losowac liczby (najpierw dolna granica a pozniej gorna) "<<endl;
    cout<<"Dolna granica: ";
    cin>>a;
    cout<<"Gorna granica: ";
    cin>>b;

    for (int i=0; i<=999; i++)
    {
      tab[i] = rand()%((b-a)+1)+ a;
      cout<<tab[i]<<endl;
    }

    for (int i=1; i<=999; i++)
    {

    najwiekszy = tab[0];
    if (tab[i] > najwiekszy)
        tab[i] = najwiekszy;
    cout<<"Najwiekszy element tablicy to "<<najwiekszy;

    najmniejszy = tab[0];
    if (tab[i] < najmniejszy)
        tab[i] = najmniejszy;
    cout<<"Najmniejszy element tablicy to "<<najmniejszy;

    }
    return 0;
}
1

Zauważone błędy:

  1. W pętli for z każdą iteracją modyfikujesz elementy tablicy tab, a powinny być tam niemodyfikowalne ( Zmień kolejność argumentów w relacji równości )
  2. Z każdą iteracją zmienna największy i najmniejszy ustawiane są na tą samą wartość tab[0] ( Ustaw te wartości przed wejściem do pętli for )
  3. Pętla for powinna być w zakresie od 0 do 1000 for( int i=0 ; i<1000 ; ++i )
0
TomaszLiMoon napisał(a):

Zauważone błędy:

  1. W pętli for z każdą iteracją modyfikujesz elementy tablicy tab, a powinny być tam niemodyfikowalne ( Zmień kolejność argumentów w relacji równości )
  2. Z każdą iteracją zmienna największy i najmniejszy ustawiane są na tą samą wartość tab[0] ( Ustaw te wartości przed wejściem do pętli for )
  3. Pętla for powinna być w zakresie od 0 do 1000 for( int i=0 ; i<1000 ; ++i )
  1. Nie wiem co masz na mysli w pierwszym punkcie,
  2. Wyrzucilem zmienne "najwiekszy" i "namniejszy" poza petle,
  3. Ustawilem tak jak powiedziales.
2

Zamień tab[i] = najwiekszy; na najwiekszy = tab[i]; i to samo ze zmienną najmniejszy.

0
TomaszLiMoon napisał(a):

Zamień tab[i] = najwiekszy; na najwiekszy = tab[i]; i to samo ze zmienną najmniejszy.

Dziekuje, dziala :D
Ale mam pytanie - tab[i] = najwiekszy oraz najwiekszy = tab[i] to nie to samo? Nigdy bym na to nie wpadl i szukal bledu w czyms innym.

1

To nie jest to samo. W pierwszym przypadku zmienia się wartość tab[i] na najwieksza, a w drugim zmienia się wartość najwieksza na tab[i].

0
TomaszLiMoon napisał(a):

To nie jest to samo. W pierwszym przypadku zmienia się wartość tab[i] na najwieksza, a w drugim zmienia się wartość najwieksza na tab[i].

Okej.
Jeszcze mam jedno pytanie - co dopisac do kodu wyzej, zeby program szukal najmniejszego/najwiekszego elementu tylko wsrod liczb parzystych lub nieparzystych?
Myslalem nad dodaniem np. do tej linijki if (tab[i] > najwiekszy) czegos takiego if (tab[i]%2==0 && tab[i] > najwiekszy). Czy to bedzie poprawne?

0

Dla nieparzystych.
Sprawdzasz w pętli for czy wartość zmiennej jest nieparzysta. Najlepiej do tego celu wykorzystać operację modulo % dodając w pętli for
linijkę if( tab[i]%2 == 0 ) continue;. Słowo continue powoduje że wszystkie późniejsze instrukcje w pętli for zostaną zignorowane.
Musisz jeszcze pamiętać aby odpowiednio ustawić zmienne największy i najmniejszy , gdyż może się zdarzyć takie losowanie, w którym wylosowane zostaną tylko liczby parzyste.

0
int vmin=min(a,b),vrange=abs(b-a)+1;
for(int i=0; i<sizeof(tab)/sizeof(*tab);++i) tab[i]=vmin+rand()%vrange;
for(int i=0; i<sizeof(tab)/sizeof(*tab);++i) cout<<tab[i]<<" ";
bool found=false;
int xmax=0;
for (int i=0;i<sizeof(tab)/sizeof(*tab);++i) // musi być od zera
{
	if(tab[i]%2) // nieparzyste
	{
		if((!found)||(xmax<tab[i])) // jeżeli pierwsza nieparzysta lub mamy lepszą
		{
			xmax=tab[i];
			found=true;
		}
	}
}

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