Добрый вечер! Проблема возникла при написании кода. две ошибки : используется неинициализированная локальная переменная 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 шт):

Автор решения: nyekitka

Проблема в том, что вы создаёте переменную i вне массива, а потом заново её создаёте в цикле. С переменной max всё ещё проще, вы её просто не инициализируете и уже начинаете использовать, хотя там ничего не лежит. Как правильно:

  1. Решение проблемы с i на примере outputv(x, n)
 void outputv(double x[], int n)
{
    cout << "Массив:";
    for (int i = 0; i < n; i++)
    {
        cout << x[i] << "  ";
    }
    cout << endl << endl;
}
  1. Решение проблемы с 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.

→ Ссылка
Автор решения: Harry

Ну смотрите на ваши недочеты...

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; — так почему вы не делаете это вне цикла?...

→ Ссылка