Скласти опис класу фігур, в нього включити такі геометричні фігури як, квадрат, прямокутник, коло, додати можливість розрахунку сторін
маючи тільки параметр лівої нижньої точки фігури (у кола точка старту
центр). При цьому потрібно реалізувати спадкування класів, поля в класі
повинні бути закритими, робота з полями класів повинна бути реалізована
через методи. Додати методи з можливістю розрахунку накладення фігур
(зіткнення в системі координат), в залежності від вхідних параметрів.
Користувач повинен вводити параметри фігури і опорну точку, на
висновок він отримує її координати. Після того як всі фігури введені він
може перевірити їх на накладення однієї на іншу.
Язык С++
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.