Какие значения s, y будут выведены после выполнения следующей программы? начало y:= 2;...

0 голосов
58 просмотров

Какие значения s, y будут выведены после выполнения следующей программы?
начало y:= 2;
нач_цикла для j от 0 до 5
s:= y + 2*j + j/2;
если s <= 15 то нач s:= s – 2*j; y:= y + 2 кон<br> иначе нач s:= s + y; y:= y – 1 кон;
кон_цикла;
вывод (” s=”, s, ” y=”, y);
конец


Информатика (423 баллов) | 58 просмотров
0

Необходимо уточнить, какой тип (целый, вещественный) имеют переменные y и s, поскольку для нечетных j операция j/2 возвращает нецелое значение.

Дано ответов: 2
0 голосов
Правильный ответ

Трассировка для случая, когда s - вещественное
y= 2
************************
j= 0
s= 2
 2 <= 15<br> s= 2         y= 4
j= 1
s= 6.5
 6.5 <= 15<br> s= 4.5       y= 6
j= 2
s= 11
 11 <= 15<br> s= 7         y= 8
j= 3
s= 15.5
 23.5 > 15
 s= 23.5      y= 7
j= 4
s= 17
 24 > 15
 s= 24        y= 6
j= 5
s= 18.5
 24.5 > 15
 s= 24.5      y= 5
************************
 s= 24.5      y= 5

(142k баллов)
0

а когда s-целое?

0

А когда s-целое - будет зависеть от правил конкретного языка, на котором программируется данный алгоритм. Например, в Паскале (синтаксис программы в задании ближе всего к Паскалю) операция "/" всегда выполняется, как деление вещественных чисел, поэтому выражение y + 2*j + j/2 всегда вещественное и попытка присвоить значение вещественного выражения целочисленной переменной s вызовет ошибку еще на стадии компиляции программы.

0

А приведенная выше трассировка сделана в Бейсике (qBASIC), причем переменные не описывались и их типы система взяла по умолчанию. В Бейсике (как и в Паскале) операция / - всегда деление вещественных чисел, т.е. остаток не теряется.

0

Если в Бейсике указать, что s - целое, то при присваивании произойдет арифметическое округление вещественного значения до целого и результаты выполнения программы станут иными. Но, еще раз: по синтаксису приведенное задание ближе всего к Паскалю.

0

А вот в языке С++ при целочисленном j значение операции j/2 будет целым, потому что при делении целых дробная часть результата просто отбрасывается.

0 голосов
(18.0k баллов)