Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Cerega2127
0 / 0 / 1
Регистрация: 24.09.2016
Сообщений: 21
#1

Работа с одномерными массивами: удаление, добавление, перестановка элементов - C++

30.09.2016, 17:37. Просмотров 398. Ответов 14
Метки нет (Все метки)

1) Сформировать массив из n элементов с помощью датчика случайных чисел (n задается пользователем с клавиатуры).
2) Распечатать полученный массив.
3) Выполнить удаление указанных элементов из массива.
4) Вывести полученный результат.
5) Выполнить добавление указанных элементов в массив.
6) Вывести полученный результат.
7) Выполнить перестановку элементов в массиве.
8) Вывести полученный результат.
9) Выполнить поиск указанных в массиве элементов и подсчитать количество сравнений, необходимых для поиска нужного элемента.
10) Вывести полученный результат.
11) Выполнить сортировку массива указанным методом.
12) Вывести полученный результат.
13) Выполнить поиск указанных элементов в отсортированном массиве и подсчитать количество сравнений, необходимых для поиска нужного элемента.
14) Вывести полученный результат.

удалить все элементы больше среднего арифметического элементов массива
добавить К элементов в конец массива
перестановка: Поменять местами элементы с четными и нечетными номерами
поиск Первый отрицательный
сортировка Простое включение

Добавлено через 2 часа 39 минут
#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <algorithm>
#include <functional>
#include <iterator>
using namespace std;

int get_random(void) {return rand()%100;}
bool is_even(const int x){return(x%2)==0;}
int main(void)
{
setlocale(0, "rus");
srand(static_cast<unsigned int>(time(0)));
cout<<"введите количество элементов массива ";
int n=0;
cin>>n;
int*arr=new int[n];
int*begin=arr;
int*end=arr+n;
//сформировать массив из n элементов с помощью датчика случайных чисел
generate(begin,end, get_random);
//распечатать полученный массив
cout<<"Исходный массив: ";
copy(begin, end, ostream_iterator<int>(cout, " "));
cout<<"\n\n";
//удалить все элементы которые больше среднего арифметического всех элементов


return 0;
}

застрял помогите
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2016, 17:37
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Работа с одномерными массивами: удаление, добавление, перестановка элементов (C++):

Работа с одномерными массивами: удаление, добавление, перестановка элементов
1) Сформировать массив из n элементов с помощью датчика случайных чисел (n...

Работа с одномерными массивами: вставка, удаление
Доброго времени суток, помогите пожалуйста, чего то я недопонимаю что надо...

Работа с одномерными массивами (вычислить произведение отрицательных элементов массива.)
В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1. ...

Удаление, добавление, перестановка, сортировка элементов массива
Постановка задачи: 1) Сформировать массив из n элементов с помощью датчика...

Работа с одномерными массивами
Может кто-то сможет помочь .. В одномерном массиве ,который состоит из 15...

Работа с одномерными массивами
1) массивы должны быть динамические – организовать вы-деление памяти; 2)...

14
nmcf
6247 / 5559 / 2529
Регистрация: 14.04.2014
Сообщений: 23,376
30.09.2016, 17:48 #2
Так в чём сложность?
0
Cerega2127
0 / 0 / 1
Регистрация: 24.09.2016
Сообщений: 21
30.09.2016, 17:50  [ТС] #3
не знаю как удалить все элементы больше среднего арифметического
0
nmcf
6247 / 5559 / 2529
Регистрация: 14.04.2014
Сообщений: 23,376
30.09.2016, 20:02 #4
Если ты используешь итераторы и алгоритмы, то замени массив на вектор. Там есть функция удаления элемента.

Добавлено через 21 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
cin>>n;
vector<int> arr(n);
 
for_each(arr.begin(), arr.end(), [](int &i){ i = rand() % 100; });
 
double m = 0;
for_each(arr.begin(), arr.end(), [&m](int i){ m += i; });
m /= n; // среднее
 
vector<int>::iterator e = remove_if(arr.begin(), arr.end(), [m](int x){ return x > m; });
arr.resize(std::distance(arr.begin(), e));
1
Cerega2127
0 / 0 / 1
Регистрация: 24.09.2016
Сообщений: 21
30.09.2016, 20:27  [ТС] #5
спасибо, но я уже по-другому начал делать
0
nmcf
30.09.2016, 20:37
  #6

Не по теме:

С перестановкой элементов вручную, что ли? :)

0
Cerega2127
0 / 0 / 1
Регистрация: 24.09.2016
Сообщений: 21
01.10.2016, 10:59  [ТС] #7
// korolev laba 2.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <functional>
#include <iterator>
using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");
system("color 2");
const int MAX_SIZE = 150;
int a[MAX_SIZE];
int n;
cout << "Введите размер массива < " << MAX_SIZE << ": ";
cin >> n;
for (int i = 0; i < n; i++)
{
a[i] = rand() % 150 - 50;
}
cout << "Сформированный массив:\n";
for (int i = 0; i < n; i++)
{
cout<< "[" << i + 1 << "]: " << a[i]<<endl;
}
cout << "-----------------------------------------------------"<<endl;
//удаление элементов
int i, sum=0, sum1=0;
for (i=0;i<n;i++) //считаем сумму всех элементов
{
sum+=a[i];
sum1=sum/n;
}
cout<< "Среднее арифметическое= \n"<<(sum1)<<endl; //выводим среднее арифметическое (сумма на число элементов)
cout << "-----------------------------------------------------" << endl;
for (int i = 0; i < n; i++)
{
if (sum1>a[i])
{
cout << "[" << i+1 << "]: "<< a[i]<<endl;
}}
cout << "Массив с удалёнными элементами: "<<endl;
cout << "-----------------------------------------------------" << endl;
//добавление элемента
int k, p = a[0], c = 1, p1;
n++;
cout << "Введите сколько элементов необходимо добавить в конец массива : ";
cin >> k;
a[i] = k;
for (int i = 1; i > n; i++)
{
if (c % 2 != 0)
{
p1 = a[i];
a[i] = p;
}
else
{
p = a[i];
a[i] = p1;
}
c++;
}
for (int i = 0; i < n; i++)
{
cout << "[" << i + 1 << "]: " << a[i] << endl;
}
cout << "-----------------------------------------------------" << endl;
// Поменять местами элементы с четными и нечетными номерами


return 0;
}

вот как я переделал, подскажи как сделать так чтобы в массив добавлялось столько элементов сколько мы вводим с клавы
0
nmcf
6247 / 5559 / 2529
Регистрация: 14.04.2014
Сообщений: 23,376
01.10.2016, 12:10 #8
Ну там же запрашивается n у тебя. Вот её и используй.
1
Cerega2127
0 / 0 / 1
Регистрация: 24.09.2016
Сообщений: 21
01.10.2016, 18:04  [ТС] #9
// korolev laba 2.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <functional>
#include <iterator>
using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");
system("color 3");
const int MAX_SIZE = 100;
int a[MAX_SIZE];
int a2[MAX_SIZE];
int n;
cout << "Введите размер массива < " << MAX_SIZE << ": ";
cin >> n;
for (int i = 0; i < n; i++)
{
a[i] = rand() % 100 - 50;
}
cout << "Сформированный массив:\n";
for (int i = 0; i < n; i++)
{
cout<< "[" << i + 1 << "]: " << a[i]<<endl;
}
cout << "-----------------------------------------------------"<<endl;
//удаление элементов
cout << "Cчитаем среднее арифметическое и удаляем все элеметы которые больше его: "<<endl;
int i, sum=0, sum1=0;
for (i=0;i<n;i++) //считаем сумму всех элементов
{
sum+=a[i];
sum1=sum/n;
}
cout<< "Среднее арифметическое= \n"<<(sum1)<<endl; //выводим среднее арифметическое (сумма на число элементов)
cout << "-----------------------------------------------------" << endl;
cout << "Массив с удалёнными элементами: "<<endl;
for (int i = 0; i<n; i++)
if (sum1>a[i]){
{ cout<<"[" << i+1 << "]: "<<a[i]<<endl;
}}
cout << "-----------------------------------------------------" << endl;
//добавление элемента

cout << "Введите сколько элементов необходимо добавить в конец массива : ";
int k, p = a[0], c = 1, p1;
cin >> k;
a[i] = n+k;
for (int i = 1; i < n; i++)
{

if (c % 2!= 0)
{
p1 = a[i];
a[i] = p;
}
else
{
p = a[i];
a[i] = p1;
}
c++;
}
for (int i = 0; i < n; i++)
{
cout << "[" << i+1 << "]: " << a[i] << endl;
}
cout << "-----------------------------------------------------" << endl;
// Поменять местами элементы с четными и нечетными номерами
cout << "Меняем местами элементы с четными и нечетными местами:" << endl;
cout << "Элементы основного массива: ";
for (i=0; i<n;i++)
{
cout << a[i];
if (i<(n-1)) cout << ", ";
}
bool tf=true;
int chet=0;
for (i=0;i<n;i++){
a2[chet+1]=a[chet];
a2[chet]=a[chet+1];
chet=chet+2;
}
cout <<"\n";
cout << "Элементы преобразованного массива: ";
for (i=0;i<n;i++){
cout<<a2[i];
if (i<(n-1)) cout << ", ";
}
cout <<"\n";
cout << "-----------------------------------------------------" << endl;
// Сортировка
cout<<"сортировка: "<<endl;
for (int i = 1; i < n; i++)
{
int j = i - 1;
while( ( j >= 0 ) && (a2[i] < a2[j] ) )
{
j--;
}
j++;

int buf = a2[i];

for(int k = i; k > j; k-- )
a2[ k ] = a2[ k - 1 ];
a2[j] = buf;
}
for (int i = 0; i < n; i++)
{
cout << "[" << i+1 << "]: "<< a2[i] << endl;
}
cout<<"------------------КОНЕЦ-----------------------------"<<endl;
system("pause");
return 0;
}

сделал но есть ошибки, 1) как сделать чтобы выводился массив без удаленных элементов по порядку?
2) как сделать так чтобы после последнего оставшегося элемента в массиве добавлялись новые элементы и мы могли добавить только нечетное количество элементов если осталось нечетное количество и наоборот с четным количеством?
0
nmcf
6247 / 5559 / 2529
Регистрация: 14.04.2014
Сообщений: 23,376
01.10.2016, 19:14 #10
У тебя нет удаления как такового, просто вывод идёт выборочно, а элементы в массиве присутствуют. Надо создать второй массив и переносить туда подходящие элементы.
1
Cerega2127
0 / 0 / 1
Регистрация: 24.09.2016
Сообщений: 21
01.10.2016, 21:01  [ТС] #11
да я понимаю но не знаю как это правильно написать
0
nmcf
6247 / 5559 / 2529
Регистрация: 14.04.2014
Сообщений: 23,376
01.10.2016, 21:06 #12
Лучший ответ Сообщение было отмечено Cerega2127 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
int n2 = 0;
for (int i = 0; i<n; i++)
{
    if (sum1 > a[i]) a2[n2++] = a[i];
}
 
cout << "Массив с удалёнными элементами: "<<endl;
for (int i = 0; i<n2; i++)
 cout<<"[" << i+1 << "]: "<<a2[i]<<endl;
1
Cerega2127
0 / 0 / 1
Регистрация: 24.09.2016
Сообщений: 21
02.10.2016, 00:30  [ТС] #13
cout << "Массив с удалёнными элементами: "<<endl;
int n2 = 0;
for (int i = 0; i<n; i++)
{
if (sum1 > a[i]) a2[n2++] = a[i];
}
for (int i = 0; i<n2; i++)
cout<<"[" << i+1 << "]: "<<a2[i]<<endl;
cout << "-----------------------------------------------------" << endl;
//добавление элемента
cout << "Введите сколько элементов необходимо добавить в конец массива : ";
int k, n3=0;
cin >> k;
n3=n2+k;
for (int i = 0; i < n3; i++)
{
if( a2[k] = rand() % 100 - 50)
a2[i]= a2[n2] + a2[k];
cout << "[" << i+1 << "]: " << a2[i] << endl;
}
cout << "-----------------------------------------------------" << endl;

с не получается добавление элементов после последнего оставшегося элемента в старый массив или нужно создавать новый?
0
nmcf
6247 / 5559 / 2529
Регистрация: 14.04.2014
Сообщений: 23,376
02.10.2016, 08:11 #14
Лучший ответ Сообщение было отмечено Cerega2127 как решение

Решение

Откуда я знаю в старый или в новый тебе надо добавлять?
C++
1
2
3
4
5
6
n3=n2+k;
for (int i = n2; i < n3; i++)
{
a2[i]= rand() % 100 - 50;
cout << "[" << i+1 << "]: " << a2[i] << endl;
}
1
Cerega2127
0 / 0 / 1
Регистрация: 24.09.2016
Сообщений: 21
02.10.2016, 11:06  [ТС] #15
вот так я и хотел, спасибо большое)
0
02.10.2016, 11:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.10.2016, 11:06
Привет! Вот еще темы с решениями:

Работа с одномерными массивами
Если в массиве отсутствуют нули, найти произведение его элементов. Затем...

Работа с одномерными массивами с использованием процедур
Работа с одномерными массивами с использованием процедур Каждый пункт задания...

Работа с одномерными массивами. Коротышки собирали огурцы
Здравствуйте.Не могу понять, почему неправильно считает число максимумов и...

Работа с текстовой информацией, одномерными массивами и матрицами.
Здравствуйте... Помогите решить задачу... Отблагадарю))) 2. Имеется N...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru