C/C++

Задача по c++

Ввести массив из 15 вещественных чисел. Создать два новых
массива: в первый записать элементы исходного массива, которые по
модулю меньше 20, а во второй - остальные. Поменять местами макси-
мальный элемент первого массива и минимальный элемент второго.
// Вот вам и StringGrid :)

#include <algorithm>
#include <iostream>
#include <iomanip>
#include <fstream>
#include <random>
#include <vector>
using namespace std;
void show(double* box, const size_t n) {
for (auto i = 0U; i < n; ++i) cout << setw(7) << box[i];
puts("");
}
int main() {
uniform_int_distribution<> uid(-400, 400);
mt19937 gen{ random_device()() };
const auto n = 15;
double box[n];
for (auto& x : box) x = uid(gen) / 10.0;
ofstream out("StringGrid.bin", ios::binary);
if (out.is_open()) {
for (auto x : box) out << x << ' ';
out.close();
}
else puts("Error!");
ifstream inp("StringGrid.bin", ios::binary);
double* a = nullptr;
double* b = nullptr;
auto na = 0U, nb = 0U;
if (inp.is_open()) {
const auto m = 20.0;
double x;
vector<double> tmp;
while (inp >> x) {
tmp.push_back(x);
if (fabs(x) < m) ++na;
else ++nb;
}
inp.close();
a = new double[na];
b = new double[nb];
auto i = 0U, j = 0U;
for (auto x : tmp)
if (fabs(x) < m) a[i++] = x;
else b[j++] = x;
}
cout << fixed << setprecision(1);
show(box, n);
puts("");
show(a, na);
show(b, nb);
puts("");
auto max = max_element(a, a + na);
auto min = min_element(b, b + nb);
iter_swap(max, min);
show(a, na);
show(b, nb);
delete[] a;
delete[] b;
system("pause > nul");
}
UZ
Ulan Zhumabaev
96 700
Лучший ответ
Олег Кузьмин спасибо вам огромнейшее, а в чем вы делали данную программу ?
Олег Кузьмин Ещё раз вам душевное спасибо
Михаил Королев а можно как нибудь упростить этот код?
#include <iostream>

using namespace std;

void print(const double * d, const int len)
{
for(int x = 0; x < len; x++)
cout << d[x] << ' ';
cout << endl;
}

int main()
{
const int size = 15;
double a[size],b[size],c[size];
int y = 0, z = 0;

for(int x = 0; x < size; x++)
{
cin >> a[x];
if(a[x] >= -20.0 && a[x] <= 20.0)
{
b[y++] = a[x];
}
else
{
c[z++] = a[x];
}
}
if(!y || !z)
{
cerr << "Нет данных для расчёта" << endl;
return 1;
}
// в задание этого нет -- выводим на экран
cout << "\tПолучили данные для работы:" << endl;
print(b,y);
print(c,z);
// находим максимальное и минимальное значения
double max1 = b[0];
for(int x = 0; x < y; x++)
if(max1 < b[x]) max1 = b[x];
double min2 = c[0];
for(int x = 0; x < z; x++)
if(min2 > c[x]) min2 = c[x];
// меняем местами
for(int x = 0; x < y; x++)
if(b[x] == max1) b[x] = min2;

for(int x = 0; x < z; x++)
if(c[x] == min2) c[x] = max1;
// в задание этого нет -- выводим на экран
cout << "\tПолучили результат:" << endl;
print(b,y);
print(c,z);
return 0;
}
Виктор Панов
Виктор Панов
69 465