Составьте программу рисования фигуры, изображенной на рисунке, таким образом, чтобы во время рисования перо не отрывалось от бумаги, и ни одна линия не проводилась дважды.
// PascalABC.NET 3.3, сборка 1600 от 23.12.2017 // Внимание! Если программа не работает, обновите версию!
begin var (n,m):=ReadInteger2('Количество строк и столбцов в матрице:'); Writeln('*** Исходная матрица ***'); var a:=MatrRandom(n,m,-99,99); a.Println(4); Writeln(4*a.ColCount*'-'); var (q,k):=ReadInteger2('Укажите номера строк q и k:'); Assert((k<>q) and k.Between(1,n) and q.Between(1,n),'Неверная пара (q,k)'); k-=1; q-=1; // перешли к индексам var rk:=a.Row(k); if k<q then begin for var r:=k+1 to q do a.SetRow(r-1,a.Row(r)); a.SetRow(q,rk) end else begin for var r:=k-1 downto q+1 do a.SetRow(r+1,a.Row(r)); a.SetRow(q+1,rk) end; Writeln('*** Результат ***'); a.Println(4) end.
1. Для кодирования одного из 64 цветов требуется log(2)64 = 6 бит (2^6=64). 180 байт = 180*8 бит. Количество точек = 180*8 / 6 = 240
2. Для кодирования одного из 1024 цветов требуется log(2)1024 = 10 бит (2^10=1024); для кодирования одного из 4 цветов требуется log(2)4 = 2 бита (2^2=4). После прелбразования объем изображения уменьшился в 10/2 = 5 раз.
4. а) Для кодирования одного из 32 символов русского алфавита (без буквы "ё") требуется log(2)32 = 5 бит; с буквой "ё" - 6 бит. б) Для кодирования одного из 26 символов латинского алфавита требуется log(2)26 ≈ 5 бит. в) Для кодирования одной из 10 цифр требуется log(2)10 ≈ 4 бита. г) Для кодирования одной двоичной цифры требуется log(2)2 = 1бит.
// Внимание! Если программа не работает, обновите версию!
begin
var (n,m):=ReadInteger2('Количество строк и столбцов в матрице:');
Writeln('*** Исходная матрица ***');
var a:=MatrRandom(n,m,-99,99);
a.Println(4); Writeln(4*a.ColCount*'-');
var (q,k):=ReadInteger2('Укажите номера строк q и k:');
Assert((k<>q) and k.Between(1,n) and q.Between(1,n),'Неверная пара (q,k)');
k-=1; q-=1; // перешли к индексам
var rk:=a.Row(k);
if k<q then begin
for var r:=k+1 to q do a.SetRow(r-1,a.Row(r));
a.SetRow(q,rk)
end
else begin
for var r:=k-1 downto q+1 do a.SetRow(r+1,a.Row(r));
a.SetRow(q+1,rk)
end;
Writeln('*** Результат ***'); a.Println(4)
end.
Примеры
Количество строк и столбцов в матрице: 5 8
*** Исходная матрица ***
32 -6 -66 81 84 0 50 -83
93 5 90 -33 88 30 -5 85
-46 35 -22 74 -66 8 -3 -86
-23 -81 -82 30 -1 -71 28 19
0 -95 -30 -46 -24 -77 38 49
--------------------------------
Укажите номера строк q и k: 4 1
*** Результат ***
93 5 90 -33 88 30 -5 85
-46 35 -22 74 -66 8 -3 -86
-23 -81 -82 30 -1 -71 28 19
32 -6 -66 81 84 0 50 -83
0 -95 -30 -46 -24 -77 38 49
Количество строк и столбцов в матрице: 4 3
*** Исходная матрица ***
-68 53 -35
-83 78 -78
99 -4 -9
-86 11 -30
------------
Укажите номера строк q и k: 2 4
*** Результат ***
-68 53 -35
-83 78 -78
-86 11 -30
99 -4 -9
180 байт = 180*8 бит.
Количество точек = 180*8 / 6 = 240
2. Для кодирования одного из 1024 цветов требуется log(2)1024 = 10 бит (2^10=1024); для кодирования одного из 4 цветов требуется log(2)4 = 2 бита (2^2=4). После прелбразования объем изображения уменьшился в 10/2 = 5 раз.
3. 0,625 Мбайт = 0,625*1024 Кбайт = 0,625*1024*1024 байт = 0,625*1024*1024*8 бит = 5 242 880 бит. Каждая ячейка содержит 5242880/163840 = 32 бита
4. а) Для кодирования одного из 32 символов русского алфавита (без буквы "ё") требуется log(2)32 = 5 бит; с буквой "ё" - 6 бит.
б) Для кодирования одного из 26 символов латинского алфавита требуется log(2)26 ≈ 5 бит.
в) Для кодирования одной из 10 цифр требуется log(2)10 ≈ 4 бита.
г) Для кодирования одной двоичной цифры требуется log(2)2 = 1бит.