[2] ЗАДАНИЕ 5. Вычислить значение суммы s = 1 +3+5+7+...+п для заданного нечётного п.
начало
Запишите программу на языке программирование Python
Ввод n
S = 0
ни на
х = 1
нет
Хs n
да
S = S+x
x = x+2
вывод S
s=1+3+5+...+n
Введите n: 19
S= 100
конец
2
]
[
const
k=4; //количество классов
u=18; // количество учеников в классе
var
a:array[1..k,1..u] of real; // массив с ростом
n:array[1..k] of integer; // массив результатов
i,j:integer; // счетчики циклов
m:real; // средний рост ученика в классе
begin
for i:=1 to k do begin
Writeln('Введите рост учеников ',i,'-го из классов');
m:=0;
for j:=1 to u do begin Read(a[i,j]); m:=m+a[i,j] end;
m:=m/u;
n[i]:=0;
for j:=1 to u do
if abs(a[i,j]-m)>5.0 then Inc(n[i]);
end;
Writeln('Количество учеников с ростом, отличающимся от среднего');
Writeln('по каждому из классов более, чем на 5');
for i:=1 to k do Write(n[i]:5)
end.
Пример решения для упрощенного случая, когда в классе на 18, а 5 учеников (чтобы меньше набирать)
Введите рост учеников 1-го из классов
168 174 181 172 175
Введите рост учеников 2-го из классов
162 173 170 158 183
Введите рост учеников 3-го из классов
157 185 159 168 167
Введите рост учеников 4-го из классов
170 173 176 168 171
Количество учеников с ростом, отличающимся от среднего
по каждому из классов более, чем на 5
2 3 3 0
32760+9 можно записать как 32767+2. Это позволит избежать перевода 32760 в двоичную систему счисления, а 32767 - это 15 двоичных единиц. В знаковом разряде, конечно же, ноль.
После сложения в знаковом разряде появляется единица, что означает наличие отрицательного числа в дополнительном коде. Знаковый разряд мы не трогаем, а остальные инвертируем и арифметически прибавляем к полученному числу единицу. Тем самым переходим к прямому коду, который переводим в десятичную систему представления. И результат, конечно, же, будет со знаком минус, т.е. -32767. Вот к чему приводит переполнение разрядной сетки в целочисленной арифметике. Кстати, аппаратно оно не обнаруживается, поскольку криминала нет - просто +1 переходит в самый старший (левый) разряд. "Железо" ведь не знает, сколько разрядов мы отвели под представление чисел и как биты нужно рассматривать! Соответствующая картинка находится в первом вложении.
2. В восьмибитной арифметике все происходит аналогично. 127 представляется знаковым нулем и семью единицами в остальных разрядах, т.е. 01111111₂. Тройка - это 0..011₂
Складываем и получаем 10000010₂. Опять знаковый разряд единичный, инвертируем остальные: 11111101. А теперь прибавляем единицу и получаем 11111110₂. Числу 1111110₂ (знаковый разряд мы не учитываем) соответствует 126₁₀, а с учетом знака окончательно получаем -126.
3. Тут немного больше нужно повозиться. Арифметика снова 16-битная, диапазон представления чисел -32768..32767.
Выпишем факториалы в пределах этого диапазона и одно значение вне его. 1!=1, 2!=2, 3!=6, 4!=24, 5"=120, 6!=720, 7!=5040, 8!=40320.
Делаем вывод, что максимальное значение факториала можно вычислить для n=7 и n!=5040. Тогда n+1=8 и при его вычислении у нас возникнет арифметическое переполнение. Переведем число 5040 в двоичную систему и умножим его на 8, поскольку 8! = 7! × 8. Поскольку 8 = 2³, то умножение на 8 в двоичной системе равносильно сдвигу числа влево на три разряда. Подробности приведены на рисунке во втором вложении. Мы получим "странный" результат: 8! = -25216.