Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
voice8787
19 / 19 / 12
Регистрация: 21.08.2010
Сообщений: 136
1

Удалить отрицательные элементы массива

18.10.2010, 14:23. Просмотров 1135. Ответов 14
Метки нет (Все метки)

Дан массив, найти максимальный, минимальный элементы и их индексы. Удалить отрицательные элементы массива.
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
39
40
41
42
43
#include<stdio.h>
#include<conio.h>
main()
{
clrscr();
const int N=5;
int i,A[N],min,max,nmn,nmx,m;
printf("Vvedite A:\n");
for (i=0;i<N;i++)
{ printf("A[%d]=",i);
scanf("%d",&A[i]);
}
min=A[0];max=min;
nmn=0;nmx=nmn;
for (i=1; i<N;i++)
{
if (A[i]<min)
{min=A[i];
nmn=i;}
if (A[i]>max)
{max=A[i];
nmx=i;}
}
printf("min=%d\n",min);
printf("max=%d\n",max);
printf("nmn=%d\n",nmn);
printf("nmx=%d\n",nmx);
 
 
for (i=0;i<N;i++);
{ if (A[i]<0)
{ m=i;
for (i=m;i<N-1;i++)
{A[i]=A[i++];}
N--;}
}
 
for (i=0;i<N;i++)
{printf("A[%d]=%d\n",i,A[i]);}
 
 
getch();
}
не могу удалить элементы смещением, выдает ошибку, подскажите в чем она?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2010, 14:23
Ответы с готовыми решениями:

Удалить из массива отрицательные элементы
Помогите пожалуйста, сломал голову, надо удалить из массива все отрицательные элементы,...

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

Создать два новых массива, в один из которых поместить положительные элементы массива, а в другой отрицательные и нулевые элементы
Написать программу , которая вводит с клавиатуры массив из N вещественных чисел , создает два новых...

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

Удалить из файла отрицательные элементы
Дан файл целых чисел.Удалить из него отрицательные элементы собственно делаю 2мя...

14
dihlofos
Бродяга
306 / 260 / 56
Регистрация: 27.08.2010
Сообщений: 553
18.10.2010, 14:25 2
C++
1
N--;
N объявлена как константа=> изменять нельзя.
1
voice8787
19 / 19 / 12
Регистрация: 21.08.2010
Сообщений: 136
18.10.2010, 14:36  [ТС] 3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include<stdio.h>
#include<conio.h>
main()
{
clrscr();
int N;
int i,A[N],min,max,nmn,nmx,m;
printf("Vvedite razmer massiva:");
scanf("N=%d",&N);
 
printf("Vvedite A:\n");
for (i=0;i<N;i++)
{ printf("A[%d]=",i);
scanf("%d",&A[i]);
}
Переписал начало программы, но все-равно что-то не правильно, как задать размер массива, что бы потом можно было его уменьшать?
0
ForEveR
В астрале
Эксперт С++
8003 / 4761 / 653
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
18.10.2010, 14:39 4
voice8787, Динамику использовать.
0
dihlofos
Бродяга
306 / 260 / 56
Регистрация: 27.08.2010
Сообщений: 553
18.10.2010, 14:39 5
Размер массива можно задать только константым выражением. В ином случае - использовать динамические массивы. Ну а в вашем случае можно, например, ввести дополнительную переменную.
C++
1
int size=N;
И использовать её в цикле для удаления элементов:
C++
1
2
for (i=0;i<size;i++)
//....
1
voice8787
19 / 19 / 12
Регистрация: 21.08.2010
Сообщений: 136
18.10.2010, 14:41  [ТС] 6
Цитата Сообщение от Lavroff Посмотреть сообщение
voice8787, Динамику использовать.
а без динамики никак? я еще ее не изучал...
в паскале без динамики все отлично работает, если так задавать...а тут не пойму в чем дело
0
PointsEqual
ниначмуроФ
842 / 526 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
18.10.2010, 14:41 7
Цитата Сообщение от dihlofos Посмотреть сообщение
Размер массива можно задать только константым выражением

Не по теме:

смотря какой компилятор

1
ForEveR
В астрале
Эксперт С++
8003 / 4761 / 653
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
18.10.2010, 14:43 8
PointsEqual, C99 мало где поддерживается полностью
0
dihlofos
18.10.2010, 14:44
  #9

Не по теме:

Цитата Сообщение от PointsEqual Посмотреть сообщение
смотря какой компилятор
Например, какой? Не сталкивался. Хотя особо и не проверял)

0
PointsEqual
ниначмуроФ
842 / 526 / 110
Регистрация: 12.10.2009
Сообщений: 1,915
18.10.2010, 14:49 10
Цитата Сообщение от dihlofos Посмотреть сообщение
Например, какой?
gcc

C++
1
2
int size = 5;
int arr[size];
работает.
1
voice8787
19 / 19 / 12
Регистрация: 21.08.2010
Сообщений: 136
18.10.2010, 14:58  [ТС] 11
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
39
40
41
42
43
44
45
#include<stdio.h>
#include<conio.h>
main()
{
clrscr();
const int N=5;
int size=N;
int i,A[N],min,max,nmn,nmx,m;
 
printf("Vvedite A:\n");
for (i=0;i<size;i++)
{ printf("A[%d]=",i);
scanf("%d",&A[i]);
}
min=A[0];max=min;
nmn=0;nmx=nmn;
for (i=1; i<size;i++)
{
if (A[i]<min)
{min=A[i];
nmn=i;}
if (A[i]>max)
{max=A[i];
nmx=i;}
}
printf("min=%d\n",min);
printf("max=%d\n",max);
printf("nmn=%d\n",nmn);
printf("nmx=%d\n",nmx);
 
 
for (i=0;i<size;i++);
{ if (A[i]<0)
{ m=i;
for (i=m;i<size-1;i++)
{A[i]=A[i++];}
size--;}
}
 
for (i=0;i<size;i++)
{printf("A[%d]=%d\n",i,A[i]);}
 
 
getch();
}
изменил, все равно не пашет..
и у меня еще вопрос, в Си размер массива нельзя изменять без использования динамики или изменения программы?
0
dihlofos
Бродяга
306 / 260 / 56
Регистрация: 27.08.2010
Сообщений: 553
18.10.2010, 15:03 12
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Зачем точка с запятой после for? К тому же переменная i будет меняться во вложенном цикле.
C++
1
2
3
4
5
6
for (i=0;i<size;i++);
{
/...
    for (i=m;i<size-1;i++)
//...
}
Попробуйте так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int size=N;
for (i=0;i<size;i++)
{
    if (A[i]<0)
    {
       for (m=i;m<size-1;m++)
        A[m]=A[m+1];
       size--;
       i--;
    }
}
for (i=0;i<size;i++)
    printf("A[%d]=%d\n",i,A[i]);
1
voice8787
19 / 19 / 12
Регистрация: 21.08.2010
Сообщений: 136
18.10.2010, 15:20  [ТС] 13
Спасибо огромное!!! все работает)

Если не сложно ответьте еще на 2 вопроса:
1) зачем нужна строчка
Цитата Сообщение от dihlofos Посмотреть сообщение
i--;
без нее вроде бы программа корректно работае
2)
Цитата Сообщение от voice8787 Посмотреть сообщение
в Си размер массива нельзя изменять без использования динамики или изменения программы?
0
ForEveR
В астрале
Эксперт С++
8003 / 4761 / 653
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
18.10.2010, 15:23 14
voice8787, В Си вроде как нет. В С++ есть вектор.
1
dihlofos
Бродяга
306 / 260 / 56
Регистрация: 27.08.2010
Сообщений: 553
18.10.2010, 15:24 15
Цитата Сообщение от voice8787 Посмотреть сообщение
без нее вроде бы программа корректно работае
Попробуйте ввести два отрицательных элемента подряд. Первый из них удалится, а второй встанет на его место и не будет проверен в дальнейшем.
1
18.10.2010, 15:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2010, 15:24

Удалить из однонаправленного списка отрицательные элементы
Создать список из случайных положительных и отрицательных целых чисел (от –10 до 10) и удалить из...

Заменить отрицательные нечетные элементы массива на наименьший элемент массива
Заменить отрицательные нечетные элементы массива на наименьший элемент массива #include...

Создать список из случайных целых чисел и удалить из него отрицательные элементы
Всем привет! Ребята помогите! Нужна ваша помощь! &quot;Написать программу по созданию, просмотру,...


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

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

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