А.П.Бондарев, В.П.Бєляєв, А.Я.Бенч, В.М.Гой, Н.І.Нестор, Р.В.Шиприкевич
ЛАБОРАТОРНИЙ ПРАКТИКУМ
З ДИСЦИПЛІНИ
“ОБЧИСЛЮВАЛЬНА ТЕХНІКА ТА ПРОГРАМУВАННЯ”
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИНАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ “ЛЬВІВСЬКА ПОЛІТЕХНІКА”
ЛАБОРАТОРНИЙ ПРАКТИКУМЗ ДИСЦИПЛІНИ
“ІНФОРМАТИКА ТА ОБЧИСЛЮВАЛЬНА ТЕХНІКА В РАДІОЕЛЕКТРОНІЦІ”для студентів напрямку „радіотехніка”
Затвердженона засіданні кафедри“Теоретична радіотехніка ірадіовимірювання”інституту телекомунікацій, радіоелектроніки та електронної техніки.Протокол №_ від __.__.____р.
Львів 2005
Лабораторний практикум з дисципліни “Обчислювальна техніка та програмування” для студентів радіотехнічного факультету./Укл. А.П.Бондарев, В.П.Бєляєв, А.Я.Бенч, В.М.Гой, Н.І.Нестор, Р.В.Шиприкевич.(Львів: ДУ”ЛП”,1996, ( 86с.
Відповідальний за випуск: Б.Ю.ВолочійРецензенти: кандидат технічних наук, доцент Р.Д.Грицьків, кандидат технічних наук, доцент Ю.В.Саноцький, кандидат технічних наук Л.Д.Шевченко.
Редактор:
ЗМІСТ.
ПЕРЕДМОВА 5
0. МЕТОДИЧНІ ВКАЗІВКИ ДО ОФОРМЛЕННЯ ЗВІТІВ З ЛАБОРАТОРНИХ РОБІТ 6
РОЗДІЛ І. БАЗОВІ СТРУКТУРИ АЛГОРИТМІВ 9
1. ЛАБОРАТОРНА РОБОТА №1
ПРОГРАМУВАННЯ ЛІНІЙНИХ АЛГОРИТМІВ 9
2. ЛАБОРАТОРНА РОБОТА №2
ПРОГРАМУВАННЯ АЛГОРИТМІВ З РОЗГАЛУЖЕННЯМ 13
3. ЛАБОРАТОРНА РОБОТА №3
ВВЕДЕННЯ(ВИВЕДЕННЯ ДАНИХ 17
РОЗДІЛ ІІ. ВИКОРИСТАННЯ ЧИСЛОВИХ І СИМВОЛЬНИХЗМІННИХ 23
4. ЛАБОРАТОРНА РОБОТА №4
ПЕРЕВЕДЕННЯ ЧИСЕЛ В ПОЗИЦІЙНІ СИСТЕМИЧИСЛЕННЯ 23
5. ЛАБОРАТОРНА РОБОТА №5
ПРОГРАМУВАННЯ ЕЛЕМЕНТАРНИХ ОПЕРАЦІЙ З КОМПЛЕКСНИМИ ЧИСЛАМИ 25
РОЗДІЛ ІІІ. ЦИКЛІЧНІ АЛГОРИТМИ 30
6. ЛАБОРАТОРНА РОБОТА №6
ТАБУЛЮВАННЯ ФУНКЦІЇ ОДНОГО АРГУМЕНТУ 30
7. ЛАБОРАТОРНА РОБОТА №7
ОБЧИСЛЕННЯ СУМ ФУНКЦІОНАЛЬНИХ РЯДІВ 34
8. ЛАБОРАТОРНА РОБОТА №8
ТАБУЛЮВАННЯ ФУНКЦІЇ, ЗАДАНОЇ РЯДОМ ФУР’Є 37
РОЗДІЛ ІV. ОБРОБКА І ВИКОРИСТАННЯ МАСИВІВ 42
9. ЛАБОРАТОРНА РОБОТА №9
СОРТУВАННЯ ДАНИХ 42
10. ЛАБОРАТОРНА РОБОТА №10
ДЕЯКІ ЗАДАЧІ МАТРИЧНОЇ АЛГЕБРИ 45
11. ЛАБОРАТОРНА РОБОТА №11
МАТРИЧНИЙ ОПИС РЕЗИСТИВНИХ СХЕМ 47
РОЗДІЛ V. МЕТОДИ КОМП’ЮТЕРНОЇ ГРАФІКИ 52
12. ЛАБОРАТОРНА РОБОТА №12
ПОБУДОВА ГРАФІЧНИХ ПОЗНАЧЕНЬ ЕЛЕМЕНТІВ РАДІОЕЛЕКТРОННИХ СХЕМ 52
13. ЛАБОРАТОРНА РОБОТА №13
ТОЧКОВІ ПЕРЕТВОРЕННЯ ЗОБРАЖЕНЬ У КОМП’ЮТЕРНІЙ ГРАФІЦІ 56
14. ЛАБОРАТОРНА РОБОТА №14
ПОБУДОВА ГРАФІКІВ ФУНКЦІЙ ОДНОГО АРГУМЕНТУ 60
РОЗДІЛ VІ. ДЕЯКІ МАТЕМАТИЧНІ МЕТОДИ 64
15. ЛАБОРАТОРНА РОБОТА №15
ОДНОМІРНА СТАТИСТИКА ТА ПІДГОТОВКА ГІСТОГРАМ 64
16. ЛАБОРАТОРНА РОБОТА №16
МЕТОДИ РОЗВ’ЯЗУВАННЯ НЕЛІНІЙНИХ РІВНЯНЬ 67
17. ЛАБОРАТОРНА РОБОТА №17
ЧИСЛОВЕ РОЗВ’ЯЗУВАННЯ ДИФЕРЕНЦІЙНИХ РІВНЯНЬ 72
ЛІТЕРАТУРА 76
ПЕРЕДМОВА.
Лабораторний практикум містить 17 лабораторних робіт з дисципліни “Обчислювальна техніка та програмування”, які відбивають десятирічний досвід проведення циклу лабораторних робіт з програмування .
Метою виконання лабораторних робіт є засвоєння студентами методики розробки програм та набуття практичних навиків програмування і використання типових методів обчислювальної математики.
Лабораторні роботи згруповані в шість розділів:
Базовi структури алгоритмів (роботи 1, 2, 3);
Числові та символьні змінні (4, 5);
Циклічні алгоритми (6, 7, 8);
Обробка та використання масивів (9, 10, 11);
Методи комп’ютерної графіки (12, 13, 14);
Деякі математичні методи (15, 16, 17).
Всі роботи мають наступну структуру: мета проведення роботи, теоретичні відомості, завдання та варіанти вихідних даних, приклад виконання роботи або методичні вказівки щодо її виконання.
В межах кожного розділу обсяг теоретичних відомостей зростає від роботи до роботи, а обсяг і детальність прикладів відповідно зменшуються. Абстрактність постановки задачі також зростає від перших робіт до останніх. Кожний розділ, крім першого, містить одну роботу із суто радіотехнічною спрямованістю і зв’язком із наступними дисциплінами, що повинно спонукати студентів до довгострокового збереження набутих навиків.
У методичних вказівках не наведено тривалості виконання лабораторних робіт, в середньому вона складає дві академічні години самостійної підготовки та дві(три години виконання у комп’ютерному класі.
Вклад авторів у розробку лабораторних робіт:
Бондарев Андрій Петрович ( роботи 0,3,5(13,15(17;
Бєляєв Віктор Павлович ( роботи 2,5,12,14;
Гой Віталій Миколайович ( роботи 1(4,8,11,12,16;
Нестор Наталія Ігорівна ( роботи 8,13,15;
Шиприкевич Роман Васильович ( роботи 1, 4.
МЕТОДИЧНІ ВКАЗІВКИ ДО ОФОРМЛЕННЯ ЗВІТІВ З ЛАБОРАТОРНИХ РОБІТ
Виконання завдань кожної роботи і звіти з них складаються з п’яти розділів, які спрощено відповідають етапам розробки програмної продукції, що зафіксовані Єдиною системою програмної документації.
Перший розділ - “постановка задачі” - містить повний опис взємодії програми з користувачем, а також опис методів обчислень. В цьому розділі необхідно перелічити вхідні дані програми, вказати, які значення та повідомлення будуть виводитись на друк або на екран, при необхідності подати ескіз полів виводу даних на екрані. При описі методів обчислень необхідно вивести кінцеві розрахункові формули або рівняння для обчислення результату, вказати рекомендовані методи розв’язку рівнянь. Необхідно також вказати критерій оптимізації розроблюваної програми (кількість виконуваних операцій, час виконання, обсяг використаної пам’яті, обсяг тексту програми) та шляхи досягнення оптимального рішення. Перший розділ обов’язково виконується природною мовою з використанням загальноприйнятих математичних (не програмних!) позначень.
В умовах промислового виготовлення програмної продукції постановка задачі є самостійним документом - технічним завданням на програмування.
Другий і третій розділи “розробка структури даних” та “розробка алгоритму” фіксують дві різні складові одного неподільного процесу розробки програми, а саме: відведення пам’яті для зберігання значень, необхідних при розрахунках (впровадження і позначення змінних) та встановлення порядку обробки цих значень.
Результати “розробки структури даних” фіксуються у вигляді таблиці:
Табл. 0.1. Структура даних.
Позначення в задачі
Ім’я в пограмі
Тип
Призначення
1
2
3
4
В колонку 1 заносяться позначення змінних, використані в першому розділі при математичному описі задачі, або ставиться прочерк, коли задача поставлена природною мовою. Колонка 2 містить імена змінних і заповнюється при виконанні 4-го розділу, оскільки імена залежать від обраної мови програмування. Для зменшення ймовірності похибок і полегшення розуміння програми необхідно вводити мнемонічні імена, написання яких або подібне до позначення, або натякає на призначення. В колонці 3 описується тип змінної (ціла, дійсна, символьна), необхідний для реалізації її призначення. Тип може уточнюватись в залежності від обраної мови програмування. Для структурованих змінних із однотипних елементів (масиви, стеки, файли) описується розмір, тип і границі індексу а також тип елементів. Індекси описуються також як окремі змінні. Для записів окремо описується тип і призначення кожного поля. Колонка 4 містить опис (по можливості природньою мовою), який пов’язує відповідну змінну з поставленою задачею (наприклад: номер рядку, n-ий член ряду, аргумент, запит оператору). Змінні, значення яких вводяться ззовні, або повідомляються користувачу чи іншій програмі, додатково позначаються як “вхідна” або “вихідна” відповідно. Результати “розробки алгоритму” подаються у вигляді блок-схеми алгоритму з використанням таких позначень:
Рис. 0.1. Умовні позначення для виконання блок-схем.
При складанні алгоритму необхідно додержуватися правил структурного програмування, тобто використовувати тільки стандартні керуючі структури: послідовність (Рис. 0.2); альтернатива (Рис. 0.3); цикли “поки”, “до” і з параметром (Рис. 0.4).
Рис. 0.2. Послідовність.
Рис. 0.3. Альтернатива.
Рис. 0.4. Цикли.
Кожна з описаних структур має один вхід і один вихід, що дозволяє об’єднувати їх в необхідній послідовності. Крім того, “дії”, вказані в кожній зі структур, можуть бути як операторами, так і керуючими структурами будь-якого типу. Така побудова алгоритму забезпечує краще розуміння послідовності дій, зменшення ймовірності помилки, зменшення кількості операторів безумовного переходу при написанні тексту програми.
При складанні алгоритму необхідно виконати такі вимоги:
виводити на екран вхідні дані безпосередньо після їх введення;
не модифікувати вхідні дані до завершення програми;
формувати значення результату в пам’яті ЕОМ (у відведених для цього змінних) і тільки по завершенні розрахунків виводити на друк;
визначати і позначати на блок-схемі контрольні точки, тобто місця, в яких зручно було б вставляти друк проміжних значень змінних при налагоджуванні програми.
У четвертому розділі - “запис тексту програми” – наводиться текст розробленої програми на мові Паскаль. Обов’язковою вимогою до текстів програм є наявність коментарів, які вказують початок та закінчення керуючих структур та функціональне призначення окремих команд програми. Коментарі описуються у фігурних дужках в Паскалі: {Це коментар}.
В записі тексту програми пропуски позначаються знаком (, цифри 0, 3, 5 перекреслюються, літери записуються шрифтом, який би виключав їх неоднозначне прочитання (наприклад: е, l; B, 8;1,I,T).
В тексті Паскаль-програми необхідно вводити різну кількість відступів від початку рядку для виділення дій, які відносяться до різних керуючих структур. Самі керуючі структури однозначно записуються за допомогою стандартних операторів мови Паскаль з використанням складеного оператору begin...end.
Текст кожної підпрограми (якщо вони використовуються) виділяється підзаголовком-коментарем.
Останній розділ - “налагодження та результати тестування” - оформлюється під час виконання лабораторної роботи. Розділ містить перелік помилок, виявлених під час трансляції та виконання програми з поданням виправленого варіанту, а також результати розрахунків тестових прикладів.
Тестових прикладів має бути мінімум два: наведений у завданні до роботи, та з іншими вхідними даними. Дані для тестів необхідно вибрати так, щоби були використані всі розгалуження блок-схеми.
В кінці звіту студенти записують декілька власних висновків, які вони зробили в процесі розробки, запису та виконання програми.
РОЗДІЛ І. БАЗОВІ СТРУКТУРИ АЛГОРИТМІВ.
ЛАБОРАТОРНА РОБОТА №1
ПРОГРАМУВАННЯ ЛІНІЙНИХ АЛГОРИТМІВ
Мета роботи: засвоїти методику програмування однієї з базових структур алгоритмів ( лінійної; засвоїти запис констант, змінних та операторів.
ПЕРЕЛІК ПИТАНЬ, ЯКІ НЕОБХІДНО ВИВЧИТИ.
Умовні позначення для виконання блок-схем алгоритмів.
Властивості лінійних алгоритмів.
Команди введення/виведення даних, присвоєння.
Поняття про алгоритмічні мови.
Запис констант, змінних та операторів: введення/виведення та присвоєння (обчислення). Типи даних: цілі, дійсні, символьні і т.д.
Пріоритети виконання операцій в операторі присвоєння. Застосування дужок “()” для зміни пріорітету виконання операцій.
Виправлення помилок та редагування тексту програми.
Запуск програми на виконання.
ЗАВДАННЯ.
Задано дві функції від двох змінних x, y. Необхідно скласти та перевірити блок-схему алгоритму, що обчислює значення цих функцій. За блок-схемою написати і виконати програму мовою програмування Pascal. Кількість запусків програми з різними початковими даними для x, y ( 3...5. Перед розробкою блок-схеми виконати спрощення заданих виразів та введення проміжних змінних для зменшення кількості математичних операцій. Спосіб введення даних ( введення з клавіатури, початкове присвоєння змінним, опис констант ( обирається студентом.
Варіанти завдань до лабораторної роботи наведено в Табл. 1.1.
Табл. 1.1. Варіанти завдань до лабораторної роботи №1.
№ варіанту
Вираз Z(x,y)
Вираз W(x,y)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
МЕТОДИЧНІ ВКАЗІВКИ ДО ВИКОНАННЯ РОБОТИ № 1.
Основна складність виконання роботи № 1 полягає у тому, що вбудовані можливості мови програмування дозволяють обчислювати не усі можливі математичні функції. Так, компілятор Turbo Pascal 7.0, який найчастіше використовується при вивченні Паскаля, дозволяє обчислити наступні математичні функції (у дужках наведено синтаксис кожної функції):
Abs(X) – обчислює модуль числа X;
ArcTan(X:Real) –обчислює арктангенс числа X, вираженого в радіанах;
Cos(X:Real) –обчислює косинус числа X, вираженого в радіанах;
Exp(X:Real) – підносить число e до степеня X;
Frac(X:Real) – виділяє дробову частину числа;
Int (X:Real) – виділяє цілу частину числа;
Ln (X:Real) – обчислює натуральний логарифм числа ;
Pi – значення числа ;
Sin(X:Real) –обчислює синус числа X, вираженого в радіанах;
Sqr(X) – обчислює квадрат числа X;
Sqr(X:Real) – обчислює квадратний корінь із числа X.
Перед виконанням роботи слід детально ознайомитись із математичними функціями, які дозволяє використовувати компілятор Паскаля. Для запису математичних функцій, не реалізованих у мові програмування, необхідно виразити їх через інші елементарні функції. Наприклад:,. Для піднесення до степеня використовують тотожність: ab=eb(ln(a). Зворотні тригонометричні функції виражають через арктангенс: , .
При написанні тексту програми треба використовувати коментарі: в якості коментарів у Паскалі використовують фігурні дужки {} . Для зміни пріорітету або при непевності в черговості виконання операцій EOM треба використовувати дужки “()”.
При розробці блок-схеми алгоритму необхідно передбачити наступну послідовність виконання операцій: введення (початкова ініціалізація), обчислення проміжних змінних, обчислення, виведення результатів обчислень. Допускається використання тільки стандартних елементів, передбачених для побудови блок-схеми.
ПРИКЛАД ВИКОНАННЯ ЗАВДАННЯ.
Далі у розділі 1.3 навдено типовий звіт про виконання роботи, який складається із усіх п’яти обов’язкових частин і може використовуватися студентами при оформленні звітів із лабораторних робіт.
Задано функції: Z(x,y)=arctg(((x(y)((x2(y2+2) і W(x,y)=. Скласти блок-схему алгоритму та програму, яка б обчислювала задані вирази для довільних x, y.
ПОСТАНОВКА ЗАДАЧІ.
Проаналізуємо дані.
Константи: 2,4 ( цілі числа, (=3.141592 ( дійсна;
Вхідні дані: змінні x,y( дійсні;
Вихідні дані: змінні Z, W( дійсні.
Спростимо вирази для зменшення кількості математичних операцій: a:=x(y; b:=a2, тоді Z:=arctg(((a)((b+2); W:=.
Ескіз формату введення/виведення даних:
Введіть значення x,y: 1, 3 <Enter>
Z= xxxxxxx W= xxxxxxx
РОЗРОБКА СТРУКТУРИ ДАНИХ.
Згідно проведеного аналізу здійснюється розробка структури даних, яка враховує вхідні/вихідні та проміжні змінні. Приклад розробки стуктури даних наведено в Табл. 1.2.
Табл. 1.2. Приклад розробки структури даних.
№п(п
Позначення
Ім’я(
Тип
Призначення, опис
1
x
x
Дійсна
Аргумент функції, вхідна
2
y
y
Дійсна
Аргумент функції, вхідна
3
Z
z
Дійсна
Значення функції, вихідна
4
W
w
Дійсна
Значення функції, вихідна
5
a
a
Дійсна
x(y
6
b
b
Дійсна
a2
7
(
Pi
дійсна константа
Число (
РОЗРОБКА БЛОК-СХЕМИ АЛГОРИТМУ.
Рис. 1.1. Приклад блок-схеми алгоритму.
ПЕРЕВІРКА БЛОК-СХЕМИ.
Нехай x=1; y=2, тоді, обчислюючи за блок схемою, отримаємо:
1) а=2; 3) Z=arctg(2(()/(4+2)=0.235494;
2) b=4; 4) W=
ЗАПИС ТЕКСТУ ПРОГРАМИ.
Program lab1; {Лаб. роб. №1}
var x,y,z,w:real;
begin
write(‘Введіть значення x, y’);
readln(x,y);
a:=x*y;b:=a*a;
z:=arctan(PI*a)((b+2);
w:=sqrt(4+b)(a;
writeln(‘z=‘,z,’ w=‘,w);
end.
ТЕСТУВАННЯ ТА НАЛАГОДЖЕННЯ.
В цьому розділі вказуються помилки, які були виявлені під час набору та тестування програми. Наводяться результати роботи програми для декількох різних x та y. Наприклад:
Помилка при виведенні даних. Щоб вивести дані згідно ескізу, необхідно замість writeln(z,w) записати writeln(‘z=‘,z,’ w=‘,w);
В результаті виконання програми отримано наступні результати:
Введіть значення x,y: 1,2 <Enter>
Z=.235494 W=.828427
Результати перевірки алгоритму та запуску програми співпадають.
ВИСНОВКИ.
Студенти наводять декілька власних висновків, які вони зробили в процесі розробки блок-схеми, запису та її виконання.
ЛАБОРАТОРНА РОБОТА №2
ПРОГРАМУВАННЯ АЛГОРИТМІВ З РОЗГАЛУЖЕННЯМ
Мета роботи: засвоїти методику програмування однієї з базових структур алгоритмів ( розгалуженої; засвоїти запис констант, змінних та операторів.
ПЕРЕЛІК ПИТАНЬ, ЯКІ НЕОБХІДНО ВИВЧИТИ.
Умовний та безумовний перехід.
Операції відношення, вирази логічного типу.
Логічні функції “НЕ”, “АБО”, “І”.
Властивості алгоритму з розгалуженням.
Запис операторів умовного та безумовного переходів.
Запис операторів багатоваріантного вибору.
Виконання операторів IF...THEN...ELSE.
Порядок виконання дій при перевірці умови.
Символьні змінні та дії над ними.
ЗАВДАННЯ.
Дано умову Р і дві функції від двох змінних Z(x,y) та W(x,y).
Необхідно написати та перевірити блок-схему обчислення значення змінної Q за таким алгоритмом: якщо умова Р виконується, то Q=Z(x,y) інакше Q=W(x,y). Вивести на екран відповідне повідомлення:”Умова Р (не) виконується” та значення змінної Q. За розробленою блок-схемою написати та виконати програму. Перед розробкою блок-схеми виконати спрощення заданих виразів та введення проміжних змінних для зменшення кількості математичних операцій. Спосіб введення даних ( з клавіатури, початкове присвоєння змінним, опис констант (Pascal) ( обирається студентом. Варіанти умов до лабораторної роботи наведено в Табл. 2.3, а варіанти функцій двох змінних наведено в Табл. 1.1 лабораторної роботи №1.
Табл. 2.3. Варіанти завдань до лабораторної роботи.
Варіант
Умова Р
Варіант
Умова Р
Варіант
Умова Р
1
–10<x(2
–2<y<1
8
(5(x<4
y>0
15
2<ex(4
y(0
2
–1(x(5
–((2(y(((2
9
x<0
2(y+1(0
16
0<|x|<1
2<|y3|<x
3
–10<x(2
–2<y<1
10
x<0
2(y+>0
17
x2>y3
y(0.01
4
–2(x<4
y(0
11
0<x(10
2(y+1=0
18
x(y(2
y3=8
5
x2(1(0
y>2
12
x<0
2y+1(0
19
2<log4(x)(3
1(sh(y)(3
6
(2<x(3
y(0
13
x+1(0
y+1=0
20
x(y(th(y)
-10(y(10
7
2(y(1(0
2(x+1=0
14
1<ln(x)<2
ey(0
ПРИКЛАД ВИКОНАННЯ ЗАВДАННЯ.
Задано вирази: Z(x,y)=arctg(((x(y)((x2(y2+2) і W(x,y)=. Умова Р: x2(y2( 4 і x<(1.
Скласти блок-схему алгоритму та програму, яка б обчислювала задані вирази для довільних x, y та виводила б повідомлення про виконання умови.
ПОСТАНОВКА ЗАДАЧІ.
Проаналізуємо дані.
Константи: 2,4,-1 ( цілі числа; (=3.141592 ( дійсне.
Вхідні дані: змінні x,y( дійсні.
Вихідні дані: змінні Z, W( дійсні; повідомлення: “Умова Р виконується” та “Умова Р не виконується”.
Для спрощення виразів і зменшення кількості математичних операцій впровадимо такі змінні: a:=x(y; b:=a2, тоді Z:=arctg(((a)((b+2); W:=; умова Р: b(4 і x<-1.
Ескіз формату введення/виведення даних:
Введіть значення x,y: 1, 3 <Enter>
Умова Р (не) виконується
Q= xxxxxxx
РОЗРОБКА СТРУКТУРИ ДАНИХ.
Згідно проведеного аналізу здійснюється розробка структури даних, яка враховує вхідні, вихідні та проміжні змінні. Приклад розробки стуктури даних наведено в Табл. 2.4.
Табл. 2.4. Приклад розробки структури даних.
№п(п
Позначення
Ім’я
Тип
Призначення, опис
1
x
x
дійсна
Аргумент функції, вхідна
2
y
y
дійсна
Аргумент функції, вхідна
3
Q
Q
дійсна
Значення функції, вихідна
4
a
a
дійсна
x(y
5
b
b
дійсна
a2
6
(
Pi
дійсна константа
Число (
7
(
t1
символьна
Повідомлення: “Умова Р”
8
(
t2
символьна
Повідомлення: “виконується”
РОЗРОБКА БЛОК-СХЕМИ АЛГОРИТМУ.
Блок-схеми алгоритму наведено на Рис. 2.1.
Рис. 2.1. Приклад блок-схеми алгоритму з розгалуженням.
ПЕРЕВІРКА БЛОК-СХЕМИ.
Перевірку блок-схеми треба виконати для випадків як виконання так і невиконання умови Р.
ЗАПИС ТЕКСТУ ПРОГРАМИ.
При написанні тексту програми особливу увагу треба зосередити на записі складної умови за допомогою логічних функцій. Для зміни пріорітету або при непевності в черговості виконання операцій EOM слід використовувати дужки “()”. Приклад тексту програми:
Program lab2; {Лаб. роб. №2}
const t1:string=‘Умова Р ’;
t2:string=‘виконується’;
var x,y,a,b,Q:real;
begin
write(‘Введіть значення x, y’);
readln(x,y);
a:=x*y;b:=a*a;
if (b<=4) AND (x<(1) then
begin
Q:=arctan(PI*a)((b+2);
writeln(t1,t2)
end
else
begin
Q:=sqrt(4+b)(a;
writeln(t1,’ не ’,t2)
end;
writeln(‘Q=‘,Q);
end.
ТЕСТУВАННЯ ТА НАЛАГОДЖЕННЯ.
В цьому розділі вказуються помилки, які були виявлені під час набору та тестування програми. Наводяться результати роботи програми для декількох різних x та y, таких що задовольняють та не задовольняють умову Р. Наприклад:
Введіть значення x,y: 1,2 <Enter>
Умова Р не виконується
Z=.235494 W=.828427
ВИСНОВКИ.
Студенти наводять декілька власних висновків, які вони зробили в процесі розробки блок-схеми, запису та її виконання.
ЛАБОРАТОРНА РОБОТА №3
ВВЕДЕННЯ ( ВИВЕДЕННЯ ДАНИХ
Мета роботи: виробити практичні навики застосування операторів введення ( виведення даних, доступу до файлів, керованого виведення.
ТЕОРЕТИЧНА ЧАСТИНА.
ВВЕДЕННЯ ДАНИХ.
Оператори введення даних заносять в комірки пам’яті значення, отримані від зовнішнього пристрою (клавіатура, файл, мишка тощо). Введення даних в Турбо-Паскалі, орієнтоване на файли, будемо називати “введення раніше підготованих даних”. У Турбо-Паскалі передбачена робота із трьома типами файлів: типізованими, не типізованими та текстовими. Для роботи із файлами необхідно оголосити змінні файлового типу. Наприклад:
var f1:file; {змінна для не типізованих файлів}
var f2: file of byte; {змінна для типізованих файлів – в даному випадку у файлі }
{зберігатимуться тільки змінні з типом byte}
var f3: text; {змінна для текстових файлів}
Для введення інформації використовуються дві процедури вигляду
Read(f, a1,a2,..,ak); Readln(f, a1,a2,..,ak);
де f-ім’я файлової зміної, а1,..ak- імена елементарних змінних.
Загальні правила застосування вище згаданих процедур до текстових файлів такі:
зчитуватись (вводитись) можуть тільки дані цілих, дійсних типів та типу char;
перед числами допустиме використання знаків “+”,”(“;
символьні значення подаються без апострофів;
значення відділяються одне від одного пропусками (одним чи більше);
Перед читанням значень необхідно під’єднати файлову змінну до певного файлу на зовнішньому носії та відкрити файл для читання (тобто встановити вказівник на початок файлу) :
Assign(f, ‘dani.dat’); Reset(f);
Після цього процедура Read(f, a1,a2,..,ak); читатиме дані з файлу, до якого під’єднана вказана в процедурі файлова змінна, і заноситиме значення в комірки з іменами а1,a2,..ak. Як тільки перелік змінних вичерпається, дія процедури Read закінчується. Після кожного зчитування вказівник в файлі пересувається до наступного значення. Спроба зчитати значення після закінчення файлу викличе помилку. Повторне зчитування записаних в файл значень можливо лише після виконання процедури Reset(f), яка переведе вказівник на початок файлу (нульовий елемент), або Seek(f,n), яка переведе вказівник на n-й елемент файлу. Остання поцедура може застосовуватись тільки до типізованих файлів створених користувачем, а не до текстових файлів. Після завершення операцій із файлом, його необхідно обов’язково закрити за допомогою процедури Close(f). Розглянемо приклад зчитування даних з файлу ‘dani.dat’:
Program Vvid;
var f:text; {текстовий файл }
a,b,c:byte;
Begin
Assing(f, ‘dani.dat’); {нехай файл dani.dat містить:1 2 3 4 5 6}
Reset(f); {відкриваємо файл для читання}
Read(f,a,b,c); {результат читання: a=1,b=2,c=3}
Read(f,a,b,c); {а тепер: a=4,b=5,c=6}
Reset(f); {перевести на початок}
Read(f,a,c); {результат читання: a=1,c=2}
Read(f,a,b,c); {тепер a=3,b=4,c=5}
Read(f,a,b); {a=6, читання b спричиняє помилку, адже ми досягнули}
{кінця файлу}
Close(f); {не забуваємо закрити файл !!!}
ЕND.
Оскільки в процедурі Read вказуються імена комірок, куди будуть заноситись дані, то цих імен стосуються всі застереження, що стосуються лівої частини оператора присвоєння - вони не можуть бути константами чи виразами. Якщо тип чергового значення в файлі вводу не відповідатиме типу змінної, яка зчитується, це також викличе помилку, як і присвоєння між несумісними типами.
Процедура Readln відрізняється від процедури Read тим, що після закінчення вводу значень у вказані змінні вказівник пересувається до відмітки “кінець рядка” (для текстових файлів), тобто значення між останім зчитаним і кінцем рядка ігноруються.
Введення раніше підготованих даних доцільно застосовувати для зчитування порівняно великих обсягів даних, які рідко змінюються при повторних виконаннях програми. Для занесення порівняно невеликої кількості часто змінюваних даних, а також для забезпечення діалогового режиму роботи ЕОМ використовується введення даних з клавіатури, а також константи (рідко змінювані дані). Для реалізації такого введення достатньо вказати ім’я зовнішнього файлу ‘con’ (консоль) в операторі під’єднання: Assign(f,’con’), або взагалі не вказувати ім’я файлової зміної в операторі вводу: Read(a,b,c). При виконанні такого оператора комп’ютер чекає, доки користувач набере відповідні значення (числового або символьного типів) або розділені пропусками декілька значень і тільки після натискання клавіши [Ввід] ([Enter]) ці значення будуть занесені у відповідні комірки пам’яті і робота програми відновиться.
Серйозною проблемою при організації введення даних є висока ймовірність помилкового скеровування значень у невідповідні комірки. Для зменшення ймовірності помилки рекомендується перед введенням з клавіатури виводити на екран повідомлення про кількість, тип та призначення даних, які вводятся.
Ще оперативнішим методом введення є введення одного символу, який не вимагає натиснення клавіши [Enter] після кожного значення, але дозволяє надавати значень тільки зміним типу char. Здійснюється ввід за допомогою функції Readkey (читай клавішу). Функція ReadKey розташована у модулі Crt, тому перед її використанням необхідно приєднати згаданий модуль до програми. Наприклад:
Program Keyread;
uses crt; {приєднуємо модуль Crt}
var a,b,c: char;
Begin
a:=Readkey;
b:=Readkey;
c:=Readkey;
END.
Ця програма не закінчится, доки користувач не натисне трьох клавіш. Якщо це були клавіші E, o, n- то змінні набудуть значень: a - ‘E’, b - ‘o’,c - ‘n’.
ВИВЕДЕННЯ ДАНИХ.
Оператори виведення призначені для пересилання значень на зовнішні пристрої. Особливістю персональних ЕОМ є уніфікація процедури звертання до зовнішніх пристроїв (дисплею, принтера, модема, дисковода) і до файлів, тому достатньо розглянути процедури виведення даних у файл, які мають вигляд:
Write(f,P1,P2,..Pk); Writeln(f,P1,P2,..Pk);
де f-ім’я файлової зміної, P1...Pk- вирази, значення яких будуть виводитись. Не допускається (для текстових файлів) виведеня значень типу множина та структурованих типів крім типу string. Перед виведеням даних необхідно зв’язати файлову змінну із зовнішнім файлом або пристроєм за допомогою процедури Assign та встановити оператором Append(f) вказівник на кінець файлу (тоді існуючий файл буде доповнюватись новими даними), чи оператором Rewrite(f) ( на початок файлу (дані в існуючому файлі будуть знищені і замінені новими даними).
Процедура Write виводить значення виразів P1...Pk в файл f одне за одним, без пропуcків, а поцедура Writeln додатково виводить ознаку кінця рядка після останього значення. Частковим випадком використовуваних в переліках виразів можуть бути окремі імена зміних, поіменовані або непоіменовані константи.
Мова Паскаль передбачає можливість форматувати дані, які виводятся, тобто вказувати кількість знакомісць, відведених для кожного значення. Для цього в переліку виведення наводятся значення у вигляді P:n (а дійсні значення - P:n:m), де n-кількість знакоміць, m-кількість знаків після десяткової крапки. Якщо значення займає менше знакомісць, ніж m, то воно доповнюється зліва пропусками, а якщо більше - то обмеження кількості закомісць ігнорується. Якщо для дійсного числа вказані параметри m і n, то воно подається з фіксованою комою. В Табл. 3.1 наведені результати виконання деяких операторів виведення даних.
Табл. 3.1. Приклад виконання деяких операторів форматованого виведення даних.
Оператор
Результат(
Write(3,–3,–51)
3–3–51
Write(3:4,–3:4,–51:4)
(((3((–3(–51
Write(3:1,–3:1,–51:1)
3–3–51
Write(‘Z’,’Z’)
ZZ
Write(‘Z’:2,’Z’:5)
(Z((((Z
Write(3:1,’,’,–5:1)
3,–5
Write(‘Pi=’:8,Pi:8)
(((((Pi=(3.1E+00
Write(‘Pi=’:2,Pi:8:5)
Pi=(3.14159
Для виведення даних на екран дисплею необхідно пов’язати призначену для виведення файлову змінну з консоллю процедурою Assing(f,’con’), або взагалі не вказувати файлової зміної в операторі виведення. При виведені даних на екран дисплею треба зважати на його обмежені розміри (80 знакоміць по горизонталі та 25 по вертикалі) і планувати зручне для користувача розташування даних на екрані ще до написання програми. Для реалізації скерованого виведення даних на екран мова ТурбоПаскаль містить спеціальні процедури:
Window(X1,Y1,X2,Y2:byte)–визначає текстове вікно на екрані. Координати лівого верхнього кута X1,Y1 , а правого нижнього–X2,Y2. Весь екран можна описати як вікно Window(1,1,80,25).
TextBackGround(c:byte)– визначає колір фону.
ClrScr– очищає вікно, тобто заповнює його фоновим кольором.
TextColor(c:byte)– визначає колір символів.
GotoXY(x,y:byte)–позиціонує курсор у знакомісці, зсуненому на x вправо та на y вниз від лівого верхнього кута вікна. Виведення даних здійснюватимется починаючи зі знакомісця, в якому розташований курсор.
Наведені процедури забезпечують виведення різнокольорових повідомлень у кольорових вікнах. Ці процедури містятся у модулі Crt, тому для їх використання необхідно помістити стрічку Uses Crt в описовій частині програми.
ЗАВДАННЯ.
Скласти блок-схему алгоритму, за блок-схемою написати і виконати програму на мові програмування Pascal, що виконує такі дії:
Введення з клавіатури таких даних: назва групи; номер варіанту; прізвище, ім’я, по батькові; задані числові дані.
Виведення даних в текстовий файл.
Після натиснення будь-якої клавіші зчитати дані з файлу.
Вивести їх на дисплей у вікно у відповідності з заданими координатами, кольором фону та літер.
Додаткове завдання: числові дані зберігати в типізованому файлі, а відтак зчитувати з нього; номер варіанту вивести в передостанній рядок вікна, так щоб він миготів.
Варіанти завдань наведені в Табл. 3.2.
Табл. 3.2. Варіанти завдань до лабораторної роботи.
№
Числові дані
Формат
Вікно
вар.
виведення
координати
колір
всього(дроб.
(знакомісць)
x1,y1,x2,y2
фону
літер
1
5.141, 1.123E-3, 0.02
8/1
0,0,40,10
черв.
синій
2
2.71, 9.14E-3, 108.002
9/2
3
23.895, 1.394E4, 999.023
10/3
4
458.26, 10.33E1, 932.158
8/4
5
4.67, 6.789E-1, 739.99
9/1
10,10,50,20
синій
зел.
6
7.34, 67.45E-2, 284.101
10/2
7
0.9006, 4.912E2, 1023.1
8/3
8
5.666, 42.33E-3, 567.03
9/4
9
3.234, 8.823E1, 402.34
10/1
40,10,80,20
черв.
чорн.
10
8.12, 56.33E-2, 478.91
8/2
11
5.924, 8.729E2, 1234.1
9/3
12
8.394, 12.1E-4, 54.67
10/4
13
2.193, 2.489E2, 0.003
8/1
0,10,40,20
чорн.
зел.
14
9.967, 8.23E2, 0.02002
9/2
15
5.233, 1.11E-1, 455.01
10/3
16
9.122, 2.222E2,1001.99
8/4
МЕТОДИЧНІ ВКАЗІВКИ ДО ЛАБОРАТОРНОЇ РОБОТИ.
ПОСТАНОВКА ЗАДАЧІ.
Одночасно з введенням даних з клавіатури здійснити паралельне їх виведення у файл, аналогічно здійснити введення даних з файлу та виведення їх у вікно. Прізвище, ім’я, побатькові вводити як один рядок. Номер варіанту вводити як рядок, наприклад: Варіат 5. Числові дані можна ввести не з клавіатури, а як типізовані константи.
В даному розділі звіту студент повинен навести аналіз даних, ескізи текстового файлу та виведення даних на дисплей. Приклад ескізу текстового файлу(вікна):
РТ-11[Enter]
Варіант 8[Enter]
Іваненко Іван Іванович[Enter]
2.647 15.200 9098.012[Enter]
РОЗРОБКА СТРУКТУРИ ДАНИХ.
Під час аналізу даних необхідно встановити кількість та тип необхідних змінних, а також ввести змінну типу текстовий файл. Приклад розробки структури даних наведено в Табл. 3.3.
Табл. 3.3. Приклад розробки структури даних.
Позначення
Імя
Тип
Призначення
Назва групи
S
рядок
Проміжна,
Номер варіанту
збереження
ПІП
рядка симв.
Числові дані
x1, x2, x3, x4
дійсна
Проміжні
Файл даних
f
текстовий
файл
Звязок з файлом
DATA.DAT
РОЗРОБКА АЛГОРИТМУ.
При розробці алгоритму треба передбачити наступну послідовність дій: призначити файловій змінній файл на диску; відкриття файлу на запис; введення з клавіатури та паралельне виведення даних у файл; відкриття файлу на читання; зчитування даних з файлу та паралельне виведення в задане вікно; закриття файлу. На Рис. 3.2 наведено спрощену блок-схему алгоритму.
Рис. 3.2. Спрощена блок-схема алгоритму.
Студенти повинні конкретизувати блок-схему стосовно операцій введення- виведення, та доповнити блоком введення одного символа.
РОЗРОБКА ПРОГРАМИ.
В процесі розробки програми особливу увагу необхідно надати:
ініціалізації файлової змінної та вірному використанню процедур роботи з файлами;
використанню операторів read/readln і write/writeln та різниці між ними;
операторам приєднання модулів;
оператору введення одного символа;
операторам ініціалізації вікна виведення, встановлення кольору фону та символів, очищення вікна.
Виводячи числові дані, між числами необхідно помістити символ пропуску. Для визначення кольорів фону та символів треба використовувати константи, визначені в модулі Crt, наведені в Табл. 3.4.
Табл. 3.4. Константи, визначені в модулі Crt для позначення кольорів символів та фону.
Колір
Символів і фону
Конст.
Символів
Конст.
Black
0
DarkGray
8
Blue
1
LightBlue
9
Green
2
LightGreen
10
Cyan
3
LightCyan
11
Red
4
LightRed
12
Magenta
5
LightMagenta
13
Brown
6
Yellow
14
LightGray
7
White
15
Blink
128
Приклади використанння відповідних операторів та стандартних процедур наведено в розділі 3.1.
ТЕСТУВАННЯ ТА НАЛАГОДЖЕННЯ.
У процесі тестування та налагодження студент у відповідному розділі вказує допущені помилки, та варіанти їх виправлення. Після виконання програми необхідно навести створений програмою файл та виведене на дисплей вікно.
Звіт закінчується висновками про файлову систему, оператори введення/виведення, зроблені студентом під час виконання лабораторної роботи.
РОЗДІЛ ІІ. ВИКОРИСТАННЯ ЧИСЛОВИХ І СИМВОЛЬНИХ ЗМІННИХ
ЛАБОРАТОРНА РОБОТА №4.
ПЕРЕВЕДЕННЯ ЧИСЕЛ В ПОЗИЦІЙНІ СИСТЕМИ ЧИСЛЕННЯ
Мета роботи: засвоєння поняття позиційної системи числення, методи переходу з однієї системи числення в іншу, набуття навиків програмування операцій переходу, закріплення навиків застосування циклів та символьних змінних.
ПЕРЕЛІК ПИТАНЬ, ЯКІ НЕОБХІДНО ВИВЧИТИ:
поняття про позиційні системи числення;
програмна реалізація циклічних структур;
логічні операції над числами;
операція зчеплення символьних змінних.
ЗАВДАННЯ.
Перевести натуральні десяткові числа X1, X2, X3 в їх двійкові еквіваленти заданим методом, згідно з номером варіанту (див. Табл. 4.1). Результат повинен бути одержаний у вигляді послідовності символів і збережений у символьній змінній.
Табл. 4.1. Варіанти завдань до лабораторної роботи №4.
Варіант
Метод
X1, X2, X3
Варіант
Метод
X1, X2, X3
1
віднімання
0,127,1012
9
віднімання
0,12,512
2
ділення
0,10,1023
10
ділення
0,17,254
3
маскування
0,9,255
11
маскування
0,20,126
4
віднімання
0,16,512
12
віднімання
0,64,1025
5
ділення
0,31,128
13
ділення
0,1,18
6
маскування
0,8,2049
14
маскування
0,4,2046
7
віднімання
0,129,1020
15
віднімання
0,7,15
8
ділення
0,1024,4096
16
ділення
0,11,19
МЕТОДИЧНІ ВКАЗІВКИ ДО РОБОТИ.
У загальному випадку будь-яке число A у позиційній системі числення можна відобразити числовим рядом:
(1)
де n - число знаків перед комою;
m - число знаків після коми;
ai - цифра в і-му розряді;
pi - вага i-го розряду.
У десятковій системі числення p=10, оскільки набір цифр складається з 10 цифр: {0,1,2,3,4,5,6,7,8,9}.
Двійкова система числення має набір цифр {0,1}, тому p=2. Будь-яке число A у двійковій системі числення можна подати виразом (1), який задає метод переведення з довільної системи числення в систему, в якій виконується розрахунок.
Наприклад: 101002= 1*24+0*23+1*22+0*21+0*20=2010
В лабораторній роботі студент реалізовує перехід в двійкову систему числення методом ділення, віднімання або маскування.
МЕТОДИ ПЕРЕВЕДЕННЯ В ДВІЙКОВУ СИСТЕМУ ЧИСЛЕННЯ.
МЕТОД ДІЛЕННЯ.
Загальним правилом переводу числа методом ділення є послідовне виконання таких операцій:
а) цілочисельне ділення заданого числа Ap на основу P тої системи, в яку переводиться дане число Ap, і фіксація частки та остачі.
б) якщо частка не рівна нулю, її треба взяти за нове число і повторити операцію п. а), інакше перейти до п. в)
в) виписати всі остачі у зворотньому порядку,починаючи з останньої і взяти їх за цифри шуканого числа an-1an-2...a1a0.
Наприклад: частка остача
20/2 10 0
10/2 5 0
5/2 2 1 2010=101002
2/2 1 0
1/2 0 1
МЕТОД ВІДНІМАННЯ.
Переведення методом віднімання полягає в наступному:
а) від заданого числа A віднімаємо вагу i-го розряду, де i - кількість знаків числа( .
б) якщо результат невід’ємний, то до шуканого результату зправа дописуємо одиницю, отримане число беремо за нове; інакше до результату дописуємо нуль, а задане число A залишаємо без змін.
в) якщо номер розряду i не рівний нулю, то зменшуємо його на 1 і переходимо до п. a).
Наприклад: 20(24=4 1
4(23=(4 0
4(22=0 1 2010=101002
0(21=(2 0
0(20=(1 0
МЕТОД МАСКУВАННЯ АБО ЛОГІЧНОГО МНОЖЕННЯ.
Метод призначений виключно для машинного виконання. Базується на тому, що на рівні процесора-обчислювача та пристроїв пам’яті комп’ютер оперує числами у двійковому поданні. І тільки при виведенні на екран, стандартні процедури виведення мови Pascal переводять числа в десяткову систему числення.
Для переводу числа треба скористатися такими правилами:
а) над заданим числом A і маскою M, яка дорівнює вазі i-го розряду, виконуємо операцію логічного множення - A&M, почавши з і=0.
б) якщо отримуємо нуль, то зліва дописуємо до значення результату “0”, інакше - “1”.
в) якщо номер і-го розряду менший за кількість розрядів заданого числа, то збільшуємо його на 1 і переходимо до п. а).
Наприклад:
задане число: в десятковій в пам’яті результат & двійкові
системі машини цифри
20 10100
маска при і=4 24 10000 16 1
і=3 23 01000 0 0
і=2 22 00100 4 1
і=1 21 00010 0 0
і=0 20 00001 0 0
2010=10100
ЛАБОРАТОРНА РОБОТА №5.
ПРОГРАМУВАННЯ ЕЛЕМЕНТАРНИХ ОПЕРАЦІЙ З КОМПЛЕКСНИМИ ЧИСЛАМИ.
МЕТА РОБОТИ: Засвоєння поняття комплексного числа, форм його подання, порядку виконання елементарних операцій з комплексними числами (додавання, віднімання, множення, ділення), набуття навиків програмування дій з комплексними числами, закріплення навиків застосування структурованих змінних.
ТЕОРЕТИЧНІ ВІДОМОСТІ.
ВІДОМОСТІ З МАТЕМАТИКИ.
Комплексне числення та теорія функцій комплексних змінних, які вивчаються студентами в курсі вищої математики, надзвичайно широко застосовуються при розв’язуванні радіотехнічних задач. Більш детально з питаннями застосування комплексного числення студенти будуть знайомитись в курсах “Основи теорії кіл”, “Радіотехнічні кола та сигнали”.
Комплексним називається число вигляду
Z = a + jb, (1)
де уявна одиниця (в математичних роботах уявну одиницю часто позначають літерою і), a=Re(Z) ( дійсна частина комплексного числа; b=Im(Z) ( уявна частина комплексного числа. Зображається комплексне число точкою на комплексній площині з координатами (а,b) або (Re(Z), Im(Z)) (Рис. 5.3). По осі абсцис прийнято відкладати значення дійсної частини комплексного числа, по осі ординат - уявної частини.
Рис. 5.3. Зображення комплексних чисел на площині.
Як видно з Рис. 5.3 комплексні числа можуть бути задані також радіус-вектором, проведеним з початку системи координат до точки, яка зображає комплексне число. Радіус-вектор характеризується довжиною і напрямом, який може бути заданий кутом нахилу радіус-вектора до дійсної осі. Стосовно до комплексних чисел довжину радіус-вектора називають модулем комплексного числа і позначають |Z|, Mod(Z) або просто Z. Кут ( має назву аргументу комплексного числа і позначається Arg(Z), ((Z) або інколи просто ( (в кожному випадку позначення не повинно давати можливості багатозначного трактув...