@KirillGo
Начинающий программист

Как удалить элемент массива?

Доброго времени суток! Задача следующая:
1) Сформировать одномерный массив целых чисел, используя датчик случайных чисел.
2) Распечатать полученный массив.
3) Удалить элемент с номером К.
4) Добавить после каждого четного элемента массива элемент со значением 0.
5) Распечатать полученный массив.
Первые два пункта получилось сделать,но я не могу понять,как сделать 3 и 4 пункты. Векторы еще не изучал,так что,если не составит труда,объясните пожалуйста человеческим языком,какой алгоритм нужен для решения задач подобного рода.Спасибо)
  • Вопрос задан
  • 53044 просмотра
Решения вопроса 1
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
Третий пункт решается просто - вам нужно передвинуть элементы в массиве: присвоить a[i]=a[i+1] в цикле.
Я думаю, вам запрещено использовать STL, так что пишите циклы.

Формат данного сайта запрещает совмещать кучу вопросов в один, так что постарайтесь разделить темы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Olej
@Olej
инженер, программист, преподаватель
3) Удалить элемент с номером К.

В массивы C/C++ нельзя ничего добавлять и из них нельзя ничего удалять, массивы C/C++ статические.
Можно только создавать новые массивы, "похожие" на своих предшественников, где будет элементов больше или меньше ... и каждый раз - копирование всех нужных элементов.

Добавлю:
- по п.п.4-5 - наслаждайтесь (случайные числа я генерить не стал - так нагляднее):
void defuse( const int a[], int n ) {
   int lim = n + n / 2,
       d[ lim ],
       t = lim - 1;
   while( --n >= 0 ) {
      d[ t-- ] = a[ n ];
      if( n % 2 == 0 ) d[ t-- ] = 0;
   }
   for( int n = 0; n < lim; n++ )
      cout << d[ n ] << ( n == lim - 1 ? "\n" : " " );
}

int main( int argc, char* argv[] ) {
   const int N = atoi( argv[ 1 ] );
   int arr[ N ];
   for( int i = 0; i < N; i++ )
      cout << ( arr[ i ] = i + 1 ) << ( i == N - 1 ? "\n" : " " );
   defuse( arr, N );
}

- а чтобы вою было меньше ... исполняем:
$ ./narr 5
1 2 3 4 5
1 2 0 3 4 0 5
$ ./narr 6
1 2 3 4 5 6
0 1 2 0 3 4 0 5 6

- кстати, тот же трюк (без всяких malloc()) можете проделать и в современном C ;-)
Ответ написан
romy4
@romy4
Exception handler
4. решается пересозданием массива и заполнением новыми значениями
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы