
У меня проблема со строчкой 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; }

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

Для динамического изменения в массиве лучше использовать динамическое распределение памяти, нежели статическое.
В данной программе я вижу, что массив статически выделил 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;
}



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


Похожие вопросы
Топ вопросов за вчера в категории Информатика
Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili