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

C++ решение лаб

1.Определить, является ли произведение элементов трехзначным числом. (Одномерный и двумерный массив)
2.В каждом столбце найти минимум и заменить его нулём. (двумерный массив)
#include <iostream>
#include <random>
#include <array>
#include <functional>
#include <cmath>
#include <algorithm>

#define _N 4
#define _M 4

template<size_t N>
using Array = std::array<int, N>;

template<size_t N, size_t M>
using Array2D = std::array<std::array<int, M>, N>;

template<size_t N, size_t M>
Array2D<N, M> random_2darr(int from, int to){
Array2D<N, M> res;

std::random_device rd;
std::uniform_int_distribution<int> ds(from, to);

for(size_t i = 0; i < N; i++){
for(size_t j = 0; j < M; j++){
res[i][j] = ds(rd);
}
}

return res;
}

template<size_t N>
Array<N> random_arr(int from, int to){
Array<N> res;

std::random_device rd;
std::uniform_int_distribution<int> ds(from, to);

for(size_t i = 0; i < N; i++){
res[i] = ds(rd);
}

return res;
}

template<size_t N>
std::ostream& operator<<(std::ostream& os, const Array<N>& arr){
os << "[";
for(size_t i = 0; i < N; i++){
os << arr[i];
if(i + 1 != N) os << ", ";
}
os << "]";
return os;
}

template<size_t N, size_t M>
std::ostream& operator<<(std::ostream& os, const Array2D<N, M>& arr){
os << "[";
for(size_t i = 0; i < N; i++){
os << arr[i];
if(i + 1 != N) os << ", " << std::endl;
}
os << "]";
return os;
}

int main(){
//Одномерный массив
Array<_N> arr = random_arr<_N>(1, 3);

std::cout << "Одномерный массив: " << arr << std::endl;

int product = 1;

std::for_each(arr.cbegin(), arr.cend(), [&product](int n){
product *= n;
});

std::cout << "Произведение элементов одномерного массива: " << product << std::endl;
std::cout << "Трехзначное ли число: " << (floor(log(product)/log(10)) == 2 ? "Да" : "Нет") << std::endl;

std::cout << std::endl;

//Двумерный массив:
Array2D<_N, _M> arr2d = random_2darr<_N, _M>(1, 3);

std::cout << "Двумерный массив: " << std::endl << arr2d << std::endl;

product = 1;

std::for_each(arr2d.cbegin(), arr2d.cend(), [&product](const Array<_M>& arr){
std::for_each(arr.cbegin(), arr.cend(), [&product](int n){
product *= n;
});
});

std::cout << "Произведение элементов двумерного массива: " << product << std::endl;
std::cout << "Трехзначное ли число: " << (floor(log(product)/log(10)) == 2 ? "Да" : "Нет") << std::endl;

std::cout << std::endl;

//Замена минимальных значений в столбцах на нули

for(size_t i = 0; i < _N; i++){
size_t min = 0;
for(size_t j = 1; j < _M; j++){
if(arr2d[min][i] > arr2d[j][i]){
min = j;
}
}
arr2d[min][i] = 0;
}

std::cout << "Новый двумерный массив: " << std::endl << arr2d << std::endl;

return 0;
}
Влад ........
Влад ........
11 157
Лучший ответ