8. Анализ программ с циклами
Определите, какое число будет напечатано в результате выполнения программы, записанной ниже на пяти языках программирования.
Бейсик
Visual Basic12345678 | DIM N, S AS INTEGERN = 1 S = 0 WHILE N <= 150 S = S + 30 N = N * 5WEND PRINT S |
Python
Python123456 | n = 1s = 0while n <= 150: s = s + 30 n = n * 5print(s) |
Алгоритмический язык
1234567891011 | алгнач цел n, s n := 1 s := 0 нц пока n <= 150 s := s + 30 n := n * 5 кц вывод sкон |
Паскаль
Delphi/Pascal1234567891011 | var n, s: integer;begin n := 1; s := 0; while n <= 150 do begin s := s + 30; n := n * 5 end; write(s)end. |
Си
C1234567891011121314 | #include<stdio.h>int main(){ int n, s; n = 1; s = 0; while (n <= 150) { s = s + 30; n = n * 5; } printf("%d", s); return 0;} |
Демонстрационный вариант Единый государственный экзамен ЕГЭ 2017 г. – задание №8
Решение:Нужно определить значение переменной s в результате выполнения программы.
- Начальное значение переменной n=1, переменной s=0.
- Цикл в программе будет выполняться пока выполняется условие n<=150.
- После окончания цикла выводится значение переменной s.
- С каждым шагом цикла s увеличивается на 30 — s := s + 30 n увеличивается в 5 раз — n := n * 5.
- Таким образом цикл выполнится 4 раза (для n равной 1, 5, 25 и 125).
- Таким образом к начальному значению s=0 прибавиться 30*4=120 — это и есть наш ответ.
n | s |
1 | 0 |
5 | 30 |
25 | 60 |
125 | 90 |
625 | 120 |
Ответ: 120
Демонстрационный вариант Единый государственный экзамен ЕГЭ 2016 г. – задание №8
Запишите число, которое будет напечатано в результате выполнения следующей программы. Для Вашего удобства программа представлена на пяти языках программирования.
Бейсик
Visual Basic12345678 | DIM S, N AS INTEGERS = 0N = 0WHILE S < 111 S = S + 8 N = N + 2WENDPRINT N |
Python
Python123456 | s = 0n = 0while s < 111: s = s + 8 n = n + 2print(n) |
Алгоритмический язык
1234567891011 | алгнач цел n, s n := 0 s := 0 нц пока s < 111 s := s + 8 n := n + 2 кц вывод nкон |
Паскаль
Delphi/Pascal1234567891011 | var s, n: integer;begin s := 0; n := 0; while s < 111 do begin s := s + 8; n := n + 2 end; writeln(n)end. |
Си
C1234567 | #include<stdio.h>int main(){ int s = 0, n = 0; while (s < 111) { s = s + 8; n = n + 2; } printf("%d\n", n); return 0;} |
Ответ:
Решение:
- Нам требуется найти значение n после выполнения вышепредставленной программы
- Изначально n = 0, s = 0
- Цикл выполняется пока s < 111.
- С каждым шагом цикла s увеличивается на 8. Значит цикл будет выполняться 14 раз (13*8 = 104 < 111 – при s = 104 зайдет в цикл, увеличит его на 8(112) и больше выполняться не будет)
- С каждым шагом цикла n увеличивается на 2. Так как цикл выполняется 14 раз, значит n увеличивается на два 14 раз.
- n = 14 * 2 = 28
-
n s 0 0 2 8 4 16 6 24 … … 26 104 28 112
Ответ: 28
Определите, что будет напечатано в результате работы следующего фрагмента программы:
Паскаль | Си | Python |
var n, s: integer; begin n := 3; s := 0; while n <= 7 do begin s := s + n; n := n + 1 end; write(s) end. |
#include <stdio.h> int main(void){ int n, s; n = 3; s = 0; while (n <= 7 ) { s = s + n; n = n + 1 } printf(″%d″,s); } |
n = 3 s = 0 while n <= 7: s = s + n n = n + 1 print(s) |
while (n <= 7 )
n = n + 1 | n | s | s = s + n; |
3 | 0 | ||
4 | 0+3=3 | ||
5 | 3+4=7 | ||
6 | 7+5=12 | ||
7 | 12+6=18 | ||
8 | 18+7=25 |
Ответ: 25
Определите, что будет напечатано в результате работы следующего фрагмента программы:
Паскаль | Си | Python |
var n, s: integer; begin n := 0; s := 512; while s >= 0 do begin s := s – 20; n := n + 1 end; write(n) end. |
#include <stdio.h> int main(void){ int n, s; n = 0; s = 512; while (s >= 0 ) { s = s – 20; n = n + 1 } printf(″%d″,n); } |
n = 0 s = 512 while s >= 0: s = s – 20 n = n + 1 print(n) |
n = 0;
s = 512;
Пока s больше или равно 0, s уменьшается на 20 и n увеличивается на 1.
n=512 / 20 = 25 – остаток=12
12>=0
s=12-25=-13
n=25+1=26
Ответ: 26
Определите, что будет напечатано в результате работы следующего фрагмента программы:
Паскаль | Си | Python |
var n, s: integer; begin n := 1; s := 0; while s <= 365 do begin s := s + 36; n := n * 2 end; write(n) end. |
#include <stdio.h> int main(void){ int n, s; n = 1; s = 0; while (s < = 365 ) { s = s + 36; n = n * 2 } printf(″%d″,n); } |
n = 1 s = 0 while s <= 365: s = s + 36 n = n * 2 print(n) |
n = 1;
s = 0;
Пока s меньше или равно 365, s увеличивается на 36 и n умножается на 2.
s=36.11=396 > 365
Цикл повторяется 11 раз.
n=211=2048
Ответ: 2048
При каком наибольшем введенном числе d после выполнения программы будет напечатано 46?
Паскаль | Си | Python |
var n, s, d: integer; begin readln(d); n := 8; s := 78; while s <= 1200 do begin s := s + d; n := n + 2 end; write(n) end. |
int main(void) { int n, s, d; scanf(″%d″,&d); n =8; s =78; while( s <= 1200 ) { s =s + d; n =n + 2; } printf(″%d″,n); } |
d = int(input()) n = 8 s = 78 while s <= 1200: s = s + d n = n + 2 print(n) |
n =8;
s =78;
46-8=38/2=19
Цикл выполнится ровно 19 раз.
Чтобы цикл остановился на 19-м шаге, нужно выполнить условие 78+19d > 1200, при этом он не должен остановиться на 18-м шаге, то есть, 78+18·d <= 1200:
78+19d > 1200 => d=59
78+18·d =< 1200 => d=62
d – ограничено отрезком [60; 62]
Ответ: 62
При каком наименьшем введенном числе d после выполнения программы будет напечатано 121?
Паскаль | Си | Python |
var n, s, d: integer; begin readln(d); n := 1; s := 46; while s <= 2700 do begin s := s + d; n := n + 4 end; write(n) end. |
#include <stdio.h> int main(void){ int n, s, d; scanf(″%d″,&d); n = 1; s = 46; while (s < = 2700 ) { s = s + d; n = n + 4 } printf(″%d″,n); } |
d = int(input()) n = 1 s = 46 while s <= 2700: s = s + d n = n + 4 print(n) |
n =1;
s =46;
121-1=120/4=30
Цикл выполнится ровно 30 раз.
Чтобы цикл остановился на 30-м шаге, нужно выполнить условие 46+30.d > 2700, при этом он не должен остановиться на 29-м шаге, то есть, 46+29·d <= 2700:
46+30.d > 2700 => d=88
46+29·d <= 2700 => d=91
d – ограничено отрезком [89; 91]
Ответ: 89
Запишите число, которое будет напечатано в результате выполнения следующей программы:
Паскаль | Си | Python |
var n, s: integer; begin n := 1; s := 0; while n <= 650 do begin s := s + 20; n := n * 5 end; write(s) end. |
int main(void){ int n, s; n =1; s =0; while( n <= 650 ) { s =s + 20; n =n * 5; } printf(″%d″,s); } |
n = 1 s = 0 while n <= 650: s = s + 20 n = n * 5 print(s) |
n | s |
1 | 0 |
5 | 20 |
25 | 40 |
125 | 60 |
625 | 80 |
3125 | 100 |
Ответ: 100
Запишите через запятую наименьшее и наибольшее значение числа d, которое нужно ввести, чтобы после выполнения программы было напечатано 264?
Паскаль | Си | Python |
var n, s, d: integer; begin readln(d); n := 16; s := 10; while s <= 3120 do begin s := s + d; n := n + 8 end; write(n) end. |
int main(void) { int n, s, d; scanf(″%d″,&d); n =16; s =10; while( s <= 3120 ) { s =s + d; n =n + 8; } printf(″%d″,n); } |
d = int(input()) n = 16 s = 10 while s <= 3120: s = s + d n = n + 8 print(n) |
n =16;
s =10;
262-16=248/8=31
Цикл выполнится ровно 31 раз.
Чтобы цикл остановился на 31-м шаге, нужно выполнить условие 16+31.d > 3120, при этом он не должен остановиться на 30-м шаге, то есть, 16+30·d <= 3120:
16+31.d > 3120 => d=100
16+30·d <= 3120 => d=103
d – ограничено отрезком [101; 103]
Ответ: 101,103