Дан массив, состоящий из n элементов. Требуется добавить в него число x на позицию p. При этом все элементы с позиций в диапазоне [p;n] должны сдвинуться на элемент вправо. (C++)
входные данныевыходные данные
4
2 6 1 3 2 6 7 1 3
7 3
Другие языки программирования и технологии
Необходима помощь в решении задачи. C++
Вообще лучше использовать вектор, но мне лень разбираться с векторами. Так что вот:


// 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.
}
//
#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.
}
Похожие вопросы
- Нужна помощь в решении задачи по С++ связанная с матрицами
- Информатика. Помощь в решении задач по массивам
- Помощь в решение задачи на PROLOG
- Нужна помощь с решением задачи на С++ через Visual Studio
- Нужна помощь в решении задачи по языку программирования С++!!срочно!
- Нужна помощь в решении задач на Циклы и простейшие программы
- Как в C++ разбить число на цифры и вывести их через пробел? Решение задачи реализовать с помощью конструкции switch.
- Помогите с решением задачи на C++
- Помогите пожалуйста оптимизировать решение задачи (Зайчик) на C++
- Недавно начал изучать программирование (не с полного нуля), но мои решения задач слишком громоздкое, это нормально?
#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)//Проверка