1 Востаннє редагувалося darsteba (28.05.2018 22:07:15)

Тема: Помилка в коді

Треба знайти мін елемент і вилучити  його зі зміщенням інших.
Код-
[code=C++]#include <conio.h>
#include <stdio.h>

int const n = 4;

int main(void)
{
    int i, n;
    int a[4] = {4, 2, 3, 5};

    int min_i = 0;
    for(int i = 0; i != n; ++i)
    {
        if(a[min_i] < a[i])
            min_i = i;
    }

    for(int i = min_i; i < n - 1; ++i)
        a[n] = a[i + 1];
    a[n - 1] = 0;
    return 0;
}[/code]

2

Re: Помилка в коді

darsteba написав:
if (a[min_i] < a[i])  min_i = i;

Якщо a[ min_i ] < a[ i ], то min_i змінити на i. Тобто якщо min_i = 0, i = 1, a = {0,1000}, то умова виконається і min_i стане 1.
Щось не схоже на пошук мінімуму.

3

Re: Помилка в коді

koala написав:
darsteba написав:
if (a[min_i] < a[i])  min_i = i;

Якщо a[ min_i ] < a[ i ], то min_i змінити на i. Тобто якщо min_i = 0, i = 1, a = {0,1000}, то умова виконається і min_i стане 1.
Щось не схоже на пошук мінімуму.

В мене вийшло запустити программу,але чомусь коли намагаюсь ввести якусь цифру,то программа- "крашиться"

4

Re: Помилка в коді

Я дуже здивований таким результатом. Будь ласка, наведіть, яке саме повідомлення ви отримуєте, коли програма "крашиться".
Це дуже дивно.

5

Re: Помилка в коді

koala написав:

Я дуже здивований таким результатом. Будь ласка, наведіть, яке саме повідомлення ви отримуєте, коли програма "крашиться".
Це дуже дивно.

проект 4_1 не відповідає

6

Re: Помилка в коді

Ага. Так він не крашиться, він зависає (іде у вічний цикл) і система його припиняє.
А цикл там вічний, що перший, що другий, бо значення n ніде не задане, і, відповідно, є довільним сміттям.

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

7

Re: Помилка в коді

koala написав:

Ага. Так він не крашиться, він зависає (іде у вічний цикл) і система його припиняє.
А цикл там вічний, що перший, що другий, бо значення n ніде не задане, і, відповідно, є довільним сміттям.

дякую,підправив отак.
Але тепер нова проблема:
я вписую число/числа,а програма нічого не робить,а просто видає-
Process returned , як зазвичай після того як виконає свою роботу

    printf("Write here: ");
    scanf("%d",&n);

8

Re: Помилка в коді

int const n = 4;
int main (void)
{
int i,n; //тут

проблема в тому, що ви перекрили глобальну константу неініціалізованим значенням
щоб це поправити ви або заберіть оголошення n у main'i, або ж в main'i не просто оголосіть n, а ініціалізуйте його як константу (аналогічно як ви це зробили з глобальним n)

Раджу почитати про оголошення\ініцілазіацію та про області видимості у с++

Подякували: darsteba, koala, leofun013

9

Re: Помилка в коді

Ось

#include <stdio.h>
 
#define n 4
 
int main(void) {
    int i, min_i = 0, a[n] = {4, 2, 3, 5};
    
    for (i = 0; i < n; ++i)
        printf("%d ", a[i]);
    printf("\n");
 
    for (i = 0; i != n; ++i)
    {
        if (a[min_i] > a[i])  min_i = i;
    }
 
    for (i = min_i; i < n - 1; ++i)
        a[i] = a[i+1];
    a[n - 1] = 0;
    
    for (i = 0; i < n; ++i)
        printf("%d ", a[i]);
    printf("\n");
    
    return 0;
}
Подякували: koala1