Вопрос задан 24.10.2023 в 10:17. Предмет Информатика. Спрашивает Сакович Георгий.

У меня проблема со строчкой for (int k = 0; k < SIZE; k++): Visual Studio отказывается

инициализировать arr[0], причём в следующем цикле всё хорошо. Отладчик просто пропускает этот кусок кода. Как это решить? #include using namespace std; int main() { setlocale(LC_ALL, "Rus"); int number, age, comparison; cout << "Сколько пришло посетителей сегодня? "; cin >> number; const int SIZE = 5; int arr[SIZE]; for (int i = 0; i < number; i++) { cout << "Сколько лет посетителю? "; cin >> arr[i]; } for (int k = 0; k < SIZE; k++) { age = arr[0]; if (arr[k] < age) { age = arr[k]; } } cout << "Возраст самого младшего посетителя за сегодня: " << age << endl << endl; for (int j = 0; j < SIZE; j++) { comparison = arr[0]; if (arr[j] > 0) { comparison = arr[j]; } } cout << "Возраст самого старшего посетителя за сегодня: " << comparison << endl << endl; return 0; }
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Коваленко Вероника.

Для динамического изменения в массиве лучше использовать динамическое распределение памяти, нежели статическое.

В данной программе я вижу, что массив статически выделил 5 ячеек, но при том он пытается записать 10 значений (если я введу в number "10").

Поэтому лучше будет переписать программу так:

#include <iostream>

using namespace std;

int main()

{

setlocale(LC_ALL, "Rus");

int numbers, age, comparison;

cout << "Сколько пришло посетителей сегодня? ";

cin >> numbers;

int* arr=new int [numbers];

for (int i = 0; i < numbers; i++)

{

 cout << "Сколько лет посетителю? ";

 cin >> arr[i];

}

age = arr[0];

for (int k = 0; k < numbers; k++)

{

 if (arr[k] < age)

 {

  age = arr[k];

 }

}

cout << "Возраст самого младшего посетителя за сегодня: " << age << endl << endl;

for (int j = 0; j < numbers; j++)

{

 comparison = arr[0];

 if (arr[j] > 0)

 {

  comparison = arr[j];

 }

}

cout << "Возраст самого старшего посетителя за сегодня: " << comparison << endl << endl;

return 0;

}

Вариант с одним циклом и ключами:

#include <iostream>

using namespace std;

int main()

{

setlocale(LC_ALL, "Rus");

int numbers, age, comparison;

bool key1 = false, key2 = false;

cout << "Сколько пришло посетителей сегодня? ";

cin >> numbers;

int* arr=new int [numbers];

for (int i = 0; i < numbers; i++)

{

 cout << "Сколько лет посетителю? ";

 cin >> arr[i];

 if (!key1) {

  key1 = true;

  age = arr[0];

 }

 if (!key2) {

  key2 = true;

  comparison = arr[0];

 }

 if (arr[i] > 0)

 {

  comparison = arr[i];

 }

 if (arr[i] < age)

 {

  age = arr[i];

 }

}

cout << "Возраст самого младшего посетителя за сегодня: " << age << endl << endl;

cout << "Возраст самого старшего посетителя за сегодня: " << comparison << endl << endl;

return 0;

}

Вариант с использованием встроенных функций:

#include <iostream>

#include <algorithm>

using namespace std;

int main()

{

setlocale(LC_ALL, "Rus");

int numbers;

cout << "Сколько пришло посетителей сегодня? ";

cin >> numbers;

int* arr=new int [numbers];

for (int i = 0; i < numbers; i++)

{

 cout << "Сколько лет посетителю? ";

 cin >> arr[i];

}

cout << "Возраст самого младшего посетителя за сегодня: " << *min_element(arr, arr + numbers) << endl << endl;

cout << "Возраст самого старшего посетителя за сегодня: " << *max_element(arr, arr + numbers) << endl << endl;

return 0;

}

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Проблема в вашем коде связана с тем, что вы пытаетесь инициализировать age и comparison значениями из массива arr, но вы неправильно обращаетесь к элементам массива. Вы всегда обращаетесь к arr[0], независимо от значения k или j, поэтому вы получаете одно и то же значение в обоих циклах.

Для поиска минимального и максимального значения в массиве вам нужно инициализировать age и comparison значениями из массива до входа в циклы. Затем вы можете сравнивать текущее значение массива с age и comparison и обновлять их, если необходимо.

Вот исправленный код:

cpp
#include <iostream> using namespace std; int main() { setlocale(LC_ALL, "Rus"); int number, age, comparison; cout << "Сколько пришло посетителей сегодня? "; cin >> number; const int SIZE = 5; int arr[SIZE]; for (int i = 0; i < number && i < SIZE; i++) { cout << "Сколько лет посетителю? "; cin >> arr[i]; } // Инициализируем age и comparison начальными значениями из массива age = arr[0]; comparison = arr[0]; for (int k = 0; k < number && k < SIZE; k++) { if (arr[k] < age) { age = arr[k]; } } cout << "Возраст самого младшего посетителя за сегодня: " << age << endl << endl; for (int j = 0; j < number && j < SIZE; j++) { if (arr[j] > comparison) { comparison = arr[j]; } } cout << "Возраст самого старшего посетителя за сегодня: " << comparison << endl << endl; return 0; }

Этот код инициализирует age и comparison правильно и корректно находит минимальный и максимальный возраст в массиве arr.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос