Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.75
Jasper
0 / 0 / 0
Регистрация: 07.12.2009
Сообщений: 58
#1

Удаление элементов массива - C++

06.03.2010, 06:15. Просмотров 3644. Ответов 8
Метки нет (Все метки)

Возможно ли в С удалять элементы массива? Например: 10, 14, 1, 2, 80 надо удалить 1 что бы получилась 10 , 14, 2, 80
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2010, 06:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление элементов массива (C++):

Удаление четных элементов массива,больших среднего арифметического всех элементов массива - C++
Доброго времени суток! Помогите пожалуйста) Вот задание:Из массива удалить четные элементы, имеющие значение больше среднего...

Удаление из одного массива элементов второго массива и запись результата в третий - C++
Есть массив masA (длина lenA), есть массив masB (длина lenB). Необходимо из массива masA удалить элементы, входящие в массив masB и...

удаление элементов массива, которые равны сумме предыдущего и следующего элементов - C++
Нужно написать подпрограмму которая удаляет элементы массива, которые равны сумме предыдущего и следующего элементов

Удалить из массива A[N] вс отрицательные элементы.Удаление отрицательных элементов массива оформить в виде функции - C++
Что исправить? #include <stdio.h> #define N 10 int udalenie(int A,int k ) { int i; for(i=k;i<N;i++)

удаление элементов массива, совпадающих с элементами другого массива - C++
Здравствуйте, помогите найти ошибку в коде; суть задачи такая: удалить элементы из 1 массива, которые содержатся во 2 массиве. Как я...

Удаление элементов массива без буферного массива - C++
Требуется удалить элементы из массива, при это длинна массива уменьшится, ВАЖНО буферный массив не использовать! к примеру массив 12 23...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
06.03.2010, 07:00 #2
Удалять элементы массива нельзя, можно сдвинуть правую часть массива на удаляемый элемент, иначе это список.
C
1
2
3
for(i = m; i < n-1; i++)
  array[i] = array[i+1];
n--;
m - элемент, который удаляем
n - кол-во элементов массива array.
0
Jasper
0 / 0 / 0
Регистрация: 07.12.2009
Сообщений: 58
06.03.2010, 07:25  [ТС] #3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main ()
{
    int N=10;
    int Mass[10]={1,2,3,4,5,6,7,8,9,10};
    int i=0;
    int M=5;
    for (i=M; i<N-1; i++)
    
        Mass[i]=Mass[i+1];
    N--;
    for (i=0;i<N;i++)
    printf (" %i\n", Mass[i]);
        getch ();
}
Выводит массив Mass не изменяя его.
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
06.03.2010, 07:47 #4
Jasper, А если внимательней присмотреться? Учтите, что индексы у массивов начинаются с 0, так что Вы своим кодом "удаляете" элемент равный 6.
0
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
06.03.2010, 08:36 #5
все верно, элемента №5 или цифры 6 уже нет с нами
0
Jasper
0 / 0 / 0
Регистрация: 07.12.2009
Сообщений: 58
06.03.2010, 08:38  [ТС] #6
Этот алгоритм работает для последовательности 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, а для последовательности, например 10,100,11,12,14,15,12,17,18,200
0
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
06.03.2010, 08:47 #7
Цитата Сообщение от Jasper Посмотреть сообщение
Этот алгоритм работает для последовательности 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, а для последовательности, например 10,100,11,12,14,15,12,17,18,200
Этот алгоритм работает для массива, не имеет значения сколько и какие числа там, лишь бы памяти хватило
10 - нулевой элемент, 100 - первый, 11 - второй эл-т массива и т.д.
избавиться от числа 14, нужно подставить 4 вместо М в алгоритме, т.к. 14 - четвертый элемент в массиве
1
Amarted
157 / 19 / 2
Регистрация: 26.02.2010
Сообщений: 56
07.03.2010, 04:18 #8
Цитата Сообщение от Jasper Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void main ()
{
    int N=10;
    int Mass[10]={1,2,3,4,5,6,7,8,9,10};
    int i=0;
    int M=5;
    for (i=M; i<N-1; i++)
    
        Mass[i]=Mass[i+1];
    N--;
    for (i=0;i<N;i++)
    printf (" %i\n", Mass[i]);
        getch ();
}
Выводит массив Mass не изменяя его.
Не пойму вашей логики, во первых зачем использовать дополнительную переменную M для инициализации i если можно сразу инициализировать i значением M...
Во вторых сдвигая элементы вы не удаляете нужный вам элемент, а просто сдвигаете, а количество элементов как было 10 так 10 и осталось! изменять размер стандартного массива нельзя.
0
easybudda
Модератор
Эксперт CЭксперт С++
9624 / 5572 / 946
Регистрация: 25.07.2009
Сообщений: 10,698
07.03.2010, 05:05 #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
39
40
41
42
43
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define DEFAULT_ARRAY_SIZE 10
 
int main(void){
    size_t cnt = DEFAULT_ARRAY_SIZE, i;
    int *arr = NULL;
    
    if ( ( arr = (int*)calloc(cnt, sizeof(int)) ) == NULL ){
        fprintf(stderr, "Memory error!\n");
        exit(1);
    }
    printf("Enter %d integer values for array elements:\n", cnt);
    for ( i = 0; i < cnt; ++i ){
        printf("ARRAY[%d] = ", i);
        if ( scanf("%d", &arr[i]) != 1 ){
            fprintf(stderr, "Can't get some array value!\n");
            exit(1);
        }
    }
    
    printf("Enter index for remove: ");
    if ( scanf("%d", &i) != 1 || i >= cnt ){
        fprintf(stderr, "Can't get index or wrong index!\n");
        exit(1);
    }
    if ( i < cnt - 1 )
        memmove(arr + i, arr + i + 1, sizeof(int) * (cnt - i - 1));
    if ( ( arr = (int*)realloc(arr, --cnt * sizeof(int)) ) == NULL ){
        fprintf(stderr, "Can't change array size!\n");
        exit(1);
    }
    
    printf("Now array contains of %d elements:\n", cnt);
    for ( i = 0; i < cnt; ++i )
        printf("ARRAY[%d] = %d\n", i, arr[i]);
    
    free(arr);
    arr = NULL;
    exit(0);
}
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2010, 05:05
Привет! Вот еще темы с ответами:

Удаление элементов массива - C++
У меня есть код удаления элемента массива, но для определённого типа. После того как использую шаблоны у меня ошибки в программе...

Удаление элементов из массива - C++
Здравствуйте, помогите пожалуйста, как удалить одинаковые элементы одного массива из другого. у меня ручной ввод, два массива, первый я...

Удаление элементов массива - C++
помогите ,нужно ,чтобы в одномерном массиве найти ряд одинаковых элементов ,удалить ,и записать рандомно другие ((

Удаление элементов массива - C++
1)В каждой группе подряд идущих одинаковых элементов оставить только один элемент. Если удаление элементов невозможно, выдать об этом...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.03.2010, 05:05
Ответ Создать тему
Опции темы

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