Другие языки программирования и технологии

Необходима помощь в решении задачи. C++

Дан массив, состоящий из n элементов. Требуется добавить в него число x на позицию p. При этом все элементы с позиций в диапазоне [p;n] должны сдвинуться на элемент вправо. (C++)

входные данныевыходные данные
4
2 6 1 3 2 6 7 1 3
7 3
Вообще лучше использовать вектор, но мне лень разбираться с векторами. Так что вот:
Сергей Никифоров
Сергей Никифоров
78 150
Лучший ответ
// main.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"//Убрать, если не будет компилироваться.
#include "stdio.h"//Поменять "" на <>
#include "windows.h"//Поменять "" на <>
#include "locale.h"//Поменять "" на <>
#include "conio.h"//Поменять "" на <>

int n=10;//Размерность массива.

void shift_insert(int* A,int x,int p);//Объявление функции вставки со сдвигом.

int main()
{
int x=0,p=0;
bool err=0;//Индикатор ошибок.
char c;
setlocale(0,"Rus");//Включаем русскую кодировку в консоли.

do //Проверка ввода.
{
printf("Введите значение нового элемента массива. \n");
scanf("%d", &x);//Счет элементов массива, при вводе, будем вести от единицы до N включительно.

printf("Введите индекс элемента массива, начиная с которого, будет осуществлен сдвиг. \n");
scanf("%d", &p);

if(p>n || p<=0)//Проверка пользовательского ввода.
err=1;
else
err=0;

if(err)
{
printf("Ошибка! Некорректный ввод. Нажмите любую клавишу для повторного ввода. ""ESC""-Выход из программы. \n");
c=getch();//Считывание введеного символа, в переменную c.
}

if(!(c-27))//27-код клавиши "ESC".
exit(0);

system("cls");//Очистка консоли.

}while(err);//Если ввод некорректный, то пользователю будет предложенно ввести значения переменных заново.
p--;//Корректируем значение индекса, т. к. в C++ массивы индексируются от нуля до N-1, включительно.

int *A=(int*)malloc(n*sizeof(int));//Выделяем память под динамический массив A, размерности N-1.
for(int j=0; j<n; j++)//Заполняем элементы массива числами от 1 до N, включительно.
A[j]=j+1;

shift_insert(A,x,p);//Вызов функции вставки со сдвигом.

for(int j=0; j<n; j++)//Вывод значений элементов массива на экран.
printf("A[%d]=%d, ",j+1,A[j]);

printf("Press any key for continue . .\n");
getch();

free(A);//Освобождаем память, выделенную под массив.
return 0;
}

void shift_insert(int* A,int x,int p)//Реализация функции вставки со сдвигом.
{
realloc(A,(++n)*sizeof(int));//Увиличиваем размерность массива на один элемет.
for(int i=n-1;i-p;i--)//Поочередно присваиваем каждому последующему элементу значение предидущего.
A[i]=A[i-1];
A[p]=x;//Присваиваем элементу с индесом p значение переменной x.
}
Salamat Abdumajitov
Salamat Abdumajitov
11 953
Salamat Abdumajitov //Можно проще:
#include "stdafx.h"//Убрать, если не будет компилироваться.
#include "stdio.h"//Поменять "" на <>
#include "windows.h"//Поменять "" на <>
#include "locale.h"//Поменять "" на <>
#include "conio.h"//Поменять "" на <>

const int N=10;//Размерность массива.

void shift_insert(int* A,int x,int p);//Объявление функции вставки со сдвигом.

int main()
{
int x=0,p=0;
bool err=0;//Индикатор ошибок.
char c;
setlocale(0,"Rus");//Включаем русскую кодировку в консоли.

do //Проверка ввода.
{
printf("Введите значение нового элемента массива. \n");
scanf("%d", &x);//Счет элементов массива, при вводе, будем вести от единицы до N включительно.

printf("Введите индекс элемента массива, начиная с которого, будет осуществлен сдвиг. \n");
scanf("%d", &p);

if(p>N || p<=0)//Проверка