Національний університет “Львівська політехніка”
Інститут комп’ютерної техніки, автоматики та метрології
Кафедра “Електронні обчислювальні машини”
Звіт
про виконання курсової роботи
”Структури даних та алгоритми”
Виконав:
група КІ – 13
Прийняв: Хедик Л.В.
Львів 2004
Завдання на курсову роботу
Завдання 1. Дослідити представлення в пам’яті комп’ютера даних статичної структури. Розглянути основні такі типи даних: Integer, Single, Boolean. Написати порграму, яка показуватиме представлення цих типів у пам’яті а також реалізовуватиму перевірку даної операції, здійснивши зворотній перевід чисел.
const zz1= місяць народження (дві цифри);
zz2= дві останні цифри року народження; *
zz3= zz2-30;
var
sn :single ;
i1 : integer;
l1 : Boolean;
- - - - - - - - - -
* - Замість місяця і року народження підставляти свої конкретні дати (по дві цифри кожна).
** - Замість Прізвище, Ім’я, По-батькові підставляти свої конкретні значення, записані латинськими літерами ( перша літера - велика, решта – малі) .
Завдання 2. Реалізувати метод сортування вставкою в послідовності. Намалювати схему алгоритму для конкретного прикладу послідовності з десяти цілих чисел зі знаком.
Дослідити метод на стійкіть.
Дослідити ефективність метода. Для цього визначити середні значення кількості порівнянь, кількості перестановок і часу виконання. Порівняти отримані характеристики з аналогічними даними для основних простих методів сортування (вставки, вибору, обміну), зробити висновки про ефективність метода, що досліджується.
Завдання 3. Задача про Ханойські вежі.
Анотація
У курсовій роботі у першому завданні досліджується представлення в пам’яті комп’ютера даних статичної структури. Розглядаються прості (цілі, дійсні, символьні, логічні, перелічувані, обмежені) і складові або фундаментальні (масиви, множини, записи, рядки символів, файли) структури даних.
У другому завданні розглядається один з багатьох методів сортування. Досліджується основні переваги і недоліки цього методу перед іншими методами(вибором,обміном).
У третьому завданні будується більш складніша задача на основі складних структур даних, а саме стеків, черг, списків. Розглядаються алгоритми побудови тих чи інших задач, а також методи їх розв’язку. Одним з голових деталей сучасного програмування є використання динамічних структур даних, які дають змогу доцільніше побудувати задачу і знайти її розв’язок.
Зміст
Завдання 2
Анотація 4
Зміст 5
Вступ 6
Теоретична частина 7
Задача на дослідження внутрішнього представлення даних в пам’яті комп’ютера 7
Задача на метод сортування вставкою 9
Задача на списки. 11
2. Опис алгоритму 13
Задача на дослідження внутрішнього представлення даних в пам’яті комп’ютера 13
Задача на метод сортування вставкою 15
Задача на списки. 17
3. Текст програми 19
4. Тестування
4.1. Задача на дослідження внутрішнього представлення даних в пам’яті комп’ютера 30
4.2. Задача на метод сортування вставкою 32
4.3. Задача на списки.
Висновки 35
Список використаної літератури 36
Вступ
Комп’ютер – це машина, що обробляє інформацію. Вивчення засобів програмування передбачає вивчення того, яким чином ця інформація організована всередині ЕОМ, як вона обробляється і як може бути використана. Тому, для вивчення дисципліни студенту особливо важливо зрозуміти концепцію організації даних і роботи з ними.
Програма представляє собою в кінцевому рахунку конкретні формулювання абстрактних алгоритмів, що базуються на конкретних представленнях і структурах даних. Зрозуміло, що рішення про структури даних які необхідно застосувати неможливо прийняти без знання алгоритмів, що застосовуються до цих даних, і навпаки, вибір алгоритмів суттєво залежить від вибраних структур даних. Отже, структури програм і структури даних нерозривно пов’язані.
В курсовій роботі спочатку розглядаються фундаментальні структури які складаються з простих даних. Вони представляють собою компоненти, з яких складаються більш складні структури. Змінні фундаментальної структури можуть змінювати тільки своє значення, зберігаючи незмінною свою форму. Таким чином, розмір пам’яті яку вони займають залишається постійним. Навпаки, ускладнені структури характеризуються зміною не тільки значення, але й форми під час виконання програми. Тому для їх реалізації необхідно застосовувати більш складні прийоми. Послідовний файл займає проміжне значення, оскільки хоча його довжина й змінюється, але ця зміна форми є тривіальною. Оскільки послідовний файл грає важливу роль практично у всіх обчислювальних системах, він буде розглядатись разом з фундаментальними структурами.
Метою курсової роботи є:
- систематизувати, закріпити і розширити теоретичні і практичні знання з програмування, навчитися застосовувати різноманітні структури даних та алгоритми при розв'язанні конкретних прикладних задач;
- отримати навики розробки більш складних програмних продуктів і оформлення програмної документації.
1. Теоретична частина
1.1. Задача на дослідження внутрішнього представлення даних в пам’яті комп’ютера.
1.1.1. Логічні типи
У середовищі програмування TurboPascal логічні типи представлені такими типами як Boolean, ByteBool, WordBool, LongBool. Значення, яких можуть набувати змінні логічного типу, позначаються вбудованими ідентифікаторами констант False і True.
У внутрішньому представленні змінні логічного типу мають певну надлишковість. У таблиці 2 наведено характеристики внутрішнього представлення логічних типів.
Таблиця 2. Вбудовані логічні типи даних
Ідентифікатор
Значенню FALSE відповідає
Значенню TRUE відповідає
Розмір пам’яті
Boolean
0
Довільне число відмінне від 0
1
ByteBool
0
1
WordBool
0 в 2-х байтах
2
LongBool
0 в 4-х байтах
4
Як видно з таблиці 2, якщо значення логічної змінної дорівнює TRUE, то в пам’яті зберігається довільне число відмінне від нуля, якщо ж логічна змінна набула значення FALSE, то у кожному байті, відведеному під зберігання змінної, записане значення 0.
1.1.2 Цілі типи
Середовище Turbo Pascal містить п’ять вбудованих цілочисельних типів:
Shortint
Integer
Longint
Byte
Word
Кожен з вище наведених типів має свою множину значень, які може набувати змінна даного типу. Ця множина залежить від внутрішнього представлення одного з цілих типів, тобто від кількості байт, що відводиться для зберігання змінних того чи іншого типів. У таблиці 1 подано розмір та діапазон представлення чисел цілих типів.
Всі без винятку числа цілих типів в пам’яті комп’ютера зберігаються побайтно у зворотному порядку. Додатні числа зберігаються у прямому, а від’ємні ( у доповняльному коді.
Інформацію про знак числа містить перший біт. Перший біт додатного числа дорівнює 0, а від’ємного ( 1. Нуль завжди має знак "+", тобто перший біт нульового числа дорівнює 0.
Таблиця 1. Вбудовані цілочисельні типи
Назва
Ідентифікатор
Діапазон
Розмір
Коротке ціле зі знаком
ShortInt
-128 … 127
1 байт
Ціле зі знаком
Integer
-32768 … 32767
2 байти
Довге ціле зі знаком
LongInt
-2147483648 … 2147483647
4 байти
Коротке ціле без знаку
Byte
0 … 255
1 байт
Ціле без знаку
Word
0 … 65535
2 байти
1.1.3 Дійсні типи
У середовищі програмування TurboPascal є п’ять вбудованих дійсних типів: Real, Single, Double, Extended і Comp. Дійсні типи відрізняються діапазоном представлення чисел, розміром пам’яті, а також точністю значень змінних цих типів. У таблиці 3 подано розмір та діапазон представлення чисел дійсних типів:
Таблиця 3. Вбудовані дійсні типи даних
Назва
Ідентифіка-тор
Діапазон
Розмір
Дійсне одинарної точності
Single
4 байти
Дійсний
Real
6 байт
Дійсний подвійної точності
Double
8 байт
Дійсне підвищеної точності
Extended
10 байт
Ціле в формі дійсного
Comp
8 байт
Зберігаються дійсні числа у зворотному порядку розміщення байтів.
Кожний з дійсних типів має власний внутрішній формат представлення. Нижче розглянуто внутрішній формат кожного з дійсних типів.
Тип Single
s
E
1 біт
8 біт
23 біта
За умовний нуль приймається значення .
У даній і наведених нижче схемах внутрішнього представлення дійсних чисел введено такі позначення: - знак числа (+ або -); - мантиса; - експонента.
Тип Real
s
e
1 біт
39 біт
8 біт
За умовний нуль приймається значення .
Тип Double
s
E
1 біт
11 біт
52 біта
За умовний нуль приймається значення .
Тип Extended
S
E
i
1 біт
15 біт
1 біт
63 біта
За умовний нуль приймається значення . Поле i дорівнює 0, якщо число є близьке до нуля, в протилежному випадку - 1.
Тип Comp
S
1 біт
63 біта
Число, представлене у даному форматі , де - двійкове доповнення 63 бітного значення (тобто число зберігається у доповняльному коді).
1.2. Задача на сортування. Сортування вставкою.
Нехай нам задані деякі елементи а1, а2, а3, ..., аn. Сортуванням називається перестановка цих елементів в такому порядку :
ак1, ак2,ак3, ...,акn , що при заданій функції впорядкування f справедливе буде відношення:
f(ak1)≤ f(ak2)≤ f(ak3)≤ … ≤ f(akn).
Сортування вставкою відноситься до простих методів сортування.
Алгоритм: Елементи поділяють умовно на готову послідовність та вхідну. На кожному кроці починаючи з і=2 і збільшуючи і на 1 одиницю беруть і-ий елемент елемент вхідної послідовності та передають у готову послідовність вставляючи його на відповідне місце.
Розглянемо дію цього методу на прикладі деякої послідовності з 10 чисел:
32 \/ 56 75 12 -65 50 24 -33 93 52
32 56 \/ 75 12 -65 50 24 -33 93 52
32 56 75 \/ 12 -65 50 24 -33 93 52
12 32 56 75 \/ -65 50 24 -33 93 52
-65 12 32 56 75 \/ 50 24 -33 93 52
-65 12 32 50 56 75 \/ 24 -33 93 52
-65 12 24 32 50 56 75 \/ -33 93 52
-65 -33 12 24 32 50 56 75 \/ 93 52
-65 -33 12 24 32 50 56 75 93 \/ 52
-65 -33 12 24 32 50 52 56 75 93
Ефективність методу сортування визначається за допомогою підрахунку кількості пересилок елементів – М та порівнянь ключів – С:
Сmin = n-1; Mmin = 2(n-1) – при введенні вже відсортованої послідовності.
Cmax = ½*(n^2+n)-1; Mmax = ½*(n^2+3n-4) – при введенні послідовності відсортованої навпаки.
Ссер = ¼(n^2+3n-4); Mcep = ¼(n^2+7n-8) – загальний випадок.
1.3. Задача про ханойські башні.
Розглянемо цю задачу на прикладі : Дані три стовпця – А, В, С. На стовпці А один на одному знаходяться чотири диска різного діаметру, причому вони розміщуються так що менший диск знаходиться на більшому:
А В С
Потрібно перемістити ці чотири диска на стовпець С, зберігши при цьому їх взаємо розміщення. Стовпець В дозволяється використовувати як допоміжний. За один хід дозволяється переміщувати тільки один із верхніх дисків довільного стовпця, причому не дозволяється диск більшого діаметру класти на диск меншого діаметру.
Для розв’язання поставленої задачі розглянемо біль загальний випадок для n дисків. Якщо ми зможемо сформулювати алгоритм для n дисків в термінах розв’язку для n-1 диску, то поставлена задача буде розв’язана для n-1 диска в термінах n-2 дисків і т.д. А для одного диска (n=1) рішення получається елементарним. Потрібно просто перемістити один-єдиний диск зі стовпця А на стовпець С.
Розглянемо словесний алгоритм рішення задачі:
If n=1
(then)
1. Перемістити цей єдиний диск зі стовпця А на стовпець С і зупинитися.
(else)
Перемістити верхні n-1 диск зі стовпця А на стовпець В використовуючи також стовпець С як допоміжний.
Перемістити останній нижній (найбільший) диск зі стовпця А настовпець С.
Перемістити n-1 диск зі стовпця В на стовпець С, використовуючи стовпець А як допоміжний.
Дану задачу я реалізував на базі списків.
Представлення з допомогою списків – це найефективніше представлення, коли мова йде про включення і вилучення елементів. Масиви вимагають зсуву вниз (вверх) кожногоелемента відносно індексу елемента що включається (вилучається). Файли взагалі потрібно повністю переписувати.
Список – така структура даних, в якій нові елементи можуть додаватись в будь-яке місце і вилучатись з будь-якого місця. Список називається лілійним, тому що всі елементи розташовані „на одній лінії”, тобто можна вказати, який елемент стоїть перед чи після даного.
Існують два варіанти розподілу елементів у списку:
послідовний розподіл;
зв’язний розподіл.
Послідовний розподіл – найпростіший спосіб зберігання списку в пам’яті, при якому один елемент знаходиться одразу після іншого у послідовних комірках.
При зв’язному розподілі елементи не обов’язково знаходяться один за одним, але кожен елемент списку, крім самого значення, містить ще й зв’язок з наступним елементом.
Переваги послідовного розподілу:
Не потребує додаткової пам’яті для розміщення зв’язків.
Швидше виконується звертання до довільного елемента списку.
Переваги зв’язного розподілу:
Простіше виконуються операції додавання та вилучення елементів зі списку.
Простіше організуються об’єднання двох або декількох списків в один чи розбиття одного списку на декілька.
Застосовується для організації більш складних структур. Наприлад для змінної кількості списків, змінних розділів.
Графічно зв’язні списки можна зобразити наступним чином:
Також серед списків розрізняють двозв’язні, циклічні списки, мультисписки і т.д.
2. Опис алгоритму
2.1. Задача на дослідження внутрішнього представлення даних в пам’яті комп’ютера.
Під кожний тип Turbo Pascal в оперативній пам’яті виділяється певна кількість байт, в які записуються дані того чи іншого типу представлені у двійковій системі числення. Алгоритм полягає в тому, що треба накласти на цю виділену під тип память масив байт. Кількість байт масиву залежить від типу, який розглядається. Ввести значення певного типу і вивевти результат, тобто накладений масив. Результат виводиться у шіснідцятковій системі числення кращого сприйняття.
Тип Integer
Під тип відводиться 2 байти пам’яті , 16 біт.
Тип Single.
Під тип відводиться 4 байти пам’яті. Старший біт зліва від крапки , в пам’яті машини для даних типа real , single , double цей біт не зберігається , а є „прихованим” і використовується для збільшення порядку в форматах single або для збереження знаку в форматі real.
Тип Single
s
e
1
8 біт
23 біта
За умовний нуль приймається значення .
У даній і наведених нижче схемах внутрішнього представлення дійсних чисел введено такі позначення: - знак числа (+ або -); - мантиса; - експонента.
3. Тип Boolean.
У середовищі програмування TurboPascal логічні типи представлені таким типом як Boolean. Значення, якого можуть набувати змінні логічного типу, позначаються вбудованими ідентифікаторами констант False і True.
У внутрішньому представленні змінна логічного типу має певну надлишковість. У таблиці 2 наведено характеристики внутрішнього представлення даного логічного типу.
Таблиця 2. Вбудовані логічні типи даних
Ідентифікатор
Значенню FALSE відповідає
Значенню TRUE відповідає
Розмір пам’яті
Boolean
0
Довільне число відмінне від 0
1
байт
Як видно з таблиці 2, якщо значення логічної змінної дорівнює TRUE, то в пам’яті зберігається довільне число відмінне від нуля, якщо ж логічна змінна набула значення FALSE, то у кожному байті, відведеному під зберігання змінної, записане значення 0.
Основні процедури які використовуються у виконанні завдання:
procedure perevid(x:byte; var y:string); {перевід змінної типу byte у війкову систему числення}
var
i:integer;
begin
y:=' ';
for i:=8 downto 1 do begin
if x mod 2=1 then y[i]:='1' else y[i]:='0';
x:=x div 2;
end;
writeln(y);
end;
{Процедура переводу війкового числа записаного у стрічці у десяткову систему}
procedure ZdvVdec(x:string;var y:longint);
var i,pow:integer;
begin
pow:=1;
for i:=length(x) downto 1 do begin
if x[i]='1' then y:=y+pow;
pow:=pow*2;
end;
end;
y:=’’
i:=8
ні
i:=i-1
так
ні
так
Рис 2.1.1. Блок-схема процедури переводу змінної типу byte у двійкову систему числення.
ні
так
ні
так
Рис 2.1.2. Блок-схема процедури переводу двійкового числа записаного у стрічці у десяткову систему.
2.2 Задача на сортування. Метод сортування вставкою.
Алгоритм даного сортування: Елементи поділяють умовно на готову послідовність та вхідну. На кожному кроці починаючи з і=2 і збільшуючи і на 1 одиницю беруть і-ий елемент елемент вхідної послідовності та передають у готову послідовність вставляючи його на відповідне місце.
Опис алгоритму виконання такої процедури:
procedure InsertionSort(var a:VectType);
var i,j,k:integer;
x:KeyType;
begin
for i:=2 to n do begin
x:=a[i];
j:=1;
while x>a[j] do
j:=j+1;
for k:=i-1 downto j do
a[k+1]:=a[k];
a[j]:=x;
end;
end;
Рис 2.2. Блок-схема процедури сортування вставкою.
2.3. Задача про ханойські вежі.
Розглянемо словесний алгоритм рішення задачі:
If n=1
(then)
1. Перемістити цей єдиний диск зі стовпця А на стовпець С і зупинитися.
(else)
Перемістити верхні n-1 диск зі стовпця А на стовпець В використовуючи також стовпець С як допоміжний.
Перемістити останній нижній (найбільший) диск зі стовпця А настовпець С.
Перемістити n-1 диск зі стовпця В на стовпець С, використовуючи стовпець А як допоміжний
Тексти програм
3.1 Текст завдання 1 знаходиться у розд. Додатки на ст., а також за шляхом a:\kyrsova\1\1chast.pas
3.2 Текст завдaння 2 знаходиться у розд. Додатки на ст., а також за шляхом a:\kyrsova\2\2chast.pas
3.3 Текст завдaння 3 знаходиться у розд. Додатки на ст., а також за шляхом a:\kyrsova\3\3chast.pas
4. Тестування
4.1. Задача на дослідження внутрішнього представлення даних в пам’яті комп’ютера.
4.1.1. Логічний тип.
Досліджуємо, як в пам’яті комп’ютера представляється змінна типу boolean b1 = true.
Оскільки даний тип займає у пам’яті 1 байт, то змінна b1 представляється наступним чином:
0000 00012 (= 0116)
1 байт
ОР
01
РВП
01
ППК
0000 0001
4.1.2. Цілий тип.
Досліджуємо, як в пам’яті комп’ютера представляється змінна типу integer i4 = -12510.
Переводимо -12510 у 2-у систему числення (спочатку перевівши у 16-ву):
12510=7D16
7D16 = 0000 0000 0111 11012
-12510 = -7D16 = 1111 1111 1000 00112 (у доповняльному коді)
1-ий байт 2-ий байт
У пам’яті комп’ютера змінна i4 запишеться наступним чином:
1111 1111 1000 00112 =FF8316
1 байт
2 байт
ОР
FF
83
РВП
FF
83
ППК
1111 1111
1000 0011
4.1.3. Дійсний тип.
Досліджуємо, як в пам’яті комп’ютера представляється змінна типу single r2 = 1274,812510.
Переводимо 1274,812510 у 2-у систему числення (спочатку перевівши у 16-ву):
Перевід цілої частини:
127410=4FA16
Перевід дробової частини:
0,8125 х 16 = 13 (= D16)
0,812510 = 0,D16
1274,812510 = 4FA,D16 =
= 0100 1111 1010, 1101 0000 0000 0000 00002
Нормалізація результату:
0100 1111 1010, 1101 0000 0000 0000 0000 =
= 1,00 1111 1010 1101 0000 0000 0000 0000 ·210
Визначаємо зміщений порядок: 127 + 10 = 13710 = 8916 = 1000 10012
Знаковий розряд = 0.
Мантиса: 0011 1110 1011 0100 0000 0000
Загальний вигляд даного числа:
0100 0100 1001 1111 0101 1010 0000 0000
У пам’яті комп’ютера змінна r2 запишеться наступним чином:
0000 0000 0101 1010 1001 1111 0100 0100
(= 005A9F4416)
1 байт
2 байт
3 байт
4 байт
ОР
00
5A
9F
44
РВП
00
5A
9F
44
ППК
0000 0000
0101 1010
1001 1111
0100 0100
4.2. Задача на сортування. Метод сортування вставкою.
Розглянемо довільну послідовність цілих чисел:
-2 -1 4 23 245 32 2 1004 2323 23 –25
Сортування відбуватиметься так:
-2 -1 4 23 245 32 2 1004 2323 23 –25
-2 -1 4 23 245 32 2 1004 2323 23 –25
-2 -1 4 23 245 32 2 1004 2323 23 –25
-2 -1 4 23 245 32 2 1004 2323 23 –25
-2 -1 4 23 32 245 2 1004 2323 23 –25
-2 -1 2 4 23 32 245 1004 2323 23 –25
-2 -1 2 4 23 32 245 1004 2323 23 –25
-2 -1 2 4 23 32 245 1004 2323 23 –25
-2 -1 2 4 23 23 32 245 1004 2323 –25
-25 -2 -1 2 4 23 23 32 245 1004 2323
Кількість проходів рівна на одиницю меншою від кількості чисел у вхідному ряді. Згідно алгоритму результат сортування буде таким:
ОР
–25
-2
-1
2
4
23
(1)
23
(2)
32
245
1004
2323
РВП
–25
-2
-1
2
4
23
(1)
23
(2)
32
245
1004
2323
Дослідження методу на стійкість.
Оскільки елементи з однаковими ключами не міняються місцями після сортування, то даний метод є стійким. Стійкість методу випливає з властивості черг “перший зайшов-перший вийшов”. Черга не може поміняти елементи місцями.
( Обмеження методу.
Оскільки тип елементів послідовності INTEGER, то обмеження полягає по типу. Мінімальне число, яке ще буде сортуватися є –32768, а максимальне 32767. Щоб відсортувати числа, які не входять в діапазон представлення типу INTEGER достатньо поміняти тип елементів на LONGINT чи інший, розрядна сітка якого давала б можливість представити ці числа.
4.3. . Задача про Ханойські вежі.
Рузультат виконання програми:
Введіть число дисків: 4
Послідовність інструкцій:
Переставити диск 1 зі стовпця А на стовпець В
Переставити диск 2 зі стовпця А на стовпець С
Переставити диск 1 зі стовпця В на стовпець С
Переставити диск 3 зі стовпця А на стовпець В
Переставити диск 1 зі стовпця С на стовпець А
Переставити диск 2 зі стовпця С на стовпець В
Переставити диск 1 зі стовпця А на стовпець В
Переставити диск 4 зі стовпця А на стовпець С
Переставити диск 1 зі стовпця В на стовпець С
Переставити диск 2 зі стовпця В на стовпець А
Переставити диск 1 зі стовпця С на стовпець А
Переставити диск 3 зі стовпця В на стовпець С
Переставити диск 1 зі стовпця А на стовпець В
Переставити диск 2 зі стовпця А на стовпець С
Переставити диск 1 зі стовпця В на стовпець С
Висновки
За допомогою курсової роботи вдалося закріпити знання з програмування та основ алгоритмізації. Розглянуто деякі алгоритми сортування,дослідженно представлення даних у пам’яті комп’ютера. Вдалося дізнатися про різні структури даних і зрозуміти алгоритми, які будуються на їх основі. Курсова робота дала можливість практично засвоїти теоретичні знання.
Додатки
{Тестуючи програма}
Program kyrsova;
uses
crt,
zavd1,
zavd2,
zavd3;
var
selecttask:char;
procedure integ;
var
a:integer;
k1,k2,y:longint;
b:array[1..2] of byte absolute a;
c1,c2,c3:string;
begin
clrscr;
writeln('-----------------------------------');
writeln('Vvedit integer type');
read(a);
c1:=' ';c2:=' ';
perevid (b[1],c1);
perevid (b[2],c2);
c3:=' ';
c3:=c2+c1;
if c3[1]='0' then begin
k1:=0;
ZdvVdec(c3,k1);
writeln(k1);
readln;
end
else begin
k2:=0;
c3[1]:='0';
ZdvVdec(c3,k2);
k2:=0-(32768-k2);
writeln(k2);
readln
end;
end;
procedure bool;
var
bn: boolean;
c: byte absolute bn;
l: string;
n: longint ;
s: integer;
begin
clrscr;
writeln('-----------------------------------');
writeln(' Type BOOLEAN ');
writeln(' Vvedit -- ne 0 - true, 0 - false ');
readln(s);
if s=0 then bn:=false
else bn:=true;
l:=' ';
perevid(c,l);
n:=0;
ZdvVdec(l,n);
writeln(n);
if n=0 then writeln('bn=FALSE')
else writeln('bn=TRUE');
readln;
end;
procedure sin;
var a,x:single;
b:array[1..4]of byte absolute a;
s:array[1..4] of string;
i,l_Man:integer;
st,zn,por,man,manS:string;
porC,ManC:longint;
manC_R:real;
begin
st:=''; zn:='';por:='';man:='';porC:=0;manC_r:=0;mans:='';
manc:=0;l_man:=0;a:=0;x:=0;
writeln('Vveditj single->'); readln(a);
for i:=1 to n do
s[5-i]:='';
for i:=1 to n do
Perev(b[i],s[5-i]);
for i:=1 to n do
st:=st+s[i];
st:=copy(st,1,32);
writeln(st);
zn:=st[1];
por:=copy(st,2,8);
man:=copy(st,10,23);
Dvijka(por,porC);
Drib(man,manC_r);
str(manC,mans);
l_Man:=length(mans);
writeln(zn,'^',por,'^',man);
if zn='1' then x:=-1 else x:=1;
x:=x*exp((porC-127)*ln(2))*(manC_r+1);
writeln('x->',x:1:8);
readln;
end;
procedure zvern2;
var
Vector: VectType;
i:1..n;
begin
for i:=1 to n do begin
write('Vvedit a[',i,']= ');
readln(Vector[i]);
end;
InsertionSort(vector);
readln;
end;
procedure vuk3;
var
a,b,c:char;
n:integer;
begin
clrscr;
Write('vvedit kilkist duskiv- n -> ');readln(n);
a:='A';b:='B';c:='C';
move(n,A,B,C);
readln;
end;
procedure zav1;
var
ch:char;
begin
while ch<>'4' do begin
clrscr;
Writeln('pres 1 for INTEGER -> ....');
Writeln('pres 2 for Boolean -> ....');
Writeln('pres 3 for Single -> ....');
Writeln('pres 4 for Quit -> ....');
read(ch);
if ch='1' then begin integ; readln;end;
if ch='2' then bool;
if ch='3' then sin;
end;
end;
procedure taskselect;
begin
clrscr;
writeln(' SELECT TASK');
writeln;
writeln('press "1" for TASK 1...');
writeln('press "2" for TASK 2...');
writeln('press "3" for TASK 3...');
writeln;
writeln('press "4" to quit...');
write('Your select : ');
readln(selecttask);
case selecttask of
'1' : zav1;
'2' : zvern2;
'3' : vuk3;
'4' : halt;
end;
end;
begin
clrscr;
writeln;
writeln;
writeln(' project made by:');
writeln;
writeln(' Yarychenko Vitaliy');
writeln(' KI-13 ');
writeln(' IKTAM');
writeln;
writeln(' press any key to continue...');
readkey;
while selecttask<>'4' do begin
clrscr;
taskselect;
end;
clrscr;
writeln;
writeln(' END OF PROJECT.');
writeln;
writeln(' project made by:');
writeln;
writeln(' Yarychenko Vitaliy');
writeln(' KI-13 ');
writeln(' IKTAM');
writeln;
writeln(' press any key to quit');
readkey;
end.
{Модулі, які реалізують завдання 1,2,3}
1) unit zavd1;
interface
uses crt;
procedure perevid(x:byte; var y:string);
procedure ZdvVdec(x:string;var y:longint);
procedure Drib(SPoch:string; var SKin:real);
Procedure Dvijka(SPoch:string; var SKin:longint);
procedure Perev(t:longint; var SKin:string);
implementation
procedure perevid(x:byte; var y:string);
var
i:integer;
begin
y:=' ';
for i:=8 downto 1 do begin
if x mod 2=1 then y[i]:='1' else y[i]:='0';
x:=x div 2;
end;
writeln(y);
end;
procedure ZdvVdec(x:string;var y:longint);
var i,pow:integer;
begin
y:=0;
pow:=1;
for i:=length(x) downto 1 do begin
if x[i]='1' then y:=y+pow;
pow:=pow*2;
end;
end;
procedure Drib(SPoch:string; var SKin:real);
var i:integer;
begin
skin:=0;
for i:=1 to length(SPoch) do
if SPoch[i]='1' then SKin:=SKin+EXP(((-1)*i)*ln(2));
end;
Procedure Dvijka(SPoch:string; var SKin:longint);
var i:integer;
begin
skin:=0;
FOR I:=1 TO length(SPoch) DO begin
if SPoch[1+length(SPoch)-i]='1' then
Skin:=SKin+Round(Exp((i-1)*ln(2)));
end;
end;
procedure Perev(t:longint; var SKin:string);
var
j:integer;
k:string;
begin
skin:='';
for j:=1 to 8 do begin
if (t mod 2=1) then
SKin:='1'+SKin
else SKin:='0'+SKin;
t:=t div 2;
end;
end;
end.
2) unit zavd2;
interface
const n=10;
type
KeyType=integer;
VectType=array[1..n] of KeyType;
procedure InsertionSort(var a:VectType);
implementation
procedure InsertionSort(var a:VectType);
var i,j,k,s:integer;
x:KeyType;
begin
for i:=2 to n do begin
x:=a[i];
j:=1;
while x>a[j] do
j:=j+1;
for k:=i-1 downto j do
a[k+1]:=a[k];
a[j]:=x;
writeln;
for s:=1 to n do
write(a[s],' ');
end;
end;
end.
3) unit zavd3;
interface
uses crt;
type
infotype=integer;
procedure Move(n:integer; Source,dest,tmp:char);
implementation
procedure Move(n:integer; Source,dest,tmp:char);
begin
if n=1 then
write(' dusk 1-',source,'->',dest)
else begin
move(n-1,source,tmp,dest);
write(' dusk ',n,' - ',source,'->',dest);
move(n-1,tmp,dest,source);
end
end;
end.