Мне интересно сколько итераций выполнится во внешнем и внутреннем цикле.
for(int i=0; i < N-1; i++) {
for(int j=0; j < N-i-1; j++) {
}
}
-
Вопрос заданболее трёх лет назад
-
5860 просмотров
Определяете целочисленную переменную перед внешним циклом, делаете ей ++ во внутреннем:
int iteration_count = 0;
for (int i = 0; i < N - 1; i++) {
for (int j = 0; j < N - i - 1; j++) {
iteration_count++;
}
}
System.out.println(iteration_count);
Если надо суммарное количество итераций обоих циклов – тогда и во внешнем тоже ++.
Пригласить эксперта
-
Показать ещё
Загружается…
16 мая 2023, в 11:48
1000 руб./за проект
16 мая 2023, в 11:38
5000 руб./за проект
16 мая 2023, в 11:29
200000 руб./за проект
Минуточку внимания
while((MAP = inputFile.readLine()) != null) {
System.out.println(MAP);
}
How can we find out the number of iterations performed by the while loop? In this textfile, they can be sometimes 5 lines of data, or 100 lines of data..If they are 5 lines, the while loop probably performed 6 loops. I want that number.
Any suggestions?
moinudin
133k45 gold badges189 silver badges214 bronze badges
asked Jan 6, 2011 at 0:25
int count = 0;
while((MAP = inputFile.readLine()) != null) {
System.out.println(MAP);
count++;
}
System.out.println(count);
answered Jan 6, 2011 at 0:27
FalmarriFalmarri
47.4k41 gold badges151 silver badges191 bronze badges
Set a variable external to the while loop to be a counter, and then increment the counter in the while loop.
answered Jan 6, 2011 at 0:26
PhoenixPhoenix
4,4681 gold badge21 silver badges13 bronze badges
0
int iterations = 0;
while((MAP = inputFile.readLine()) != null) {
System.out.println(MAP);
iterations++;
}
answered Jan 6, 2011 at 0:28
int i = 0;
while((MAP = inputFile.readLine()) != null) {
i++;
System.out.println(MAP);
// Some other stuff
}
System.out.println(i);
answered Jan 6, 2011 at 0:28
Dave McClellandDave McClelland
3,3751 gold badge28 silver badges44 bronze badges
Set a variable to 0 before the while loop and increment the variable inside the while loop. Output the variable after the while loop.
answered Jan 6, 2011 at 0:27
Dallas ClarkDallas Clark
4,0643 gold badges29 silver badges36 bronze badges
Why do it yourself if you can use java.io.LineNumberReader.getLineNumber()
?
answered Jan 6, 2011 at 1:58
mhallermhaller
14.1k1 gold badge42 silver badges61 bronze badges
Цикл for являются управляющей конструкцией, позволяя в зависимости от определенных условий выполнять некоторое действие множество раз, рассмотрим на решении задачи для вывода квадратов чисел от 0 до 4:
for (int i = 0; i < 5; i++) { Console.WriteLine("Квадрат числа = " + i + "равен = " (i * i)); }
Первая часть объявления цикла — int i = 0 — создает и инициализирует счетчик i. Счетчик необязательно должен представлять тип int. Это может быть и другой числовой тип, например, double. И необязательно будет имя этой переменной i, может быть любое понятное имя. Перед выполнением цикла счетчик будет иметь значение 0. В данном случае это то же самое, что и объявление переменной.
Вторая часть — условие, при котором будет выполняться цикл. Пока условное выражение возвращает true, будет выполняться цикл. В данном случае цикл будет выполняться, пока счетчик i меньше 5.
И третья часть — приращение счетчика на единицу. В других задачах, опять же, нам необязательно будет увеличивать счетчик на единицу. Счетчик можно уменьшать и увеличивать на любое значение.
В итоге блок цикла сработает 5 раз, пока значение i не станет равным 4. И каждый раз это значение будет увеличиваться на 1.
Добавлю переменная i, будет видна только в том цикле, где была инициализирована.
Нам необязательно указывать все определения при объявлении цикла. Например, мы можем написать так:
int i = 0; for (;i<5;) { Console.WriteLine("Квадрат числа = " + (i++) + "равен = " (i * i)); }
Формально определение цикла осталось тем же, только теперь блоки инициализации и изменения переменной цикла в определении у нас пустые: for (; i < 5 ;). Оставшееся условие позволяет выйти из цикла, если в теле цикла переменная цикла изменяет значение.
Этот пример по сути эквивалентен первому примеру: у нас также есть счетчик, только создан он вне цикла. У нас есть условие выполнения цикла. И есть приращение счетчика уже в самом блоке for.
Добавлю следующее:
- если произошла инициализация переменной перед циклом, то после цикла можно воспользоваться значением этой объявленной переменной;
- очередное прохождение цикла называется итерацией;
- начальное и конченое значение переменной цикла может быть произвольной, главное чтобы количество нужных итераций цикла сохранялось;
- чтобы посчитать количество итераций цикла нужно посчитать два значения:
max — максимальное значение переменной цикла, при котором мы зашли в цикл
min — минимальное значение переменной цикла, при котором мы зашли в цикл
количество итераций вычисляется следующим выражением: max — min + 1, где i меньше равно max.
Loop_1
В каком порядке работает цикл for?
1. условие входа 2. инициализация счетчика 3. изменения переменной цикла
Решение:
1. Инициализация счетчика, 2. условие выхода, 3. изменение переменной цикла
Loop_2
Без использования среды программирования, сколько итераций цикла в данной программе?
for (int i = -25; i <= 25; i++) { }
Решение:
Решаем прибегая формуле max-min+1: 25 — -25 + 1 = 51
Loop_3
Без использования среды программирования, определите, сколько раз и как сработает следующая программа?
for (int i = 5; i < 20; i++) { Console.WriteLine("Hello World!"); }
Решение:
От 5 до 19 включительно пятнадцать чисел, следовательно цикл имеет 15 итераций и 15 раз выведет в консоль фразу «Hello World!», каждый раз на новой строке.
Loop_4
Без использования среды программирования, сопоставьте циклы, которые выполняют одинаковое количество итераций:
1. for (int i = -2; i < 9; i++) a. for (int x = 8; x > 0; x--) 2. for (int b = 0; b < 17; b++) b. for (int j = -1; j <= 9; j++) 3. for (int y = 18; y > -1; y--) c. for (int k = 5; k >= -11; k--) 4. for (int h = -10; h < -2; h++) d. for (int i = 19; i <= 37; i++)
Решение: 1b, 2c, 3d, 4a
Loop_5
Напишите программу, которая выводит «Hello World!» 99 раз, каждый раз на новой строке.
Пример использования: Выходные данные 1: Hello World! Выходные данные 2: Hello World! Выходные данные...: ... Выходные данные 99: Hello World!
Решение:
Организуем цикл for с инициализацией переменной цикла i целого типа равной 0, с условием выхода когда переменная i будет равна 99, и каждую итерацию цикла будем инкрементировать переменную i на единицу.
//Листинг решения задачи loop_5: using System; namespace Serg40in { class Program { static void Main(string[] args) { for (int i = 0; i < 99; i++) Console.WriteLine("Hello World!"); Console.ReadKey(); } } }
Или можем инкрементировать в теле цикла, а блок изменения в заголовке цикла оставить пустым:
for (int i = 0; i < 99; ) { Console.WriteLine("Hello World!"); i++; }
Или вообще не использовать целый тип для счетчика, а пофантазировать, и взять тип double:
for (double dbl = 0; dbl < 0.99; dbl+=0.01) { Console.WriteLine("Hello World!"); }
Loop_6
Напишите программу, которая выводит только четные числа от 2 до 200.
Пример использования: Выходные данные 1: 2 4 6 8 … 200
Решение:
Разберем задачу, в котором надо вывести четные числа от 1 до 200. Воспользуемся циклом for, в котором переменная цикла будет принимать все значения от 1 до 100. Каждое такое значение будем проверять на четность и выводить на консоль.
//Листинг решения задачи loop_6: using System; namespace Serg40in { class Program { static void Main(string[] args) { for (int i = 1; i <= 200; i++) if(i % 2 == 0) Console.Write(i + " "); Console.ReadKey(); } } }
Или можно решить эту задачу при помощи изменения переменной цикла. В прошлом решении, мы увеличивали переменную цикла на 1 и тем самым перебирали все числа. Но мы можем перебирать не все числа, а каждое второе. То есть начнем с четного — двойки и будем прибавлять к переменной цикла по два.
for (int i = 2; i <= 200; i+=2) Console.Write(i);
Loop_7
Напишите программу, которая выводит все четные числа на заданном отрезке.
Пример использования: Выходные данные 1: Введите построчно начало и конец цифрового отрезка Входные данные 1: (2) (8) Выходные данные 1: 2 4 6 8 Выходные данные 2: Введите построчно начало и конец цифрового отрезка Входные данные 2: (12) (3) Выходные данные 2: 4 6 8 10 12
Решение:
Обратим внимание на пример использования, где во вторых входных данных введен диапазон не от малого к большому, а большого к малому. После получения числовых границ, назначим стартовое и финишное значения путем сравнения или использования метода Max и Min. В теле цикла для вывода чисел будем использовать сравнение на остаток от деления на 2.
//Листинг решения задачи loop_7: using System; namespace Serg40in { class Program { static void Main(string[] args) { Console.WriteLine("Введите построчно начало и конец цифрового отрезка"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int start= Math.Min(a,b); int end = Math.Max(a,b); for (int i = start; i <= end; i++) if (i % 2 == 0) Console.Write(i + " "); Console.ReadKey(); } } }
Или без условия, где получим начальное значение уже в четном состоянии, и переменную цикла будем увеличивать на 2.
Console.WriteLine("Введите построчно начало и конец цифрового отрезка"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int start = Math.Min(a,b); int end = Math.Max(a,b); for (int i = start % 2 + start; i <= end; i+=2) Console.Write(i + " ");
Loop_8
По данному натуральному числу x, выведите все его делители.
Пример использования: Выходные данные 1: Введите натуральное число Входные данные 1: 8 Выходные данные 1: 1 2 4 8
Решение:
Используем цикл for, для прохождения по числовому диапазону от 1 до квадратного корня введенного числа, в теле цикла проверяем на делимость без остатка введенного числа на переменную цикла. Переменную циклу инрементируем с каждой итерацией.
//Листинг решения задачи loop_8: using System; namespace Serg40in { class Program { static void Main(string[] args) { int x = int.Parse(Console.ReadLine()); for (int i = 1; i * i <= x; i++) if (x % i == 0) Console.Write(i + " "); Console.ReadKey(); } } }
Loop_9
Выведите обратную последовательность нечетных чисел на отрезке от a до b, где неизвестно какая переменная больше.
Пример использования: Выходные данные 1: Введите построчно начало и конец цифрового отрезка Входные данные 1: (2) (9) Выходные данные 1: 7 5 3
Решение:
Для организации цикла используем конструкцию for, где начальное значение должно быть максимальным из введенных чисел, а конечным значением будет минимальное введенное. В блоке изменения переменной цикла будем декрементировать значение на единицу. В теле цикла будет проверка на нечетность остатком от деления на 2.
//Листинг решения задачи loop_9: using System; namespace Serg40in { class Program { static void Main (string [] args) { Console.WriteLine("Введите построчно начало и конец цифрового отрезка"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int start = Math.Max(a,b); int end = Math.Min(a,b); for (int i = start; i >= end; i--) if (i % 2 == 1) Console.Write(i + " "); Console.ReadKey(); } } }
Или опять, решаем без условия в теле цикла, где переменную цикла уменьшаем на два с каждой итераций. Но для поиска всегда нечетного стартового значение приходится использовать дополнительное вычисление:
Console.WriteLine("Введите построчно начало и конец цифрового отрезка"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); int start = Math.Max(a,b); int end = Math.Min(a,b); start = start / 2 * 2 + (start % 2 == 1 ? 1: -1); for (int i = start; i >= end; i-= 2) Console.Write(i + " ");
Loop_10
По данному числу n найдите те числа, где сумма цифр квадрата числа больше n. Гарантируется, что n меньше 1000.
Пример использования: Выходные данные 1: Введите целое число Входные данные 1: 8 Выходные данные 1: 3 6 7
Решение:
Организуем цикл for с начальным значением равным единице, с условием выхода кода переменная цикла будет больше n, в теле цикла находим квадратное значение переменной цикла, раскладываем число на разряды, которые суммируем. В условии проверяем на отношение суммы чисел квадрата числа к n.
//Листинг решения задачи loop_10: using System; namespace Serg40in { class Program { static void Main (string [] args) { Console.WriteLine("Введите целое число "); int n = int.Parse(Console.ReadLine()); int sumDigit, square; for (int i = 1; i < = n; i++) { square = i * i; sumDigit = square / 100 + square / 10 % 10 + square % 10; if (sumDigit > n) Console.Write(i + " "); } Console.ReadKey(); } } }
Loop_11
Найти сумму введенных пользователем десяти чисел.
Пример использования: Выходные данные 1: 1. Введите число Входные данные 1: 9 Выходные данные 1: 2. Введите число Входные данные 1: -12 … Выходные данные 1: 10. Введите число Входные данные 1: 0.523 Выходные данные 1: Сумма введенных чисел = 9
Решение:
В цикле, который выполняется 10 раз, будем вводить число и суммировать в переменную(сумматор). Главное учесть, что переменную суммы нужно объявить перед циклом.
//Листинг решения задачи loop_11: using System; namespace Serg40in { class Program { static void Main(string[] args) { double sum=0, number; for (int i = 1; i < 11; i++) { Console.Write($"{i}. Введите число "); number = double.Parse(Console.ReadLine()); sum += number; } Console.Write("Сумма введенных чисел = " + sum); Console.ReadKey(); } } }
Или сокращаем написанное, если не будет никаких манипуляций с введенной переменной:
double sum = 0; for (int i = 1; i < 11; i++) { Console.Write($"{i}. Введите число "); sum += double.Parse(Console.ReadLine()); } Console.WriteLine("Сумма введенных чисел = " + sum); Console.ReadKey();
Loop_12
Без использования среды программирования, определите, какую задачу решает следующий код?
int sum = 0; for (int i = 19; i > 1; i--) sum += i; Console.WriteLine(sum);
Решение:
Цикл начинается с 19 и уменьшается на единицу по будет больше одного, следовательно программа находит сумму чисел от 2 до 19.
Loop_13
Без использования среды программирования, проанализируйте предложенный код и выберите какую задачу он решает.
int count = 0, int.Parse(Console.ReadLine()); for (int i = 1; i <= n; i++) if (i % 2 == 0 && i % 5 != 0) count++; Console.WriteLine(count);
Решение:
Находит количество четных чисел от 1 до n не кратных 5.
Loop_14
Выведите количество натуральных делителей целого числа x, исключая 1 и само число.
Пример использования: Выходные данные 1: Введите целое число Входные данные 1: 9 Выходные данные 1: Количество делителей, исключая 1 и 9 = 1
Решение:
Организуем цикл, где начальное значение переменной цикла будет два, а условие выхода — когда перемененная цикла будет больше или равно введенному пользователем числа.
//Листинг решения задачи loop_14: using System; namespace Serg40in { class Program { static void Main(string[] args) { Console.Write("Введите целое число "); int cnt = 0, divisible = int.Parse(Console.ReadLine()); for (int i = 2; i < divisible; i++) { if (divisible % i == 0) cnt++; } Console.WriteLine($"Количество делителей, исключая {1} и {divisible} = {cnt}"); Console.ReadKey(); } } }
Или пишем сокращенный код:
Console.Write("Введите целое число "); int cnt = 0, divisible = int.Parse(Console.ReadLine()); for (int i = 2; i < divisible; i++) cnt += divisible % i == 0 ? 1 : 0; Console.WriteLine($"Количество делителей, исключая {1} и {divisible} = {cnt}"); Console.WriteLine(cnt);
Loop_15
Пользователь ввел n чисел. Найти сумму и количество отрицательных четных чисел.
Пример использования: Выходные данные 1: Введите целое число — количество нужных чисел Входные данные 1: 3 Выходные данные 1: 1. Введите число Входные данные 1: 17 Выходные данные 1: 2. Введите число Входные данные 1: -4 Выходные данные 1: 3. Введите число Входные данные 1: -18 Выходные данные 1: Сумма отрицательных четных чисел = -22 Выходные данные 1: Количество отрицательных четных чисел = 2
Решение:
Решение не сложное, при этом необходимо заранее объявить счетчики для суммы и для количества. В теле цикла использовать составное условия для поиска необходимых значений.
//Листинг решения задачи loop_15: using System; namespace Serg40in { class Program { static void Main(string[] args) { Console.Write("Введите целое число — количество нужных чисел "); int n = Convert.ToInt32(Console.ReadLine()); int sum = 0, cnt = 0, input; for (int i = 1; i <= n; i++){ Console.Write($"{i}. Введите целое число "); input = int.Parse(Console.ReadLine()); if (input % 2 == 0 && input < 0 ) { sum += input; cnt++; } } Console.WriteLine("Сумма отрицательных четных чисел = " + sum); Console.WriteLine("Количество отрицательных четных чисел = " + cnt); Console.ReadKey(); } } }
Loop_16
Пользователь ввел n чисел. Найдите сумму чисел, которые больше 2, но меньше введенного n.
Пример использования: Выходные данные 1: Введите целое число — количество нужных чисел Входные данные 1: 4 Выходные данные 1: 1. Введите число Входные данные 1: 2 Выходные данные 1: 2. Введите число Входные данные 1: 3 Выходные данные 1: 3. Введите число Входные данные 1: 3 Выходные данные 1: 4. Введите число Входные данные 1: 4 Выходные данные 1: Сумма чисел = 6
Решение:
Организуем цикл for, где 10 раз предлагаем пользователю ввести число, проверяем число на вхождение в нужный числовой диапазон и в истинной ситуации суммируем.
//Листинг решения задачи loop_16: using System; namespace Serg40in { class Program { static void Main(string[] args) { Console.Write("Введите целое число — количество нужных чисел "); int n = Convert.ToInt32(Console.ReadLine()); double sum = 0, input; for (int i = 1; i <= n; i++){ Console.Write($"{i}. Введите целое число "); input = double.Parse(Console.ReadLine()); if (input > 2 && input < n ) sum+=input; } Console.WriteLine("Сумма чисел = " + sum); Console.ReadKey(); } } }
Loop_17
По данным n числам, определите количество чисел, оканчивающиеся на 0.
Пример использования: Выходные данные 1: Введите целое число — количество нужных чисел Входные данные 1: 2 Выходные данные 1: 1. Введите число Входные данные 1: 50 Выходные данные 1: 2. Введите число Входные данные 1: 29 Выходные данные 1: Количество чисел оканчивающиеся на ноль = 1
Решение:
Организуем цикл for, где нужно выполнить n итераций. В теле предлагаем пользователю ввести число, и если это число оканчивается на ноль, то увеличиваем счетчик количества искомых чисел.
//Листинг решения задачи loop_17: using System; namespace Serg40in { class Program { static void Main (string [] args) { Console.Write("Введите целое число — количество нужных чисел "); int n = int.Parse(Console.ReadLine()); int cnt = 0, input; for (int i = 1; i <= n; i++){ Console.Write($"{i}. Введите целое число "); input = int.Parse(Console.ReadLine()); if (input % 10==0) cnt++; } Console.WriteLine("Количество чисел оканчивающиеся на " + cnt); Console.ReadKey(); } } }
Или сократим, избавимся от лишней переменной:
Console.Write("Введите целое число — количество нужных чисел "); int cnt=0, n=int.Parse(Console.ReadLine()); for (int i=1;i<=n;i++) { Console.Write($"{i}. Введите целое число "); cnt +=(int.Parse(Console.ReadLine()) % 10 == 0 ? 1: 0); } Console.WriteLine("Количество чисел оканчивающиеся на " + cnt);
Loop_18
По данным n числам, определить наличие нуля среди них.
Пример использования: Выходные данные 1: Введите целое число — количество нужных чисел Входные данные 1: 2 Выходные данные 1: 1. Введите число Входные данные 1: 0 Выходные данные 1: 2. Введите число Входные данные 1: 19 Выходные данные 1: В введенных числах есть ноль Выходные данные 2: Введите целое число — количество нужных чисел Входные данные 2: 2 Выходные данные 2: 1. Введите число Входные данные 2: 17 Выходные данные 2: 2. Введите число Входные данные 2: 18 Выходные данные 2: В введенных числах ноль отсутствует
Решение:
Организуем цикл for с n повторениями. В теле цикла приглашаем пользователя ввести любое число, проверяем число на ноль, где при истинной ситуации увеличиваем счетчик количества нулей на единицу. После цикла, узнаем, если счетчик больше ноля выводим, что есть ноль, иначе что ноля нет. Когда узнаем как прерывать цикл, то сможем написать более лаконичный и быстрый в исполнении код.
//Листинг решения задачи loop_18: using System; namespace Serg40in { class Program { static void Main (string [] args) { Console.Write("Введите целое число — количество нужных чисел "); int n = int.Parse(Console.ReadLine()); int cntNull = 0; for (int i = 1; i <= n; i++) { Console.Write($"{i}. Введите целое число "); cntNull += double.Parse(Console.ReadLine()) == 0 ? 1: 0; } Console.WriteLine(cntNull > 0 ? "В введенных числах есть ноль" : "В введенных числах ноль отсутствует"); Console.ReadKey(); } } }
Loop_19
Вывести факториал числа n, где гарантируется, что n не больше 10.
Пример использования: Выходные данные 1: Введите целое число для поиска факториала Входные данные 1: 5 Выходные данные 1: Факториал 5! = 120
Решение:
Вспомним, что такое факториал: факториалом целого числа n называется произведение всех целых чисел от 1 до n. Обозначается как n! и равняется: n! = 1*2*3*n, где например факториал пяти будет равен 5!=1*2*3*4*5=120. Следовательно, организуем цикл for от 1 до n, и каждое новое значение будем умножать на значение переменной, изначально равной единице, так как это будет произведение и если один из множителей будет равен нулю, то и произведение будет равно нулю. В задание ограничено значение для n, поэтому проверим корректен ли ввод.
//Листинг решения задачи loop_19: using System; namespace Serg40in { class Program { static void Main (string [] args) { Console.Write("Введите целое число от 1 до 10: "); int n = int.Parse(Console.ReadLine()); if (n > 0 && n < 11) { int factorial = 1; for (int i=1; i<=n; i++) factorial *= i; Console.WriteLine($"Факториал {n}! = {factorial}"); } else Console.Write("Введенное число вне диапазона 1-10"); Console.ReadKey(); } } }
Или можем сократить, очистив тело цикла от инструкций:
Console.Write("Введите целое число от 1 до 10: "); int n = int.Parse(Console.ReadLine()); if (n > 0 && n < 11) { int factorial = 1; for (int i = 1; i <= n; factorial *= i, i++); Console.WriteLine($"Факториал {n}! = {factorial}"); } else Console.Write("Введенное число вне диапазона 1-10");
Рассмотрим ограничение в условии задачи, где указано то, что n будет не больше 10. В нашем случае происходит умножение, где на начальном этапе множители маленькие, соответственно произведение получается не большое, но если вычислить факториал 12 то получиться большое число = 479 001 600, и если его еще умножить на 13, чтобы получить факториал 13 — произойдет переполнение для максимального значения в типе int, где int.MaxValue = 2.147.483.647. Следовательно, значение 13! будет не корректно. Для того чтобы такая ошибка не возникла, то используем для вычислений произведений тип long, но опять же корректный результат будет если значение произведения не будет превышать огромного числа 9.223.372.036.854.775.807, соответственно 20! посчитается корректно, но 21! уже будет с переполнением.
Далее, в следующей теме мы разберемся в проблеме больших чисел с помощью объекта BigInteger. А пока, будем решать задачи с малыми множителями.
Loop_20
По данному числу n!=0, найдите произведение четных чисел от 1 до n, или от n до 1, если n < 0.
Пример использования: Выходные данные 1: Введите целое число не равное нулю Входные данные 1: 8 Выходные данные 1: Произведения четных чисел от 1 до 8 = 384 Выходные данные 2: Введите целое число не равное нулю Входные данные 2: -12 Выходные данные 2: Произведения четных чисел от 1 до 8 = 120 Выходные данные 3: Введите целое число не равное нулю Входные данные 3: 0 Выходные данные 3: Ошибка входных данных: введен 0
Решение:
Получаем число от пользователя и анализируем его. Если ввели положительное число, то стартовое значение для цикла будет равно единице, а конечное n. Если же ввели отрицательное число, то стартовое значение для цикла будет равно n, а конечное будет равно -2 — самому первому четному отрицательному значению, так как если мы будем ставить в конечное значение цикла единицу, то при прохождении от отрицательных чисел к положительным будет множитель 0, и следовательно произведение будет тоже равно нулю.
//Листинг решения задачи loop_20: using System; namespace Serg40in { class Program { static void Main(string[] args) { Console.Write("Введите целое число неравное нулю: "); int n = int.Parse(Console.ReadLine()); if (n != 0) { long compositionEven=1; int startLoop = n > 0 ? 1: n; int endLoop = n > 0 ? n: -2; for (int i = startLoop; i <= endLoop; i++) if (i % 2 == 0) compositionEven *= i; Console.WriteLine($"Произведения четных чисел от 1 до {n} = {compositionEven}"); } else Console.WriteLine("Ошибка входных данных: введен 0"); Console.ReadKey(); } } }
Loop_21
Написать программу для нахождения a в степени n, введенных построчно с клавиатуры. Не использовать методы класса Math.
Пример использования: Выходные данные 1: Введите целое число – основание степени: Входные данные 1: 2 Выходные данные 1: Введите целое число — показатель степени Входные данные 1: 8 Выходные данные 1: Число 2^8 = 256
Решение:
Принимаем построчно два числа, первое будет основание степени, второе показатель степени. Присвоим новой переменной, для хранения значения степени числа, значение целой единицы. Далее, организуем цикл for на n итераций, и с каждым новым повторением, переменную с произведением будем умножать на основание степени.
//Листинг решения задачи loop_21: using System; namespace Serg40in { class Program { static void Main(string[] args) { Console.Write("Введите целое число - основание степени: "); int degreeBase = int.Parse(Console.ReadLine()); Console.Write("Введите целое число - показатель степени: "); int degree = int.Parse(Console.ReadLine()); long numberInPower=1; for (int i = 1; i <= degree; i++) numberInPower *= degreeBase; Console.WriteLine($"Число {degreeBase}^{degree} = {numberInPower}"); Console.ReadKey(); } } }
Loop_22
По данным двум целым числа a и b, вычислите произведение чисел на отрезке от a до b. Не гарантируется, что a обязательно меньше b. Сделать форматированный вывод.
Пример использования: Выходные данные 1: Введите построчно два целых числа (границы числового отрезка) Входные данные 1: (2) (7) Выходные данные 1: Произведение чисел 2*3*4*5*6*7 = 120 Выходные данные 2: Введите построчно два целых числа (границы числового отрезка) Входные данные 2: (5) (10) Выходные данные 2: Произведение чисел 5*6*7*8*9*10 = 12
Решение:
В условии указано, что нет гарантии того, что пользователь введет сначала меньшее число, а потом большее. Поэтому мы должны определить начальное значение и конечное значение для цикла for, а потом вычислять произведение чисел. И обязательно будем использовать форматированный вывод.
//Листинг решения задачи loop_22: using System; namespace Serg40in { class Program { static void Main (string [] args) { Console.WriteLine("Введите построчно два целых числа (границы числового отрезка)"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); long composition = 1; Console.Write("Произведение чисел "); for (int i = Math.Min(a,b); i <= Math.Max(a,b); i++) { composition *= i; Console.Write(i != Math.Max(a,b) ? i + "*": i+ "="); } Console.WriteLine(composition); Console.ReadKey(); } } }
Loop_23*
По данным построчно двум целым числам a и b, вычислите произведение чисел на отрезке от a до b, оканчивающихся на 7. Не гарантируется, что a будет меньше b. Сделать форматированный вывод.
Пример использования: Выходные данные 1: Введите построчно два целых числа (границы числового отрезка) Входные данные 1: (2) (17) Выходные данные 1: Произведение чисел 7*17 = 119 Выходные данные 2: Введите построчно два целых числа (границы числового отрезка) Входные данные 2: (22) (19) Выходные данные 2: На этом числовом отрезке нет чисел оканчивающихся на 7 Выходные данные 3: Введите построчно два целых числа (границы числового отрезка) Входные данные 3: (20) (36) Выходные данные 3: На этом числовом отрезке только одно число оканчивающихся на 7 это 27
Решение:
Решать задачу будет исходя требованиям в примере использования, где будет выводиться ответ, не только произведение чисел оканчивающихся на 7, но и при одном числе с семеркой на конце, и вообще если таких чисел нет. Поэтому, сначала определим, если ли вообще на введенном отрезке числа оканчивающиеся на семь. Если количество чисел больше одного, то будем опять будем просматривать числовой отрезок, и с каждым найденным числом добавлять форматированный вывод. Если же количество чисел, на первом этапе, было всего одно, то выведем, что только найдено одно число. Иначе, если на первом этапе нужных чисел не найдено, то выведем в консоль сообщение о не найденных числах.
Для корректного значения используем тип long для хранения значения произведения. На проверку программе задаем малые числа.
//Листинг решения задачи loop_23: using System; namespace Serg40in { class Program { static void Main (string [] args) { Console.WriteLine("Введите построчно два целых числа (границы числового отрезка)"); int a = int.Parse(Console.ReadLine()); int b = int.Parse(Console.ReadLine()); long composition = 1; int cntSeven=0, firstSeven=0; for (int i = Math.Min(a,b); i <= Math.Max(a,b); i++) { if (i % 10 == 7) { cntSeven++; if (cntSeven==1) firstSeven =i; } } if (cntSeven>1) { Console.Write("Произведение чисел "); for (int i = Math.Min(a,b), cntSevenInFor=0; i <= Math.Max(a,b); i++) { if (i % 10 == 7) { composition *= i; cntSevenInFor++; Console.Write(cntSeven != cntSevenInFor ? i + "*": i+ "="); } } Console.WriteLine(composition); } else if (cntSeven==1) Console.Write("На этом числовом отрезке только одно число оканчивающихся на 7 это " + firstSeven); else Console.Write("На этом числовом отрезке нет чисел оканчивающихся на 7"); Console.ReadKey(); } } }
Mixail
Мудрец
(12922),
закрыт
6 лет назад
к примеру for ($i = 0;$i<=999999;$i++){
$array = str_split($i);
$summ_1 = $array[0]+$array[1]+$array[2];
$summ_2 = $array[3]+$array[4]+$array[5];
if(count($array) == ‘6’ && $summ_1 == $summ_2){
в этом месте
}
}
Лучший ответ
Miku Hatsune
Мудрец
(11124)
6 лет назад
Создай переменную за пределами цикла и инкрементируй ее в этой области.
Остальные ответы
Metotron
Искусственный Интеллект
(114384)
6 лет назад
$i — счётчик итераций. Но у тебя она от нуля, значит $i + 1
Mixail Мудрец (12922)
6 лет назад
но мне нужно внутри условия if это посчитать . $i + 1 посчитает все итерации а в условии их будет меньше
Mixail Мудрец (12922)
6 лет назад
А все доперло, переменную за пределами цикла нужно создать
Metotron
Искусственный Интеллект
(114384)
Зачем? У тебя в цикле есть $i, это и есть счётчик. if ($i == 10) чем плохо?
Похожие вопросы
Содержание:
- Решение задания 6 ЕГЭ по информатике для 2021
- Решения подобных заданий прошлых лет
- Определить, какое число пропущено
- Простые задания с двумя линейными непересекающимися функциями
- Сумма или разность двух линейных функций (while s – n или while s + n)
- Поиск наименьшего/наибольшего целого введенного числа d
- Усложненные задания с двумя линейными функциями
- Арифметическая и геометрическая прогрессия
- Программирование: массивы и матрицы
Решение задания 6 ЕГЭ по информатике для 2021
6-е задание: «Программирование: основные конструкции»
Уровень сложности
— базовый,
Требуется использование специализированного программного обеспечения
— нет,
Максимальный балл
— 1,
Примерное время выполнения
— 4 минуты.
Проверяемые элементы содержания: Знание основных конструкций языка программирования, понятия переменной, оператора присваивания
До ЕГЭ 2021 года — это было задание № 8 и задание № 19 ЕГЭ
Задание демонстрационного варианта 2022 года ФИПИ
Плейлист видеоразборов задания на YouTube:
6_1 new: Определите, при каком наименьшем введённом значении переменной s программа выведет число 256 :
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var k,n,p,l,s,x:integer; var s, n: integer; begin readln (s); n := 1; while s <=45 do begin s := s + 4; n := n * 2 end; writeln(n) end. |
Бейсик: |
Python:
s = int(input()) n = 1 while s <= 45: s = s + 4 n = n * 2 print( n ) |
С++:
#include <iostream> using namespace std; int main() { int s, n = 1; cin >> s; while( s <= 45 ) { s = s + 4; n = n * 2; } cout << n; } |
Типовые задания для тренировки
Ответ: 14
Видеорешение подобного 6 задания на Python:
📹 Видео
📹 Видеорешение на RuTube здесь
Показать решение:
-
✎ Способ 1 (программный):
- Поскольку в цикле
s
увеличивается, а по условию задания следует найти наименьшее значениеs
, то можно начать сs=1
, постоянно увеличивая значениеs
на единицу во внешнем цикле. - Важно для внешнего цикла использовать другую переменную, т.к. во внутреннем цикле переменная
s
меняется, а нам следует каждый шаг внешнего цикла сохранить предыдущее значение s, увеличив его всего на 1. Используем переменнуюS1
для этих целей.
Pascalabc.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
begin var s0 := 1; while true do // внешний цикл, бесконечный begin var s := s0; // --- код из условия задания --- // var n := 1; while s <= 45 do // внутренний цикл из задания begin s := s + 4; n := n * 2; end; // --- конец кода из условия задания --- // if n = 256 then // если найдено, то выводим соответствующее s begin print(s0); break; // выход из бесконечного цикла end; s0 := s0 + 1; // end; end. |
Пояснение:
Бейсик: |
Python:
s1 = 1 while True: # внешний цикл, бесконечный s = s1 # --- код из условия задания --- n = 1 while s <= 45: s = s + 4 n = n * 2 # --- конец кода из условия задания --- if n == 256: print(s1) break s1 += 1 |
С++: |
6_2 new: Определите, при каком наибольшем введённом значении переменной s программа выведет число 96:
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var s, n: integer; begin readln (s); n := 3; while s <= 51 do begin s := s + 7; n := n * 2 end; writeln(n) end. |
Бейсик: |
Python:
s = int(input()) n = 3 while s <= 51: s = s + 7 n = n * 2 print( n ) |
С++:
#include <iostream> using namespace std; int main() { int s, n = 3; cin >> s; while( s <= 51 ) { s = s + 7; n = n * 2; } cout << n; } |
Типовые задания для тренировки
Ответ: 23
📹 Видео
📹 Видеорешение на RuTube здесь
Показать решение:
✎ Способ 1 (программный):
Pascalabc.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
begin var s1 := 50; while true do // внешний цикл, бесконечный begin var s := s1; // --- код из условия задания --- // var n := 3; while s <= 51 do // внутренний цикл из задания begin s := s + 7; n := n * 2; end; // --- конец кода из условия задания --- // if n = 96 then // если найдено, то выводим соответствующее s begin print(s1); break; // выход из бесконечного цикла end; s1 := s1 - 1; // end; end. |
Пояснение:
s
увеличивается, и цикл работает пока s<=50, а по условию следует найти наибольшее значение s
, то можно начать с s = 50
, постоянно уменьшая значение s
на единицу во внешнем цикле.s
меняется, а нам следует каждый шаг внешнего цикла сохранить предыдущее значение s
, уменьшив его всего на 1. Используем переменную S1
для этих целей.Бейсик: |
Python:
s1 = 50 while True: # внешний цикл, бесконечный s = s1 # --- код из условия задания --- n = 3 while s <= 51: s = s + 7 n = n * 2 # --- конец кода из условия задания --- if n == 96: print(s1) break s1 -= 1 |
С++: |
6_3 new::
Сколько существует различных значений d
, оканчивающихся на 8, при вводе которых эта приведенная программа выведnет число 50?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var S, N, d: integer; begin readln(d); S := 15; N := 10; while S <= 2400 do begin S := S + d; N := N + 5; end; writeln(N); end. |
Бейсик: |
Python:
d = int(input()) S = 15 N = 10 while S <= 2400: S = S + d N = N + 5 print(N) |
С++: |
Типовые задания для тренировки
Ответ: 4
Показать решение:
-
✎ Способ 1 (программный):
- Вывод:
Pascalabc.net:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
begin var counter:=0; var d1:=1; while true do begin var d := d1; // из условия задачи var s := 15; var n := 10; while s <= 2400 do begin s := s + d; n:=n + 5; end; // проверка условий: увеличение счетчика if (d mod 10 = 8) and (n = 50) then begin counter+=1;; end; d1 += 1; // выход из бесконечного цикла if d1 = 2400 then break; end; print (counter) end. |
4
Бейсик: |
Python:
counter = 0 d1 = 1 while True: s = 15 n = 10 d = d1 # --- код из условия задания --- while s <= 2400: s = s + d n = n + 5 if d%10==8 and n==50: counter+=1 d1=d1+1 if d1 == 2400: break print (counter) |
С++: |
6_4 new:
Определите наименьшее и наибольшее введённое значение переменной s
, при котором программа выведет число 210. В ответ запишите оба числа в порядке убывания без пробелов и других разделителей
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var s, n: integer; begin readln(s); n := 600; while n > s do begin s := s + 3; n := n - 6 end; writeln(n) end. |
Бейсик: |
Python:
s = int(input()) n = 600 while n > s: s = s + 3 n = n - 6 print(n) |
С++: |
Ответ: 2315
Показать решение:
-
✎ Способ 1 (программный):
- Вывод:
- Записываем в порядке убывания:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
begin var s_ := -100; while true do begin var n := 600; var s := s_; while n > s do begin s := s + 3; n := n - 6 end; if n = 210 then print(s_); s_ += 1; if s > 1000 then break; end; end. |
15 16 17 18 19 20 21 22 23
2315
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
s_ = -100 while True: # внешний цикл, бесконечный s = s_ n = 600 # --- код из условия задания --- while n > s: s = s + 3 n = n - 6 # --- конец кода из условия задания --- if n == 210: print(s_) s_ += 1 if s > 1000: break |
6_5 new:
Определите, при каком наибольшем положительном введённом значении переменной s
программа выведет трёхзначное число.
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var s, n: integer; begin readln (s); n := 200; while s div n >= 2 do begin s := s + 5; n := n + 5 end; writeln(s) end. |
Бейсик: |
Python:
s = int(input()) n = 200 while s // n >= 2: s = s + 5 n = n + 5 print(s) |
С++: |
Ответ: 699
Показать решение:
-
✎ Способ 1 (программный):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
begin var s_ := 1000; while true do begin var n := 200; var s := s_; while s div n >= 2 do begin s := s + 5; n := n + 5 end; if (s > 99) and (s<1000) then begin print(s_); break; end; s_ -= 1; end; end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
s_ = 1000 while True: # внешний цикл, бесконечный s = s_ n = 200 # --- код из условия задания --- while s // n >=2: s = s + 5 n = n + 5 # --- конец кода из условия задания --- if 99 < s < 1000: print(s_) break s_ -= 1 |
6_6 new:
Получив на вход некоторое натуральное число X
, этот алгоритм печатает одно число. Сколько существует чисел Х
, для которых алгоритм напечатает число на отрезке [2;500]?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var x, s, n: integer; begin readln(x); s := 6 * (x div 15); n := 1; while s < 300 do begin s := s + 18; n := n * 2 end; writeln(n) end. |
Бейсик: |
Python:
x = int(input()) s = 6 * (x // 15) n = 1 while s < 300: s = s + 18 n = n * 2 print(n) |
С++: |
Ответ: 360
Показать решение:
-
✎ Способ 1 (программный):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
begin var x := 1; var count := 0; while true do begin var s := 6 * (x div 15); var n := 1; while s < 300 do begin s := s + 18; n := n * 2 end; if (n >= 2) and (n <= 500) then count += 1; x += 1; if x > 1000 then break; end; print(count) end. |
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
x = 1 count = 0 while True: # внешний цикл, бесконечный s = 6 * (x // 15) n = 1 while s <300: s = s + 18 n = n * 2 # --- конец кода из условия задания --- if 1 < n < 501: count+=1 x += 1 if x > 1000: break print (count) |
Решения подобных заданий прошлых лет
Определить, какое число пропущено
6_14:
Сопоставьте формулу:
и программу, предназначенную для расчета по данной формуле. Программа написана правильно, а в формуле допущена ошибка.
Определите, где и какое число в формуле пропущено?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
var k,n,p,l,s,x:integer; begin writeln('введите n='); readln(n); writeln('введите x='); readln(x); s:=0; p:=1; l:=x; For k:=1 to n do begin p:=p * k; s:=s + 3*l/p; l:=l*x; end; writeln('S=',S:5:2); end. |
Бейсик:
INPUT "введите n=", n INPUT "введите x=", x s=0: p=1 l=x FOR k:=1 to n p = p * k: s = s + 3*l/p l = l*x NEXT k PRINT "S=",S END |
Python:
n = int(input('введите n=')) x = int(input('введите x=')) s=0 p=1 l=x For k in range (1,n+1): p*= k s+=3*l/p l*=x print('S=',S) |
С++:
#include <iostream> using namespace std; int main() { int k,n,p,s,x; printf("введите n="); scanf("%d",&n); printf("введите x="); scanf("%d",&x); l=x; for (k=1,s=0,p=1;k<=n;k++) { p*=k; s+=3*l/p; l*=x; } printf("s=%d",s); } |
Ответ: 3
Показать решение:
- Рассмотрим формулу:
- Рассмотрим алгоритм программы:
- Основные действия происходят в цикле, в котором k изменяется от 1 до n (n вводится в начале программы):
Фактически она обозначает: сумма xk/ k!
для всех k, начиная от 1 до n.
For k:=1 to n do
p:=p * k;
l:=l*x;
s:=s + 3*l/p;
Простые задания с двумя линейными непересекающимися функциями
6_3:
Определите, что будет напечатано в результате работы следующего фрагмента программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var k,s:integer; begin s:=512; k:=0; while s<2048 do begin s:=s+64; k:=k+1; end; write(k); end. |
Бейсик:
DIM S, K AS INTEGER S = 512 K = 0 WHILE S < 2048 S = S + 64 K = K + 1 WEND PRINT K |
Python:
s = 512 k = 0 while s < 2048: s = s + 64 k = k + 1 print(k) |
С++:
#include <iostream> using namespace std; int main() { int s = 512, k = 0; while (s < 2048) { s = s + 64; k = k + 1; } cout << k << endl; return 0; } |
Подобные задания для тренировки
Ответ: 24
✍ Показать решение:
Рассмотрим алгоритм программы:
- В цикле k увеличивается на единицу (k — счетчик). Соответственно, k будет равно количеству итераций (повторов) цикла. После завершения работы цикла k выводится на экран, т.е. это и есть результат работы программы.
- В цикле s увеличивается на 64. Для простоты расчетов возьмем начальное s не 512, а 0. Тогда условие цикла поменяется на
s < 1536
(2048 – 512 = 1536):
s:=0; k:=0; while s < 1536 do begin ...
s<1536
, а s увеличивается на 64, отсюда следует что итераций цикла (шагов) будет:1536 / 64 = 24
📹 Видео
📹 Видеорешение на RuTube здесь (теоретическое решение)
Определите, что будет напечатано в результате выполнения программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var s, i: integer; begin i := 1; s := 105; while s > 5 do begin s := s - 2; i := i + 1 end; writeln(i) end. |
Бейсик:
DIM S, I AS INTEGER I = 1 S = 105 WHILE S > 5 S = S - 2 I = I + 1 WEND PRINT I |
Python:
i = 1 s = 105 while s > 5: s = s - 2 i = i + 1 print(i) |
С++:
#include <iostream> using namespace std; int main() { int s = 105, i = 1; while (s > 5) { s = s - 2; i = i + 1; } cout << i << endl; return 0; } |
Ответ: 51
✍ Показать решение:
- Рассмотрим алгоритм. Цикл зависит от переменной s, которая уменьшается каждую итерацию цикла на 2.
- В цикле также присутствует счетчик – переменная i, которая увеличится на единицу ровно столько раз, сколько итераций (проходов) цикла. Т.е. в результате выполнения программы распечатается значение, равное количеству итераций цикла.
- Поскольку условие цикла зависит от s, нам необходимо посчитать, сколько раз сможет s уменьшиться на 2 в цикле. Для удобства подсчета изменим условие цикла на
while s > 0
; так как мы s уменьшили на 5, соответственно, изменим и 4-ю строку наs:=100
(105-5):
... s := 100; while s > 0 do begin ...
100 / 2 = 50 -> количество итераций цикла
50 + 1 = 51
6 задание. Демоверсия ЕГЭ 2018 информатика:
Запишите число, которое будет напечатано в результате выполнения следующей программы.
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var s, n: integer; begin s := 260; n := 0; while s > 0 do begin s := s - 15; n := n + 2 end; writeln(n) end. |
Бейсик:
DIM S, N AS INTEGER S = 260 N = 0 WHILE S > 0 S = S - 15 N = N + 2 WEND PRINT N |
Python:
s = 260 n = 0 while s > 0: s = s - 15 n = n + 2 print(n) |
С++:
#include <iostream> using namespace std; int main() { int s = 260, n = 0; while (s > 0) { s = s - 15; n = n + 2; } cout << n << endl; return 0; } |
Ответ: 36
✍ Показать решение:
-
Рассмотрим алгоритм:
- Цикл зависит от значения переменной s, которая изначально равна 260. В цикле переменная s постоянно меняет свое значение, уменьшаясь на 15.
- Цикл завершит свою работу когда s <= 0. Значит, необходимо посчитать сколько чисел 15 “войдет” в число 260, иными словами:
260 / 15 ~ 17,333...
s > 0
, то увеличим полученное число на единицу: 17 + 1 = 18 итераций цикла Проверим: 17 * 15 = 255 (< 260) 18 * 15 = 270 (> 260)
n = 18 * 2 = 36
📹 Видео
📹 Видеорешение на RuTube здесь (теоретическое решение)
6_4:
Определите, что будет напечатано в результате выполнения следующего фрагмента программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var k,s: integer; begin k:=1024; s:=50; while s>30 do begin s:=s-4; k:=k div 2; end; write(k) end. |
Бейсик:
DIM S, K AS INTEGER S = 50 K = 1024 WHILE S > 30 S = S - 4 K = K 2 WEND PRINT K |
Python:
s = 50 k = 1024 while s > 30: s = s - 4 k = k // 2 print(k) |
С++:
#include <iostream> using namespace std; int main() { int s = 50, k = 1024; while (s > 30) { s = s - 4; k = k / 2; } cout << k << endl; return 0; } |
Ответ: 32
📹 Видео
📹 Видеорешение на RuTube здесь (теоретическое решение)
6_5:
Определите значение переменной c после выполнения следующего фрагмента программы. Ответ запишите в виде целого числа.
Паскаль:
1 2 3 4 5 6 7 |
a:=-5; c:=1024; while a<>0 do begin c:=c div 2; a:=a + 1 end; |
Бейсик:
A = -5
C = 1024
WHILE A <> 0
C = C 2
A = A + 1
WEND
|
Python:
a = -5 c = 1024 while a != 0: c = c // 2 a = a + 1 |
С++:
int a = -5, c = 1024; while (a != 0) { c = c / 2; a = a + 1; } |
Ответ: 32
📹 Видео
📹 Видеорешение на RuTube здесь (теоретическое решение)
6_12:
Определите, что будет напечатано в результате работы следующего фрагмента программы.
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var n, s: integer; begin n := 1; s := 0; while s <= 365 do begin s := s + 36; n := n * 2 end; write(n) end. |
Бейсик:
N = 1 S = 0 WHILE S <= 365 S = S + 36 N = N * 2 WEND PRINT N |
Python:
n = 1 s = 0 while s <= 365: s = s + 36 n = n * 2 print(n) |
С++:
using namespace std; int main() { int n = 1, s = 0; while (s <= 365) { s = s + 36; n = n * 2; } cout << n << endl; return 0; } |
Ответ: 2048
Показать решение:
- с каждым шагом цикла значение s увеличивается на 36, пока не станет больше 365; а значение n увеличивается в 2 раза, так что n=2k, где k – это число итераций цикла;
- поскольку s увеличивается на 36, конечное значение s должно быть равно 0+36*k , достигается при k=11 (и s=36*11=396);
- тогда n = 2k = 211 = 2048.
Сумма или разность двух линейных функций (while s – n или while s + n)
6_7:
Запишите число, которое будет напечатано в результате выполнения следующей программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var s, n: integer; begin s := 522; n := 400; while s - n > 0 do begin s := s - 20; n := n - 15 end; write(s) end. |
Бейсик:
DIM S, N AS INTEGER S = 522 N = 400 WHILE S - N > 0 S = S - 20 N = N - 15 WEND PRINT S |
Python:
s = 522 n = 400 while s - n > 0: s = s - 20 n = n - 15 print(s) |
С++:
#include <iostream> using namespace std; int main() { int s = 522, n = 400; while (s - n > 0) { s = s - 20; n = n - 15; } cout << s << endl; return 0; } |
Подобные задания для тренировки
Ответ: 22
✍ Показать решение:
- В алгоритме присутствует цикл. Для того, чтобы разобраться в алгоритме, выполним трассировку начальных итераций цикла:
- Видим, что в условии разница между значениями составляет 5:
№ шага | условие цикла | s | n |
---|---|---|---|
1 | 522-400=122 122 > 0 |
522-20=502 | 400-15=385 |
2 | 502-385=117 117 > 0 |
502-20=482 | 385-15=370 |
3 | 482-370=112 112 > 0 |
… | … |
122 - 117 = 5 117 - 112 = 5 ...
122 / 5 = 24,4 24 * 5 = 120 (120 + 2 = 122)
Это значит, что на 24-й итерации цикла переменные s и n получили такие значения, после которых условие еще осталось истинным: 2 > 0. На 25-м шаге выполняется это условие:
№ шага | условие цикла | s | n |
---|---|---|---|
25 | 2 > 0 | s-20=… | n-15=… |
25 * 5 = 125 (125 - 3 = 122)
№ шага | условие цикла | s | n |
---|---|---|---|
25 | 2 > 0 | s-20=… | n-15=… |
26 | 3 < 0 | не выполняется | не выполняется |
25 * 20 = 500 (за 25 итераций)
522 - 500 = 22 (вычитаем из исходных данных)
Результат: 22
📹 Видео
📹 Видеорешение на RuTube здесь (теоретическое решение)
6_13
Запишите число, которое будет выведено в результате работы программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var s, n: integer; begin s := 10; n := 55; while n > s do begin s := s + 1; n := n - 1 end; writeln(n) end. |
Бейсик:
DIM S, N AS INTEGER S = 10 N = 55 WHILE N > S S = S + 1 N = N - 1 WEND PRINT N |
Python:
s = 10 n = 55 while n > s: s = s + 1 n = n - 1 print(n) |
С++:
#include <iostream> using namespace std; int main() { int s = 10, n = 55; while (n > s) { s = s + 1; n = n - 1; } cout << n << endl; return 0; } |
Ответ: 32
Показать решение:
- Для условия цикла – перенесем влево:
n - s > 0
55 - 10 = 45
n - 1 > s + 1 => n - s - 2 > 0
для 22 итераций: 2 * 22 = 44 в условии цикла имеем 45 > 44, т.е. условие еще истинно для 23 итераций: 2 * 23 = 46 в условии цикла имеем 45 > 46 - условие ложно, т.е. цикл прекращает работу
n = 55 - 23 = 32
Поиск наименьшего/наибольшего целого введенного числа d
ЕГЭ 6.8:
При каком наименьшем целом введенном числе d после выполнения программы будет напечатано число 192?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 |
var k,s,d: integer; begin readln (d); s:=0; k:=0; while k < 200 do begin s:=s+64; k:=k+d; end; write(s); end. |
Бейсик:
DIM S, K, D AS INTEGER INPUT D S = 0 K = 0 WHILE K < 200 S = S + 64 K = K + D WEND PRINT S |
Python:
d = int (input ()) s = 0 k = 0 while k < 200: s = s + 64 k = k + d print(s) |
С++:
#include <iostream> using namespace std; int main() { int s = 0, k = 0; int d; cin >> d; while (k < 200) { s = s + 64; k = k + d; } cout << s << endl; return 0; } |
Подобные задания для тренировки
Ответ: 67
✍ Показать решение:
Рассмотрим алгоритм программы:
- Цикл зависит от переменной k, которая каждую итерацию цикла увеличивается на значение d (вводимое). Цикл закончит “работу”, когда k сравняется с 200 или превысит его (k >= 200).
- Результатом программы является вывод значения переменной s. В цикле s увеличивается на 64.
- Так как по заданию необходимо, чтобы вывелось число 192, то число повторов цикла определим так:
64 * x = 192 число повторов: x = 192 / 64 = 3
3 * d = 200 d = 200/3 ~ 66,66
66 + 66 + 66 = 198 (< 200)
т.е. цикл после трех прохождений еще продолжит работу, что нам не подходит.
67 + 67 + 67 = 201 (>200)
📹 Видео
📹 Видеорешение на RuTube здесь
6_9:
Запишите через запятую наименьшее и наибольшее значение числа d, которое нужно ввести, чтобы после выполнения программы было напечатано 153?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var n, s, d: integer; begin readln(d); n := 33; s := 4; while s <= 1725 do begin s := s + d; n := n + 8 end; write(n) end. |
Бейсик:
DIM S, N, D AS INTEGER INPUT D N = 33 S = 4 WHILE S <= 1725 S = S + D N = N + 8 WEND PRINT N |
Python:
d = int (input ()) n = 33 s = 4 while s <= 1725: s = s + d n = n + 8 print(n) |
С++:
#include <iostream> using namespace std; int main() { int s = 4, n = 33; int d; cin >> d; while (s <= 1725) { s = s + d; n = n + 8; } cout << n << endl; return 0; } |
Ответ: 115, 122
✍ Показать решение:
Разберем листинг программы:
- Цикл программы зависит от значения переменной s, которая в цикле постоянно увеличивается на значение d (d вводится пользователем в начале программы).
- Кроме того, в цикле переменная n увеличивается на 8. Значение переменной n выводится на экран в конце программы, т.е. по заданию n к концу программы должно n = 153.
- Необходимо определить количество итераций цикла (прохождений). Так как начальное значение n = 33, а в конце оно должно стать 153, в цикле увеличиваясь на 8, то сколько раз 8 “поместится” в 120 (153 – 33)? :
120 / 8 = 15 раз (количество итераций цикла)
s <= 1725
сделаем s <= 1721
(1725-1721)... s := 0; while s <= 1721 do begin ...
1721 / 15 = 114,733 - не целое, не подходит 1722 / 15 = 114,8 - не целое, не подходит ... берем кратное 5: 1725 / 15 = 115 - целое, подходит!
14 * d <= 1721 при этом: 15 * d > 1721
14 * 122 = 1708 (<=1721) 15 * 122 = 1830 (>1721)
📹 Видео
Усложненные задания с двумя линейными функциями
6_6:
Запишите число, которое будет напечатано в результате выполнения следующей программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var s, n: integer; begin s := 0; n := 0; while 2*s*s < 123 do begin s := s + 1; n := n + 2 end; writeln(n) end. |
Бейсик:
DIM S, N AS INTEGER S = 0 N = 0 WHILE 2*S*S < 123 S = S + 1 N = N + 2 WEND PRINT N |
Python:
s = 0 n = 0 while 2*s*s < 123: s = s + 1 n = n + 2 print(n) |
С++:
#include <iostream> using namespace std; int main() { int s = 0, n = 0; while (2*s*s < 123) { s = s + 1; n = n + 2; } cout << n << endl; return 0; } |
Подобные задания для тренировки
Ответ: 16
✍ Показать решение:
Разберем листинг программы:
- В цикле переменная s постоянно увеличивается на единицу (работает как счетчик), а переменная n в цикле увеличивается на 2.
- В результате работы программы на экран выводится значение n.
- Цикл зависит от s, причем работа цикла завершится когда 2 * s2 >= 123.
- Необходимо определить количество прохождений цикла (итераций цикла): для этого определим такое наименьшее возможное s, чтобы 2 * s2 >= 123:
1 шаг: s = 2*12=2 2 шаг: s = 2*22=8 3 шаг: s = 2*32=18 ... 7 шаг: s = 2*72=98 (меньше 123, т.е. цикл еще работает) 8 шаг: s = 2*82=128 (больше 123, цикл не работает! )
Либо просто нужно было бы найти такое наименьшее возможное четное число >= 123, которое при делении на 2 возвращало бы вычисляемый корень числа:
s=124/2 = √62 - не подходит! s=126/2 = √63 - не подходит! s=128/2 = √64 = 8 - подходит!
n = 2 * 8 = 16
📹 Видео
Арифметическая и геометрическая прогрессия
6_10:
Определите, что будет напечатано в результате работы следующего фрагмента программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 |
var k, s: integer; begin s:=3; k:=1; while k < 25 do begin s:=s+k; k:=k+2; end; write(s); end. |
Бейсик:
DIM S, K AS INTEGER S = 3 K = 1 WHILE K < 25 S = S + K K = K + 2 WEND PRINT S |
Python:
s = 3 k = 1 while k < 25: s = s + k k = k + 2 print(s) |
С++:
#include <iostream> using namespace std; int main() { int s = 3, k = 1; while (k < 25) { s = s + k; k = k + 2; } cout << s << endl; return 0; } |
Подобные задания для тренировки
Ответ: 147
✍ Показать решение:
Разберем листинг программы:
- Результатом программы является вывод значения s.
- В цикле s меняется, увеличиваясь на k, при начальном значении s = 3.
- Цикл зависит от k. Выполнение цикла завершится при k >= 25. Начальное значение k = 1.
- В цикле k постоянно увеличивается на 2 -> значит, можно найти количество итераций цикла.
- Количество итераций цикла равно:
n = 25 / 2 ~ 12
(т.к. k изначально равнялось 1, то в последнее, 12-е прохождение цикла, k = 25; условие цикла ложно)
s:=0; k:=1; while k < 25 do begin ...
1 + 3 + 5 + 7 ... количество членов прогрессии - 12, т.к. 12 итераций цикла
s = ((2 * a1 + d * (n – 1)) / 2) * n
где a1 – первый член прогрессии,
d – разность,
n – количество членов прогрессии (в нашем случае – кол-во итераций цикла)
(2 * 1 + 2 * 11) / 2 * 12 = 144
144+3 = 147
📹 Видео
Государственный выпускной экзамен ГВЭ 2019 (информатика ГВЭ ФИПИ, № 15):
Запишите число, которое будет напечатано в результате выполнения программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
var n, s: integer; begin n := 1; s := 0; while n <= 1000 do begin s := s + n; n := n * 2 end; write(s) end. |
Бейсик:
DIM N, S AS INTEGER N = 1 S = 0 WHILE N <= 1000 S = S + N N = N * 2 WEND PRINT S |
Python:
n = 1 s = 0 while n <= 1000: s = s + n n = n * 2 print(s) |
С++:
#include <iostream> using namespace std; int main() { int n = 1, s = 0; while (n <= 1000) { s = s + n; n = n * 2; } cout << s << endl; return 0; } |
Ответ: 1023
✍ Показать решение:
- Условие цикла зависит от переменной n, которая изменяется в цикле согласно получению степеней двойки:
Рассмотрим алгоритм:
1 2 4 8 16 32 64 128 256 512 1024
1.
[ S_{n} = frac {b_1-b_{n}*q}{1-q} ]
2.
[ S_{n} = b_{1} * frac {1-q^n}{1-q} ]
[ S_{n} = frac {1-512*2}{1-2} =1023 ]
[ S_{n} = 1 * frac {1-2^{10}}{1-2}=1023 ]
Программирование: массивы и матрицы
Наибольшее или наименьшее значение переменной s (сумматор)
Досрочный экзамен 2020 г., вариант 1:
В программе используется одномерный целочисленный массив A с индексами от 0 до 11. Значения элементов массива A[i] приведены в таблице.
i | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|---|---|---|
A[i] | 14 | 13 | 15 | 8 | 4 | 12 | 30 | 21 | 22 | 16 | 5 | 9 |
Определите значение переменной s после выполнения следующего фрагмента этой программы
Язык программирования Паскаль:
s := 0; n := 1; for i := 0 to 11 do if A[i] > A[n] then s := s + A[i] + i else A[n] := A[i];
Бейсик:
s = 0 n = 1 FOR i = 0 TO 11 IF A(i) > A(n) THEN s = s + A(i) + i ELSE A(n) = A(i) END IF NEXT i |
Python:
s = 0 n = 1 for i in range(0, 12): if A[i] > A[n]: s += A[i] + i else: A[n] = A[i] |
С++:
s = 0; n = 1; for (int i = 0; i < 12; i++) { if (A[i] > A[n]) s += A[i] + i; else A[n] = A[i]; } |
Ответ: 202
Показать решение:
Результат: 202
📹 Видео
6_16:
В программе описан одномерный целочисленный массив А с индексами от 0 до 10.
Язык программирования Паскаль:
s:=0; n:=10; for i:=0 to n-1 do begin s:= s + A[i] + A[i+1] end;
В начале выполнения этого фрагмента в массиве находились двухзначные четные натуральные числа.
Какое наибольшее значение может иметь переменная s после выполнения данной программы?
Ответ: 1960
✍ Показать решение:
Рассмотрим алгоритм фрагмента программы:
- Цикл выполняется 10 раз: от 0 до 9 (т.к. n-1).
- В цикле повторяется операция, суммирующая два подряд идущих элемента массива, – текущего и следующего:
A[i] + A[i+1]
s = 0 + 98 + 98 = 196
s = 196 + 98 + 98
196 * 10 = 1960
📹 Видео
6_17:
В программе описан одномерный целочисленный массив А с индексами от 0 до 10.
Язык программирования Паскаль:
s:=1; n:=10; for i:=1 to 5 do begin s:= s * A[i] * A[n-i+1] end;
В начале выполнения этого фрагмента в массиве находились однозначные четные натуральные числа.
Какое наименьшее значение может иметь переменная s после выполнения данной программы?
Ответ: 1024
✍ Показать решение:
Рассмотрим алгоритм фрагмента программы:
- Цикл выполняется 5 раз: от 1 до 5.
- В цикле повторяется операция произведения двух элементов массива:
A[i] * A[n-i+1]
1 шаг: A[1]*A[10] 2 шаг: A[2]*A[9] 3 шаг: A[3]*A[8] 4 шаг: A[4]*A[7] 5 шаг: A[5]*A[6]
s = 1 * 2 * 2 = 4
s = 4 * 2 * 2 = 16 ...
45 = 1024
📹 Видео
Перестановка в массиве. Определить значение переменной
6 (19) задание. Демоверсия ЕГЭ 2018 информатика:
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 3, 0, 4, 6, 5, 1, 8, 2, 9, 7 соответственно, т.е. A[0] = 3, A[1] = 0 и т.д.
Определите значение переменной c после выполнения следующего фрагмента этой программы:
1 2 3 4 5 6 7 8 9 |
c := 0; for i := 1 to 9 do if A[i-1] > A[i] then begin c := c + 1; t := A[i]; A[i] := A[i-1]; A[i-1] := t; end; |
Ответ: 5
✍ Показать решение:
Результат: 5
📹 Видео
6_19:
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 1, 3, 4, 7, 2, 9, 1, 2, 3, 0 соответственно, т.е. A[0] = 1, A[1] = 3 и т.д.
Определите значение переменной c после выполнения следующего фрагмента этой программы:
1 2 3 4 5 6 7 8 9 |
c := 0; for i := 1 to 9 do if A[i] > A[0] then begin c := c + 1; t := A[i]; A[i] := A[0]; A[0] := 2*t; end; |
Ответ: 2
✍ Показать решение:
- Рассмотрим изменение всех переменных и элементов массива для каждой итерации (прохода) цикла:
№ | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
if | 3>4 true |
4>6 false |
7>6 true |
2>14 false |
9>14 false |
1>14 false |
2>14 false |
3>14 false |
0>14 false |
c | 1 | – | 2 | – | – | – | – | – | – |
t | 3 | – | 7 | – | – | – | – | – | – |
A[i] | 1 | 6 | |||||||
A[0] | 6 | – | 14 | – | – | – | – | – | – |
📹 Видео
6_20:
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 0, 7, 1, 3, 2, 1, 8, 9, 6, 3 соответственно, т.е. A[0] = 0, A[1] = 7 и т.д.
Определите значение переменной j после выполнения следующего фрагмента этой программы:
1 2 3 4 5 6 7 8 |
j:=9; while A[j] + A[j-1] > 4 do begin t:=A[j]; A[j]:=A[j-1]; A[j-1]:=t; j:=j-1; end; |
Ответ: 6
✍ Показать решение:
- В задании используется цикл while – с предусловием. Такой цикл выполняется пока условие истинно.
- В условии цикла сумма каждого элемента массива с предыдущим, начиная с девятого (
j=9
), сравнивается с числом 4: если сумма элементов больше 4 то цикл выполняется.
Для первой итерации цикла имеем: while A[9] + A[8] > 4 do ...
j:=j-1
).A[9]+A[8] = 3+6 > 4 - да, значит обмен: A[9]=6 A[8]=3, j=8
A[8]+A[7] = 3+9 > 4 - да, значит обмен: A[8]=9 A[7]=3, j=7
A[7]+A[6] = 3+8 > 4 - да, значит обмен: A[7]=8 A[6]=3, j=6
A[6]+A[5] = 3+1 > 4 - нет, цикл прекращает свою работу
Разбор досрочного ЕГЭ по информатике 2019:
В программе используется одномерный целочисленный массив A с индексами от 0 до 11. Значения элементов равны 20, 19, 33, 21, 42, 13, 12, 24, 4, 22, 6, 10, т.е. A[0]=20, A[1]=19 и т.д.
Определите значение переменной s после выполнения следующего фрагмента этой программы:
1 2 3 4 5 6 7 8 9 |
n := 1; s := 1; for i := 1 to 11 do if A[i] < A[n] then begin s := s * i; t := A[i]; A[i] := A[n]; A[n] := t; end; |
Типовые задания для тренировки – демоверсия ЕГЭ информатика 2020
Ответ: 240
📹 Видео
6_22:
В программе используется одномерный целочисленный массив A с индексами от 0 до 9. Значения элементов равны 21, 16, 7, 12, 18, 3, 8, 13, 11, 17, т.е. A[0]=21, A[1]=16 и т.д.
Определите значение переменной s после выполнения следующего фрагмента этой программы:
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 |
s := 0; n := 4; for i:=0 to 9 do if A[i] <= A[n] then begin s := s + A[i]; t := A[i]; A[i] := A[n]; A[n] := t; n := i mod 3; end; writeln(s); |
Бейсик:
s=0: n=4 FOR k=1 to 10 IF A(i) <= A(n) THEN s = s + A(i) t = A(i) A(i) = A(n) A(n) = t n = i MOD 3 END IF NEXT k PRINT S END |
Python:
s = 0 n = 4 for i in range(10): if A[i] <= A[n]: s = s + A[i] t = A[i] A[i] = A[n] A[n] = t n = i % 3 print(s) |
С++:
s = 0; n = 4; for (i=0; i<=9; i++) if (A[i]<=A[n]) { s+=A[i]; t=A[i]; A[i]=A[n]; A[n]=t; n=i%3; } cout << s; |
Типовые задания для тренировки
Ответ: 75
Показать решение:
- Рассмотрим алгоритм. Построим трассировочную таблицу, каждая строка которой – очередная итерация цикла.
- При последнем изменении s стало равным 75.
i | <= ? | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | s | n |
21 | 16 | 7 | 12 | 18 | 3 | 8 | 13 | 11 | 17 | 0 | 4 | ||
0 | 21<=18 нет |
21 | 18 | ||||||||||
1 | 16<=18 да |
16 18 |
18 16 |
16 | 1 mod 3 = 1 | ||||||||
2 | 7<=18 да |
18 7 |
7 18 |
16+7=23 | 2 mod 3 = 2 | ||||||||
3 | 12<=18 да |
18 12 |
12 18 |
23+12=35 | 3 mod 3 = 0 | ||||||||
4 | 16<=21 да |
21 16 |
16 21 |
35+16=51 | 4 mod 3 = 1 | ||||||||
5 | 3<=7 да |
7 3 |
3 7 |
51+3=54 | 5 mod 3 = 2 | ||||||||
6 | 8<=12 да |
12 8 |
8 12 |
54+8=62 | 6 mod 3 = 0 | ||||||||
7 | 13<=16 да |
16 13 |
13 16 |
62+13=75 | 7 mod 3 = 1 | ||||||||
8 | нет | 3 | 11 | ||||||||||
9 | нет | 13 | 17 |
📹 Видео
6_23:
В результате выполнения программы напечатано число 6.
Какое наибольшее значение может иметь переменная S после выполнения программы?
Паскаль:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
var k, m, S, N: integer; Dat: array[1..100] of integer; begin N:= 5; m := 0; S := 0; for k := 1 to N do readln(Dat[k]); for k := 1 to N do begin S := S + 2 * Dat[k]; if Dat[k]>m then begin m := Dat[k] end end; writeln(m) end. |
Бейсик:
N=5 m=0 S=0 FOR k=1 to N INPUT Dat(k) NEXT k FOR k=1 to N S = S + 2 * Dat(k) IF Dat(k) > m THEN m = Dat(k) END IF NEXT k PRINT m END |
Python:
Dat = [0]*100 N = 5 m = S = 0 for k in range(0, N): Dat[k] = int(input()) for k in range(0, N): S += 2 * Dat[k] if Dat[k] > m: m = Dat[k] print(m) |
С++:
#include <iostream> using namespace std; int main() { int Dat[100]; int N = 5; int k, m = 0, S = 0; for(k=0; k<N; k++) cin >> Dat[k]; for(k=0; k<N; k++) { S += 2 * Dat[k]; if (Dat[k]>m) m = Dat[k]; } cout << m; return 0; } |
Ответ: 60
Показать решение:
-
Рассмотрим алгоритм.
- В конце программы видим, что на экран выводится значение переменной m. То есть после выполнения всего алгоритма m станет равным 5. Запомним это.
- Изначально переменная N равна значению 5:
- В первом цикле формируются значения для пяти элементов массива:
- Во втором цикле видим условие, в котором каждый из пяти элементов массива будет сравниваться с m. Если элемент больше m, то в m сохранится значение этого элемента:
- Исходя из первого нашего пункта имеем, что наибольшее значение из пяти элементов массива – это значение 6. Так как в результате
m = 6
. - В цикле помимо условия находится сумматор, который суммирует
2 * Dat[k]
. В задании необходимо определить наибольшее значение S, значит, выгодно, чтобы элементы массивов имели максимальное возможное значение. - Предположим, что все пять элементов массива равны 6. Тогда m после прохождения цикла останется равной 6. То есть результат будет верным.
- Посчитаем S в цикле:
for k := 1 to N do readln(Dat[k]);
if Dat[k]>m then begin m := Dat[k] end
S := 0 + 2 * 6 + 2 * 6 + 2 * 6 + 2 * 6 + 2 * 6 = 12 * 5 = 60
📹 Видео