Ну, собственно наш алфавит по условию состоит из 36 символов. Следовательно необходимо расчитать сколько будет занимать универсальный размер переменной, в которую можно будет зашифровать любой из символов.
Бит может принять два состояния, либо 0, либо 1. Следовательно, 1 битом можно закодировать 2 символа. Двумя же битам мы можем зашифровать уже 2 * 2 = 4 символа (умножили два возможных состояния одного бита на другой), нам же нужно 36. Вспоминаем ряд двойки и идем по нему:
2^3 = 8 (слишком мало)
2^4 = 16 (всё ещё не достаточно)
2^5 = 32 (близко, но не сможем зашифровать ещё 4 символа)
2^6 = 64 (то что нужно, 64 > 36, это и есть минимальное кол-во бит)
Итак, что бы зашифровать символ из алфавита размером в 36 символов, нам понадобится минимальная переменная, что сможет его зашифровать, размером в 64 бита.
Сообщение размером в 140 символов, тут уже просто, нужно всего лишь...
Ладно, это не банеры, ссылок по которым клацать нет) 140 * 64 = 8960 бит.
Не пугайся числа, оно хоть и большое, но точно не по компьютерным меркам :)
Давай удивим преподавателя и переведем это в другие еденицы измерения:
8960 / 8(столько занимает "байт") = 1120 байт
1120 / 1024 (небольшая путаница, все последующие единицы измерения занимают в отличии от байта по 1024 раза больше) = 1.9375 килобайта.
Собственно говоря ответ задачи: 8960 бит, либо 1120 байт, либо 1.94 килобайта.
1) создать
2) отменить
3) сохранить
4)вырезать
5)открыть
6)копировать
7) печать<span />
Если в нашем распоряжении имеется современная версия PascalABC.Net 3.2, то есть минимум два способа решить такую задачу. Массив мы будем заполнять случайными числами из интервала [1;98].
Первый способ - использовать имеющуюся в этой версии паскаля возможность находить максимумы и минимумы встроенными в язык средствами. Это очень быстро программируется и обычно страхyет от возможных ошибок при написании более детальных программ.
<em>// PascalABC.NET 3.2, сборка 1353 от 27.11.2016</em>
<em>// Внимание! Если программа не работает, обновите версию!</em>
begin
var a:=ArrRandom(30,1,98); a.Println;
Writeln('D=',a.Where(x->x.IsEven).Max-a.Where(x->x.IsOdd).Max)
end.
Пример
29 52 58 75 13 77 63 13 17 6 67 17 53 51 14 93 83 30 81 17 93 58 13 71 78 96 42 66 4 91
D=3
Второй способ не привязан к упомянутой выше версии языка, т.е. может быть использован в школах, исповедующих "доисторический стиль программирования" ))) Естественно, он длиннее и можно будет сравнить количество строк кода. Алгоритм основан на последовательном переборе элементов массива и одновременном получении максимума среди четных и нечетных его элементов.
const
n=30;
var
a:array[1..30] of integer;
i,a1max,a2max:integer;
begin
Randomize;
a1max:=0; a2max:=0;
for i:=1 to n do begin
a[i]:=Random(98)+1;
Write(a[i],' ');
if a[i] mod 2 <> 0 then
begin if a1max<a[i] then a1max:=a[i] end
else
if a2max<a[i] then a2max:=a[i]
end;
Writeln;
Writeln('D=',a2max-a1max)
end.
Замечу, что данный вариант программы содержит фрагмент, в котором школьники (да и не только школьники) часто делают ошибку.
if a[i] mod 2 <> 0 then
<u>begin</u> if a1max<a[i] then a1max:=a[i] <u>end</u>
else
if a2max<a[i] then a2max:=a[i]
Выделенные мной begin и end на первый взгляд не нужны. Но в этом-то и ошибка!
По правилам языка паскаль когда внутри одного if встречается другой if и хотя бы один из них неполный, т.е. не содержит else, последний else относится к самому последнему из if, который без его будет неполным.
Запутанно? Поясню на нашем фрагменте.
Его без этих begin ... end можно понимать так:
<u>if a[i] mod 2 <> 0 then</u>
if a1max<a[i] then a1max:=a[i]
<u>else</u>
<u> if a2max<a[i] then a2max:=a[i]</u>
Но можно и так:
if a[i] mod 2 <> 0 then
<u>if a1max<a[i] then a1max:=a[i]</u>
<u>else </u>
<u>if a2max<a[i] then a2max:=a[i]</u>
И паскаль, увы, понимает как раз по последнему варианту. Посему как раз begin ... end решают эту проблему. Но... встречается она не очень часто и о ней быстро забывают. А потом нарываютcя и не могут понять причины.
Что ж, выбор как решать - за вами!
после writeln() должно стоять ( ;)
и в конце не нужна readln
Var
i, sum, j: integer;
begin
j:=1;
sum:=0;
WHILE j<15 DO
begin
sum:=sum+(j*j*j);
j:=j+2;
end;
write(sum);
end.