@MrFlatman
Студент

Что происходит внутри цикла FOR?

Всем привет. Код не мой, пытаюсь понять что происходит в цикле.
Программа предназначена для выполнения условия
Даны натуральное число n и целые числа (m1...mn) . После каждого четного члена последовательности с нечетным номером, предшествующим первому по порядку члену со значением max(m1...mn) , вставить значение max(m1...mn).


Непосредственно сам код:

#include <iostream>
#include <cstdlib>
using namespace std;
#define n 30
 
int main(){
    int mas[n];
    int max = -9999;
    int pos = 0;
    cout<<"In: ";
    for(int i = 0; i < n; i++){
        mas[i] = rand()%105 - 5;
        cout<<mas[i]<<" ";
        if(max < mas[i]){
            max = mas[i];
            pos = i;
        }
    }
    cout<<endl<<"Max = "<<max<<endl<<"Out ";
    for(int i = 0; i < n; i++){
        cout<<mas[i]<<" ";
                if(i < pos){
        if((i % 2 != 0) && (mas[i] % 2 == 0))
            cout<<max<<" ";
                }
    }
return 0;
}


Трудности возникаю при попытке понять что происходит в цикле, данная строка
for(int i = 0; i < n; i++)
понятна, а вот что происходит дальше за ней как туман. Так же не ясно почему int max = -9999, ведь в условии об этом не слова. Сильно тапками не кидайтесь, пожалуйста, учу С++ только 2-3 неделю. Еще не совсем понимаю все. Заранее благодарен.
  • Вопрос задан
  • 204 просмотра
Решения вопроса 1
hydra_13
@hydra_13
Пограммист - любитель)
1) int max = -9999 - изначальная инициализация переменной (с надеждой что это самое максимально минимальное значение)
2) mas[i] = rand()%105 - 5;- присвоение рандомного значения ячейке с индексомi в массиве mas
3) cout<<mas[i]<<" ";- вывод значения ячейки i из массива mas в консоль
4)
if(max < mas[i]){
            max = mas[i];
            pos = i;
        }

- проверка если текущий элемент массива mas больше значения переменной max, то записываем значения ячейки i массива mas в переменную max и сохранение индекса ячейки i в переменной pos.

5) cout<<mas[i]<<" "; - вывод значения i ячейки массива mas.
6) if(i < pos){} - если i меньше индекса позиции максимального элемента
7)
if((i % 2 != 0) && (mas[i] % 2 == 0))
            cout<<max<<" ";
                }
- если текущий индекс i нечетный (i % 2 != 0) И (&&) элемент массива mas с индексом i имеет четное значение (mas[i] % 2 == 0) , то вывести в консоль максимальное значение ( cout<<max<<" ";)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ocelot
@Ocelot
mas[i] = rand()%105 - 5; // записываем в ячейку массива случайное число диапазоне от 0 до 99
cout<<mas[i]<<" "; // выводим это число на консоль
if(max < mas[i]){   // ищем максимальное значение (max) и его индекс (pos) 
    max = mas[i];
    pos = i;
}


cout<<mas[i]<<" ";  // выводим значение текущей ячейки
if(i < pos){        // для всех элементов, предшествующих максимальному
    if((i % 2 != 0) && (mas[i] % 2 == 0))  // если номер нечетный и значение чётное
            cout<<max<<" ";   // выводим значение максимального элемента
}

Я бы такое решение не принял. Вместо вставки в массив оно просто выводит число на консоль.
почему int max = -9999
Чтобы до прохода по циклу значение текущего максимума (с которым сравнивают числа) было гарантированно меньше любого числа. Тоже говнокод, в таких случаях лучше использовать INT_MIN.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
26 апр. 2024, в 07:47
2000 руб./за проект
26 апр. 2024, в 06:46
1000 руб./в час
26 апр. 2024, в 05:31
1000 руб./за проект