Объявление входной точки программы. Она должна быть именно такой, если мы не изменяли что-то в настройках проекта. Именно с неё компилятор начинает работу
SetConsoleCP (1251)
Как я уже сказал, это функция Win API библиотеки, использующаяся для установки определённой кодовой страницы. По сути это набор символов и, соответственно, кодировка, которая поддерживает русские символы. С неё программа будет понимать, что мы вводим русский текст и сможет его спокойно обработать
SetConsoleOutputCP(1251)
Аналогично, как и с предыдущей функцией, но эта позволяет консоли увидеть русские символы в консоли
char matrix[13][18]
Объявление матрицы (не потому что так назван массив, а потому что это двойной массив, то есть имеющий длину и высоту) или, другими словами, массива, который простирается на 13 объектов в длину и на 18 в высоту. Получится 234 объекта типа char - символьного типа. То есть наши переменные смогут хранить себе лишь один символ (не в счёт escape-последовательности - символы, типа \n [аналогия - std::endl], \t, которые занимают 2 символа и выполняют работу по переносу строки и табуляции [отступ на какое-то количество пробелов] соответственно. Их большое количество, не стоит на этом зацикливаться)
int max_line = 0 и max_val = 0
Целочисленные переменные, хранящие максимально длинную строку и максимальное количество не повторяющихся символов во всём коде. То есть, оно ищет строку с максимальным элементом и сохраняет его последнюю позицию
for (int i = 0; i < 13; i++) { }
Цикл, начинающийся с 0 и проходящий 13 (количество столбцов) циклов, увеличивая значение i на единицу. Данный цикл заполняет массив (чем? увидим позже)
cout << i + 1 << ": "
Выводим номер столбца. Почему i + 1? Потому что мы используем систему счисления с основанием 10. Это не значит, что в ней 10 чисел: от 1 до 10. Это значит, что в ней всё начинается с 0 и заканчивается 9. Если бы мы не написали +1, то в консоль выводилось бы следующее:
0 строка: (- это что вообще за нулевая строка?)
int line_cnt = 0
Количество не повторяющихся символов для каждой итерации, которое в итоге присваивается max_val
for (int a = 0; a < 18; a++) { }
Цикл, начинающийся с 0 и проходящий 18 (количество строк) циклов, увеличивая значение a на единицу. Данный цикл будет проходить каждый элемент массива
matrix[i][a] = rand() % ('z' - 'a') + 'a';
Для элемента по позиции [i][a] генерируется псевдослучайный символ и присваивается этому элементу
Проверка на то, что мы сейчас в массиве (a > 0 значит, что если мы получим каким-то образом в a отрицательное число [что по сути означает, что мы вылетели из массива, так как не может существовать отрицательного индекса массива], то это условие не выполнится) и проверка, не равняется ли данный символ предыдущему. В первую итерацию это условие не выполнится, поскольку будет проверяться схожесть элементов по позиции [i][a] = [0][0] с элементом по позиции [i][a-1] = [0][-1]. В этой ячейке будет случайный символ, который никак не будет равняться последующему, по позиции [i][a]. Это объясняет то, почему в консоли выводится n символов, но напротив каждой строки (после '=') n-1 символов
cout << " = " << line_cnt << endl
Выводим для строки i-й итерации количество не повторяющихся символов
if (max_val <= line_cnt) { //... }
Мне не хотелось рассматривать данную конструкцию отдельно, поскольку будет теряться смысл, поэтому я рассмотрю всё. В данном условии проверяется, больше ли количество не повторяющихся символов данной итерации, чем то количество итераций, которое было до этого, то есть сохранившееся. Возьмём пример из Вашей жизни: Вы решили устроить марафон по пробежке по круговому полю n раз. По сути это цикл. Вы пробегаете S метров за время t. Вы измеряете, когда у Вас была самая большая скорость. Вы в первый (который для программы является по счёту нулевым) круг записываете скорость S₁ / t₁, во второй (1 для программы) скорость S₂ / t₁, но она меньше, чем предыдущая, поэтому Вы не записываете это в лучший результат. В третий круг Вы пробежали S₃ / t₃ и, вуаля, Вы пробежали намного быстрее, чем в первый раз. Теперь эта скорость V₃ станет лучшей и последующие результаты будете сравнивать с ней или с той величиной, которая больше этого значения
cout << endl << "Номер ряда с наибольшим кол-вом = " << max_line + 1
Выводит номер ряда с наибольшим количеством в общем символов в строке. По причине, которую я описывал с (i + 1), здесь делается абсолютно так же, поскольку max_line всегда в конце условия приравнивается итератору цикла (который начинается с 0). Если бы мы не добавляли единицу, то считали бы первый цикл за 0, второй за 1 и так далее
system("pause")
"Замораживает" консоль
return 0
"Говорит" программе, что она завершилась с ноль ошибками (то есть без ошибок)
Объявление входной точки программы. Она должна быть именно такой, если мы не изменяли что-то в настройках проекта. Именно с неё компилятор начинает работу
SetConsoleCP (1251)Как я уже сказал, это функция Win API библиотеки, использующаяся для установки определённой кодовой страницы. По сути это набор символов и, соответственно, кодировка, которая поддерживает русские символы. С неё программа будет понимать, что мы вводим русский текст и сможет его спокойно обработать
SetConsoleOutputCP(1251)Аналогично, как и с предыдущей функцией, но эта позволяет консоли увидеть русские символы в консоли
char matrix[13][18]Объявление матрицы (не потому что так назван массив, а потому что это двойной массив, то есть имеющий длину и высоту) или, другими словами, массива, который простирается на 13 объектов в длину и на 18 в высоту. Получится 234 объекта типа char - символьного типа. То есть наши переменные смогут хранить себе лишь один символ (не в счёт escape-последовательности - символы, типа \n [аналогия - std::endl], \t, которые занимают 2 символа и выполняют работу по переносу строки и табуляции [отступ на какое-то количество пробелов] соответственно. Их большое количество, не стоит на этом зацикливаться)
int max_line = 0 и max_val = 0Целочисленные переменные, хранящие максимально длинную строку и максимальное количество не повторяющихся символов во всём коде. То есть, оно ищет строку с максимальным элементом и сохраняет его последнюю позицию
for (int i = 0; i < 13; i++) { }Цикл, начинающийся с 0 и проходящий 13 (количество столбцов) циклов, увеличивая значение i на единицу. Данный цикл заполняет массив (чем? увидим позже)
cout << i + 1 << ": "Выводим номер столбца. Почему i + 1? Потому что мы используем систему счисления с основанием 10. Это не значит, что в ней 10 чисел: от 1 до 10. Это значит, что в ней всё начинается с 0 и заканчивается 9. Если бы мы не написали +1, то в консоль выводилось бы следующее:
0 строка: (- это что вообще за нулевая строка?)
int line_cnt = 0Количество не повторяющихся символов для каждой итерации, которое в итоге присваивается max_val
for (int a = 0; a < 18; a++) { }Цикл, начинающийся с 0 и проходящий 18 (количество строк) циклов, увеличивая значение a на единицу. Данный цикл будет проходить каждый элемент массива
matrix[i][a] = rand() % ('z' - 'a') + 'a';Для элемента по позиции [i][a] генерируется псевдослучайный символ и присваивается этому элементу
cout << matrix[i][a] << ' 'Вывод этого элемента, после которого идёт пробел
if ((a > 0) && (matrix[i][a] != matrix[i][a - 1])) line_cnt++Проверка на то, что мы сейчас в массиве (a > 0 значит, что если мы получим каким-то образом в a отрицательное число [что по сути означает, что мы вылетели из массива, так как не может существовать отрицательного индекса массива], то это условие не выполнится) и проверка, не равняется ли данный символ предыдущему. В первую итерацию это условие не выполнится, поскольку будет проверяться схожесть элементов по позиции [i][a] = [0][0] с элементом по позиции [i][a-1] = [0][-1]. В этой ячейке будет случайный символ, который никак не будет равняться последующему, по позиции [i][a]. Это объясняет то, почему в консоли выводится n символов, но напротив каждой строки (после '=') n-1 символов
cout << " = " << line_cnt << endlВыводим для строки i-й итерации количество не повторяющихся символов
if (max_val <= line_cnt) { //... }Мне не хотелось рассматривать данную конструкцию отдельно, поскольку будет теряться смысл, поэтому я рассмотрю всё. В данном условии проверяется, больше ли количество не повторяющихся символов данной итерации, чем то количество итераций, которое было до этого, то есть сохранившееся. Возьмём пример из Вашей жизни: Вы решили устроить марафон по пробежке по круговому полю n раз. По сути это цикл. Вы пробегаете S метров за время t. Вы измеряете, когда у Вас была самая большая скорость. Вы в первый (который для программы является по счёту нулевым) круг записываете скорость S₁ / t₁, во второй (1 для программы) скорость S₂ / t₁, но она меньше, чем предыдущая, поэтому Вы не записываете это в лучший результат. В третий круг Вы пробежали S₃ / t₃ и, вуаля, Вы пробежали намного быстрее, чем в первый раз. Теперь эта скорость V₃ станет лучшей и последующие результаты будете сравнивать с ней или с той величиной, которая больше этого значения
cout << endl << "Номер ряда с наибольшим кол-вом = " << max_line + 1Выводит номер ряда с наибольшим количеством в общем символов в строке. По причине, которую я описывал с (i + 1), здесь делается абсолютно так же, поскольку max_line всегда в конце условия приравнивается итератору цикла (который начинается с 0). Если бы мы не добавляли единицу, то считали бы первый цикл за 0, второй за 1 и так далее
system("pause")"Замораживает" консоль
return 0"Говорит" программе, что она завершилась с ноль ошибками (то есть без ошибок)
1.
const n=10;
var a:array [1..n] of integer;
i:integer;
begin
for i:= 1 to n do read (a[i]);
write(' Массив: ');
for i:= 1 to n do write (a[i],' ');
writeln;
write('Массив в обратной последовательности: ');
for i:= n downto 1 do write (a[i],' ')
end.
2.
const n=10;
var a:array [1..n] of integer;
i,s:integer;
begin
for i:= 1 to n do read (a[i]);
write('Массив: ');
for i:= 1 to n do write (a[i],' ');
writeln;
write ('Номера нулевых элементов: ');
for i:= 1 to n do if a[i]<0 then
begin
a[i]:=0;
write(i,' ')
end
end.
3.
const n=10;
var a:array [1..n] of integer;
i,sp,kp,so,ko:integer;
begin
for i:= 1 to n do read (a[i]);
write('Массив: ');
for i:= 1 to n do write (a[i],' ');
writeln;
for i:= 1 to n do
begin
if a[i]>0 then
begin
sp:=sp+a[i];
kp:=kp+1
end;
if a[i]<0 then
begin
so:=so+a[i];
ko:=ko+1
end;
end;
writeln('Среднее арифметическое положительных элементов массива равно ',sp/kp:0:3);
writeln('Среднее арифметическое отрицательных элементов массива равно ',so/ko:0:3)
end.