Добрый вечер! Проблема возникла при написании кода. две ошибки : используется неинициализированная локальная переменная i так же с max тоже самое
#include<iostream>
#include <iomanip>
#include <cmath>
using namespace std;
void inputv(double x[], int n)
{
cout << "Введите координаты массива:";
for (int i = 0; i < n; i++)
{
cin >> x[i];
}
}
void outputv(double x[], int n)
{
int i;
cout << "Массив:";
for (int i = 0; i < n; i++);
{
cout << x[i] << " ";
}
cout << endl << endl;
}
void sumpl(double x[], int n, int sum)
{
int i;
for (i = 0; i < n; i++)
{
if (x[i] > 0)
{
sum += x[i];
}
}
cout << "Сумма положительных элементов массива:" << sum << endl;
}
void summin(double x[], int n, int sum)
{
int i;
for (i = 0; i < n; i++)
{
if (x[i] < 0)
{
sum -= x[i];
}
}
cout << "Сумма отрицательных элементов массива:" << sum << endl;
}
void serchmax(double x[], int n)
{
int i;
double max;
for (i = 0; i < n; i++)
{
if (max < abs(x[i]))
max = abs(x[i]);
}
cout << "Максимальное значение массива по модулю:" <<max<< endl;
}
void poiskmin(double mas[], int n, int min)
{
for (int i = 0; i < n; i++) {
if (min > abs(mas[i]))
min = abs(mas[i]);
}
cout<< "Мин значение по модулю= " << min << endl;
}
void main()
{
setlocale(LC_ALL, "rus");
double mas[5];
int n, sum;
inputv(mas, 5);
outputv(mas, 5);
sumpl(mas, 5, 0);
summin(mas, 5, 0);
serchmax(mas, 5);
poiskmin(mas, 5, 0);
}
Ответы (2 шт):
Проблема в том, что вы создаёте переменную i вне массива, а потом заново её создаёте в цикле. С переменной max всё ещё проще, вы её просто не инициализируете и уже начинаете использовать, хотя там ничего не лежит. Как правильно:
- Решение проблемы с
iна примереoutputv(x, n)
void outputv(double x[], int n)
{
cout << "Массив:";
for (int i = 0; i < n; i++)
{
cout << x[i] << " ";
}
cout << endl << endl;
}
- Решение проблемы с
max:
void serchmax(double x[], int n)
{
double max = 0;
for (i = 0; i < n; i++)
{
if (max < abs(x[i]))
max = abs(x[i]);
}
cout << "Максимальное значение массива по модулю:" <<max<< endl;
}
Почему же инициализируем нулём? Всё просто, раз вам нужен максимальный по модулю элемент, то очевидно, что ничего меньше нуля вам не встретится, поэтому в качестве начального максимума берём наименьший возможный элемент - 0.
Ну смотрите на ваши недочеты...
void outputv(double x[], int n)
{
int i;
cout << "Массив:";
for (int i = 0; i < n; i++);
// Тут вас просто предупреждают, что внутри цикла будет видна внутренняя
// переменная i, а не та, что объявлена в первой строчке функции (кстати,
// зачем? вы же ее не используете)
Точно так же не используются переменные
int n, sum;
А теперь к неинициализированным...
double max;
for (i = 0; i < n; i++)
{
if (max < abs(x[i])) // Чему тут равно max при первом сравнении?
А тут чему равно i при выводе x[i]?
int i;
cout << "Массив:";
for (int i = 0; i < n; i++);
{
cout << x[i] << " ";
Не спешите ответить — посмотрите, а что это у вас стоит после заголовка цикла for? Видите точку с запятой? А вот теперь можете отвечать :)
Лучше при объявлении переменных не лениться и присваивать им значения. Ведь в цикле вы же пишете int i = 0; — так почему вы не делаете это вне цикла?...