Функция выводящая на экран наибольшее число двух массивов
программа в которой функция max(int mass[5],int mass1[5]) выводит наибольшее число из двух массивов. Элементы массива вводятся с клавиатуры. Помогите, пожалуйста, найти ошибки, и подскажите как это можно исправить.
#include <iostream>
using namespace std;
void max (int mass[5], int mass1[5])
{
int maxm = 0;
for (int i = 0; i < 5; i++)
{
if (mass[i] > maxm)
maxm = mass[i];
}
for (int j = 0; j < 5; j++)
{
if (mass1[j] > maxm)
maxm = mass1[j];
}
cout << maxm;
}
int main ()
{
int mass[5] = { };
int mass1[5] = { };
for (int i = 0; i < 5; i++)
{
cin >> mass[i];
}
for (int j = 0; j < 5; j++)
{
cin >> mass1[j];
}
max(int mass[5], int mass1[5]);
return 0;
}
Ответы (3 шт):
Ваша функция должна найти сначала максимальный элемент одного массива, а потом проверить есть ли элементы большие этого во втором массиве. Или сразу сравнивать элементы обоих массивов с максимальным. Т.е. массивы нужно перебрать, в одном цикле, а не в двух вложенных циклах.
И переменную для поиска максимального инициализируют первым значением из массива, а не нулем.
Ну и в конце функции вы наверное хотели вывести значение максимального элемента, а не ввести?
Как-то так:
void max (int mass[5], int mass1[5])
{
int maxm = mass[0];
for(int i = 0; i < 5; i++)
{
if (mass[i] > maxm)
maxm = mass[i];
if (mass1[i] > maxm)
maxm = mass1[i];
}
cout << maxm;
}
А в принципе, если оптимизировать, можно обойтись вообще без функции и без массивов (если с массивами больше не надо делать никаких операций, то и хранить их не надо) - поиск максимального элемента можно делать прямо при вводе.
int main()
{
int elem;
int maxm = INT_MIN;
for (int i = 0; i < 5; i++)
{
cin >> elem;
if(maxm < elem)
maxm = elem;
}
Такую задачу можно решить примерно так:
#include <iostream>
using namespace std;
int max(int *mass, int *mass1, const int size)
{
int maxm = mass[0];
for (size_t i = 0; i < size; ++i)
{
if (mass[i] > mass1[i])
{
if (mass[i] > maxm) maxm = mass[i];
}
else if (mass1[i] > mass[i])
{
if (mass1[i] > maxm) maxm = mass1[i];
}
else
{
if (mass[i] > maxm) maxm = mass[i];
}
}
return maxm;
}
int main()
{
const int N = 5;
int *mass = new int[N];
int *mass1 = new int[N];
cout << "Array 1" << endl;
for (int i=0;i<5;i++)
{
cout << "Enter number: ";
cin>> mass[i];
}
cout << "Array 2" << endl;
for (int j=0; j<5;j++)
{
cout << "Enter number: ";
cin>>mass1[j];
}
cout << "Max number: " << max(mass, mass1, N) << endl;
delete []mass;
delete []mass1;
return 0;
}
В принципе, можно обойтись и без функции. Только не забудьте удалить вызов в аргументах max_element().
#include <iostream>
#include <algorithm>
#include <cstddef>
#include <cstdint>
bool compare_array(const std::uint32_t a,const std::uint32_t b) {
return (a < b);
}
int main() {
const int size = 5;
std::uint32_t* first = new std::uint32_t[size];
std::uint32_t* second = new std::uint32_t[size];
std::cout << "First array.\n";
for (std::size_t i{ 0 }; i < size; ++i) {
std::cout << "Enter a number: ";
std::cin >> first[i];
}
std::cout << "\nSecond array.\n";
for (std::size_t i{ 0 }; i < size; ++i) {
std::cout << "Enter a number: ";
std::cin >> second[i];
}
std::cout << "The largest element in first array is: " << *std::max_element(first, first + size,compare_array) << '\n';
std::cout << "The largest element in second array is: " << *std::max_element(second, second + size,compare_array) << '\n';
delete[] first;
delete[] second;
return 0;
}