8. Анализ программ с циклами

Определите, какое число будет напечатано в результате выполнения программы, записанной ниже на пяти языках программирования.

Бейсик

Visual Basic
12345678 DIM N, S AS INTEGERN = 1 S = 0 WHILE N <= 150     S = S + 30    N = N * 5WEND PRINT S

Python

Python
123456 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/Pascal
1234567891011 var n, s: integer;begin n := 1; s := 0; while n <= 150 do begin s := s + 30; n := n * 5 end; write(s)end.

Си

C
1234567891011121314 #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 Basic
12345678 DIM S, N AS INTEGERS = 0N = 0WHILE S < 111 S = S + 8 N = N + 2WENDPRINT N

Python

Python
123456 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/Pascal
1234567891011 var s, n: integer;begin s := 0; n := 0; while s < 111 do begin s := s + 8; n := n + 2 end; writeln(n)end.

Си

C
1234567 #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