Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.73/37: Рейтинг темы: голосов - 37, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 19.08.2022
Сообщений: 1

Удаление элемента в массиве

19.08.2022, 12:57. Показов 8718. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача звучит так:
Удаление элемента
Удалите из массива элемент с индексом k. Обратите внимание, считывание и вывод массива уже написаны за вас, необходимо написать только фрагмент программы — само удаление элемента.

Входные данные

В первой строке задано натуральное число n (n⩽100) и индекс k (0⩽k<n). В следующей строке заданы n натуральных чисел, не превосходящие 100 — элементы массива.

Примечание

Для того чтобы удалить из массива A последний элемент, необходимо использовать инструкцию pop_back():

A.pop_back();
Размер массива уменьшится на единицу. Данная инструкция выдаст ошибку выполнения, если вызвать её на пустом векторе.
Примеры
Ввод
Вывод
5 3
5 8 7 1 9
5 8 7 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
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int n, k;
    cin >> n >> k;
    vector <int> A(n);
    for (int i = 0; i < A.size(); i++) {
        cin >> A[i];
    }
 A.push_back(0);
    n = n + 1;
    swap (A[k], A[n - 1]);
    A.pop_back();
    for (int i = n - 1; i > k; --i) {
        A[i] = A[i - 1];
    }
 A.push_back(0);
    n = n + 1;
    swap (A[k], A[n - 1]);
    A.pop_back();
    for (int i = n - 1; i > k; --i) {
        A[i] = A[i - 1];
    }
    for (int i = 0; i < A.size(); ++i){
        cout << A[i] << " ";
    }
    cout << endl;
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.08.2022, 12:57
Ответы с готовыми решениями:

Удаление элемента в массиве
Дан массив a из n элементов и число k. Удалить из этого массива все элементы, равные k. Порядок элементов должен сохраниться в соответствии...

Удаление элемента в динимическом массиве
Есть динамический массив, нужно удалить с него элемент, и сразу же уменьшить размерность массива на 1. Помогите это реализовать. Заранее...

Удаление элемента в одномерном динамическом массиве
В массиве а1, а2, … , аn удалить все элементы, значение которых ле-жит между средним арифметическим и (max+min)/2. Сделал функцию где...

37
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38223 / 21155 / 4314
Регистрация: 12.02.2012
Сообщений: 34,768
Записей в блоге: 14
06.02.2024, 07:54
Студворк — интернет-сервис помощи студентам
Royal_X, "Характер важнее ума" Г. Ле Бон. Но терминология "использует как рабов" мне не нравится. Свободный человек рабом не будет. Рабство - это не наведенный, а внутренний атрибут. Как-то так.
0
Злостный нарушитель
 Аватар для Verevkin
10889 / 5825 / 1288
Регистрация: 12.03.2015
Сообщений: 26,890
06.02.2024, 08:41
Цитата Сообщение от Наталья8 Посмотреть сообщение
Для больших пацанов... На си правда похоже.
Это мой код на чистых сях. Ты где его откопал?
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
#include <stdio.h>
#include <string.h>
#include <assert.h>
 
// удаление count элементов массива arr длиной len элементова, 
// начиная с элемента номер from
double* del(double* arr, unsigned& len, unsigned from, unsigned count)
{
  if (from + count > len) count = len - from;
  if (from > len - 1 || !count) return arr;
  
  double* dest_ptr = arr + from;
  double* src_ptr  = arr + from + count;
  memmove(dest_ptr, src_ptr, sizeof(arr[0]) * (len - from - count));
  len -= count;
  return arr;
}
 
void print_arr(double* arr, unsigned len)
{
  while (len--) printf(" %lg", *arr++);
  printf("\n");
}
 
int main()
{
  double x[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  unsigned len = sizeof(x) / sizeof(x[0]);
  print_arr(x, len);
  
  del(x, len, 3, 5);
  print_arr(x, len);
  
  return 0;
}
Естественно, в С++ он тоже работает, можно заменить заголовки:
C++
1
2
3
#include <iostream>
#include <cstring>
#include <cassert>
Проверил минуту назад.

Добавлено через 4 минуты
Цитата Сообщение от Наталья8 Посмотреть сообщение
Чем realloc на плюсах заменить? Вектором ?
realloc() из плюсов никуда не делся.
0
 Аватар для Наталья8
638 / 396 / 67
Регистрация: 09.03.2016
Сообщений: 4,335
06.02.2024, 12:35
Verevkin,
Откуда я помню _
Дядька, на кота похожий.
Теме больше года.


Не ворую я больше коды. Надоело.
Был твой, пока был у тебя на компьютере.
Комьюнити...
А вообще привет конечно.
0
 Аватар для Наталья8
638 / 396 / 67
Регистрация: 09.03.2016
Сообщений: 4,335
06.02.2024, 12:39
0
 Аватар для Наталья8
638 / 396 / 67
Регистрация: 09.03.2016
Сообщений: 4,335
06.02.2024, 12:41
Наворовал уже достаточно.
И макросы там твои... Коллекция.
Ещё такая папка есть.
И на форуме что то тишина. К чему бы это?
0
Злостный нарушитель
 Аватар для Verevkin
10889 / 5825 / 1288
Регистрация: 12.03.2015
Сообщений: 26,890
06.02.2024, 12:45
Цитата Сообщение от Наталья8 Посмотреть сообщение
Был твой, пока был у тебя на компьютере.
Я копиразмом не страдаю и денег у тебя не просил. Мне просто интересно, откуда взят код.

Добавлено через 4 минуты
Цитата Сообщение от Наталья8 Посмотреть сообщение
И макросы там твои... Коллекция.
Вот эта, штоле?
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#ifndef MACRO_H
#define MACRO_H
 
// true|false - логическое
typedef unsigned char bool;           
#define true          1
#define false         0
 
// константы
#define MAX_INT_32 (signed)((~0U) >> 1)  // 0x7FFFFFFF = +2147483647
#define MIN_INT_32 (signed)(~MAX_INT_32) // 0x80000000 = -2147483648
#define PTR_SIZE (sizeof(void*)) // размер указателя и ячейки стека
 
#if ((ULONG_MAX) == (UINT_MAX))
  #define CPUx32
#else 
  #define CPUx64
#endif
 
// вычисления
#define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b)) // (a ≤ x ≤ b)
#define SQR(x) ((x) * (x)) // x²
#define COUNTOF(x) (sizeof(x) / sizeof(x[0])) // кол-во элементов стат. массива
#define CMP(m, n) ((m) == (n) ? 0 : (m) < (n) ? -1 : +1) // сравнение для сортировки
#define ODD_BYTE(x) (1 & (0x6996 >> ((x) & 0xF))) != (1 & (0x6996 >> ((x) >> 4))) // нечётность байта
#define IS_POW2(x) ((x) && !((x) & (x - 1))) // число = 2 в какой-то степени
#define RAND_RANGE(a, b) (rand() % ((b) - (a) + 1) + (a)) // ГПСЧ [a, b], a < b
#define ODD(x)  ((x) & 1)
#define EVEN(x) (~(x) & 1)
 
// максимальные, минимальные и т.п.
#define MAX2(a, b) (((a) > (b)) ? (a) : (b))
#define MIN2(a, b) (((a) < (b)) ? (a) : (b))
#define MAX3(a, b, c) MAX2((a), MAX2((b), (c)))
#define MIN3(a, b, c) MIN2((a), MIN2((b), (c)))
#define MID3(a, b, c) MAX3(MIN2((a), (b)), MIN2((b), (c)), MIN2((a), (c)))  
#define MIN4(a, b, c, d) MIN2(MIN2(a, b), MIN2(c, d))
#define MAX4(a, b, c, d) MAX2(MAX2(a, b), MAX2(c, d))
 
// битовая логика (x - целое число, p - номер бита)
#define GETBIT(x, p) !!((x) & (1 << (p)))
#define SETBIT(x, p) ((x) | (1 << (p))
#define CLRBIT(x, p) ((x) & ~(1 << (p))
#define RSTBIT(x, p) ((x) ^ (1 << (p))
#define INVERT_7(x) ((x) ^ 0x7F) // инверсия младших 7 бит
 
// работа с числами с плавающей точкой
#define PRECISION    1e-12 // точность (число, меньшее по модулю, считается за 0)
#define ZERO(x)      (fabs(x) < PRECISION) // примерно равно нулю
#define EQUAL(a, b)  ZERO((a) - (b)) // примерно равно
#define DEG2RAD(deg) (M_PI * (deg) / 180.0) // градусы ---> радианы
#define RAD2DEG(rad) (180.0 * (rad) / M_PI) // радианы ---> градусы
#define ROUND(x) ((unsigned)rint(fabs(x)))
 
// работа с датами/временем
#define LEAP_YEAR(Y) ((Y) % 400 == 0 || ((Y) % 4 == 0 && (Y) % 100 != 0) ? 1 : 0)
 
// преобразования
#define BOOLSTR(b) ((b) ? "YES" : "NO ")
 
// всякое
#define CLEAR_INPUT_BUFFER { while (getchar() != '\n'); } // костыльная очистка буфера ввода
 
// -------------
#endif
0
 Аватар для Наталья8
638 / 396 / 67
Регистрация: 09.03.2016
Сообщений: 4,335
06.02.2024, 13:14
Цитата Сообщение от Verevkin Посмотреть сообщение
Вот эта, штоле?
Ну да...
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6331 / 3063 / 1054
Регистрация: 01.06.2021
Сообщений: 11,705
06.02.2024, 13:45
Цитата Сообщение от Verevkin Посмотреть сообщение
Это мой код на чистых сях.
Цитата Сообщение от Verevkin Посмотреть сообщение
C
1
int main()
это чистый С++

на чистом С
C
1
int main (void)
Ну и разумеется, как на С, так и на С++, можно еще писать
C++
1
int main (int argc, char *argv[])
C
1
int main (int argc, char *argv[])
Тут отличий нет.
0
Злостный нарушитель
 Аватар для Verevkin
10889 / 5825 / 1288
Регистрация: 12.03.2015
Сообщений: 26,890
06.02.2024, 14:22
Цитата Сообщение от Royal_X Посмотреть сообщение
это чистый С++
Чо, в сях не скомпилится int main() ?



кот
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
#include <stdio.h>
#include <string.h>
#include <assert.h>
 
// удаление count элементов массива arr длиной len элементова, 
// начиная с элемента номер from
double* del(double* arr, unsigned* len, unsigned from, unsigned count)
{
  if (from + count > *len) count = *len - from;
  if (from > *len - 1 || !count) return arr;
  
  double* dest_ptr = arr + from;
  double* src_ptr  = arr + from + count;
  memmove(dest_ptr, src_ptr, sizeof(arr[0]) * (*len - from - count));
  *len -= count;
  return arr;
}
 
void print_arr(double* arr, unsigned len)
{
  while (len--) printf(" %lg", *arr++);
  printf("\n");
}
 
int main()
{
  double x[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  unsigned len = sizeof(x) / sizeof(x[0]);
  print_arr(x, len);
  
  del(x, &len, 3, 5);
  print_arr(x, len);
  
  return 0;
}
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6331 / 3063 / 1054
Регистрация: 01.06.2021
Сообщений: 11,705
06.02.2024, 14:55
Verevkin, на языке С лучше писать, как уже я писал выше:
C
1
int main(void)
или
C
1
int main(int argc, char *argv[])
Именно такие варианты упоминаются в стандарте (5.1.2.2.1).

Разрешает ли стандарт использовать int main() ? Да, разрешает всякие implementation defined. Таким образом, если компилятор С компилирует такой вариант мы не можем говорить, что компилятор не соответствует стандарту.
Однако, стандарт также позволяет не использовать такой вариант. Т.е. компилятор может не компилировать такой вариант и, тем не менее, он будет считаться таким, что соответствует стандарту.
Поэтому лучше использовать вышеуказанные два варианта. Ведь, любой компилятор С обязан по стандарту их принимать, что не скажешь о вашем варианте. Следовательно, int main() чистым С назвать нельзя.
0
фрилансер
 Аватар для Алексей1153
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
06.02.2024, 16:59
Royal_X, даже с флагами -pedantic-errors -Wall -Wextra компилятор не ругается на int main (){}

Добавлено через 4 минуты
Цитата Сообщение от Royal_X Посмотреть сообщение
вышеуказанные два варианта
есть ещё третий вариант
C
1
int main(int argc, char *argv[], char *envp[])
и он скорее всего есть везде, хоть и не стандартный
0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6331 / 3063 / 1054
Регистрация: 01.06.2021
Сообщений: 11,705
06.02.2024, 17:16
Цитата Сообщение от Алексей1153 Посмотреть сообщение
даже с флагами -pedantic-errors -Wall -Wextra компилятор не ругается на int main (){}
Я выше объяснил почему так. Могу еще раз.
Стандарт С не запрещает реализовать int main (). По этой причине, во многих реализациях, кроме обязательных двух вариантов, реализован также вариант int main (), а также и другие варианты. Но стандарт не обязывает реализовать int main (). Это означает, что можно встретить такой компилятор С, который не будет принимать int main (), но, тем не менее, будет полностью соответствовать стандарту.
Поэтому int main () не может быть чистым С.
0
фрилансер
 Аватар для Алексей1153
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
06.02.2024, 17:32
Цитата Сообщение от Royal_X Посмотреть сообщение
можно встретить такой компилятор С, который не будет принимать int main (),
... и никто им не будет пользоваться То есть, он быстро забудется

Добавлено через 1 минуту
такая же история с #pragma once - кому нужен будет компилятор, который не умеет так ?
0
Злостный нарушитель
 Аватар для Verevkin
10889 / 5825 / 1288
Регистрация: 12.03.2015
Сообщений: 26,890
06.02.2024, 18:02
Цитата Сообщение от Royal_X Посмотреть сообщение
на языке С лучше писать, как уже я писал выше
Пачиму??!!11

Добавлено через 2 минуты
Цитата Сообщение от Royal_X Посмотреть сообщение
Разрешает ли стандарт использовать int main() ? Да, разрешает всякие implementation defined. Таким образом, если компилятор С компилирует такой вариант мы не можем говорить, что компилятор не соответствует стандарту.
Однако, стандарт также позволяет не использовать такой вариант. Т.е. компилятор может не компилировать такой вариант и, тем не менее, он будет считаться таким, что соответствует стандарту.
Поэтому лучше использовать вышеуказанные два варианта. Ведь, любой компилятор С обязан по стандарту их принимать, что не скажешь о вашем варианте. Следовательно, int main() чистым С назвать нельзя.
Перелогинься, мы тебя узнали!!

0
Нарушитель
Эксперт функциональных языков программированияЭксперт С++
6331 / 3063 / 1054
Регистрация: 01.06.2021
Сообщений: 11,705
06.02.2024, 18:47
Цитата Сообщение от Алексей1153 Посмотреть сообщение
... и никто им не будет пользоваться То есть, он быстро забудется
Дискуссия была совсем не об этом. Это уже другая история, кто и чем будет пользоваться.
На форуме тут многие (и я в том числе) пишут коды на С, используя int main (). И я никогда никому ничего не говорю.
Просто Verevkin написал
Цитата Сообщение от Verevkin Посмотреть сообщение
Это мой код на чистых сях.
Вот и я ему в ответ пишу, что этот код на "чистых сях" может не компилироваться на некоторых полностью соответствующих ISO C компиляторах. int main () это чистый С++.
Цитата Сообщение от Verevkin Посмотреть сообщение
Пачиму??
А что тебе непонятно? Вроде нормально объяснил, причем в посте 32 еще и повторил сказанное.

Добавлено через 4 минуты
Цитата Сообщение от Алексей1153 Посмотреть сообщение
#pragma once
лаконично и я сам юзаю, но в промышленных кодах я её не встречал, всегда идут длинным путем
0
Злостный нарушитель
 Аватар для Verevkin
10889 / 5825 / 1288
Регистрация: 12.03.2015
Сообщений: 26,890
07.02.2024, 08:01
Цитата Сообщение от Royal_X Посмотреть сообщение
Вот и я ему в ответ пишу, что этот код на "чистых сях" может не компилироваться на некоторых полностью соответствующих ISO C компиляторах.


Я таких не видел. Но даже если такие компиляторы и есть, нормальный программист, увидев сообщение об ошибке, исправит её за 2 секунды и не будет разводить демагогию про стандарты.
0
фрилансер
 Аватар для Алексей1153
6504 / 5748 / 1134
Регистрация: 11.10.2019
Сообщений: 15,392
07.02.2024, 11:43
мне кажется, лишнее тут слово "чистый" или "грязный"

всё проще: я пишу на C или я пишу на C++
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13227 / 6859 / 1827
Регистрация: 18.10.2014
Сообщений: 17,383
07.02.2024, 22:40
Цитата Сообщение от Royal_X Посмотреть сообщение
Стандарт С не запрещает реализовать int main (). По этой причине, во многих реализациях, кроме обязательных двух вариантов, реализован также вариант int main (), а также и другие варианты. Но стандарт не обязывает реализовать int main (). Это означает, что можно встретить такой компилятор С, который не будет принимать int main (), но, тем не менее, будет полностью соответствовать стандарту.
Поэтому int main () не может быть чистым С.
Интересный вопрос, кстати, лежащий на виду, но на который обычно не обращаешь внимания.

Действительно, стандарт языка С не содержит явного разрешения использовать вариант int main() и этот вариант в С не эквивалентен варианту int main(void) (по крайней мере с точки зрения вводимого таким определением объявления). То есть с этой точки зрения формально int main() в С - не допустимо.

Хотя с другой стороны не совсем ясно, о какой "эквивалентности" идет речь. int main() - это "заголовок" функции в стиле K&R и такой заголовок в определении функции не противоречит прототипу int main(void). Другими словами, любую функцию, объявленную как T foo(void), можно потом далее определить в стиле K&R как T foo() { ... } и в этом не будет никакой ошибки. Может это - ""эквивалентность"?

В любом случае, важность этой темы сегодня стремится к нулю, ибо C23 запрещает K&R объявления полностью, а объявления c () остаются разрешенными и теперь уже 100% эквивалентными объявлениям с (void). То есть в C23 этого вопроса уже не существует. int main() разрешено.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.02.2024, 22:40

Вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск заданного элемента
Добавить в класс &quot;Односвязный список&quot; следующие функции: вставка элемента в заданную позицию, удаление элемента по заданной позиции, поиск...

Описать класс «множество» (добавление и удаление элемента, пересечение, объединение и удаление множеств )
Описать класс «множество», позволяющий выполнять основные операции – добавление и удаление элемента, пересечение, объединение и удаление...

Удаление элемента в массиве
Есть набор документов примерно такого содержания: { &quot;url&quot; : &quot;http://site.ru/url1&quot;, &quot;checks&quot; : } Нужно удалить у...

Удаление элемента в массиве
Здравствуйте. Смысл задания в том, что я задаю массив, потом ещё один элемент и проверяю введённый элемент, если такой элемент есть в...

Удаление десятого элемента в массиве
есть массив, домустим содержит двадцать элементов! Нужно удалить десятый, но удалить так, чтобы все остальные значения съехали на один...


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru