- •Var a,b,c,d,p:real;
- •Var m,n:real;
- •Var x1,y1,x2,y2,x3,y3,x4,y4:real;
- •Var X,p:real;
- •Var f,a:real;
- •Var a:array[1..12] of integer;
- •I,s:integer;
- •Var a:array[1..100] of integer;
- •I,n:integer;
- •Var a:array[1..M,1..N] of real;
- •I,j,k:integer;
- •Var a:array[1..10,1..10] of integer;
- •I,j,m,n:integer;
- •Var k,m,n,l,z:real;
- •Var I:integer;
- •Var I,k,a:integer;
Задание№1 Кодирование Шеннона-Фано
Фоменко Валентина Леонидовна
Длина строки 28 символов. Определим вероятность для каждого символа и выпишем их в порядке убывания вероятности:
Шаг 1
28/4=7
Буква |
Вероятность |
Шаг 1 |
Шаг 2 |
Шаг 3 |
Итог |
Н |
5/28 |
0 |
0 |
|
00 |
О |
4/28 |
1 |
|
01 |
|
А |
3/28 |
1 |
0 |
|
10 |
Е |
3/28 |
1 |
|
11 |
|
_ |
2/28 |
2 |
0 |
|
20 |
В |
2/28 |
1 |
|
21 |
|
И |
2/28 |
2 |
|
22 |
|
Л |
2/28 |
3 |
1 |
|
31 |
Д |
1/28 |
2 |
|
32 |
|
Т |
1/28 |
3 |
|
33 |
|
Ф |
1/28 |
4 |
|
34 |
Задание№2 Кодирование Хаффмена
Закодировать свою фамилию имя отчество Кодом Хаффмена с мощностью кода 4.
Фоменко Валентина Леонидовна
Длина строки 28 символов. Для кодирования методом Хаффмена с мощностью кода 4 нам не хватает 1 буквы, поэтому добавим две фиктивные буквы с нулевыми вероятностями. Затем определим вероятности для каждого символа и выпишем их в порядке убывания вероятностей.
Буква |
Вероятность |
Шаг 1 |
Шаг 2 |
Н |
5/28 |
5/28 |
6/28(2) |
О |
4/28 |
4/28 |
4/28 |
А |
3/28 |
3/28 |
3/28 |
Е |
3/28 |
3/28 |
3/28 |
_ |
2/28 |
2/28(1) |
|
В |
2/28 |
2/28 |
|
И |
2/28 |
2/28 |
|
Л |
2/28 |
2/28 |
|
Д |
1/28 |
|
|
Т |
1/28 |
|
|
Ф |
1/28 |
|
|
|
0/28 |
|
|
На каждом шаге «склеиваем» 4 (по мощности кода) нижних вероятности и переупорядочиваем преобразованные вероятности по убыванию. «Склеиваемые» вероятности выделены жирным курсивом, а место куда попала суммарная вероятность отмечено в скобках номером шага.
Теперь идем в обратную сторону. Каждому символу в последней группе
(шаг 4) ставим в соответствии код от 0, 1, 2 или 3 (т.к. мощность 4).
Шаг 1 |
Код |
5/28 |
1 |
4/28 |
2 |
3/28 |
3 |
3/28 |
00 |
2/28(1) |
01 |
2/28 |
02 |
2/28 |
03 |
2/28 |
11 |
Шаг 2 |
Код |
6/28 (2) |
0 |
4/28 |
1 |
3/28 |
2 |
3/28 |
3 |
Получаем:
Буква |
Вероятность |
Код |
Шаг 1 |
Код |
Шаг 2 |
Код |
Н |
5/28 |
5 |
5/28 |
1 |
6/28(2) |
0 |
О |
4/28 |
00 |
4/28 |
2 |
4/28 |
1 |
А |
3/28 |
01 |
3/28 |
3 |
3/28 |
2 |
Е |
3/28 |
02 |
3/28 |
00 |
3/28 |
3 |
_ |
2/28 |
03 |
2/28(1) |
01 |
|
|
В |
2/28 |
11 |
2/28 |
02 |
|
|
И |
2/28 |
12 |
2/28 |
03 |
|
|
Л |
2/28 |
13 |
2/28 |
11 |
|
|
Д |
1/28 |
20 |
|
|
|
|
Т |
1/28 |
21 |
|
|
|
|
Ф |
1/28 |
22 |
|
|
|
|
|
0/28 |
23 |
|
|
|
|
ЗАДАНИЕ№4 1. Линейные вычислительные процессы.
Вычислить значение при различных значениях аргументов.
Var a,b,c,d,p:real;
Begin
writeln('Введите данные');
write('A = ');
readln(A);
write('B = ');
readln(B);
write('C = ');
readln(C);
D:=exp(ln(abs(A))*B)+sqr(C);
P:=ln(D)+sqr(sin(sqrt(D)/(A*B-C)));
writeln('P = ',P:7:3);
readln;
end.
ЗАДАНИЕ№5
2.3. Простые развилки.
Если больше чем , то увеличить на 10, в противном случае уменьшить в два раза.
Var m,n:real;
Begin
writeln('Введите m,n');
write('m=');
readln(m);
n:=exp(ln(2)*m);
writeln('2^m = ',n:5:3,' 2m = ',2*m:5:3);
if n>2*m
then m:=m+10
else m:=m/2;
writeln('m = ',m:5:3);
readln;
end.
ЗАДАНИЕ№6
2.4. Задачи с несколькими развилками.
Ввести , , – координаты трёх вершин прямоугольника, стороны которого параллельны координатным осям. Найти координаты его четвёртой вершины.
Var x1,y1,x2,y2,x3,y3,x4,y4:real;
Begin
writeln('Введите данные');
write('x1= ');
readln(x1);
write('y1= ');
readln(y1);
write('x2= ');
readln(x2);
write('y2= ');
readln(y2);
write('x3= ');
readln(x3);
write('y3= ');
readln(y3);
if x1=x2
then x4:=x3
else x4:=x1;
if y1=y2
then y4:=y3
else y4:=y1;
writeln('x4 = ',x4:5:3,' y4 = ',y4:5:3);
readln;
End.
ЗАДАНИЕ№7
3.4. Математические ряды.
Используя три различных цикла определить значение.
Произведения, .
Var X,p:real;
n:integer;
Begin
write('Введите х = ');
readln(x);
p:=1;
for n:=1 to 5 do
p:=p*(1/sqrt(2*n)+x);
writeln('Цикл For = ',P:7:4);
p:=1;
n:=1;
while n<=5 do
begin
p:=p*(1/sqrt(2*n)+x);
n:=n+1;
end;
writeln('Цикл While = ',P:7:4);
p:=1;
n:=0;
Repeat
n:=n+1;
p:=p*(1/sqrt(2*n)+x);
Until n=5;
writeln('Цикл Repeat = ',P:7:4);
readln;
end.
ЗАДАНИЕ№8
3.5. Табулирование функции.
Используя три различных цикла, трижды протабулировать функцию.
на интервале , .
const k1=-3;
k2=8;
Var f,a:real;
k:integer;
Begin
write('Введите a =');
readln(a);
writeln('Табулирование функции на интервале [',k1,',',k2,'] с шагом 1 цикл for');
for k:=k1 to k2 do
begin
if k mod 2=0
then f:=k*k*k+a
else f:=a*k;
writeln('f(',k,') = ',f:5:3);
end;
writeln('Табулирование функции на интервале [',k1,',',k2,'] с шагом 1 цикл while');
k:=k1;
while k<=k2 do
begin
if k mod 2=0
then f:=k*k*k+a
else f:=a*k;
writeln('f(',k,') = ',f:5:3);
k:=k+1;
end;
writeln('Табулирование функции на интервале [',k1,',',k2,'] с шагом 1 цикл repeat');
k:=k1;
Repeat
if k mod 2=0
then f:=k*k*k+a
else f:=a*k;
writeln('f(',k,') = ',f:5:3);
k:=k+1;
Until k>k2;
readln;
end.
ЗАДАНИЕ№9
4.1. Расчеты и обработка данных.
Ввести одномерный массив из 12 элементов. Определить в нём сумму элементов чье значение без остатка делится на 3 и не делится на 2.
Var a:array[1..12] of integer;
I,s:integer;
Begin
s:=0;
writeln('Введите массив A');
for i:=1 to 12 do
begin
write('A[',i,'] = ');
readln(A[i]);
if (A[i] mod 3=0) and (A[i] mod 2<>0)
then s:=s+A[i];
end;
write('массив A :');
for i:=1 to 12 do
write(A[i]:5);
writeln;
writeln('Cуммa элементов чье значение без остатка делится на 3 и не делится на 2 = ',S);
readln;
end.
ЗАДАНИЕ№10
4.2. Обработка элементов массива.
Ввести одномерный массив из элементов. Каждый третий элемент в массиве заменить остатком от деления этого элемента на 2. Массив вывести до и после преобразования.