Задания типа 1, 2 решаются с знаний систем счисления и степеней:
а) Приводим все степени к одному основанию (равному основанию системы счисления, в которой потом нужно записать результат). Последнее слагаемое тоже нужно разложить на сумму/разность нескольких степеней (например, или ).
б) Представляем, как выглядит каждое из этих чисел в данной системе счисления (как единица с количеством нулей после неё, равным показателю степени, например ).
в) Делаем сложение, а затем- вычитание чисел (оба раза- от большего (по модулю) числа к меньшему). Не нужно полностью писать числа, нужно посчитать, сколько появится нулей/единиц между таким то и таким то разрядом, если сложить/вычесть одно из другого (тут нужно понимать, как происходит сложение/вычитание в той или иной системе счисления).
Пример №1:
В двоичной системе эти слагаемые выглядят как:
единица и 4028 нулей (то есть, ),
единица и 2015 нулей (то есть, ),
единица и 3 нуля (то есть ),
единица без нулей (то есть, ).
Складываем первые два слагаемых (представляем в уме). Получится следующее двоичное число:
1 (2012 нулей) 1 (2015 нулей) ₂
Итого, тут пока только две единицы.
Затем, вычитаем отсюда число 1000₂ Получим вот что:
1 (2012 нулей) 0 (2011 единиц) 1000₂
Итого, тут уже 2013 единиц.
Далее, вычитаем отсюда 1₂ Получаем вот что:
1 (2012 нулей) 0 (2011 единиц) 0111₂
Итого, тут получилось ровно 2015 единиц.
Пример №2:
В двоичной системе эти слагаемые выглядят как:
1) единица и 12072 нуля,
2) единица и 3210 нулей,
3) единица и 1024 нуля,
4) единица и 7 нулей (то есть ),
5) единица и 1 нуль (то есть, ).
Складываем большие положительные слагаемые (№ 1 и 3). Получим:
Если сложить это в двоичном виде, то число разрядов останется такое же, как было в большем слагаемом (оно в двоичном виде выглядело как единица и 1026 нулей, т.е. всего 1027 разрядов).
Каждые три двоичных разряда дают один восьмеричный. Разбивают число начиная от десятичной запятой. То есть, можно поделить 1026 / 3 = 342 восьмеричных разряда, и ещё один разряд (идущий в начале числа)- там уже не обязательно иметь три разряда, всё равно он даст на выходе один восьмеричный разряд. Итого 342 + 1 = 343 восьмеричных разряда.
Другими словами, можно взять общее число двоичных разрядов (1027), поделить на три и если число получилось дробное- то округлить вверх (т.е. не обычное округление, а всегда вверх, с избытком).
// PascalABC.NET 3.3, сборка 1611 от 06.01.2018 // Внимание! Если программа не работает, обновите версию!
type Exams=record fam:string; nam:string; ball:=new integer[4]; end;
begin var Ls:=new List<Exams>; var b:Exams; // буфер ReadLines('marks.csv') .Foreach(t->begin var a:=t.ToWords(','); (b.fam,b.nam):=(a[0],a[1]); b.ball:=a[2:].Select(q->q.ToInteger).ToArray; Ls.Add(b) end); var n:=Ls.Count; // а var m:=Arr(0,0,0,0); var c:=Ls.Select(t->t.Ball); foreach var d in c do for var i:=0 to 3 do m[i]+=d[i]; Writeln('Средние по предметам: ', m[0]/n:0:1,', ',m[1]/n:0:1, ', ',m[2]/n:0:1,', ',m[3]/n:0:1); // б var max:=Ls.Select(t->t.Ball.Sum).Max; Writeln(NewLine,'Максимальная сумма ',max); // в Writeln(NewLine,'Учащиеся, набравшие максимальную сумму :'); Ls.Where(t->t.Ball.Sum=max).Select(t->t.fam+' '+t.nam) .OrderBy(t->t).Println(NewLine); // г Writeln(NewLine,'Получили хотя бы одну двойку:'); Ls.Where(t->t.Ball.Any(t->t=2)).Select(t->t.fam+' '+t.nam) .OrderBy(t->t).Println(NewLine) end.
Пример: Средние по предметам: 3.3, 3.3, 4.0, 2.0
Максимальная сумма 13
Учащиеся, набравшие максимальную сумму : Алескеров Имран Бармин Владимир
Получили хотя бы одну двойку: Александрова Маргарита Алескеров Имран Бармин Владимир
Замечание: В PascalABC.NET 3.3 динамические массивы реализованы с списков, поэтому было принято решение использовать именно список, позволяющий не знать заранее размера массива и добавлять элементы по мере необходимости. Если возникнет причуда иметь данные именно в массиве, перед end. добавьте строку var x:=Ls.ToArray; - она создаст из списка массив х.
Задания типа 1, 2 решаются с знаний систем счисления и степеней:
а) Приводим все степени к одному основанию (равному основанию системы счисления, в которой потом нужно записать результат). Последнее слагаемое тоже нужно разложить на сумму/разность нескольких степеней (например,
или
).
б) Представляем, как выглядит каждое из этих чисел в данной системе счисления (как единица с количеством нулей после неё, равным показателю степени, например
).
в) Делаем сложение, а затем- вычитание чисел (оба раза- от большего (по модулю) числа к меньшему). Не нужно полностью писать числа, нужно посчитать, сколько появится нулей/единиц между таким то и таким то разрядом, если сложить/вычесть одно из другого (тут нужно понимать, как происходит сложение/вычитание в той или иной системе счисления).
Пример №1:
В двоичной системе эти слагаемые выглядят как:
единица и 4028 нулей (то есть,
),
единица и 2015 нулей (то есть,
),
единица и 3 нуля (то есть
),
единица без нулей (то есть,
).
Складываем первые два слагаемых (представляем в уме). Получится следующее двоичное число:
1 (2012 нулей) 1 (2015 нулей) ₂
Итого, тут пока только две единицы.
Затем, вычитаем отсюда число 1000₂ Получим вот что:
1 (2012 нулей) 0 (2011 единиц) 1000₂
Итого, тут уже 2013 единиц.
Далее, вычитаем отсюда 1₂ Получаем вот что:
1 (2012 нулей) 0 (2011 единиц) 0111₂
Итого, тут получилось ровно 2015 единиц.
Пример №2:
В двоичной системе эти слагаемые выглядят как:
1) единица и 12072 нуля,
2) единица и 3210 нулей,
3) единица и 1024 нуля,
4) единица и 7 нулей (то есть
),
5) единица и 1 нуль (то есть,
).
Складываем большие положительные слагаемые (№ 1 и 3). Получим:
1 (11047 нулей) 1 (1024 нуля) ₂
Итого, тут пока только две единицы.
Затем, вычитаем отсюда слагаемое № 2 Получим:
(8862 единиц) (2185 нулей) 1 (1024 нуля) ₂
Итого, тут уже 8863 единицы.
Далее, вычитаем 10000000₂ Получаем вот что:
(8862 единиц) (2185 нулей) 0 (1016 единиц) 10000000₂
Итого, тут сейчас 9879 единиц.
Далее, вычитаем отсюда 10₂ Получаем вот что:
(8862 единиц) (2185 нулей) 0 (1016 единиц) 01111110₂
Итого, тут получилось ровно 9884 единицы.
Задание № 3:
Если сложить это в двоичном виде, то число разрядов останется такое же, как было в большем слагаемом (оно в двоичном виде выглядело как единица и 1026 нулей, т.е. всего 1027 разрядов).
Каждые три двоичных разряда дают один восьмеричный. Разбивают число начиная от десятичной запятой. То есть, можно поделить 1026 / 3 = 342 восьмеричных разряда, и ещё один разряд (идущий в начале числа)- там уже не обязательно иметь три разряда, всё равно он даст на выходе один восьмеричный разряд. Итого 342 + 1 = 343 восьмеричных разряда.
Другими словами, можно взять общее число двоичных разрядов (1027), поделить на три и если число получилось дробное- то округлить вверх (т.е. не обычное округление, а всегда вверх, с избытком).