Раздел B • Категория B3 (демонстрационный вариант-2012)

 
 
 

Условие задачи

Дано:

BasicPascalCАлгоритмический язык

DIM k, s AS INTEGER

s = 0

k = 0

WHILE s < 1024
    s = s + 10
    k = k + 1
WEND

PRINT k

var k, s : integer;
begin
    s := 0;
    k := 0;
    while s < 1024 do
    begin
        s := s + 10;
        k := k + 1;
    end;
write(k);
end.

{
    int k, s;
    s = 0;
    k = 0;
    while (s<1024) {
        s = s + 10;
        k = k + 1;
    }
printf (“%d”, k);
}

нач
    цел k, s
    s := 0
    k := 0
    нц пока s < 1024
        s := s + 10
        k := k + 1
    кц
вывод k
кон

 

Вопрос:

определите, что будет напечатано в результате работы вышеприведенного фрагмента программы?

 

Теоретические сведения

Для успешной реализации данного задания необходимо знать такие базовые понятия, как:

  • цикл;

  • условное выражение;

  • переменная;

  • тело выражения;

  • математические операции;

  • приоритет операций.

 

Решение

Сначала нужно выбрать язык программирования, на основе которого пойдет весь последующий анализ. Вариативность высокая, так как предлагается на выбор один из четырех языков (Turbo Pascal, Basic, C, Естественный язык).

Среди всех приведенных для выбора языков, я свое предпочтение, безусловно, отдаю языку Turbo Pascal, так как:

  • данный язык имеет прекрасную внутреннюю группировку по разделам (раздел описания констант, раздел описания переменных, раздел описания собственных типов данных и т. д.);

  • хорошо понятная лексика;

  • перед использованием переменной она обязана быть описана выше (в отличие от языка программирования Basic);

  • большое количество встроенных структур, позволяющих наиболее эффективно решать поставленные задачи (например, имеется встроенный тип данных "Множество", в отличие от любого другого представленного здесь языка).

 




Давайте выделим элементы программирования, встречающиеся в исходном фрагменте кода (язык Turbo Pascal):

  • описание переменных;

  • циклическая конструкция (цикл с предусловием);

  • арифметические операции и операция присваивания;

  • консольный вывод.

 

 

 




 

 

 

В приведенном фрагменте присутствует единственная строка, отвечающая за визуализацию информации:
write(k);
следовательно, на экране после выполнения данного кода будет напечатано значение переменной k.

 

Для последующего решения нам потребуется специализированная процессинговая таблица значений переменных. Ее смысл в том, чтобы хранить значение всех переменных программы в каждый конкретный разрез континуума.


                 Рис. Каркас процессинговой таблицы

 


 Рис. Инициализация переменных s и k начальными значениями

 

Затем проверяется условие (s < 1024), поскольку значение s = 0, то условие (0 < 1024) возвращает истину. Следовательно, попадаем в тело цикло и, значение переменной s увеличивается на 10 и становится равным 10, а значение переменной k увеличивается на 1 и становится равным 1.

 

Затем проверяется условие (s < 1024), поскольку значение s = 10, то условие (10 < 1024) возвращает истину. Следовательно, попадаем в тело цикло и, значение переменной s увеличивается на 10 и становится равным 20, а значение переменной k увеличивается на 1 и становится равным 2.

 

Очевидно, что цикл while будет выполняться, пока заголовок цикла (s < 1024) возвращает истину. Анализировать все итерации цикла бессмысленно, так как переменная s возрастает незначительно на каждой итерации, поэтому, большую часть анализа можно благополучно пропустить.

 

Очевидно, что увеличиваясь на каждой итерации на значение равное 10, переменная s в определенный момент достигнет значения, равного 1010. Также, не сложно заметить, что значение переменной k на каждой итерации ровно в 10 раз меньше соответствующего значения переменной s, следовательно, значение переменной k будет равно 101.

 

Затем проверяется условие (s < 1024), поскольку значение s = 1010, то условие (1010 < 1024) возвращает истину. Следовательно, попадаем в тело цикло и, значение переменной s увеличивается на 10 и становится равным 1020, а значение переменной k увеличивается на 1 и становится равным 102.

 

Затем проверяется условие (s < 1024), поскольку значение s = 1020, то условие (1020 < 1024) возвращает истину. Следовательно, попадаем в тело цикло и, значение переменной s увеличивается на 10 и становится равным 1030, а значение переменной k увеличивается на 1 и становится равным 103.

Затем проверяется условие (1030 < 1024) и оно возвращает ложь - кульминационный момент задачи. Следовательно, цикл заканчивается и управление передается на первый оператор, идущий после тела цикла. В итоге, на экране печатается значение переменной k равное 103.

 

Вывод:

на экране пользователя будет напечатано в результате работы вышеприведенного фрагмента программы число равное 103.

Ответ:

103

 
Рейтинг:
 
Проголосовало: 0
Количество просмотров: 997
 
 
 

Раздел B • Категория B3 (демонстрационный вариант-2012)

 

Комментарии

Для комментирования или зарегистрируйтесь
 
 
© 2011-2019 ООО "СтадиМен". Все права сохранены.
Перепечатка и использование материалов с данного сайта, разрешена только по согласию с владельцем.
Владелец оставляет за собой право воспользоваться 146 статьей УК РФ при нарушении авторских и смежных прав.
 
 
 
 
Авторизация на сайте
 
 
 
Обнаружили
ошибку на сайте?