Wybieranie najmniejszej liczby ze zbioru.

0

Witam,
jestem początkującym programistą. Teraz robię program, który pobiera od użytkownika dowolny zbiór różnych liczb, zapisuję je do tablicy i chciałbym, aby program wyszukiwał liczbę o najmniejszej wartości z podanego zbioru nie zmieniając kolejności liczb w tablicy jak w przypadku sortowania. Jakiej funkcji do tego użyć?

Pozdrawiam i dziękuję za pomoc,
pablo7890

1

Pętli for? Albo std::min_element jezeli w C++

0

Tak, jest to C++

0

Kompilator zwraca błąd:

[Error] no matching function for call to 'min_element(int&)'
Co muszę poprawić? W kodzie funkcja jest użyta jako:

cout << *min_element(tablica[wartości]) << endl;

Dzięki za odpowiedzi :)

0

Dziwnie jakoś tego używasz.

cout << *min_element(tablica, tablica + ilosc_elementow_w_tablicy) << endl;

No i nie możesz zapomnieć o:

#include <algorithm>
0

Dodałem include'a już wcześniej, także nie ma problemu. Zrobiłem tak jak mówisz, błąd:

[Error] no matching function for call to 'min_element(int [(((unsigned int)(((int)wartosc) + -0x000000001)) + 1)], int&)'
Próbuję na różne sposoby, próbowałem samą funkcję min(); ale też się nie sprawdza :(

EDIT:
Sprawdzałem zanim poprawiłeś post, teraz jest myślę, w porządku. Dziękuję serdecznie

0

Jeszcze jedna rzecz, jak sprawdzić, który element w tablicy zajmuje ta najmniejsza wartość?

1

Musisz skorzystać z arytmetyki wskaźników. Min_element zwraca wskaźnik (iterator) do najmniejszego elementu Twojej tablicy. Żeby dowiedzieć się, który to element musisz od uzyskanego wskaźnika odjąć wskaźnik na początek tablicy:

#include <iostream>
#include <algorithm>
 
using namespace std;
 
int main() {
  const int ilosc = 7;
  int tablica[ilosc] = {7, 6, 5, 4, 3, 2, 1};
 
  int *min = min_element(tablica, tablica+ ilosc);
 
  cout << "wartosc min: " << *min << endl;
  cout << "pozycja: " << min - tablica << endl;
        
  return 0;
}

http://ideone.com/c4BsA

1

@up prosto -> w pętli for.

int min_val = *min_element(...);
for(int i = 0; i < rozmiar_tablicy; i++)
{
    if(tab[i] == min_val)
        cout << "Najmniejsza wartosc znajduje sie na " << i << " pozycji\n"; // pamietaj, ze tablica numerowana jest od 0
}
0

Dziękuję za podpowiedzi, teraz działa wszystko poprawnie ;)

Mam jeszcze jedno pytanie dot. tego zbioru liczb. Chciałbym usunąć z tablicy kolejne wpisy od zera do tej najmniejszej wartości. Ten proces przebiegałby w pętli do końca zbioru, gdzie byłyby sumowane iloczyny tych najmniejszych wartości przez ich ówczesne miejsca w tablicy. Lub jakby to inaczej opisać, kolejnym celem po wyznaczeniu najmniejszej wartości, jest wyznaczenie kolejnej najmniejszej wartości kierując się do końca zbioru, nie patrząc już na liczby będące przed tą wartością.

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