Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Mariavic
0 / 0 / 0
Регистрация: 18.09.2016
Сообщений: 12
1

Удалить отрицательные элементы массива. Программа почему-то только частично работает

04.12.2017, 20:10. Просмотров 406. Ответов 9
Метки нет (Все метки)

Надо удалить все отрицательные элементы, расположенные до первого минимального.
У меня почему-то не удаляются отрицательные элементы и сам массив в конце не выводиться. Хотя ошибки компилятор не выдает. Еще есть сомнения насчет поиска первого минимального значения...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>
#define N 10
int main() {
    int i=0,j, m;
    double a[N], min;
    for (i=0; i<N; i++) 
    {
        printf("a[%d]=", i);
        scanf("%lf", &a[i]);
    }
    printf("\n");
    min=a[0];
    for(i=0;i<N;i++) //ищем 1 минимальный элемент
    {
        if(a[i]<min)
        {
            min=a[i];
            break;
    
        }
    }
    printf("Первый минимальный элемент:%f\n", min);
    m = N;
    
    while (i < min)  //удаляем отрицательные элементы до первого минимального
        if (a[i] < 0) {
            m -= 1;
            for (j=i; j < min; j++)
                a[j] = a[j+1];
        } else 
            i += 1;
 
    for (i=0; i<min; i++) {
        printf("%f ", a[i]);
    }
    printf("\n"); 
    return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2017, 20:10
Ответы с готовыми решениями:

Удалить последний столбец матрицы, содержащий только отрицательные элементы
Дана матрица размером M*N . Удалить ее последний столбец, содержащий только отрицательные элементы....

Удалить последний столбец матрицы, содержащий только отрицательные элементы
Дана матрица размера M ´ N. Удалить ее последний столбец, содержащий только отрицательные элементы....

Удалить последний столбец матрицы, содержащий только отрицательные элементы
помогите, пожалуйста, решить задачу. очень нужно. дана матрица размера MxN. удалить ее последний...

Двумерные массивы. Удалить все строки, содержащие только отрицательные элементы
Дана вещественная матрица А(n,m), где n&lt;10, m&lt;10. Разработайте программу, которая удаляет все...

Почему программа не суммирует все отрицательные элементы в списке?
Почему программа не суммирует все отрицательные элементы в списке ? module Progs where otr...

9
_SayHello
667 / 388 / 124
Регистрация: 30.07.2015
Сообщений: 1,351
04.12.2017, 20:39 2
Mariavic,
C++
1
2
3
4
5
6
7
while (i < min)  //удаляем отрицательные элементы до первого минимального
        if (a[i] < 0) {
            m -= 1;
            for (j=i; j < min; j++)
                a[j] = a[j+1];
        } else 
            i += 1;
1) Цикл в скобки забыл убрать.
2) i перед циклом забыл обнулить
C++
1
2
3
4
5
6
7
8
9
    for(i=0;i<N;i++) //ищем 1 минимальный элемент
    {
        if(a[i]<min)
        {
            min=a[i];
            break;
    
        }
    }
3) break не надо.
4) Ты в итоге нашел минимальное значение, а тебе то вроде как надо позицию минимального в массиве найти. Поэтому надо i тоже куда-то сохранить
0
SlavaSokolov
170 / 134 / 105
Регистрация: 14.04.2016
Сообщений: 735
04.12.2017, 20:50 3
Цитата Сообщение от _SayHello Посмотреть сообщение
Ты в итоге нашел минимальное значение, а тебе то вроде как надо позицию минимального в массиве найти. Поэтому надо i тоже куда-то сохранить
Разве? У него же i в начале программы объявлена? Не?

Так можно, если известно минимальное значение:
C
1
 while (a[i] != min)
0
_SayHello
667 / 388 / 124
Регистрация: 30.07.2015
Сообщений: 1,351
04.12.2017, 20:58 4
SlavaSokolov, ну это да, но по итогу что он делает в этом цикле
C++
1
 while (i < min)
Сравнивает позицию со значением? Ерунда какая то. Поэтому надо либо сохранять куда-то позицию минимального и делать
C++
1
2
3
 
i = 0;
while (i < n)
либо
C++
1
while (i--)
и как то учитывать это дальше

Добавлено через 4 минуты
SlavaSokolov,
Цитата Сообщение от SlavaSokolov Посмотреть сообщение
while (a[i] != min)
либо так да. но i все равно обнулить придется)
0
04.12.2017, 20:58
Mariavic
0 / 0 / 0
Регистрация: 18.09.2016
Сообщений: 12
04.12.2017, 22:03  [ТС] 5
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    m = N;
    i=0;
    while (i < min) 
    {
    
        if (a[i] < 0) {
            m -= 1;
            for (j=i; j < min; j++)
                a[j] = a[j+1];
        } else 
            i += 1;
    }
    for (i=0; i<min; i++) {
        printf("%f ", a[i]);
    }
    printf("\n"); 
    return 0;
}
Все равно начиная с while ничего на экран не выводится
0
_SayHello
667 / 388 / 124
Регистрация: 30.07.2015
Сообщений: 1,351
04.12.2017, 22:22 6
Mariavic, еще раз повторяю
Цитата Сообщение от Mariavic Посмотреть сообщение
while (i < min)
вы сравниваете i с минимальным значением, а не с позицией его в массиве
1
Mariavic
0 / 0 / 0
Регистрация: 18.09.2016
Сообщений: 12
06.12.2017, 18:51  [ТС] 7
а можно решить эту задачу через realloc? код будет сильно отличаться?
0
_SayHello
667 / 388 / 124
Регистрация: 30.07.2015
Сообщений: 1,351
07.12.2017, 22:02 8
Mariavic, отличаться будет, realloc используется при динамическом выделении памяти, а у вас статика
0
spvert
222 / 105 / 34
Регистрация: 25.11.2017
Сообщений: 376
Завершенные тесты: 1
08.12.2017, 09:48 9
C
1
2
3
4
5
6
/* функция удаления элемента с индексом i из массива */
void shift(int i)
{
    for (; i < N - 1; i++) { arr[i] = arr[i + 1]; }
    N--; /* Не забываем уменьшить размер массива */
}
0
Mariavic
0 / 0 / 0
Регистрация: 18.09.2016
Сообщений: 12
11.12.2017, 23:28  [ТС] 10
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// удаление отр элементов до первого минимального
 
        for(i=0,ind_pos=-1; i<min; i++)
    {
    if(a[i]>0.0)
    {
        ind_pos=i;
        break;
    }
    }
    if(ind_pos==-1)
    return a;
    
    for(i=ind_pos;i<(*n)-1; i++)
    a[i]=a[i+1];
    a=(double*)realloc(a,((*n)-1)*sizeof(double));
     (*n)--;
        return a;
    }
попыталась переделать для динамического массива(функция). ошибок компилятор не выдает, но что-то не так. выводит на экран совсем не тот. наверное, с удалением отрицательных элементов с realloc не то. или в другом ошибка?
0
11.12.2017, 23:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2017, 23:28

если массив не является знакочередующимся,то удалить из массива все положительные числа,в противном случае-удалить отрицательные элементы.после удален
задан массив Х целых чисел. если массив не является знакочередующимся,то удалить из массива все...

Удалить отрицательные элементы массива
Дан массив, найти максимальный, минимальный элементы и их индексы. Удалить отрицательные элементы...

Удалить из массива отрицательные элементы
Подскажите пожалуйста!!! Задание: удалить из массива отрицательные элементы. Почему-то работает...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru