Member 13426989 Ответов: 1

Как сделать "позицию" в моем коде более точной?


Я наконец-то закончил этот код для задания, но есть одна проблема: для выходных " позиций:" Я хочу, чтобы он выводил каждую позицию, где происходит минимум. Однако мой код выводит только последнюю позицию минимума в каждом случайно сгенерированном массиве (размер 20).

#include <iostream>
#include <iomanip>
using namespace std;

double random(unsigned int &seed);
unsigned int seed = (unsigned int)time(0);
const int SIZE = 20;

void print_array (int a[]);
void fill_array (int a []);
int find_min (int [], int);

int main ()
{
    int arr[SIZE];
    cout << "Arrays: \n";
    fill_array(arr);
    print_array(arr);
    
    int pos = find_min(arr, SIZE); 
    int minimum = arr[pos];
    
    cout << "Min is: " << minimum << endl;
    cout << "At position: " << pos +1 << endl; 
         
    return 0;
}

double random(unsigned int &seed)
{
    const int MODULUS = 15749;
    const int MULTIPLIER = 69069;
    const int INCREMENT = 1;
    seed = ((MULTIPLIER*seed)+INCREMENT)%MODULUS;
    return double(seed)/MODULUS;
}

void fill_array (int a [])
{
    for (int i = 0; i < SIZE; ++i)
        a[i] = 0 + (10 * (random(seed)));
}

int find_min (int arr[], int n)
{
    int min = arr[0]; 
    int index = 0;
    
    for (int i = 1; i < n; ++i)
        if (arr[i] < min) 
        {
            index = i;
            min = arr[i];
        }
    return index;
}

void print_array (int a[])
{
    for (int i = 0; i <SIZE; ++i)
        cout << setw(3) << a[i];
    cout << endl;
}


Что я уже пробовал:

Я не понимаю, как добавить больше значений позиции, так как размер массива равен 20, и, несмотря ни на что, минимум будет напечатан как минимум дважды.

1 Ответов

Рейтинг:
10

OriginalGriff

Напишите еще одну функцию: FindNext.
Передайте ему массив и его размер, значение для поиска и индекс для начала.
Если вы найдете другой пример, верните индекс. Если вы этого не сделаете, верните -1.
Затем цикл вызывает это и печатает минимумы до тех пор, пока он не сможет найти больше.

Но это твое домашнее задание, так что я не дам тебе никакого кода!


Member 13426989

Здравствуйте, большое вам спасибо за ваш ответ! Я все еще не знаю, где определить новую функцию и зациклить ее (я думаю, в функции int find_min?) кроме того, поскольку я пытаюсь избежать избыточности и добавления дополнительных функций, если вы позволите, не могли бы Вы направить меня туда, где добавление этой новой функции будет работать лучше всего? А потом я сделаю петлю

OriginalGriff

В основном. Сначала вызовите find_min, а затем выполните цикл с использованием результата.