1.Определить, является ли произведение элементов трехзначным числом. (Одномерный и двумерный массив)
2.В каждом столбце найти минимум и заменить его нулём. (двумерный массив)
Другие языки программирования и технологии
C++ решение лаб
#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;
}
#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;
}
Похожие вопросы
- Программирование c++. Решение задачи
- Помогите первокурснику. Нам задали лабу по "Языки программирования высокого уровня". И я не шарю как это делать. (C#)
- помогите дописать лабу в C (Си)
- сделала лабу по информатике,завтра защита,сделать -то сделала ,а объяснить не могу...картинка внутри
- Необходима помощь в решении задачи. C++
- Помогите с решением задачи на C++
- Как создать обозреватель решений в Microsoft Visual C# Express 2010?
- Помогите пожалуйста оптимизировать решение задачи (Зайчик) на C++
- Как в C++ разбить число на цифры и вывести их через пробел? Решение задачи реализовать с помощью конструкции switch.
- Учусь програмировать на C++ по книге "C++ для чайников".Проблема.