Программка написана на с++. разъяснить каждую строку понятным языкомint main()
Программка написана на с++. разъяснить каждую строчку понятным языком
int main()
SetConsoleCP (1251);
SetConsoleOutputCP (1251);
char matrix[13][18];
int max_line = 0, max_val = 0;
for(int i=0; ilt;13; i++)
cout lt;lt; i+1 lt;lt; ": ";
int line_cnt = 0;
for(int a=0; alt;18; a++)
matrix[i][a] = rand()%('z'-'a')+'a';
cout lt;lt; matrix[i][a] lt;lt; ' ';
if((agt;0) amp;amp; (matrix[i][a]!=matrix[i][a-1])) line_cnt++;
cout lt;lt; " = " lt;lt; line_cnt lt;lt; endl;
if(max_val lt;= line_cnt)
max_val = line_cnt;
max_line = i;
cout lt;lt; endl lt;lt; "Номер ряда с величайшим кол-вом = " lt;lt; max_line+1;
cout lt;lt; endl lt;lt; endl lt;lt; endl;
system ("pause");
return 0;
int main()
Объявление входной точки программы. Она должна быть именно такой, если мы не изменяли что-то в настройках проекта. Конкретно с неё компилятор начинает работу
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 lt; 13; i++)
Цикл, начинающийся с 0 и проходящий 13 (количество столбцов) циклов, увеличивая значение i на единицу. Данный цикл наполняет массив (чем? увидим позже)
cout lt;lt; i + 1 lt;lt; ": "
Выводим номер столбца. Почему i + 1? Потому что мы используем систему счисления с основанием 10. Это не означает, что в ней 10 чисел: от 1 до 10. Это означает, что в ней всё начинается с 0 и заканчивается 9. Если бы мы не написали +1, то в консоль выводилось бы последующее:
0 строчка: (- это что вообщем за нулевая строчка?)
int line_cnt = 0
Количество не циклических знаков для каждой итерации, которое в итоге присваивается max_val
for (int a = 0; a lt; 18; a++)
Цикл, начинающийся с 0 и проходящий 18 (количество строк) циклов, увеличивая значение a на единицу. Данный цикл будет проходить каждый элемент массива
matrix[i][a] = rand() % ('z' - 'a') + 'a';
Для элемента по позиции [i][a] генерируется псевдослучайный знак и присваивается этому элементу
cout lt;lt; matrix[i][a] lt;lt; ' '
Вывод этого элемента, после которого идёт пробел
if ((a gt; 0) amp;amp; (matrix[i][a] != matrix[i][a - 1])) line_cnt++
Проверка на то, что мы на данный момент в массиве (a gt; 0 означает, что если мы получим каким-то образом в a отрицательное число [что по сути значит, что мы вылетели из массива, так как не может существовать отрицательного индекса массива], то это условие не выполнится) и проверка, не приравнивается ли данный символ предшествующему. В первую итерацию это условие не выполнится, так как будет проверяться схожесть частей по позиции [i][a] = [0][0] с элементом по позиции [i][a-1] = [0][-1]. В этой ячейке будет случайный символ, который никак не будет равняться последующему, по позиции [i][a]. Это изъясняет то, почему в консоли выводится n символов, но против каждой строчки (после '=') n-1 знаков
cout lt;lt; " = " lt;lt; line_cnt lt;lt; endl
Выводим для строчки i-й итерации количество не циклических знаков
if (max_val lt;= line_cnt) //...
Мне не хотелось разглядывать данную конструкцию раздельно, так как будет теряться смысл, поэтому я рассмотрю всё. В данном условии проверяется, больше ли количество не повторяющихся символов данной итерации, чем то количество итераций, которое было до этого, то есть сохранившееся. Возьмём пример из Вашей жизни: Вы решили устроить марафон по пробежке по круговому полю n раз. По сути это цикл. Вы пробегаете S метров за время t. Вы измеряете, когда у Вас была самая великая скорость. Вы в первый (который для программки является по счёту нулевым) круг записываете скорость S / t, во 2-ой (1 для программы) скорость S / t, но она меньше, чем предыдущая, поэтому Вы не записываете это в наихороший результат. В третий круг Вы пробежали S / t и, вуаля, Вы пробежали намного быстрее, чем в 1-ый раз. Сейчас эта скорость V станет превосходнейшей и следующие результаты будете сопоставлять с ней либо с той величиной, которая больше этого значения
cout lt;lt; endl lt;lt; "Номер ряда с наибольшим кол-вом = " lt;lt; max_line + 1
Выводит номер ряда с величайшим количеством в общем знаков в строке. По причине, которую я обрисовывал с (i + 1), тут делается безусловно так же, так как max_line всегда в конце условия равняется итератору цикла (который начинается с 0). Если бы мы не добавляли единицу, то считали бы 1-ый цикл за 0, второй за 1 и так дальше
system("pause")
"Замораживает" консоль
return 0
"Говорит" программке, что она закончилась с ноль оплошностями (то есть без ошибок)
-
Вопросы ответы
Статьи
Информатика
Статьи
Разные вопросы.
Математика.
Разные вопросы.
Математика.
Физика.
Геометрия.
Разные вопросы.
Обществознание.
Математика.
Химия.