C/C++

Программа на C++, Массивы

Перед каждым элементом с отрицательным значением вставить элемент, равный абсолютной величине отрицательного элемента. Если вставка элементов невозможна, выдать об этом сообщение.
#include <iostream>
#include <iomanip>
#include <random>
using namespace std;
int* create(const size_t length, int a, int b) {
auto ptr = new(nothrow) int[length];
if (ptr && length) {
if (a > b) swap(a, b);
uniform_int_distribution<> uid(a, b);
mt19937 gen{ random_device()() };
for (size_t i = 0; i < length; ++i) ptr[i] = uid(gen);
}
return ptr;
}
int* destroy_array(int* box) {
if (box != nullptr) {
delete[] box;
box = nullptr;
}
return box;
}
void show(int* box, const size_t length, const streamsize width) {
for (size_t i = 0; i < length; ++i) cout << setw(width) << box[i];
puts("");
}
size_t count_negative(int* box, const size_t length) {
size_t count = 0U;
for (size_t i = 0; i < length; ++i) if (box[i] < 0) ++count;
return count;
}
int* insert(int* box, size_t& length) {
auto count = count_negative(box, length);
auto new_length = length + count;
auto tmp = new int[new_length];
for (size_t i = 0, j = 0; i < length; ++i) {
if (box[i] < 0) tmp[j++] = abs(box[i]);
tmp[j++] = box[i];
}
box = destroy_array(box);
box = new int[new_length];
length = new_length;
box = move(tmp);
tmp = nullptr;
return box;
}
int main() {
cout << "Length: ";
size_t length;
cin >> length;
auto box = create(length, -9, 9);
show(box, length, 5);
box = insert(box, length);
show(box, length, 5);
box = destroy_array(box);
}
Bahend Jafa
Bahend Jafa
71 829
Лучший ответ
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
#define limit 100

void shift(int *array, int size,int pos)
{
//сдвигаем элементы массива
//от позиции найденного
//элемента в конец массива:
for(int i = size-1; i >= pos; i--)
array[i] = array[i-1];
array[pos]=-1;

}


int main()
{
int size, //кол-во эл-в массива
*A, //динамич. массив
el, //значение перед вставкой
ind; //счётчик индекса эл-та
char flag=0;

printf("Enter size of array: ");
scanf("%d", &size);
if(size==0 || size<0) exit(0);
//выделяем память в ОЗУ
//для массива:
A=(int*)malloc(size*sizeof(int));

//если память не выделена,
//то завершаем работу
//программы с ошибкой 1:
if(!A)
{
printf("\nError. Array not created.");
exit(1);
}
//заполняем массив
//случайными значениями:
srand(time(NULL));
printf("\nArray A[%d]:\n", size);
for(int i = 0; i < size; i++)
{
if(rand()%2==1)
A[i] = 1+(rand()%limit);
else
A[i] = - (1+(rand()%limit));
printf("%d ", A[i]);
}
printf("\n\nEnter element before inserting: ");
scanf("%d", &el);
if(el==0) exit(0);
ind=size;
for(int i = 0; i <= ind; i++)
{ //for
if(A[i]==el)
{ //if
//увеличить размер памяти
//для массива на 1 ячейку:
A=(int*)realloc(A,++size*sizeof(int));
//сдвинуть элементы к новому
//концу массива от позиции
//найденного элемента:
shift(A,size,i+1);
flag=1;
} //if
} //for

if(flag)
{//if flag
for(int i = 0; i < size; i++)
{
if(A[i]==-1 && i!=0)
{
A[i]=A[i-1];
A[i-1]=fabs(A[i]);
}
}
}//if flag
printf("\n\nResult array A[%d]:\n", size);
for(int i = 0; i < size; i++)
printf("%d ", A[i]);

free(A);
system("pause"); //for Windows
return 0;
}
Сергей Зенин
Сергей Зенин
37 945
n(-1)+ch=+n(-1)
Write("Введите элемент")