1

Тема: Проблема зі знаходженням мінімального значення в масиві

Виникають проблеми при спробі знайти мінімальне значення в масиві, при компіляції видає якусь дурню, сиджу над завданням уже декілька годин, помилок не знайшов, допоможіть, будь ласка. Найцікавіше в тому, що максимальне значення шукає добре, а от з мінімальним проблема. Мова C, пишу в Visual Studio 2022.

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define MAX_N 100
int main() { system("chcp 1251"); srand(time(0));
    int n;
    double arr[MAX_N];
    double a, b, x = 0, negsum = 0, dob, mi = arr[0], ma = arr[0];
    printf("    Введіть мінімальне значення діапазону випадкових значень масиву\n =>"); scanf_s("%lf", &a);
    printf("    Введіть максимальне значення діапазону випадкових значень масиву\n =>"); scanf_s("%lf", &b);
    if (a > b) { printf("Мінімальне значення діпапзону повинне бути меньшим за максимальне, будь ласка, спробуйте ще раз"); }
    printf("    Введіть кількість дійсних елементів масиву\n =>"); scanf_s("%d", &n);
    for (int i = 0;i < n;i++)
    {
        arr[i] = { rand() * (b - a + 1) / RAND_MAX + a }; printf("%.2f ", arr[i]);
        if (arr[i] < 0)negsum += arr[i];
        if (arr[i] > ma) ma = arr[i];
        else  if (mi > arr[i])  mi = arr[i];
    }
    printf("\n    Сума від'ємних елементів масиву: %f", negsum);
    printf("\n    Мінімум:  %.2f", mi);
    printf("\n    Максимум: %.2f", ma);
}

2

Re: Проблема зі знаходженням мінімального значення в масиві

McGuire написав:

Виникають проблеми при спробі знайти мінімальне значення в масиві, при компіляції видає якусь дурню,

Напишіть нам цю дурню, може це якась підказка.

Подякували: koala1

3

Re: Проблема зі знаходженням мінімального значення в масиві

https://ibb.co/c1cjYp0
https://i.ibb.co/7XJqkTP/New-Bitmap-Image.png

4

Re: Проблема зі знаходженням мінімального значення в масиві

Ну дивіться. Значення mi дивне. А звідки воно взялося? Або з arr[i], або з попереднього mi. arr[i] задано формулою через rand(), а попереднє mi - з попередньої ітерації, доки іде цикл. А перед циклом? А перед циклом було mi = arr[0]. А arr[0] де взявся?
double arr[MAX_N]; - значення неініціалізовані. Тобто в mi перед тим було сміття з пам'яті. І випадково це сміття виявилося меншим за найменше число з масиву (після ініціалізації). Звідси і "дурня".
І, будь ласка, розберіться з процесом компіляції. "При компіляції видає дурню" означає, що дурню видає компілятор. Але компілятор насправді все робить нормально, "дурню" видає вже ваша скомпільована програма. А якби ви замість "дурня" написали "якесь від'ємне величезне число", то знайти проблему було б значно простіше.
І я так підозрюю, що компілятор, насправді, видає вам попередження про неініцалізовану змінну. Але ви його проігнорували.

Подякували: Tarpan871