Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л_1.doc
Скачиваний:
14
Добавлен:
18.03.2016
Размер:
834.05 Кб
Скачать

3. Выполнение работы

1. Наберите коды функций, использующихся для построения кода Хаффмана и сжатия по алгоритму Хаффмана:

Построение кода Хаффмана для входных данных.

function CODE = huffman(p)

%Построение кода Хаффмана.

if (ndims(p) ~= 2) | (min(size(p)) > 1) | ~isreal(p) | ~isnumeric(p)

error('P должно быть множеством действительных чисел');

end

global CODE %использование глобальной переменной

CODE = cell(length(p),1);

if length(p)>1

p=p/sum(p);

s = reduce(p);

makecode(s,[]);

else

CODE={'1'};

end;

function s = reduce(p);

for i=1:length(p)

s{i}=i;

end

while numel(s)>2

[p,i]=sort(p);

p(2)=p(1)+p(2);

p(1)=[];

s=s(i);

s{2}={s{1},s{2}};

s(1)=[];

end

function makecode(sc,codeword)

global CODE

if isa(sc, 'cell')

makecode(sc{1},[codeword 0]);

makecode(sc{2},[codeword 1]);

else

CODE{sc}=char('0'+codeword);

end

2. Сжатие на основе предыдущего кода.

Наберите (или скопируйте эти коды, сохранив в виде функций (файлы формата name.m).

3. Теперь посмотрим пример вызова функции.

На рис.(15) показан пример вызова функции кодирования Хаффмана.

Рис.15. Кодирование Хаффмана – результат для введенного массива

4. Контрольные задания

Блок 1.

1. Напишите выражение (или функцию) для вычисления суммы чисел от 1 до 100. Для того, чтобы обрабатывать большие последовательности чисел, например, считать сумму, используется оператор (:).

2. Напишите функцию, определяющую сумму квадратов от 1 до 10.

3. Напишите функцию, определяющую сумму степеней 0.5 чисел из диапазона от 1 до 10 (10.5 и так далее).

4. Пусть A = [2 5 1 6]. Добавьте 3 к элементам, имеющим нечетные индексы (результат запишите в двух векторах).

Блок 2.

Использование оператора if и циклов (самостоятельно изучить).

5. Напишите небольшую функцию, проверяющую, является ли число 73 простым. Используя полученный код, напишите функцию, определяющую первые 20 простых чисел. Можете пользоваться командами mod или rem (остаток от деления). Справка по командам в системе - help rem.

5. Задания для самостоятельной работы

1. Поясните функции команд системы MATLAB:

clc

clear

who

File | Save Workspace As...

save путь_к_файлу\имя_МАТ-файла

File | Load Workspace..

load имя_МАТ-файла

load имя_МАТ-файла имя1, имя2, ...

cd путь_к_новому_каталогу

clear ( 'имя!', тимя2' )

help имя_команды

format long

format short

format rat

2. Какие знаки используются для записи арифметических, логических операций и операций отношения?

Задача 1: дано: а=l; b=2; c=3;

res=( a<b ) + (c ~= b) * (b = = a)

res=?

Задача 2: дано: а = 1; b = 0;

xor( a, b )=?

дано: а=1; b=1;

xor{ a, b )=?

3. Поясните назначение элементарных функций и приведите примеры их использования :

sqrt, ехр , pow2, log, loglO,1оg2, sin, cos, tan, cot, asin, acos , atan, acot, round, fix, floor ceil, mod, rem,

sign , factor isprime, primes, rat , lcm , gcd, perms , nchoosek.

4.Приведите примеры записи комплексных чисел.

5.Поясните назначение элементарных функций: abs, conj , imag, real , angle,isreal.

Задача 1: дано с = 2 + 31; d = 21;

с > d

ans =?

Задача 2: дано с = 51; d = 21;

с <= d

ans =?

с >= d

ans =?

Задача 3: дано с = 2 + 3i; d = 2i;

с & d

ans=?

c | d

ans=?

6. Поясните назначение операции конкатенации и функций length, cat, reshape, ndims, size, ones, : (двоеточие), ' (апостроф) и zeros. Приведите примеры их использования.