буфер
fout.WriteBuffer(res,4);
o:=o+dhdr^.blw;
end;
end;
Зміщення на позицію 0
ftmp.Seek(0,sofrombeginning);
Зміщення на позицію 14
fout.Seek(14,sofrombeginning);
присвоєння res розміру файлу
res:=fout.Size;
Запис в буфер
fout.WriteBuffer(res,4);
Зміщення на позицію fout.Size
fout.Seek(fout.Size,sofrombeginning);
Процес копіювання
fout.CopyFrom(ftmp,ftmp.Size);
очистка змінної
ftmp.Free;
Зв’язок змінної f з файлом Buldozer.tmp
system.AssignFile(f,'Buldozer.tmp');
try
Стирає файли пов’язані з f
system.Erase(f);
except
end;
except
Очистка змінної
ftmp.Free;
Зв’язок змінної f з файлом Buldozer.tmp
system.AssignFile(f,'Buldozer.tmp');
try
Стирає файли пов’язані з f
system.Erase(f);
except
end;
Виведення повідомлення про наявність помилки
application.MessageBox('Не вдалось створити вихідний файл. Архівація проводитись не буде', 'Помилка');
Очистка пям’яті
freemem(ps,dhdr^.blw*dhdr^.blh);
freemem(pd,dhdr^.blw*dhdr^.blh*2);
freemem(dhdr,sz);
Не виконання функції pack
pack:=false;
exit;
end;
end;
Очистка пям’яті
freemem(ps,dhdr^.blw*dhdr^.blh);
freemem(pd,dhdr^.blw*dhdr^.blh);
freemem(dhdr,sz);
Не виконання функції pack
pack:=true;
end;
end.
В цій процедурі спочатку зчитується заголовок BMP-файлу. Наступним кроком перевіряється чи є вірним тип файлу BMP. Далі відбувається перевірка чи 256-колірний файл.
Якщо ці умови задоволені, зчитуються ширина та довжина блоку, що містяться в змінних w і h. Далі визначається кількість блоків по координатах x та y. Кількість блоків по осі абсцис буде міститись в змінній blx, а по осі ординат в змінній bly.
Далі відбувається корекція розміру рисунку за допомогою множення знайдених кількостей блоків на відповідні параметри.
dhdr^.header.bi.biWidth:=blx*blw;
dhdr^.header.bi.biHeight:=bly*blh;
dhdr^.header.fh.bfSize:=blx*blw*bly*blh+dhdr^.header.fh.bfOffBits;
end;
Наступним кроком створюється тимчасовий файл «Buldozer.tmp», формується BMP-заголовок і відбувається його запис в файл.
Далі виконується функція compress4(ps,pd,k), результат якої присвоюється змінній res.
Після цього отримані результати записуються у файл Buldozer.tmp. Якщо не вдалось зберегти тоді запуститься процедура application.MessageBox('Не вдалось створити вихідний файл. Архівація проводитись не буде', 'Помилка').
Розглянемо детальніше функцію compress4(buf,res:pointer;n:cardinal).
function compress4(buf,res:pointer;n:cardinal):integer;
var
endbuf: Pchar;
begin
screen.cursor:=crhourglass;
endbuf:=buf;
endbuf:=endbuf+n;
asm
mov esi,buf
mov edi,res
@again:
@sdiff:
mov ecx,255
mov ebx,esi // beg of kus
push edi
mov edi,esi
inc edi // edi=esi+1
repne cmpsb // different // [esi]<>[esi+1]
lahf // save zf // zf=0 -> not found equals
not cl
dec cl
pop edi // res
jecxz @nodiff
mov al,0
stosb
mov al,cl
stosb
mov esi,ebx
rep movsb // copy differents [esi](buf)->[edi](res)
cmp esi,endbuf
jae @finita
sahf // restore zf
jnz @sdiff
jmp @ssame
@nodiff:
dec esi
@ssame:
mov ecx,255
mov ebx,esi // beg of kus
lodsb // 1st in kus
xchg esi,edi // scas in edi (buf)
repe scasb // same // [edi]=ax
lahf // save zf // zf=1 -> not found differents
xchg esi,edi // stos to edi (res)
not cl
mov al,cl
stosb
sub esi,2
movsb // copy last same
cmp esi,endbuf
jae @finita
sahf
jz @ssame
cmp esi,endbuf
jb @again
@finita:
sub edi, res
mov n,edi
end;
screen.cursor:=crarrow;
compress4:=n;
end;
В даній програмі використано лише один з двох розглянутих вище методів стиснення даних Compress2. В результаті виконання даної функції у файл буде записано значення nll, значення символу і кількість повторів однакових символів.
2.5 Демонстрація роботи програми
Тепер продемонструємо роботу програми. Для запуску програми запускаємо Buldozer.exe. Програма містить дві основні форми.
Форма, яка появилася складається з таких частин:
блок вибору жорсткого диску та директорії, де знаходиться файл перед початком стискання;
блок вибору файлу, який потрібно стиснути;
блок запуску процесу стискання.
Крок 1. Вибираємо диск і директорію, де знаходиться файл, який треба стиснути.
Крок 2. Вибираємо файл, який треба стиснути (рисунок 2.6).
Рисунок 2.6 – Загальний вигляд вікна програми
Крок 3. Натискаємо кнопку «Виконати». Після цього появляється нове вікно Form2 «Параметри архівування» (рисунок 2.7).
Рисунок 2.7 – Вигляд вікна «Параметри архівування»
Крок 4. Натискаємо кнопку «Конвертувати». Після цього появляється нове вікно Form2 «Параметри архівування» (рисунок 2.7). В цьому вікні вказуємо ширину і висоту блоку. По замовчуванню і висота, і ширина дорівнюють 800. В результаті отримаємо файл з розширенням *.tmp в тій директорії, що і початковий файл. Цей файл нам і треба було отримати.
Якщо ж ми вказали невірні параметри початкового файлу, а саме: висоту або ширину; відкриваємо пошкоджений файл; файл невірного формату; файл не 256-колірний, тоді отримаємо повідомлення про нашу помилку (рисунок 2.8 і рисунок 2.9).
Рисунок 2.8 - Реакція програми на файл, який є не 256-колірним
Рисунок 2.9 - Реакція програми на файл невірного формату
3 РОЗРАХУНОК НАДІЙНОСТІ ПРОГРАМНОГО
ЗАБЕЗПЕЧЕННЯ
Надійність програмного забезпечення визначається з однієї сторони, відсутністю відмов, збоїв, помилок в її роботі, з іншої сторони - можливістю швидкого відновлення апаратури і обчислювального процесу. Поняття надійності виникло через необхідність оцінки степені довіри до системи, її здатності працювати необхідний час з встановленою якістю.
Програмне забезпечення характеризується випадковим характером помилок та випадковим характером комбінацій вхідних даних, що викликає їх появу і дає можливість говорити про системні відкази, що викликані помилками програмного забезпечення, як про випадкові події. Це дозволяє використати для їх аналізу ті ж методи, що і для аналізу апаратних відмов. Тим не менше, відмови, викликані помилками програмного забезпечення, мають достатньо суттєві відмінні риси, що обумовило створення спеціальних методів аналізу надійності програмного забезпечення .
Джерелом помилок програмного забезпечення є логічні помилки в проекті чи його недосконалість, неправильне кодування, помилки при компонуванні.
Повна перевірка програми на наявність в ній помилок можлива лише після об’єднання її частин, коли зміни і виправлення в програмі пов’язані із значними затратами часу і засобів. Крім того, якщо в програмі використовуються блоки, які були складені раніше, то це значно ускладнює вдосконалення даної програми. Можливі також ситуації, коли безпомилково працююча програма, що застосовується до нової задачі і на інших вихідних даних, дає неприйнятні по точності і часу обрахунку результати. Крім вище перерахованих є ще ряд факторів, що призводять до появи помилок у програмі.
По складності програми можна поділити на декілька типів. Довжина стандартних програм для обчислення елементарних функцій не перевищує сотні команд. Ці програми перевіряються дуже ретельно, але іноді в них виявляються помилки, звичайно при специфічних значеннях аргумента.
Щоб застосувати до оцінки надійності програм математичний аппарат, розглядають відмови програми – події, що містяться в переході до неправильної роботи програми. Після появи відказу програмісти досліджують програму з