МІНІСТЕРСТВО ОСВІТИ І НАУКИ...

105
Міністерство освіти і науки України Чернігівський державний технологічний університет До друку дозволяю на підставі правил друкованих видань Проректор Ю.О.Крєпкий ПРОГРАМУВАННЯ ТА АЛГОРИТМІЧНІ МОВИ Методичні вказівки до виконання лабораторних робіт для студентів напряму підготовки 0908 ”Електроніка” по спеціальності 6.090803 “Електронні системи” Частина 1 Мова програмування “Turbo Pascal” Всі цитати, цифровий та Затверджено

Upload: dangthuy

Post on 28-Apr-2019

233 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

Міністерство освіти і науки УкраїниЧернігівський державний технологічний університет

До друку дозволяю на підставі правил друкованих видань

Проректор Ю.О.Крєпкий

ПРОГРАМУВАННЯ ТА АЛГОРИТМІЧНІ МОВИ

Методичні вказівки

до виконання лабораторних робіт для студентів напряму підготовки 0908 ”Електроніка” по спеціальності 6.090803 “Електронні системи”

Частина 1Мова програмування “Turbo Pascal”

Всі цитати, цифровий та

фактичний матеріал,

бібліографічні відомості

перевірені, запис одиниць

відповідає стандартам

Затвердженона засіданні кафедри

промислової електронікипротокол №5 від 19.01.07р.

ЧЕРНІГІВ ЧДТУ 2007

Page 2: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

Міністерство освіти і науки УкраїниЧернігівський державний технологічний університет

ПРОГРАМУВАННЯ ТА АЛГОРИТМІЧНІ МОВИ

Методичні вказівки

до виконання лабораторних робіт для студентів напряму підготовки 0908 ”Електроніка” по спеціальності 6.090803 “Електронні системи”

Частина 1Мова програмування “Turbo Pascal”

Page 3: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

ЧЕРНІГІВ ЧДТУ 2007Міністерство освіти і науки України

Чернігівський державний технологічний університет

ПРОГРАМУВАННЯ ТА АЛГОРИТМІЧНІ МОВИ

Методичні вказівки

до виконання лабораторних робіт для студентів напряму підготовки 0908 ”Електроніка” по спеціальності 6.090803 “Електронні системи”

Частина 1Мова програмування “Turbo Pascal”

Затвердженона засіданні кафедри

промислової електронікипротокол №5 від 19.01.07р.

Page 4: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

ЧЕРНІГІВ ЧДТУ 2007Програмування та алгоритмічні мови. Методичні вказівки до виконання лабораторних робіт для студентів напряму підготовки 0908 ”Електроніка” по спеціальності 6.090803 “Електронні системи”. Частина 1. Мова програмування “Turbo Pascal”/ Укл. Ревко А.С. –Чернігів: ЧДТУ, 2007. – 72с.

Укладач: Ревко Анатолій Сергійович, кандидат технічних наук

Відповідальний за випуск: Денисов Юрій Олександрович, завідувач кафедри промислової електроніки, кандидат технічних наук, доцент

Рецензент: Бивойно Павло Георгійович, кандидат технічних наук, доцент

Page 5: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

3

ЗМІСТ

ВСТУП.......................................................................................................................51 ЛАБОРАТОРНА РОБОТА №1. ОПЕРАТОРИ УМОВНОГО ПЕРЕХОДУ.....................................................................................................................................71.1 ТЕОРЕТИЧНІ ВІДОМОСТІ.........................................................................71.2 МЕТОДИЧНІ ВКАЗІВКИ...........................................................................141.3 КОНТРОЛЬНІ ЗАПИТАННЯ.....................................................................141.4 ВАРІАНТИ ЗАВДАНЬ................................................................................152 ЛАБОРАТОРНА РОБОТА №2. ОПЕРАТОРИ ЦИКЛІВ...........................202.1 ТЕОРЕТИЧНІ ВІДОМОСТІ.......................................................................202.2 МЕТОДИЧНІ ВКАЗІВКИ...........................................................................232.3 КОНТРОЛЬНІ ЗАПИТАННЯ.....................................................................232.4 ВАРІАНТИ ЗАВДАНЬ................................................................................243 ЛАБОРАТОРНА РОБОТА №3. РОБОТА ІЗ МАСИВАМИ ЧИСЕЛ.......283.1 ТЕОРЕТИЧНІ ВІДОМОСТІ.......................................................................283.2 МЕТОДИЧНІ ВКАЗІВКИ...........................................................................313.3 КОНТРОЛЬНІ ЗАПИТАННЯ.....................................................................313.4 ВАРІАНТИ ЗАВДАНЬ................................................................................324 ЛАБОРАТОРНА РОБОТА №4. ПРОГРАМУВАННЯ З ВИКОРИСТАННЯМ ПІДПРОГРАМ КОРИСТУВАЧА...............................354.1 ТЕОРЕТИЧНІ ВІДОМОСТІ.......................................................................354.2 МЕТОДИЧНІ ВКАЗІВКИ...........................................................................404.3 КОНТРОЛЬНІ ЗАПИТАННЯ.....................................................................404.4 ВАРІАНТИ ЗАВДАНЬ................................................................................415 ЛАБОРАТОРНА РОБОТА №5. ОБРОБКА СИМВОЛЬНИХ ДАНИХ.. .455.1 ТЕОРЕТИЧНІ ВІДОМОСТІ.......................................................................455.2 МЕТОДИЧНІ ВКАЗІВКИ...........................................................................495.3 КОНТРОЛЬНІ ЗАПИТАННЯ.....................................................................495.4 ВАРІАНТИ ЗАВДАНЬ................................................................................506 ЛАБОРАТОРНА РОБОТА №6. ОБРОБЛЕННЯ ФАЙЛОВИХ СТРУКТУР ДАНИХ, ВИКОРИСТАННЯ ЗАПИСІВ.....................................536.1 ТЕОРЕТИЧНІ ВІДОМОСТІ.......................................................................53

Page 6: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

46.2 МЕТОДИЧНІ ВКАЗІВКИ...........................................................................636.3 КОНТРОЛЬНІ ЗАПИТАННЯ.....................................................................636.4 ВАРІАНТИ ЗАВДАНЬ................................................................................63РЕКОМЕНДОВАНА ЛІТЕРАТУРА..................................................................66ДОДАТОК А – РОБОТА В СЕРЕДОВИЩІ TURBO (BORLAND) PASCAL...................................................................................................................................67Додаток Б – Приклад титульного листа звіту.................................................72

Page 7: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

5ВСТУП

Ці методичні вказівки призначені для студентів першого курсу за напрямом підготовки “Електроніка” (0908) по спеціальності “Електронні системи” (6.090803) денної форм навчання та слугують для допомоги студентам під час підготовки та виконання лабораторних робіт з дисциплін “Програмування та алгоритмічні мови” у першому семестрі при вивченні мови програмування “Turbo Pascal”.

Метою проведення лабораторних робіт є опанування алгоритмічної мови програмування "Turbo Pascal", набуття навичок в розробці алгоритмів методом по крокової деталізації на основі базових логічних структур, вивчення та освоєння основних методів та прийомів програмування, ознайомлення з процесом проходження завдань під час їх вирішення на ЕОМ, отримання практичних навичок роботи за комп’ютером по відлагодженню та тестуванню програм.

Цикл лабораторних робіт виконується протягом семестру і охоплює основні теми курсу "Програмування та алгоритмічні мови" першого семестру. Теоретичною основою для виконання лабораторних робіт є курс лекцій, теоретичні відомості на початку кожної лабораторної роботи даних методичних вказівок, практичні заняття та навчальна література.

Мова "Pascal" спеціально розроблювалась Н. Віртом як навчальна. Саме її доцільно використовувати як першу мову програмування, щоб навчитися програмуванню. Опанувавши цю мову, в подальшому без особливих зусиль можна самостійно перейти на будь-яку іншу мову програмування високого рівня. Незважаючи на початкове призначення мови "Pascal" як навчальної, її подальша реалізація фірмою Borland Inc у вигляді мови "Turbo Pascal" та "Object Pascal" дозволила піднятися на вищий щабель на рівні з провідними потужними мовами програмування такими, як "С", "Java" та ін. Сучасні реалізації цієї мови дають можливість проектувати різноманітні прикладні програми, від вирішення невеликих задач чисельного характеру до розробки складних програмних систем.

Мова відобразила найважливіші концепції технології розробки програм: розвинута система типів даних, орієнтація на принципи структурного програмування, підтримка процесу по крокової розробки.

Описи лабораторних робіт виконані по єдиній структурі та включають в себе мету роботи, короткі теоретичні відомості, методичні вказівки для підготовки до роботи та її виконання, індивідуальні завдання до лабораторної роботи, контрольні запитання для підготування до захисту роботи. Тематика лабораторних робіт охоплює практично всі основні типи даних та основні оператори мови "Turbo Pascal".

Для допущення до виконання лабораторної роботи студенту необхідно підготувати заздалегідь план виконання роботи, який повинен включати:

1) Назву лабораторної роботи.2) Тему лабораторної роботи.

Page 8: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

63) Короткі теоретичні відомості.4)Методичні вказівки.5) Завдання для лабораторної роботи свого варіанту з відповідними

вказівками.6) Блок-схеми програм.Після виконання лабораторної роботи для її захисту необхідно скласти звіт,

який в себе включає: пункти 1–6 плану роботи, текст програми, результати виконання вказівок та тестів по програмі, висновок по роботі.

Лабораторна робота захищається на лабораторному занятті або на консультації (за дозволом викладача). Студент, що не захистив дві попередні роботи не допускається до наступної. Також до лабораторної роботи не допускається студент, який не має плану проведення поточної лабораторної роботи.

Після виконання лабораторних робіт студент складає звіт по циклу лабораторних робіт, який складається з титульного листа, змісту та всіх звітів по кожній лабораторній роботі. Приклад титульного листа звіту приведений у додатку Б.

Під час захисту лабораторної роботи студент повинен відповісти на декілька питань, які наведені в кінці кожної роботи в методичних вказівках, а також на питання безпосередньо по тексту та блок-схемі програми. За результатом захисту роботи викладач виставляє оцінку від 0 до 5 балів (0 – робота не захищена, необхідно спробувати захистити на наступному занятті).

Після успішного виконання та захисту всіх лабораторних робіт, а також здавання звіту по циклу лабораторних робіт викладачу, студент допускається до складання іспиту або виставляння оцінки за болонською системою за результатами роботи студента протягом семестру.

Для підготовки до виконання та захисту лабораторних робіт можна використовувати конспект лекцій, ці методичні вказівки, іншу літературу по мові програмування "Turbo Pascal". Список рекомендованої літератури наведений в кінці методичних вказівок.

Page 9: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

71 ЛАБОРАТОРНА РОБОТА №1. ОПЕРАТОРИ УМОВНОГО ПЕРЕХОДУ

Мета роботи: отримання навичок зі складання простих програм з використанням умовних операторів; знайомство з задачами, для розв`язання яких потрібні умовні оператори; отримання навичок з використання простих типів даних, операторів вводу – виводу. Отримання навичок по складанню найпростіших блок - схем.

1.1 Теоретичні відомостіТипи даних

Таблиця 1.1 – Типи даних мови програмування Turbo Pascal

Типи

дан

их

прості

дійсні

Real 2.9e–39..1.7e38Single 1.5e–45..3.4e38Double 5.0e–324..1.7e308Extended 3.4e–4932..1.1e4932Comp -9.2e18..9.2e18

ординальні

перерахованідіапазоннілогічний Boolean False, True

цілі

Shortint -128..127Integer -32768..32767Longint -2147483648..

2147483647Byte 0..255Word 0..65535

символьний Char

складені

масив Arrayфайл Fileмножина Setрядок Stringзапис Record

вказівні

Простий тип даних є впорядкованою множиною деяких значень, він є або ординальним (порядковим), або дійсним. Ординальний тип характеризується тим, що довільне його значення має порядковий номер. Для будь-якого ординального типу існує його мінімальне та максимальне значення.

Для всіх ординальних і дійсних типів означені операції відношення: = (дорівнює), <> (не дорівнює), < (менше), <= (не більше), > (більше), >= (не менше). Результат відношення визначається як відношення значень ординальних номерів або значень операндів.

У таблиці 1.2 описано стандартні операції над даними простих типів. Прийняті позначення: І – Іпteger (цілий); B – Вооlеап (логічний); R – Rеаl

Page 10: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

8(дійсний).

Таблиця 1.2 – Операції над даними простих типів

Операція Зміст Тин операндів

Тип результату

+ Плюс І,R І,R- Мінус І,R І,R* Множення І,R І,R

DIV Цілочислове ділення І ІМОD Остача від ділення І І

/ Ділення І,R R

OR Арифметичне АБО І ІЛогічне АБО В В

AND Арифметичне І І ІЛогічне І В В

NOT Арифметичне НІ І ІЛогічне НІ В В

XOR Арифметичне 'роздільне' АБО І ІЛогічне 'роздільне' АБО B В

SHL Арифметичний зсув вліво I ІSHR Арифметичний зсув вправо І І

Якщо в операціях +, -, * хоча б один з операндів має тип Real, то результат теж матиме тип Real.

Для всіх ординальних типів означені функції Succ, Pred і Ord:Ord(X) – ординальний номер x;Succ(x) – наступне за x ординальне значення;Pred(x) – ординальне значення, що передує х.Застосування функції Succ до максимального значення або функції Pred до

мінімального значення будь-якого ординального типу приводить до невизначеного результату.

Цілий тип (Shortint, Integer, Longint, Byte, Word). Цілий результат дають такі функції:

Abs(x) – модуль цілого значення x;Addr(x) – адреса першого байта змінної x;Hi(x) – значення старшого байта цілого значення x;Lo(х) – значення молодшого байта цілого значення x;Round(x) – заокруглене значення дійсного значення x;SizeOf(x) – розмір в байтах пам'яті, необхідної для зберігання значення x або

типу х;Sqr(x) – квадрат цілого значення х;Swap(x) – переставляє старший і молодший байти цілого значення x;Trunc(х) – ціла частина дійсного значення х.

Page 11: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

9Символьний тип (Char). Дані символьного типу набувають значень

впорядкованого набору символів, зображених у конкретному ПК. Значення символьного типу записуються одним символом, що ставиться в одинарні лапки, наприклад 'A'. В ПК переважне застосування має кодування символів в системі АSCII (American Standard Code for Information Interchange – американський стандартний код для обміну інформацією).

Для символьних даних означені такі функції:Chr(х) – символ АSCII з кодом х (х – байтового типу,);Ord(х) – АSCII – код символу х;UpCase(х) – переводить малу латинську букву х у велику, решта символів не

змінюється.Логічний тип (Boolean). Дані логічного типу можуть набувати значень

True і False. Вважають, що значень False<True логічний результат дають такі функції:

КеуРrеssed – повертає True, якщо була натисну та будь-яка клавіша, у противному разі – False;

Odd(х) – повертає True, якщо ціле число х – непарне і False, якщо х – парне.Дійсний тип (Real, Single, Double, Extended, Comp). Дійсний результат

дають такі функції:Abs(х) – модуль дійсного значення х:ArcTan(x) – головне значення арктангенса в радіанах;Cos(x) – косинус х (х – в радіанах);Exp(x) –значення експоненціальної функції;Frac(x) – дробова частина x;Int(х) – ціла частина дійсного значення x;Ln(х) – значення натурального логарифма х;Sin(x) – синус х (х – в радіанах);Sqr(x) – квадрат дійсного значення х;Sqrt(х) – квадратний корінь з х.Оператори. Оператор присвоєння складається з лівої і правої частин,

розділених знаком присвоєння ”:=”. У лівій частині знаходиться ім'я змінної або функції, а в правій – вираз, ім'я іншої змінної або ім'я функції. Дія оператора присвоєння полягає в обчисленні виразу або функції та заміни поточного значення змінної у лівій частині на обчислене значення виразу в правій частині. Тип змінної, що стоїть зліва, і тип правої частини повинні бути однаковими. Існує єдиний виняток: змінній дійсного типу можна присвоювати цілочислове значення. Присвоювати можна дані будь-яких типів, крім файлових.

Вираз складається з операцій і операндів. Операндом може бути константа, змінна або ім'я функції. Обчислення виконуються зліва направо з урахуванням пріоритету операцій. У мові Паскаль є чотири рівні пріоритету (подані в порядку зменшення:

1) операція заперечення NOT;2) мультиплікативні операції *, /, DIV, MOD, AND, SHL, SHR;

Page 12: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

103) адитивні операції +, -, OR, XOR;4) операції відношення =, <>, <, >, <=, >=, IN.Оператор переходу складається з ключового слова Goto, за яким йде мітка.

Виконання цього оператора приводить до того, що керування виконанням програми передається на оператор, перед яким є відповідна мітка. Під час використання оператора переходу повинні виконуватись такі правила:

1) областю дії мітки є той блок, в якому вона описана і перехід можливий лише всередині цього блоку;

2) забороняється перехід всередину структурного оператора.Зауважимо, що використання оператора Goto суперечить принципу

структурного програмування. Мова Паскаль містить засоби, що дають змогу повністю обійтися без оператора переходу.

Оператори введення-виведення Read, Readln, Write, Writeln дають змогу працювати з різними фізичними пристроями: клавіатурою, дисплеєм, принтером, дисководами та ін. Розглянемо організацію введення з клавіатури і виведення на дисплей.

Оператор введення Read призначений для надання необхідних значень даним програми. Формат оператора: Read(а1,а2,...,an), де а1,а2,...,an – змінні допустимих типів. Значення а1, ..., аn під час введення відокремлюються пропуском, введення завершуються натискуванням клавіші Enter (повернення каретки або клавіша введення). Кількість значень, що вводяться, та їх типи повинні відповідати кількості і типам змінних в операторі Read. В іншому випадку виникає помилка введення-виведення. Наприклад, під час виконання програми

Var i:integer; c:Char;beginRead(c,i) end.Правильним є введення: А 1234.Оператор введення Readln аналогічний оператору Read, проте наступний

оператор введення-виведення буде вводити або виводити дані з нового рядка.Оператор виведення Write слугує для виведення значень змінних, виразів і

рядків символів. Формат оператора: Write(а1, а2, ..., аn), де а1, ..., an – змінні допустимих типів, вирази або рядки. Рядок, коли виводиться, береться в одинарні лапки.

Можна здійснювати також форматоване виведення даних. Для цього після імені змінної через двокрапку ставиться число – кількість знакомісць на дисплеї, які виділяються для виведення значення даної змінної. Наприклад, під час виконання програми

Var i:Integer; S:String[10];begint:=1234;s:=’Формат’;Write(i:6,i+i:6,s:10) end.

Page 13: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

11результат матиме вигляд: _ _1234_ _2468_ _ _ _Формат.Якщо виводиться змінна або вираз, що мають тип Real, то можна вказати

загальну кількість знакомісць і кількість знакомісць для виведення десяткової частини значення змінної або виразу. Наприклад,

Write(-Pi:10:5,29/3:7:4); видає .результат: _ _-3.14159_9.6667.Оператор виведення Writeln аналогічний оператору Write, проте наступний

оператор введення-виведення буде вводити або виводити дані з нового рядка.Складений оператор (операторні дужки) використовується тоді, коли

правила мови передбачають лише один оператор, а програмісту треба виконати послідовність операторів. Виконання складеного оператора полягає в послідовному виконанні всіх включених в нього операторів. До складеного оператора входять ключове слово begin, послідовність операторів і ключове слово end. Пара слів begin і end називається операторними дужками. Після begin і перед end крапку з комою можна не ставити.

Умовний оператор слугує для виконання або невиконання деякого оператора залежно від істинності тих чи інших умов. Умовний оператор складається з ключового слова If, за яким іде вираз логічного типу , ключового слова then і оператора. За оператором може йти ключове слово else і новий оператор.

Виконання умовного оператора полягає в обчисленні логічного виразу. Якщо його значення True, то виконується оператор, що стоїть за словом then. Якщо значення виразу-умови False і умовний оператор не містить слова else, то його виконання завершується. Якщо є слово else , то виконується оператор, що стоїть після нього.

Загальні види умовного оператора:If <умова> then <оператор1> або If <умова> then <оператор1>;If <умова> else <оператор1> else <оператор2>;Перша форма називається скороченою (неповною), друга – повною формою

умовного оператора. Крапка з комою перед else не ставиться.Якщо в якійсь гілці умовного оператора треба виконати кілька операторів,

то їх слід взяти в операторні дужки. Один умовний оператор може входити в інший умовний оператор. В цьому випадку кожне слово else відповідає останньому перед ним then для якого ще не було else.

Таким чином, конструкція такого вигляду:If <умова1> then If <умова2> then <оператор1> else <оператор2>;трактується якIf <умова1> thenbegin If <умова2> then <оператор1> else <оператор2> end.Приклади скороченої та повної форм умовного оператора:If x>y then z:=x;If x>y then Write(‘X більше Y’)else begin z:=y; Write(‘X не перевищує Y’) end;Блок-схема оператора If наведена на рисунку 1.1.

Page 14: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

12

Рисунок 1.1 – Блок - схема оператора If

Оператор вибору призначений для виконання одного з кількох можливих операторів. Він складається: з ключового слова Case, за яким йде селекторний вираз; ключового слова of; послідовності операторів, кожному з яких передує мітка (або список міток, або деякий діапазон значень міток), яка відокремлена від оператора двокрапкою (:); ключового слова end. Як і умовний оператор, оператор вибору може містити ключове слово else, яке повинно стояти останнім перед end.

Виконання оператора вибору починається з обчислення значення виразу-селектора (вираз ординального типу). Якщо значення цього виразу збігається з однією із міток, виконується відповідний оператор. Якщо жодного збігу не зафіксовано, а є слово else, то виконується оператор, наступний за else. В іншому випадку виконання оператора вибору завершується.

Загальний вигляд оператора вибору;Case <вираз-селектор> of<список міток 1> : <оператор1>;…………………………………<список міток N> : <оператор N>;else <оператор>;end;Мітки та значення виразу-селектора повинні бути одного і того самого

ординального типу. В списку міток вони відокремлюються одна від одної комою. Кожна мітка повинна бути унікальною у списках міток, тобто зустрічатись лише один раз. Мітки оператора вибору не описуються в розділі Label і на них не можна переходити оператором Goto.

Наприклад,Var letter:Char;

лог. вира

з

Оператор 2Оператор 1

лог. вира

з

Оператор 1

ні ні(так) так(ні)так

НеповнийПовний

Page 15: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

13beginreadln(letter);Case UpCase(letter) of‘A’,’E’,’I’,’J’,’O’,’U’,’Y’ :Write(‘Латинська голосна’);‘B’..’D’,’F’..’H’,’K’..’N’,‘P’..’T’,’V’..’X’,’Z’:Write(‘Латинська приголосна’)else Write(‘Символ не є латинською літерою’)end end.Блок-схема оператора Case наведена на рисунку 1.2.

Рисунок 1.2 – Блок - схема оператора Case

Приклад вирішення лабораторного завдання:

Вираз1 Оператор 1

Вираз2 Оператор 2

Вираз N

Оператор N

Оператор N+1

Так

Так

Так

Ні

Ні

Ні

Задача: Знайти значення функції y=f(x) за наступною формулою:

Блок-схема і текст програми:

Var x,y:real;beginwrite('Введіть значення х:');readln(x);if x<-10 then y:=x else if x<=0 then y:=cos(x) else y:=sqrt(x);writeln('y=',y:2:8);readlnend.

x<-10

y:=x

Так

Ні

Початок

Ввести x

x<=0

y:=cos(x)

Так

y:=sqrt(x)

Ні

Кінець

Вивести y

Page 16: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

141.2 Методичні вказівки

а) вивчити основні типи даних та допустимі операції зі змінними цих типів;б) вивчити види умовних операторів, операторів вводу – виводу, синтаксичні особливості написання та правил роботи кожного з них;в) розробити алгоритми розв`язання задач свого варіанту, записавши їх у вигляді блок-схем;г) програма повинна правильно виконуватися при будь-яких допустимих значеннях початкових даних;д) правильність роботи всіх гілок програми повинна бути перевірена на тестах.

1.3 Контрольні запитання1. Оператори умовного і безумовного переходу.2. Синтаксис повного та скороченого оператора умовного переходу.3. Операторні дужки.4. Блок-схема оператора умовного переходу.5. Написати фрагмент програми по приведеній блок-схемі з

використанням операторів умовного переходу.6. Цілі, дійсні та логічний типи даних, операції над змінними цих типів.7. Оператори вводу – виводу.

Page 17: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

151.4 Варіанти завдань

Варіант 1Задача 1: Дано дійсні числа a,b,c,d. Якщо abcd, то кожне число

замінити найбільшим з них; якщо a>b>c>d то числа залишити без змін; в іншому випадку всі числа замінити їх квадратами.

Вказівки:1. Значення a,b,c,d задати самостійно.2. Виконати програму для трьох випадків:

а) abcd; b) abcd; с) abcd.3. На екран вивести початкові значення a,b,c,d та змінені.

Задача 2: Ввести змінні a,b,c,d,n. Якщо a4b , обчислити X= ; якщо a=4b , обчислити X=е+dc; якщо a4b , обчислити X=en(4ba+d)2; якщо n>7, вивести на екран a,b,c,d,n та х; повернутися до введення нових значень a,b,c,d,n; якщо n7, обчислити Y=sin(nx), вивести на екран n,y і повернутися до введення нових значень a,b,c,d,n.

Вказівки:1. Виконати програму для різних даних:

а) a4b; b) a=4b; с) a4b; d) n>7; e) n7.2. Значення a,b,c,d,n задавати самостійно.

Варіант 2Задача 1: Дано дійсні числа x,y. Якщо x,y від`ємні, то кожне значення

замінити його модулем; якщо від`ємне лише одне число, то обидва значення збільшити на 0.5; якщо обидва значення невід`ємні і жодне з них не належить до відрізка [0.5; 2.0], то обидва значення зменшити у 10 разів; в інших випадках x,y залишити без змін.

Вказівки:1. Значення x,y задавати самостійно.2. Виконати програму для випадків:

а) x<0 i y<0; b) x<0, y>0; або x>0, y<0; с) 0<x<0.5; y>0;d) 0.5 x2 i 0.5 y2.

3. На екран вивести початкові дані x,y та змінені.Задача 2: Ввести k>0 (k–ціле). Якщо k=1, то ввести а,b, та обчислити

Z=a+sinb; якщо Z>5, то Z виводити на екран; якщо Z 5; то вивести на екран Z,a,b і потім зупинитися; якщо k>1; то ввести c,d, обчислити W=(kc+5d)2. Вивести на екран c,d,k,W і потім зупинитися.

Вказівки:1. Значення a,b,c,d,k задавати самостійно.2. Виконати програму, якщо: а) k=1, z>5; b) k=1. z 5; c) k>1.

Page 18: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

16Варіант 3

Задача 1: Дано дійсні додатні числа a,b,c,d. З`ясувати, чи можливо прямокутник зі сторонами a,b вмістити усередині прямокутника зі сторонами c,d, щоб кожна зі сторін одного прямокутника була паралельна чи перпендикулярна кожній стороні другого прямокутника.

Вказівки:1. Виконати програму, коли:

a) a<c, b>d; b) a>c, b<d; c) d>a>c, b<c; d) d>b>c, a<c.2. Значення a,b,c,d задавати самостійно.

Задача 2: Нехай функція y=f(x) задана таблицею 1.3Таблиця 1.3 – Функція y=f(x)

X X1 X2 X3

Y Y1 Y2 Y3

Розробити програму для знаходження приблизного значення функції y=f(x) у точці x1xx3 за формулою:

y=f(x)=

Вказівки:1. Виконати програму, коли: a) x1 x <x2; b) x2 x <x3; c) x=x3.2. Значення xi,yi задавати самостійно.

Варіант 4Задача 1: Якщо сума трьох різних дійсних чисел x,y,z менше за одиницю, то

найменше з них замінити напівсумою двох інших; в іншому випадку замінити менше з x,y напівсумою двох, що залишилися.

Вказівки:1. Виконати програму при: a) x+y+z=1; b) x+y+z<1.2. Значення x,y,z задавати самостійно.

Задача 2: Написати програму для переведення номіналу ємності конденсатора С у скорочену форму (пФ, нФ, мкФ, Ф) за правилом:

Вказівки: На екран вивести округлене значення опору із відповідним позначенням, наприклад, якщо ввели 0.0047, вивести 4700 мкФ. Ввести n – ціле.

Варіант 5Задача 1: Знайти полярні координати r, точки на площині по її

прямокутним координатам за допомогою формули: r= , =

Вказівки: виконати програму з усіма можливими співвідношеннями x,y; значення x,y задавати самостійно.

Задача 2: Квадрати у грі в хрестики та нулики пронумеровані як зображено на рисунку 1.3. Задано номери трьох квадратів №1,№2,№3, за умовою, що

Page 19: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

17№1№2№3. Присвоїти логічній змінній line значення true, якщо ці квадрати знаходяться на одній прямій, і false в іншому випадку.

1 2 34 5 67 8 9

Рисунок 1.3 – Номери квадратів у грі в хрестики – нулики

Варіант 6Задача 1: Написати програму для переведення номіналу опору резистора R

у скорочену форму (Ом, кОм, МОм, ГОм) за правилом:

Вказівки: На екран вивести округлене значення опору із відповідним позначенням, наприклад, якщо ввели 5600, вивести 5.6 кОм.

Задача 2: Обчислити площу трикутника зі сторонами a,b,c за формулою Герона, перевіривши умову коректності попередніх даних(довжина всіх сторін додатна, сума довжин двох будь-яких сторін більше довжини третьої). Формула Герона: S= p p a p b p c( )( )( ) , де p=(a+b+c)/2

Вказівки: попередні дані задавати самостійно, забезпечивши перевірку всіх умов.

Варіант 7Задача 1: Знайти значення функції y=f(x) за наступною формулою:

Вказівки:1. Виконати програму, коли:

а) а>0,b>0,c>0;б) а<0,b<0,c>0;в) а<0,b<0,c<0;г) а<0,b>0,c>0;

2. Значення a,b,c задавати самостійно, x вводити з клавіатури .Задача 2: Написати програму для визначення номеру телевізійного каналу

за введеною несучою частотою зображення в першому діапазоні метрових хвиль. Розподіл каналів за частотою приведений в таблиці 1.4.

Таблиця 1.4 – Розподіл каналів за частотою Діапазон хвиль 48–57 58–66 76–84 85–92 93–100 МГцНомер каналу 1 2 3 4 5 N

Варіант 8Задача 1: Задані три дійсних числа, що є довжинами відрізків. Визначити,

чи можливо побудувати трикутник з такими довжинами сторін і, якщо це можливо – визначити тип трикутника: рівносторонній (рівнобедрений), прямокутний, чи інший трикутник.

разом з тим: а<b<c

Page 20: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

18Задача 2: Функція y=f(x) задана графічно, рисунок 1.4.

Рисунок 1.4 – Графік функціїНаписати програму для знаходження значення функції в будь якій точці x.Вказівки:

1.Вираховувати за умови:а) -<x<x1

б) x1 x<0в) 0 x<x2

г) x2 x<2.Значення a,x1,x2 задати самостійно, x – вводити з клавіатури.

Варіант 9Задача 1: Написати програму для виводу на екран середньої температури

пори року виходячи з таблиці 1.5.Таблиця 1.5 – Температура пори року

Пора року Весна Літо Осінь Зимаtсер.. +10о +25о +5о -15о

Вказівки: Пору року задавати за допомогою літер: “B” – весна, ”L” – літо, ”O” – осінь, ”Z” – зима.

Задача 2: Дані дійсні числа а, b, с (а 0). Повністю дослідити біквадратне рівняння ax2+bx4+c=0, тобто. Якщо дійсних коренів нема, то видати про це повідомлення, інакше видати два чи чотири корні.

Варіант 10Задача 1: Обчислити Z:

Z=

Задача 2: Якщо n 0, то видати про це повідомлення і ввести нове значення n. Якщо 1n5, то обчислити y=an+ln(b2+c4+d); попередньо здійснивши введення даних a,b,c,d. Вивести на екран a,b,c,d,y. Якщо n>5, обчислити y=an+b+c+d, попередньо здійснивши введення даних a,b,c,d. Вивести на екран a,b,c,d,y.

Вказівки: виконати програму при: a) n 0; b) 1 n 5; с) n>5.

x2|x1|.

Page 21: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

192 ЛАБОРАТОРНА РОБОТА №2. ОПЕРАТОРИ ЦИКЛІВ

Мета роботи: отримання навичок з використання операторів циклів; програмування обчислювальних процесів з відомим числом повторень; розробка та програмування алгоритмів ітераційної циклічної структури.

2.1 Теоретичні відомостіОператори повторення призначені для організації циклів. Мова Паскаль

містить три оператори повторення: For, While, Repeat.Оператор циклу з параметром складається з ключового слова For, за

яким йдуть змінна циклу; знак присвоєння; вираз, що визначає початкове значення змінної циклу; ключове слово to або downto; вираз, що визначає кінцеве значення змінної циклу; ключове слово do, оператор, що виконується в циклі (простий або складений). Загальний вигляд оператора циклу з параметром:

For <змінна>:=<поч.вир.> to <кін.вир.> do <оператор>;For <змінна>:=<поч.вир.> downto <кін.вир.> do <оператор>;Змінна циклу, початковий та кінцевий вирази повинні бути одного і того

самого ординального типу. Під час виконання змінна циклу набуває послідовних значень даного ординального типу в порядку їх збільшення (якщо є слово to) або зменшення (якщо є слово downto). Кількість виконань тіла циклу обчислюється до виконання операторів і дорівнює <кін.вир>-<поч.вир.>+1 (якщо є слово to) або <поч.вир.>-<кін.вир>+1 (якщо є слово downto). Якщо в циклі з словом to (downto) початковий вираз більший (менший) від кінцевого, то тіло циклу не виконується жодного разу. Всередині тіла циклу не слід замінювати значення змінної циклу, хоча така зміна не фіксується як помилка і не впливає на кількість виконань тіла циклу. Після закінчення роботи оператора циклу For значення змінної циклу дорівнює кінцевому значенню. Якщо тіло циклу не виконалося, то значення змінної не визначено.

Наприклад,Var c:Char;bgin For c:=’z’ downto ‘a’ do Writeln(c) end.В результаті будуть виведені малі букви латинського алфавіту в

зворотному порядку.Блок-схема оператора For зображена на рисунку 1.4.Оператор циклу з передумовою складається з ключового слова While, за

яким йдуть вираз логічного типу, ключове слово Dо та виконуваний в циклі оператор (простий чи складений). Вираз задає умову продовження виконання циклу.

Загальний вигляд оператора циклу з передумовою:While <вираз> do <оператор>;Виконання цього циклу здійснюється так. Спочатку обчислюється

значення логічного виразу. Якщо це значення False, то тіло циклу не виконується; якщо значення True, то тіло циклу виконується, після чого знову

Page 22: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

20обчислюється вираз. Щоб запобігти "зациклюванню", слід передбачити зміну значення виразу всередині тіла циклу.

Рисунок 2.1 – Блок - схема оператора For

Наприклад, наступна програма обчислює суму

Var s,p:Real;begins:=0;p:=0.1;while p<=2 do begin s:=s+sin(p); p:=p+0.1 end;writeln(s) end.Оператор циклу з післяумовою складається з ключового слова Repeat, за

яким іде виконуваний в циклі оператор (чи оператори); ключового слова until, виразу логічного типу. Вираз задає умову припинення виконання циклу.

Загальний вигляд оператора циклу з післяумовою:Repeat <оператори> until <вираз>;Виконання цього циклу відбувається так. Спочатку виконується тіло циклу,

а потім визначається значення логічного виразу. Якщо значення Тruе, то виконання циклу припиняється; якщо значення False, то знову відбувається виконання тіла циклу, потім знову обчислюється вираз. Якщо у тілі циклу треба виконати декілька операторів, то операторні дужки begin і end можна опускати, їх роль відіграють слова Repeat і until.

Наприклад, програма знаходить ту саму суму, що й у попередньому прикладі:

Var s,p:Real;begins:=0; р:=0.1; Repeat s:=s+sіn(р); р:=р+0.1 until р>2; witeln(s) end.

Змінна := початковий вираз

Змінна<кінц.вир.

оператор

Змінна:=Змінна - 1

Так

Ні

Змінна := початковий вираз

Змінна>кінц.вир.

оператор

Змінна:=Змінна + 1

Так

Ні

Page 23: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

21Блок-схеми операторів циклів з передумовою та після умовою зображені

на рисунку 2.2.

Рисунок 2.2 – Блок-схеми операторів циклів while, repeat

вираз

оператор

вираз

оператор 1

оператор N

while repeat

Так

Так

Ні

Ні

Page 24: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

22

Приклад вирішення лабораторного завдання:2.2 Методичні вказівки

а) вивчити можливості мови програмування для реалізації обчислювальних процесів циклічної структури з відомим числом повторень у циклі та коли число повторень невідомо;б) розробити алгоритми розв`язання задач свого варіанта, записавши їх у вигляді блок-схем;в) передбачити усі можливі ситуації в програмі так, щоб уникнути входження в нескінчений цикл (зациклення);г) забезпечити в програмі виведення коментарів, відповідних різним можливим ситуаціям.

2.3 Контрольні запитання1. Оператор циклу з параметром.2. Блок-схема оператора циклу з параметром.3. Оператор циклу з передумовою.4. Блок-схема оператора циклу з передумовою.

Задача: Дано додатні дійсні числа b,x.В послідовності y1, y2,…, yn яка утворена за законом:y0=b, yi=, i=1,2,..,n.Знайти перший член yn, для якого виконується нерівність 10-5.

Блок-схема і текст програми:

Var x,b,yn,yn1:real;beginwrite('Введіть значення b і х:');readln(b,x);yn:=b; repeatyn1:=yn;yn:=0.1*(yn1+x/yn1);until abs(yn-yn1)<10e-5;writeln('y=',yn:1:10);readlnend.

yn:=b

Початок

Ввести b, x

|yn1-yn|<10-5

yn1:=yn

Так

Ні

Кінець

Вивести y

yn:=0.1*(yn1++x/yn1)

Page 25: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

235. Оператор циклу з післяумовою.6. Блок-схема оператора циклу з післяумовою.

Page 26: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

242.4 Варіанти завдань

Варіант 1Задача1: Написати програму для знаходження загального опору

паралельного та послідовного з’єднання n резисторів.Вказівки: Значення n та опори резисторів вводити з клавіатури. Задача2: Розробити програму для обчислення довжини кола, як границі

послідовності периметрів вписаних правильних багатокутників з числом сторін, що подвоюються, рахуючи від шестикутника. Сторона правильного вписаного багатокутника, з подвоєним числом сторін, виражається за формулою:

a2n= 2 24

2 22

R R Ran

де an – сторона вписаного багатокутника; R– радіус кола.За довжину кола прийняти периметр багатокутника, котрий відрізняється

від попереднього менш ніж на 10-3.Вказівки: радіус кола R та сторону правильного вписаного шестикутника

задавати самостійно.

Варіант 2Задача1: Написати програму обчислення для заданого x величини y за

формулою:

Вказівки: значення x задавати самостійно, враховуючи x0; обчислити y для п`яти значень x .

Задача2: Метод послідовних наближень дозволяє вирахувати, для знаходження кореня п’ятого ступеня з додатного числа а, наближення:

xn+1=45 xn+

axn5 4

В даному випадку похибка (n+1)-го наближення не переважає 45 a| xn+1xn|

Написати програму для обчислення кореня п’ятого ступеня з числа а з точністю до 10-3, враховуючи

x0=Вказівки: значення a задавати самостійно, розглянувши випадки:

a) a1; b) 1a25; c) a25.

Варіант 3Задача1: Написати програму знаходження значення L виду:

L=

Page 27: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

25Вказівки: обчислити L , коли n=1,2,...35.Задача2: Написати програму, яка обчислює границю послідовності {an}, де

an=n

n n2 21 1 ,

прийнявши за нього таке значення an , з яким |an+1an|<10-3

Вказівки: на екран вивести члени послідовності від a1 до an та номер члена n, для якого справедлива показана вище рівність.

Варіант 4Задача1: Обчислити

, де

ai= , bi=Задача2: Корінь рівняння знаходиться послідовними наближеннями за

формулою:

xn+1=2

5

3 xn

Написати програму, яка знаходить таке значення кореня, з яким різниця між двома сусідніми наближеннями не перебільшує 10-3, виходячи із початкового наближення x0=1.

Варіант 5Задача1: Дано дійсні числа a,b(b>a), натуральне n. Отримати (f1+f2+....+fn)h,

де

h= b an , fi=

a i ha i h

( / )

( ( / ) )1 2

1 1 2 2 , i=1,2,3,...n.

Вказівки: значення a,b,n задавати самостійно.Задача2: Дано додатні дійсні числа a,x,. В послідовності y1,y2, яка утворена

за законом:

y0=a, yi=12 1

1

( )yx

yii

, i=1,2,....

Знайти перший член yn, для якого виконується нерівність y yn n2

12 .

Вказівки: значення a,x задавати самостійно. Прийняти =10-3.

Варіант 6

Задача1: Дано натуральне n. Знайти a bk kk

n

1 , де a1=b1=1

ak=12

121 1( );b ak k

bk=2a k kb 12

1 , k=2,3,....Вказівки: значення n задавати самостійно.

Page 28: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

26Задача2: Обчислити безкінцеву суму із заданою точністю (>0),

враховуючи, що потрібна точність досягнута, якщо наступний доданок виявився за модулем менший, ніж .

( )( )( )

;

11 2

1

1

i

i i i iВказівки: вважати =10-3.

Варіант 7Задача 1: Написати програму знаходження коефіцієнтів ряду згідно з

формулою:

, де к=1,2,3 – номер коефіцієнту рядуВказівки:

1. Знаходити коефіцієнти, доки ak+1 –ak< ε.2. Вивести на екран коефіцієнти з номерами, кратними 3 та ці номери.3. Підібрати таке ε, з яким кількість членів (коефіцієнтів) ряду буде

лежати в межах 30 k 40.Задача 2: Скласти програму для вводу з клавіатури n чисел та вирахувати

середнє значення введених чисел .Вказівки: значення n вводити з клавіатури.

Варіант 8Задача 1: Написати програму для знаходження загальної ємності

паралельного та послідовного з’єднання n конденсаторів.Вказівки: Значення n та ємності конденсаторів вводити з клавіатури.

Задача 2: Знайти , де приймаючи за нього таке

значення Сk , з яким .Вказівки: на екран вивести всі значення Сk та номер останнього значення.

Варіант 9Задача 1: Розробити програму знаходження для даного x функції y виду:

y=

Вказівки: значення x задавати самостійно, враховуючи, що x дійсне(не ціле); обчислити функцію y для п`яти різних значень x.

Задача 2: Вирахувати значення інтегралу Jn= за наступною

рекурсивною формулою: Jn=1- nJn-1, n=1,2,…Вказівки: Початкове наближення інтеграла прийняти рівним J0=1-1/e,

вирахування закінчити, коли поточне значення Ji за абсолютним значенням стане менше 10-4

Page 29: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

27Варіант 10

Задача 1: Написати програму для піднесення x до ступеня n, тобто y=xn .Вказівки:

1. Піднесення до ступеня оформити у вигляді циклу.2. Виконати програму з додатними та від’ємними n.3. Визначити максимально допустиме значення n, з яким програма

виконується коректно, якщо x=10.Задача 2: Знайти границю послідовності Сi, коли i прямує від 0 до

нескінченності, де приймаючи за нього таке значення Сі, з яким

.Вказівки: На екран вивести всі значення Сі та номер останнього значення.

Page 30: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

283 ЛАБОРАТОРНА РОБОТА №3. РОБОТА ІЗ МАСИВАМИ ЧИСЕЛ

Мета роботи: отримання практичних навичок по роботі з масивами та оволодіння навичками алгоритмізації і програмування структур із вкладеними циклами, способами введення та виведення матриць, робота з діапазонним та перерахованим типами даних.

3.1 Теоретичні відомостіПерерахований тип є ординальним типом, що створюється програмістом.

(Ординальність – властивість типу. Ординальним є тип з обмеженою кількістю констант. Кожна константа має свій порядковий номер. До ординальних відносяться цілі, символьний, логічний, перерахований, діапазонний типи) Перерахований тип задається перерахуванням усіх своїх значень, які є ідентифікаторами, причому кожне значення може належати лише одному перерахованому типу. Ординальний номер першої константи є 0, а наступних 1,2,... На відміну від даних інших ординальних типів, дані перерахованого типу не можуть бути безпосередньо введені або виведені, їх можна присвоювати, порівнювати, брати наступне, попереднє значення, визначати ординальний номер.

Наведемо приклади опису даних перерахованого типу:Type month=(jan,feb,mar,apr,may,jun,jul,aug,sep,oct,nov,dec);Var m:month; s:(CPM,MSXDOS_2_0,PCDOC,UNIX);Діапазонний тип є деякою підмножиною вже існуючого ординального

типу. Він визначається вказуванням найменшого і найбільшого значень, що входять у діапазон, в той же час, нижня межа не повинна перевищувати верхню. Тип даних діапазонного типу визначається за типом границь. Тип граничних значень називається базовим. Над даними діапазонного типу можливі всі операції, визначені для базового типу.

Наведемо приклади опису даних діапазонного типу:Type spring=mar..may;Var sm:spring; a: 0..100;В даному випадку вважають, що перерахований тип, який містить mar і may,

вже описаний раніше.Масивовий тип є складеним або структурним типом. Масив складається з

фіксованого числа компонент, кожна з яких має один і той самий тип. Компоненти масиву називаються його елементами. Елементи масиву можуть мати стандартний тип або тип, введений користувачем. Тип елементів масиву називається базовим. Елементи масиву розміщені впорядковано, кожен має свій номер, який називається індексом. Доступ до елементів масиву відбувається шляхом вказування порядкового номера (індексації). Індексом може бути будь-який вираз ординального типу. Тип індексу визначає границі зміни значень індексу, кількість елементів у масиві.

Page 31: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

29Опис одномірного масивового типу складається з ключового слова array, за

яким в квадратних дужках записано тип індексу, ключового слова of і опис типу елементів.

Загальний вигляд опису масивового типу:Type <ім'я типу> = array [<тип індексу >] of <тип елементів>;Наприклад,Const n = 10;Type rgb = ( red, green, blue); nat = 1..MaxInt; ar = array [0..n] of Integer; Var matrix : array [1.. 8,1.. 8] of Real; color: array[ rgb ] of Byte; a,b : ar; ar2: array [nat] of ar; c: array [0..n] of Integer;Слід зазначити, що типи змінних а і с не еквівалентні, бо змінна а має тип

аr, а змінна с не є типу аr.Якщо базовим типом є масивовий, то отримуємо багатовимірний масив. У

наведеному прикладі змінні ar2 і matrix є двовимірними масивами. Опис змінної matrix еквівалентний такому опису

Var matrix : array [1..8] of array [1..8] of Real;Тобто багатовимірні масиви можна описати двома формами: повна :Type <ім'я типу> = array [<тип індексу 1 >] of array [<тип індексу 2 >] of …

array [<тип індексу n >] of <тип елементів>;скорочена:Type <ім'я типу> = array [<тип індексу 1 >,<тип індексу 2 >…

<тип індексу n>] of <тип елементів>;Оператор присвоєння можна застосовувати до масиву як до єдиного цілого.

Для цього необхідно, щоб масиви були одного й того самого типу. В результаті виконання оператора а:=b усі значення елементів масиву b будуть присвоєні відповідним елементам масиву а.

Так, для описаних вище змінних правильним є оператор аr2[3]:=а (оскільки аr2[3] є масив того самого типу, що й масив а). Оператор присвоєння с:=а неправильний, оскільки масиви а і с не еквівалентних типів.

Доступ до елементів масиву. Елементи масиву зображаються в програмі за допомогою імені елемента масиву, який складається з імені масиву та індексу в квадратних дужках. Для наведеного вище прикладу color[green] – байтова величина, matrix[4,7] – дійсна величина, аr2[10] – величина типу аr. Для багатовимірних масивів допускається така форма запису доступу до елемента: matrix[1][2], аr2[4][0] – відповідно те саме, що й matrix[1,2], аr2[4,0].

Констант масив описується так само, як і звичайний масив, але після опису базового типу ставиться знак =, за яким в круглих дужках перелічено через кому значення елементів масиву.

Page 32: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

30Наприклад,

Type rgb = (red,green,blue);Const color:array [1..4] of rgb= (red,green,blue,green);

table:array [1..5] of Real = (0,0.5,1,1.5,-8e10);Багатовимірні констант-масиви описуються аналогічно, причому кожна

вимірність задається в круглих дужках.Наприклад,Type rectangle = array [1..4,1..2] of Integer;Const box:rectangle = ((0,0),(0,1),(5,1),(5,0));Задавати символьні констант-масиви можна двома способами:Const vocal:array [1..7] of Char = ('А', 'Е', 'І', ' J', 'О', 'U', 'Y');Const vocal:array [1..7] of Char =’АЕІJОUY’.

Page 33: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

31

Приклад вирішення лабораторного завдання:3.2 Методичні вказівки

а) вивчити правила організації масивів та синтаксис описання в програмі одномірних та двомірних масивів(матриць);

б) вивчити організацію вкладених циклів з урахуванням порядку перебору елементів матриці;

в) вивчити правила використання прийомів програмування в структурах із вкладеними циклами;

г) розробити алгоритм вирішення задач свого варіанту, записавши їх у вигляді блок-схем;

Задача: Дана цілочислова матриця із розмірністю mxn. Отримати послідовність b1....bn, де bi – це добуток додатних непарних елементів в і-му рядку.Вказівки: попередню матрицю задавати самостійно.

Блок-схема і текст програми:

Var a:array[1..20,1..20]of integer;b: array[1..20]of integer;i,j,n,m:1..20;beginwrite('Введіть розмірність матриці n,m:');readln(n,m);writeln('Введіть початкову матрицю ',n,’x’,m);for i:=1 to n do for j:=1 to m do readln(a[i,j]);for i:=1 to n do begin b[i]:=1; for j:=1 to m do if odd(a[i,j]) then b[i]:=b[i]*a[i,j]; end;writeln('Початкова матриця A:’);for i:=1 to n do begin for j:=1 to m do write(a[i,j]:4); writeln end;writeln('Матриця b:’);for i:=1 to n do writeln(b[i]);readlnend.

i<=n

i:=i+1

Так

Ні

Початок

Введення m,n

odd(a[i,j])

Так

i:=1

Кінець

Введення А

j:=1

j<=m

Так

j:=j+1

b[i]:=1

b[i]:=b[i]*a[i,j]

Вивести А,b

Ні

Ні

Page 34: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

32д) забезпечити в програмі виведення коментарів та природне завершення

програми в випадках можливого зациклення та зависання програми. Двовимірні масиви повинні виводитися у вигляді матриць.

3.3 Контрольні запитання1. Задавання одномірного масиву.2. Форми задавання багатомірного масиву.3. Доступ до елементів масиву.4. Тип індексу масиву.5. Тип елементів масиву.6. Перерахований тип даних.7. Діапазонний тип даних.

Page 35: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

333.4 Варіанти завдань

Варіант 1Задача1: Помножити матрицю АМхN, на вектор R, з розмірністю n за

формулою:

Ui= a rij jj

n

*

1 , де і=1,2,....m, j=1,2,....n.

Вказівки: на екран вивести попередню матрицю А, вектор R (задати самостійно) та результуючий вектор U.

Задача2: Дано натуральне число n, цілочислова квадратна матриця A порядку n. Отримати b1....bn, де bi – це найменше із значень елементів, які знаходяться на початку і-го рядка матриці до елемента, який належить до головної діагоналі включно.

Вказівки: матрицю задавати самостійно.

Варіант 2Задача1: Знайти скласти та відняти дві матриці А і В з однаковою

розмірністю mxn за формулами:cij=aij+bij; dij=aijbij; де i=1,2,....m, j=1,2,....n.Вказівки: на екран вивести попередні матриці (задавати самостійно) та

результуючі.Задача2: Дана цілочислова квадратна матриця порядку 4. Знайти найменше

із значень елементів стовпця, який володіє найбільшою сумою по модулю елементів. Якщо таких стовпчиків декілька, то взяти перший з них.

Вказівки: попередню матрицю задати самостійно.

Варіант 3Задача1: Написати програму транспонування матриці A=(aij), де і=1,2,...n,

j=1,2,...n для довільного значення n. Операція транспонування полягає в заміні рядків матриці стовпчиками(і-й рядок заміняється на j-й стовпчик).

Вказівки: на екран вивести попередню матрицю та результуючу (попередню матрицю задавати самостійно).

Задача2: Дано натуральне n, цілочислова квадратна матриця порядку n. Отримати b1....bn, де bi – це сума елементів, які знаходяться після першого від`ємного елемента в і-му рядку(якщо всі елементи рядка невід`ємні, то прийняти bi=100).

Вказівки: попередню матрицю задавати самостійно.

Варіант 4Задача1: Помножити матрицю А з розмірністю mxn на матрицю В з

розмірністю nxl за формулою

сkj= ( * )a bk ii

n

i j

1

, де j=1,2,...l, k=1,2,...m.

Отримана матриця має розмірність mxl.Вказівки: на екран вивести матриці А,В (задавати самостійно) та С.

Page 36: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

34Задача2: Дана дійсна матриця із розмірністю mxn. Отримати послідовність

b1...bn, де bi – це найбільше із значень елементів і-го рядка.Вказівки: попередню матрицю задавати самостійно.

Варіант 5Задача1: У заданій дійсній матриці із розмірністю 3х4 поміняти місцями

рядок, який містить елемент із найбільшим значенням, із рядком, який містить елемент із найменшим значенням. Припускається, що такі елементи єдині.

Вказівки: попередню матрицю задавати самостійно.Задача2: Дана дійсна матриця із розмірністю mxn. Отримати послідовність

b1...bn, де bi – це добуток квадратів тих елементів і-го рядка, модулі яких належать до відрізку [1, 1.5].

Вказівки: попередню матрицю задавати самостійно.

Варіант 6Задача1: В даній дійсній квадратній матриці із розмірністю n знайти суму

елементів рядка, в якій знаходиться елемент із найменшим значенням. Припускається, що такий елемент єдиний.

Вказівки: попередню матрицю задавати самостійно.Задача2: Дана дійсна матриця із розмірністю mxn. Отримати послідовність

b1....bn, де bi – це число від`ємних елементів в і-му рядку.Вказівки: попередню матрицю задавати самостійно.

Варіант 7Задача 1: Написати програму для арифметичних дій над матрицею A=[aij] в

залежності від нажатої клавіші: i=1,2,3…n; j=1,2,3…m.

Вказівки: m, n та початкову матрицю задати самостійно, x– вводити з клавіатури після натискання ‘+’, ’-’ або ‘*’.

Задача 2: Задане натуральне число k, цілочислова матриця порядку k. Отримати вектор-стовбець c1,c2…ci…ck, де сi –сума від’ємних елементів i-го рядка.

Вказівки: значення k та початкову матрицю задати самостійно.

Варіант 8Задача 1: Заданий двомірний масив А=(aij), де i=1,2…k, j=1,2…f,

елементами якого є цілі числа, які складаються з будь якої кількості цифр. Написати програму для складання матриці, елементами якої будуть числа , які дорівнюють кількості цифр в однойменній комірці в масиві А.

Вказівки: початкову матрицю задати самостійно, на екран вивести початкову та результуючу матриці.

Задача 2: впорядкувати послідовність с1…сn, яка складається з дійсних чисел в порядку зменшення. Дробові числа округлити до найближчого цілого числа.

Page 37: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

35Вказівки: початкову послідовність задати самостійно, на екран вивести

початкову та результуючу послідовність.

Варіант 9Задача 1: Заданий двомірний масив А=(aij), де i=1,2…n, j=1,2…m,.

Сформувати одномірний масив B, що складається з від’ємних елементів массива А, та знайти їх суму.

Задача 2: Задане натуральне число k, цілочисловий одномірний масив порядку k. Поміняти у масиві максимальний елемент з першим, а мінімальний з останнім.

Вказівки: Значення k та початковий масив задати самостійно.

Варіант 10Задача 1: Заданий двомірний масив А=(aij), де i=1,2…n, j=1,2…m,

елементами якого є цілі числа. Впорядкувати інформацію в масиві в порядку зростання.

Вказівки:1. Початковий масив задати самостійно.2. На екран вивести початковий та результуючий масиви.

Задача 2: В одномірному масиві u1…un, що складається з величин напруг джерел живлення, знайти кількість стандартних величин напруг: 1.5В, 3В, 4.5В, 6В, 9В, 12В.

Вказівки: початковий масив задати самостійно.

Page 38: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

364 ЛАБОРАТОРНА РОБОТА №4. ПРОГРАМУВАННЯ З ВИКОРИСТАННЯМ ПІДПРОГРАМ КОРИСТУВАЧА

Мета роботи: отримання навичок з алгоритмізації та програмування задач з використанням процедур та функцій; отримання навичок з написання підпрограм та звертання до них, вибір параметрів підпрограм.

4.1 Теоретичні відомостіУ мові Паскаль передбачено засоби, завдяки яким можна оформляти

послідовність операторів як підпрограму. Підпрограма – це названа група операторів, яку можна виконати в будь-якому місці програми довільну кількість разів. Розрізняють два види підпрограм: підпрограми-процедури і підпрограми-функції (у подальшому просто процедури та функції).

Усі процедури й функції поділяються на два класи: стандартні (зарезервовані) і визначені користувачем. Стандартні процедури й функції є частиною мови, вони заздалегідь не описуються. Процедури й функції, визначені користувачем, обов'язково описуються в розділі опису підпрограм. Сам опис не передбачає виконання жодних дій. Для виконання процедури в програмні є оператор виклику процедури. Функція буде виконана, якщо її ім'я зустрінеться в деякому виразі.

Процедура має ту саму структуру, що й Паскаль-програма, і складається із заголовка і блока (тіла). Заголовок процедури містить ключове слово Procedure, ім'я процедури і, якщо необхідно, список формальних параметрів із зазначенням типу кожного з них. Тип параметра повинен бути простим або описаним за допомогою імені раніше введеного типу.

Наприклад, опис вигляду:Procedure sum(n:Integer,а:array[1..50]of Real);не допускається. Цей заголовок слід описати так:Type ar=array[1..50]of Real;Procedure sum(n:Integer,а:ar);Блок процедури аналогічний блоку Паскаль-програми, за винятком лиш

того, що після останнього end процедури ставиться крапка з комою, а не крапка. Можуть бути присутні всі розділи, крім розділу підключення модулів.

Загальний вигляд опису процедури:Procedure <ім'я процедури> (<опис формальних параметрів>);<розділ описів>begin<розділ операторів>end;Наприклад, процедура frame формує на екрані рамку розміром 10х10 із

знаків '*'. Лівий верхній куток рамки має координати (х,у). Програма demo_procedure будує на екрані дві рамки.

Program demo_procedure;Uses crt;

Page 39: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

37Procedure frame(x,y:Byte); Var i:Byte;begin GotoXY(x,y);Write(‘**********’); For i:=1 to 8 do begin GotoXY(x,y+i);Write(‘* *’) end; GotoXY(x,y+9);Write(‘***********’);end;begin

ClrScr; fram(31,2); frame(41,12)end.Функція має ту саму структуру, що й процедура, крім того, що функція

може повертати додатково ще один результат простого типу через заголовок (а не лише через параметри-змінні, як процедура). Заголовок функції містить ключове слово Function, ім'я функції, необов'язковий список формальних параметрів із зазначенням типу кожного з них та імені типу функції.

Загальний вигляд опису функції:Function <ім'я функції>(<опис формальних параметрів>):<ім'я типу

функції; <розділ описів>begin<розділ операторів>end;У розділі операторів повинен знаходитися хоча б один оператор присвоєння

імені функції деякого значення, останнє присвоєння якого й буде результатом функції, що повертається до програми.

Наприклад, функція ch(х) обчислює значення гіперболічного косинуса.Програма demo_function знаходить значення виразу: y=ch(1)+ch(2).Program demo_function;

Var y:Real; Function ch(x:Real):Real; begin

Ch:=(Exp(x)+Exp(-x))/2 end;begin

Y:=ch(1)+ch(2); Writeln(‘y=’,y)end.Параметри процедур і функцій. Вони дають змогу під час кожного

виклику процедури чи функції працювати з об'єктами, що задаються в момент виклику через список фактичних параметрів. Список формальних параметрів у заголовку процедури чи функції визначає імена, під якими ці об'єкти відомі всередині підпрограми, а також тип необхідних фактичних параметрів. Між формальними і фактичними параметрами існує відповідність:

Page 40: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

38перший фактичний параметр відповідає першому формальному, другий – другому і т.д.

Кількість формальних і фактичних параметрів повинна бути однаковою. Типи формальних і фактичних параметрів повинні збігатися. Винятком є передача параметрів рядкового типу. В цьому випадку за допомогою директиви компілятору {$V+} можна активізувати перевірку збігу довжин фактичних і формальних параметрів. За замовчуванням встановлено режим {$V+}.

Turbo Pascal підтримує наступні види параметрів: параметри-значення, параметри-константи, параметри-змінні і без типові параметри-змінні.

Параметр-значення. Це локальна зміна для підпрограми. Формальний параметр відображає цю змінну всередині процедури чи функції. Фактичний параметр в цьому випадку повинен бути константою, змінною або виразом відповідного типу. У момент виклику процедури чи функції відбувається обчислення виразу і отримане значення присвоюється локальній змінній. У подальшому під час виконання підпрограми ця змінна зовсім не відрізняється від інших локальних змінних. Зміна формальних параметрів всередині процедури чи функції не викликає зміни відповідних фактичних параметрів. У наведених вище прикладах demo_procedure і demo_function усі параметри є параметрами-значеннями.

Параметр-константа. Це локальна константа для підпрограми. Цей параметр повністю подібний до параметра-значення, за виключенням того, що його значення не можна змінювати у підпрограмі. Для опису параметрів-констант у заголовку підпрограми існує ключове слово const, яке ставиться перед відповідними параметрами.

Параметр-змінна. Якщо процедура чи функція містить формальний параметр-зміну, то фактичний параметр може бути лише змінною того самого типу, а формальний параметр позначає цю змінну на весь час виконання підпрограми. Характерною ознакою параметра-змінної є той факт, що будь-яка зміна формального параметра викликає зміну відповідного фактичного параметра. Параметри-змінні використовуються тоді, коли цей параметр призначений для передачі результату процедури чи функції у програму. Для опису параметрів-змінних у заголовку підпрограми існує ключове слово var, яке ставиться перед відповідними змінними.

Наприклад, Type st80=string[80];Procedure demo(a,b:Byte;c:Char;var s:st80; var n:Byte);У процедурі demo параметри a, b і c є параметрами-значеннями, а параметри

s i n – параметрами-змінними.Для параметрів-змінних можна не вказувати їх типів. Тоді параметр є

безтиповим параметром-змінною. Такі параметри сумісні з будь-яким типом.Область дії мітки та імені(принцип локалізації). Опис або означення

мітки чи імені (константи, типу, змінної, процедури, функції) поширюється на весь блок, в якому міститься цей опис або означення. Область, в якій справедливе означення чи опис мітки або імені, називається областю дії цієї

Page 41: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

39мітки або імені.

Якщо ім'я або мітка описані чи означені в блоці основної програми, то вони називаються глобальними. Якщо ж ім'я або мітка описані чи означені всередині блока, то вони називаються локальними. Ім'я або мітка глобальні відносно блока, якщо вони описані або означені в блоці, що включає даний блок. Опис чи означення локальної мітки або імені поза межами "свого" блока невизначені. Якщо у вкладеному блоці описана чи означена локальна мітка або ім'я, що збігається із глобальною, то областю дії цієї локальної мітки чи імені буде "свій" блок, за його межами діє опис чи означення глобальної мітки або імені.

Наприклад, під час виконання програми:Program demo_var;Var a,b,c,d:Integer;Procedure change(c:Integer; var d:Integer); Var b:Integer; begin a:=1; b:=1; c:=1; d:=1end;begin a:=0;b:=0;c:=0;d:=0; change(c,d); Write(‘a=’,a,’ b=’,b,’ c=’,c,’ d=’,d)end.Отримуємо результат:a=1 b=0 c=0 d=1.Змінна а є глобальною для програми demo_var, область її дії поширюється й

на процедуру change. Зміна значення а всередині процедури change викликає зміну її значення і в основній програмі. У процедурі change описана локальна змінна b, значення її дійсне лише всередині цієї процедури. Глобальна змінна b свого значення не змінює. Змінна с, як параметр-значення, є теж локальною і свого значення за межами процедури change не змінює. Присвоєння всередині процедури change нового значення змінній d, як параметру-змінній, викликає зміну фактичного параметра d.

Побічний ефект. Побічним ефектом підпрограми називають зміну значення глобальної (не локальної) змінної всередині підпрограми. Якщо такий ефект не передбачений програмістом спеціально, то він може стати джерелом помилок, що досить важко виявити. У наведеному вище прикладі побічним ефектом процедури change є зміна значення глобальної змінної а.

Рекурсивні процедури та функції. Якщо процедура чи функція викликає сама себе, то вона називається рекурсивною. Глибина рекурсії, тобто кількість викликів, системою Тurbo Pascal не обмежується. Реально вона залежить від ресурсів пам'яті конкретного комп'ютера.

В загальному випадку рекурсивність – це не властивість самої процедури чи функції, а властивість її опису. Рекурсія – потужний інструмент для розв'язування багатьох задач. Рекурсивна підпрограма, як правило, коротша і

Page 42: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

40наочніша, але під час виконання вимагає більше часу і пам'яті за рахунок повторних звертань до самої себе і дублювання локальних змінних.

Попередній опис процедур і функцій. Взаєморекурсією називається ситуація, коли декілька підпрограм викликають одна одну, наприклад, підпрограма А викликає підпрограму В, а остання, в свою чергу, викликає підпрограму А. Під час опису взаєморекурсії виникає замкнуте коло: в підпрограмі А необхідно використати підпрограму В, яка вже повинна бути описаною, тоді як під час опису підпрограми В слід описати підпрограму А. Для подолання таких ситуацій існує директива попереднього опису forward. Під час опису підпрограми А замість її тіла ставиться ключове слово forward. Далі йде опис підпрограми В і можливо інших підпрограм, за якими розташовується заголовок та тіло підпрограми А, причому в її заголовку формальні параметри не вказуються.

Блок-схема програми, в якій є підпрограма, та блок-схема підпрограми наведені на рисунку 4.1.

Рисунок 4.1 – Блок - схема програми з підпрограмою

Початок

Кінець

Заголовок процедури чи функції з зазначенням усіх

формальних параметрів

Оператор процедури чи функції

Кінець

Початок

Оператор

Page 43: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

41Приклад вирішення лабораторного завдання:

4.2 Методичні вказівкиа) вивчити правила запису підпрограм різних типів та засобів звертання до

них;б) вивчити засоби передачі параметрів до підпрограми ;в) засвоїти правила запису програм, які використовують підпрограми різних

видів;г) розробити алгоритми розв`язання задач свого варіанту, записавши їх у

вигляді блок-схем;д) підготувати текстовий варіант програми та попередніх даних.

4.3 Контрольні запитання1. Підпрограми-процедури у програмі.2. Підпрограми-функції у програмі.3. Різниця між процедурами та функціями.4. Формальні та фактичні параметри.5. Принцип локалізації.6. Особливості складання блок-схеми програми, що має підпрограми.7. Процедурний тип даних.8. Рекурсія.

Задача: Скласти програму для обчислення значення функції, використовуючи підпрограму:

Блок-схема і текст програми:

Var x,y,z,w:real;function f(a,b:real):real;beginf:=sqrt(a+b*b*b)end;beginwrite('Введіть значення х,y,z:');readln(x,у,z);w:=f(x,y)+f(y,z)+f(z,x);writeln('w=',w:2:8);readlnend.

Початок

Ввеcти x,y,z

Кінець

Вивести w

w:=f(x,y)+f(y,z)+f(z,x)

f:=

Function f(a,b:real):real

Початок

Кінець

Page 44: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

424.4 Варіанти завдань

Варіант 1Задача1: Написати програму знаходження кутів багатокутника IKLMN зі

сторонами i,k,l,m,n та діагоналями dl dm.

Вказівки: кут А трикутника виражається через його сторони a,b,c за

формулою: A=2arctg( )( )

( )p b p c

p p a

, де p= a b c 2 – напівпериметр. Попередні дані

задавати самостійно.Задача2: Обчислити наступні функції:

x= ; y=(x+7)3+(x7)5; w=ln(xa+yb); v=xsinb+(8x)cosb;Вказівки: попередні дані задавати самостійно; операцію піднесення до

ступеня оформити у вигляді функції.

Варіант 2Задача1: Написати програму знаходження наближеного значення інтеграла

I=dxx10

20

, використовуючи наступну наближену формулу:

І= де h=xi+1xi

Вказівки: прийняти h=0.01; знаходження підінтегральної функції оформити у вигляді function.

Задача2: Дано дійсні додатні числа a,b,c. Обчислити :

.

Вказівки: попередні дані задавати самостійно; знаходження max оформити у вигляді procedure.

Варіант 3Задача1:Обчислити визначений інтеграл:

І= 2 1x dxb

a

, за формулою: І= .

Вказівки: попередні дані задавати самостійно; знаходження підінтегральної функції оформити у вигляді function.

Задача2: Обчислити величину:

Page 45: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

43

y= , де значення гіперболічного тангенса обчислюється

за формулою:

th(x)= .

Вказівки: обчислення значень факторіала та th(x) оформити у вигляді процедур; значення t задавати самостійно.

Варіант 4Задача1: Задані дійсні числа a1,a2,a3; b1,b2,b3; c1,с2,с3. Отримати:

е=Вказівки: попередні дані задавати самостійно; знаходження min оформити у

вигляді функції, а обчислення та введення ai ,bi,, ci– у вигляді процедур. Задача2: Задані дійсні числа e,m,n,o. Знайти площу п`ятикутника.

Вказівки: значення e,m,n,o задавати самостійно; знаходження площі трикутника за формулою Герона S= p p a p b p c( )( )( ) , де p=(a+b+c)/2 оформити у вигляді function.

Варіант 5Задача1: По заданим дійсним числам a0, a1, .... a10; b0, b1, .... b10; c0, c1, .... c10;

x, y, z обчислити величину:

Вказівки: попередні дані задавати самостійно; введення елементів векторів задати у вигляді процедури; знаходження ступеневого багаточлена задати у вигляді функції, яка реалізує схему Горнера: p=a0xn+ a1xn-1 +…+ an-1x+an=(...(( a0x+a1)x+a2)x+...+an-1)x+an));

Задача 2: Створити підпрограми для обчислення опору паралельного та послідовного з’єднання n резисторів. В якості параметрів підпрограм використати кількість резисторів і масив з номіналів опорів цих резисторів.

Вказівки: За допомогою підпрограм порахувати паралельне та послідовне з’єднання наступних резисторів:

а)1.5, 330, 200, 1500; б) 2200, 390, 1000, 4700, 56000, 750; в)8200, 430, 150;

Варіант 6Задача1: Дано дійсні числа x1,y1,....x10,y10. Знайти периметр десятикутника,

вершини якого мають відповідні координати: (x1,y1),....(x10,y10).

1e

2 m2.5

no

Page 46: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

44Вказівки: операцію знаходження довжини між двома точками, які задані

своїми координатами, оформити у вигляді процедури.Задача 2: Створити підпрограму для переведення числа із двійкової до

десяткової системи числення.Вказівки: двійкове число задавати як одномірний масив.

Варіант 7Задача 1: Вирахувати вираз:

Вказівки: піднесення до ступеня оформити у вигляді функції, де параметром буде показник ступеня; значення x, y вводити з клавіатури (x>0).

Задача 2:

Вирахувати величину де

Вказівки: вирахування k(a, b, c) оформити у вигляді процедури; значення x, y, z вводити з клавіатури.

Варіант 8

Задача 1: Вирахувати вираз:

Вказівки: піднесення до ступеня та знаходження факторіалу оформити у вигляді функції; значення x та y вводити з клавіатури.

Задача 2: Вирахувати вираз: де значення

гіперболічного тангенсу вирахувати по формулі:

Вказівки: вираховування значення факторіалу оформити у вигляді функції; вираховування значення th(x) оформити у вигляді процедури; значення t вводити з клавіатури.

Варіант 9Задача 1: Дано дійсні числа a, b. Знайти: u=max(a, b), v=max(ab, a+b), с=max(u5+v5, 256).Вказівки: попередні дані задавати самостійно; знаходження max оформити

у вигляді функції.

Page 47: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

45Задача2: Змінній t присвоїти значення true, якщо рівняння x2+6.2x+a2=0 та

x2+ax+b1=0 мають дійсні корені та в той-же час обидва корені першого рівняння лежать між коренями другого, і присвоїти значення false в усіх інших випадках.

Вказівки: a,b задавати самостійно так, щоб перевірити усі можливі випадки. Вирішення будь-якого квадратного рівняння оформити у вигляді підпрограми-процедури.

Варіант 10Задача 1: Задані два комплексні числа (a+ib) і (c+id) і тип операції

(додавання, множення, віднімання, ділення). Створити функції для виконання арифметичних операцій над комплексними числами і вирахувати значення модулів заданих комплексних чисел.

Вказівки: a, b, c та d вводити з клавіатури.Задача2: Дано дійсні числа s,t. Отримати g(1.2, s) + g(t, s) g(2s1, st), де

g(a,b)= a ba ab b

2 2

2 22 3 4

Вказівки: попередні дані задавати самостійно; знаходження функції g(a, b)

оформити у вигляді підпрограми-функції.

Page 48: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

465 ЛАБОРАТОРНА РОБОТА №5. ОБРОБКА СИМВОЛЬНИХ ДАНИХ

Мета роботи: отримання навичок з алгоритмізації та програмування задач, які оброблюють символьні дані; освоїти введення та виведення символьних даних, їх оброблення; навчитися використовувати стандартні процедури та функції оброблення символьних даних.

5.1 Теоретичні відомостіТеоретичні відомості щодо символьного типу даних (char) приведені у

першій лабораторній роботі.Рядок – це послідовність довільних символів. Рядкові константи під час

використання беруться в апострофи. В рядку може міститися від 0 до 255 символів. Опис рядкового типу складається з ключового слова string, за яким в квадратних дужках записано максимальну кількість символів, що може мати змінна описуваного типу.

Наприклад,type line=string[80];var s:line;t:string[15];begins:='Довільна послідовність символів'; t: = 'TURBO'; writeln(s,’ ’,t)end.Символи рядка мають номери від 0 до 255, причому ASCII код символу з

номером 0 дорівнює поточній довжині даного рядка. До окремого символу рядка можна звернутися за допомогою індексу, так само, як під час звертання до елемента масиву. Так, s[11]='о' – 11-й символ рядка s, t[0] – нульовий символ рядка t, причому Ord(t[0])=5 – поточна довжина рядка t.

Операції над рядками. Над даними рядкового типу визначено операції додавання, відношення і оператор присвоєння. Також їх можна вводити з клавіатури та виводити на екран.

Зчеплення двох чи більше рядків в один реалізується за допомогою операції додавання або конкатенації, яка позначається знаком '+'. Додаватися можуть рядки довільної довжини, але необхідно, щоб довжина рядка-результату не перевищувала 255.

Вираз Результат'Turbo'+' '+'Pascal '+'v.7.1' 'Turbo Pascal v.7.1''ТРАН'+''+'ЗИСТОР' 'ТРАНЗИСТОР'

У другому прикладі пара апострофів, що йдуть підряд, зображає порожній символ. Він не відображається на екрані і не має порядкового номера.

Довільні два рядки можна порівнювати один з одним за допомогою операцій відношення (=, <>, <, >, <=, >=). Порівняння рядків відбувається зліва направо, до першого відмінного символу. Два рядки рівні, якщо вони мають однакову довжину і складаються з однакових символів, що йдуть в

Page 49: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

47одному порядку. Меншим буде той рядок, в якому символ, що не збігається, має менший ординальний номер. Якщо рядки мають різну довжину, але в спільній частині збігаються, то меншим вважається коротший рядок. Результат операції відношення має логічний тип.

Вираз Результат 'ABCDE' > 'ABcde' False'Turbo' >= 'Turbo' True'' < Char(0) True'0123' <> '1023' True'Pascal' = 'Pascal' True

Оператор присвоєння використовується для присвоєння рядковій змінній результату виразу, що має рядковий тип. Якщо з правого боку від оператора присвоєння матимемо рядок, що містить більше символів, ніж може містити змінна, що стоїть зліва, то зайві праві символи відкидаються. В операторі присвоєння допускається змішування символьного і рядкового типів. Якщо в даному випадку символьній величині присвоюється рядок, поточна довжина якого більша 1, то виникає помилка під час виконання.

Наприклад,var s,t:string[12]; c:char;begin c:='T'; s:=c+'urbo'; t:='A'; s:=s+' Pascal v.7.1'; { в результаті s рівна ' Turbo Pascal v.7.1'} c:=t; {допустимо, бо поточна довжина і – 1 символ} c:=s {"недопустимо, бо поточна довжина s – 12 символів}end.Стандартні підпрограми обробки рядків. Під час подальшого опису

процедур і функцій під типом anystring розумітимемо будь-який рядковий тип.Процедури. Delete(Var s:anystring; n,m:Integer) – вилучення m символів з

рядка s, починаючи з n-го символу. Якщо n більше довжини рядка, то не відбувається ніяких дій. Якщо n+m більше довжини рядка, то вилучаються всі символи до кінця рядка. Значення n повинно лежати в межах 1..255.

Вираз Результатs:= 'Turbo' Delete(s,2,3) 'To's:= 'Turbo' Delete(s,9,4) 'Turbo's:= 'Turbo' Delete(s,4,3) 'Tur'

Insert(s:anystring; Var t:anystring; n:Integer) – вставлення рядка s в рядок t перед символом з номером n. Якщо n більше довжини рядка t, то відбувається конкатенація t i s. Якщо довжина результату перевищує максимальну довжину рядка t, то в t залишаються тільки ліві символи. Значення n повинно лежати в межах 1..255.

Нехай t має тип string[9].

Page 50: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

48Вираз Результат

t:= 'Tuo' Insert('rb',t,3) 'Turbo't:= 'Turbo' Insert('.COM',t,7) 'Turbo.COM't:= 'Turbo' Insert('INST.COM',t,2) 'TINST.COM'Str(n:Integer{або Real}; Var s:anystring) – перетворення цілого або дійсного

значення n у рядок s. Рядок s повинен мати достатню довжину. Після n може бути вказаний формат, як в операторі виведення Write. Якщо у форматі вказано кількість позицій, яка більша за довжину рядка s, то зайві праві символи будуть відкинуті.

У наступних прикладах змінна r має тип Real і значення 567.89, s має тип string[5], р має тип string[10].

Вираз Число Результат Str(-100,s) -100 '-100'Str(13:4,s) _ _13 ' 13'Str(13:6,s) _ _ _13 ' 1'Str(r:10,p) 5.6789E+02 '5.6789E+02'Str(r:8,p) 5.68E+02 '5.68E+02'Str(r:8:2 ,p) _ _ 567.89 ' 567.89'Str(-r:12:2,p) _ _ _ _ _ -567.89 ' -567.'Val(s:anystring; Var n:Integer{або Real}; c:Integer) – перетворення рядка s у

число n. Рядок s повинен бути зображенням деякого числа і не повинен містити початкових і кінцевих пропусків. Якщо перетворення відбулось успішно, то с=0, в іншому випадку значення n не визначене, а змінна с дорівнює номеру першого помилкового символу в рядку s.

Вираз Результат Val('1234',n,c) Для n довільного типу його значення 1234 i с=0. Val('12.34',n,c) c=3, n не визначене для n цілого типу; с=0, n=12.34 для n дійсного типу. Val('-149_',n,c) с=5, n не визначене для n довільного типу.

Функції. Concat(s1,s2,...,sn:anystring):anystring – конкатенація рядків s1,...,sn в один у вказаному порядку. Якщо довжина рядка-результату перевищить 255, то виникне помилка під час виконання.

Вираз Результат Concat('Turbo',' ','Pascal') 'Turbo Pascal'Сору(s:anystring; n,m:Integer):anystring – результатом є m символів з рядка s,

починаючи з символу з номером n. Якщо n більше довжини рядка s, то результатом функції буде порожній символ. Якщо n+m більше довжини рядка s, то результатом функції будуть кінцеві символи, починаючи із символу з номером n. Значення n повинно лежати в межах 1..255.

Вираз Результат Copy('Turbo Pascal',7,6) 'Pascal' Copy('Turbo Pascal',14,3) '' Copy('Turbo Pascal',9,7) 'scal' Copy(s,n,1) s[n], якщо

Page 51: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

49Length(s:anystring):Byte – результатом є поточна довжина рядка s тобто

кількість в ньому символів. Вираз Результат Length('Turbo ') 6 Length('') 0Pos(s,t:anystring):Byte – результатом є найменший номер символу,

починаючи з якого рядок s входить в рядок t, якщо входження немає, то результатом буде 0.

Вираз Результат Pos('rb', 'Turbo') 3 Pos('AB','BABBABBAB') 2 Pos(' Turbo','Pascal') 0

Page 52: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

50

Приклад вирішення лабораторного завдання:5.2 Методичні вказівки

а) вивчити правила запису символьних даних (констант, змінних, масивів) та опис способу їх введення та виведення;

б) ознайомитися з основними стандартними процедурами та функціями, які дозволяють оброблювати символьні рядки. Звернути увагу на виклик підпрограм та на типи формальних параметрів;

в) розробити алгоритми розв`язання задач свого варіанта, записавши їх у вигляді блок-схем;

г) забезпечити в програмі виведення коментарів, відповідних різним можливим ситуаціям.

Задача: В масиві, який складається з n рядків, кожен з яких містить назву товару, його кількість і ціну через пробіли, знайти найдорожчий і найдешевший товари, а також той товар, якого найбільше.

Вказівки: початковий масив задати самостійно.

Блок-схема і текст програми:

const n=5;var s:array[1..n]of string;smax,smin,sbil:string;max,min,bil:real;e,k,c,p1,p2,i:integer;beginwriteln('Введіть ’,n,’ рядків:');for i:=1 to n do readln(s[i]);max:=0;min:=65535;bil:=0;for i:=1 to n do begin p1:=pos(‘ ’,s[i]);delete(s[i],p1,1); p2:=pos(‘ ’,s[i])+1;insert(‘ ’,s[i],p1); val(copy(s[i],p1+1,p2-p1-1),k,e); val(copy(s[i],p2,length(s[i])-p2+1),c,e); if k>bil then begin sbil:=copy(s[i],1,p1);bil:=k end; if c>max then begin smax:=copy(s[i],1,p1);max:=c end; if c<min then begin smin:=copy(s[i],1,p1);min:=c end; end;writeln(‘Найдорожчий: ’,smax,max:2:2);writeln(‘Найдешевший: ’,smin,min:2:2);writeln(‘Найбільше: ’,sbil,bil:2:0);readlnend.

i:=i+1

Ніk>bil

Так

i<=nТак

sbil:=copy(s[i],1,p1)bil:=k

Ні

Початок

Ввеcти n рядків

Кінець

Вивести результат

max:=0;min:=65535;

bil:=0;i:=1

p1:=pos(‘ ’,s[i]) delete(s[i],p1,1)

p2:=pos(‘ ’,s[i])+1insert(‘ ’,s[i],p1)

val(copy(s[i],p1+1,p2-p1-1),k,e)

val(copy(s[i],p2,length(s[i])-p2+1),c,e)

Ніc>max

Так

smax:=copy(s[i],1,p1) max:=c

Ніc<min

Так

smin:=copy(s[i],1,p1) min:=c

Page 53: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

51

5.3 Контрольні запитання1. Рядковий тип даних.2. Символьний тип даних3. Операції з рядками.4. Стандартні процедури для дій з рядками.5. Стандартні функції для дій з рядками.

Page 54: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

525.4 Варіанти завдань

Варіант1Задача1: Написати програму, яка реалізує епізод казки: ЕОМ питає, куди

бажає піти герой (наліво, направо чи прямо), та виводить на екран, що його чекає в кожному випадку.

Вказівки: відповідь ЕОМ присвоїти символьній(рядковій) змінній та вивести на екран; текст питань та відповідей ЕОМ задавати самостійно.

Задача2: Задати інформацію для групи студентів у вигляді одномірного рядкового масиву, кожний елемент якого містить наступні данні: прізвище, ім`я, по батькові, рік народження. Визначити середній вік студентів та прізвище самого старшого.

Вказівки: результат присвоїти двом рядковим змінним та вивести на екран. (Наприклад: середній вік – 18 років. Старший – Іванов – 20 років)

Варіант 2Задача1: У кіоску продається газета, яка коштує 1гр. та журнал, який

коштує 2гр. Написати програму, яка питає про бажання покупця (журнал чи газета), приймає гроші (сума грошей вводиться з клавіатури) та виводить на екран належну здачу.

Задача2: Задати інформацію про результати сесії для групи студентів у вигляді одномірного масиву, кожний елемент якого містить інформацію про одного студента (прізвище та п`ять оцінок через кому).

Обчислити середній бал кожного студента та створити новий рядковий масив, кожний елемент якого містить інформацію у вигляді: середній бал Іванова - 4.2.

Варіант 3Задача1: У масиві із n рядків, кожна з яких містить ім`я та прізвище, знайти

тих, кого звуть Вася.Задача 2: В одномірному масиві із n рядків, кожний з яких містить номінал

резистора, перевести його зі скороченого вигляду у повний (МОм = х106, кОм = х103 і т.д. Наприклад: ‘3,3 ГOм’ = ‘3300000000 Ом’), а також знайти максимальний і мінімальний опір.

Вказівки: рядки та n задати самостійно.

Варіант 4 Задача1: Визначити, чи входить слово ”день” у рядок, який складається з

декількох слів. Якщо так, то отримати новий рядок, який відповідає старому, але з якого виключені всі слова “день”.

Задача2: Задати рядковий масив, кожний елемент якого містить наступну інформацію: прізвище складальника деякого виробу даного цеху та число виробів, які той зібрав кожного дня за тиждень (через кому). Написати програму, яка видавала б значення рядкової змінної (яка визначена у програмі), що містить прізвище складальника, загальну кількість виробів за тиждень та

Page 55: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

53середнє число виробів, що складалися за день (для кожного складальника). Визначити та вивести на екран прізвище того працівника, який досягнув найвищої продуктивності праці.

Варіант 5Задача1: Написати програму, яка питає ім`я, порівнює з тими, що вона має

як елементи символьного масиву та вітає або повідомляє, що “не знайома”.Задача2: Написати програму, яка виконує наступні фінансово-економічні

розрахунки. Дані у вигляді місячної заробітної плати робочих зі спеціальностями різних категорій занести в одномірний масив рядків, кожен з яких (рядок) містить: прізвище, категорію, місячний заробіток, номер цеху. Обчислити загальну суму виплат за місяць по всіх категоріях, по категоріях окремо, відсоток по категоріях від загальної суми, середню місячну заробітну плату по категоріях.

Варіант 6Задача1: Дано масив з n рядків. В кожному рядку замінити всі знаки оклику

крапками.Задача2: Написати програму, яка:а) створює каталог виробів, які зберігаються на складі. Кожен запис

каталогу є рядок і містить шифр деталі, кількість та місце знаходження. По введеному шифру ЕОМ повідомляє про кількість виробів на складі та їх місцезнаходження;

б) вносить зміни про кількість деталей, які знаходяться на складі, під час їх видачі покупцю.

Варіант 7Задача 1: Розробити програму, котра в текстовому рядку замінює будь-яку

кількість однакових символів, що йдуть один за одним підряд на один такий же символ та цифру, яка відповідає кількості видалених символів (Наприклад: ‘1CABk3KKK111DeFf0100fk0cccccc’=’1CABk3K212DeFf0101fk0с5’).

Вказівки: початковий рядок вводити з клавіатури; отриманий рядок виводити під початковим рядком.

Задача 2: В одномірному масиві із n рядків, кожний з яких містить прізвище та ім’я через пробіл, знайти та вивести прізвища тільки тих, у кого ім’я складається з 4 літер.

Вказівки: рядки та n задати самостійно.

Варіант 8Задача 1: В масиві, який складається з рядків, кожен з яких містить

прізвище, ім’я та по-батькові через пробіли, знайти й вивести на екран тих, у кого прізвище Іванов чи Іванова.

Вказівки: початковий масив задати самостійно.

Page 56: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

54Задача 2: В символьному рядку видалити всі непарні числа, а парні числа

взяти в круглі дужки (наприклад: початковий рядок ‘Abc18Cd056k-!B,10’, результуючий рядок :’Abc(8)Cd(0)(6)k-!B,(0)’).

Вказівки: початковий рядок вводити з клавіатури; результуючий рядок вивести під початковим.

Варіант 9Задача 1: Розробити програму, котра в текстовому рядку замінює будь-яку

кількість прогалин, що йдуть підряд на одну прогалину і переводить всі великі літери, крім першої, у маленькі, а цифри видаляє. (Наприклад: ‘Я1CA    Bk3льK1De 0100fk0  cccc’=’Яса bkльk1de fk сcc’).

Вказівки: початковий рядок вводити з клавіатури; отриманий рядок виводити під початковим рядком.

Задача 2: В одномірному масиві із n рядків, кожний з яких містить номінал котушки індуктивності, перевести його зі скороченого вигляду у повний (мкГн = х10-6, мГн = х10-3 і т.д. Наприклад: ‘120 мкГн’ = ‘0.00012 Гн’), а також знайти сумму всіх індуктивностей у масиві.

Вказівки: рядки та n задати самостійно.

Варіант 10Задача 1: В заданому рядку знайти найкоротше і найдовше слово та

вказати номери позицій, з яких вони починаються.Вказівки: початковий рядок задати самостійно.Задача2: У продажу книг у книжковій крамниці приймає участь ЕОМ.

Написати програму, яка питає у покупця назву книги, яку той бажає купити. Якщо книга є у продажу, то повідомляє, скільки та коштує, приймає гроші (сума грошей вводиться з клавіатури). Далі ЕОМ визначає належну здачу (якщо грошей внесено більше); виводить на екран “Дякую”, якщо здача не потрібна; або виводить повідомлення про недостачу коштів.

Вказівки: попередні дані задавати у вигляді масиву рядків, кожний з яких містить наступну інформацію: прізвище автора, назву, ціну.

Page 57: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

556 ЛАБОРАТОРНА РОБОТА №6. ОБРОБЛЕННЯ ФАЙЛОВИХ СТРУКТУР ДАНИХ, ВИКОРИСТАННЯ ЗАПИСІВ

Мета роботи: отримання навичок з алгоритмізації та програмування задач з використанням файлових структур даних; освоїти проектування структури файлу, виведення даних до файлу та читання даних з файлу; отримання навичок з організації введення/виведення значень комбінованих типів даних; опанування практичними навичками програмування задач з використанням записів.

6.1 Теоретичні відомостіЗапис – це складений або структурний тип даних, що містить фіксовану

кількість компонент, кожна з яких може мати свій тип. Тип компонент запису може бути довільним: простим, складеним або вказівним.

Опис записного типу складається з ключового слова Record, за яким іде список компонент із зазначенням їхніх типів. Завершує опис, ключове слово end. Компонента запису називається полем.

Загальний вигляд опису записного типу:Type <ім'я типу> = Record<ім'я поля> : <тип поля>;. . . . . . . . . . . . . . . . . . . . . .<ім'я поля> : <тип поля> end;Поле може бути й записного типу, тобто допускається вкладеність записів.

У межах одного запису імена полів повинні бути різними, у вкладених записах вони можуть повторюватися.

Над даними записного типу, як над одним цілим, визначені дві операції: селекція (виділення) компоненти та оператор присвоєння. Для селекції компоненти деякого запису після імені змінної записного типу ставиться знак '.' (крапка), за яким вказується ім'я поля. В операторі присвоєння можна вживати лише записи, ідентичні за структурою.

Наприклад, для задання інформації про студента можна ввести записний тип student із структурою

Type exam = (phisik, program, math); mark = Array[exam] of 0..100; date = Record day:1..31; month:1..12; уеаr:1900..2010 end; student = Record name :string[40]; group: string[6];

Page 58: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

56 birthday : date; sesion : mark end;Var s,s1 : student; d : date;Величина s.name має тип stringІ40], величина s.sesion має тип mark,

величина s.sesion[math] є діапазонного типу 0..100. Поле birthday має, в свою чергу, записний тип, тому доступ до його полів матиме вигляд: s.birthday.day – день, s.birthday.year – рік народження.

Присвоєння конкретного значення змінній s може мати такий вигляд:s.name:='Суботiна Лілія Геннадіївна'; s.group:='ПЕ-071';s.birthday.day:=29; s.birthday.month:=3; s.birthday.year:=1988;s.sesion[phisik]:=90; s.sesion[program]:=95; s.sesion[math]:=100.Оператор приєднання with. Використання полів є громіздким через те, що

постійно зазначається ім'я змінної-запису. Для скорочення подібних записів використовують оператор приєднання with. Цей оператор задає область дії, в якій для запису, вказаному після with, ідентифікація поля відбувається за допомогою простого імені поля.

Загальний вигляд оператора приєднання:with <ім'я змінної-запису > do <оператор>;Таким чином, наведений вище фрагмент матиме вигляд:with s do begin name:= 'Суботiна Лілія Геннадіївна'; group:=ПЕ-991' ; with birthday do begin day:=29; month:=3; year:=1980; end; sesion[phisik]:=90; sesion[program]:=95; s.sesion[math]:=100end.Вкладені оператори приєднання допускають скорочену форму запису.Запис with a do with b do with c do <оператор> еквівалентний записуwith a,b,c do <оператор> Область дії імені поля запису – внутрішній запис, в якому описано це поле.Наприклад,Var x:Real ; y:Record x,y:Integer end;Всередині блока операторів змінна дійсного типу х відрізняється від

цілочислової змінної у.х, а змінна записного типу у – від цілочислової змінної у.у. Всередині оператора

with y do <оператор>змінні х і у позначають відповідно змінні у.х і у.у, а дійсна змінна x

Page 59: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

57недоступна.

Записи з варіантами. Дані описаного вище записного типу мають, строгo фіксовану структуру, тобто кількість полів і їхній тип задаються лише раз і не змінюються. У мові Паскаль передбачено так звані записи з варіантами, що дають змогу утворювати гнучкіші структури.

Запис з варіантами складається з фіксованої і варіантної частин, причому фіксовану частину можна опускати. Фіксована частина є звичайним записом, а варіантна складається з ключового слова Case, за яким іде опис поля – селектора варіантів, ключового слова of і опису варіантів. Кожен варіант складається із списку полів, визначених для даного варіанта. Поля кожного варіанта і опис їх типу беруться в круглі дужки.

Загальний вигляд опису записного типу з варіантами:Type <iм'я типу> = Record <ім'я поля> : <тип поля>; . . . . . . . . . . . . . . . . . . . . <ім'я поля> : <тип поля>; Case <селектор> : <тип селектора> of <мітка 1> : (<ім'я поля> : <тип поля>, ….); . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <мітка n> : (<ім'я поля> : <тип поля>, ….); end;Значенням селектора повинна бути одна з описаних міток. Ці мітки не

мають нічого спільного ні з мітками для оператора переходу goto, ні з мітками оператора вибору Case. Значення селектора визначає, який з варіантів і, відповідно, які з імен полів доступні в даний момент виконання програми.

Усі імена полів повинні відрізнятись одне від одного, навіть якщо вони зустрічаються в різних варіантах.

Запис може містити лише одну варіантну частину, яка йде за фіксованою частиною. Допускаються вкладені варіанти, тобто полем деякого варіанту може бути запис з варіантами. Якщо для деякої мітки відповідне поле є порожнім, то цей факт записується так:

<мітка 1> : ();Наприклад, описаний вище тип student можна розширити за рахунок зміни

його структури. Ввести поле-селектор sex (стать). Для студентів – чоловіків визначити поле логічного типу mil_serv (military service – військовий обов'язок). Для студенток створити вкладену варіантну частину з полем-селектором логічного типу married (одружена чи ні). Якщо одружена, то в поле naiden_name записати дівоче прізвище, в противному разі не вводити ніякої інформації. Новий тип student матиме вигляд;

Type exam =(phisik, program, math); mark = Array[exam] of 0 ..100; date = Record day : 1..31; month : 1..12; уеаr : 1950..1980

Page 60: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

58 end; student = Record name :string[40]; group: string[6]; birthday : date; sesion : mark Case sex : (male, female) of male : ( mil_serv : Boolean); female : (Case married : Boolean of True : (maiden_name : string[20]); False : ( )) end;Констант-записи описуються як і звичайні записи. Значення полів

задаються в круглих дужках і відокремлюються знаками ' ; ' .Наприклад, для описаного вище типу з варіантами student задання констант-

запису s матиме вигляд:Type student = ( name :'Бура Оксана Михайлівна'; group: 'ПЕ-072'; birthday : (day : 22; month : 1;уеаr : 1988); sesion : (91,98,96); sex : female; married : True ; maiden_name : 'Висоцька';)Файловій тип (File)(типізовані файли).У мові Паскаль термін "файл"

стосується об'єктів, утворених послідовністю компонент одного типу, причому вважають, що файл міститься зовні програми. Компоненти файлу називаються його елементами. На відміну від масивового типу, кількість елементів файлу не визначається під час описування файлового типу.

Робота з файлами зводиться до відкриття файлу, виконання операцій над його елементами і закриття файлу.

Опис файлового типу складається з ключового слова File, за яким ідуть ключове слово of та типу елементів файлу. Елементами файлу можуть бути об'єкти довільного типу, крім файлового. Змінна файлового типу є досить специфічною, її не можна використовувати у виразах та в операторі присвоєння. Файлова змінна ототожнюється з деяким фізичним файлом і потім у програмі лише визначає файл, над яким виконуються операції.

Наприклад,Type complex = Record re,im : Real end; comp_fil = File of complex; Var f : comp_fil; h: File of Integer;

Page 61: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

59Тут файлова змінна f зображає файл, елементи якого мають записний тип

complex, h - файл, елементи якого є цілі числа.Послідовність елементів файлу встановлює їхній природний порядок,

причому в кожен момент безпосередньо доступним є один елемент файлу. Для доступу до елемента існує абстрактний вказівник файлу. Виконувати певні операції можна лише з тим елементом, на якому встановлено вказівник. Інші елементи стають доступними в міру пересування вказівника файлу. У кожному файлі є мітка його кінця. Вказівник не може бути переміщений за цей кінець. Якщо вказівник файлу міститься на мітці кінця, то під час записування у файл деякої величини мітка його кінця разом із вказівником переміщуються далі, а під час зчитування з файлу фіксується помилка введення-виведення. Над одним і тим самим файлом можна одночасно проводити операції зчитування і записування елементів.

Стандартні підпрограми для обробки файлів. Вони призначені для організації і ефективної обробки файлів. У подальшому filevar означає будь-який файловий тип, anystring – будь-який рядковий тип, filetype – тип, що збігається з типом елементів файлу.

Процедури.Assing(Var f:filevar; s:anystring) – файлова змінна f ототожнюється з

фізичним файлом з іменем s. Ім'я s містить основне або розширене ім'я файлу, а також може містити ім'я дисководу. Будь-яка робота з файлом повинна починатися з цієї процедури.

Наприклад, процедура Assign(h,'a:myfile.dta') ототожнює файлову зміну h фізичним файлом 'myfile.dta', що міститься в дисководі A.

Close(Var f:filevar) – закриття файлу f. В цьому випадку у файл записується мітка кінця файлу і вносяться необхідні зміни в директорій. Ця процедура необхідна для збереження результатів під час створення чи поновлення файлів.

Erase(Var f:filevar) – файл f витирається з диска.Flush(Var f:filevar) – очищає буфер файлу f. Коли відбувається запис у файл,

то дані записуються в нього не відразу. Спочатку накопичуються у буфері, що міститься в оперативній пам'яті, а коли буфер заповниться, відбувається запис у файл. Процедура Flush записує вміст буфера в тому стані, в якому він є в момент виклику процедури у файл. Якщо перед закриттям файлу буфер не був порожнім, то процедура Close автоматично переносить його вміст у файл.

Read(Var f:filevar; Var a1,…,an:filetype) – зчитування елементів з файлу f і присвоєння їх значень змінним із списку. Список повинен складатися хоча б з однієї змінної, інакше не виконуватимуться ніякі дії. Зчитування починається з поточного місцезнаходження вказівника файлу, а після закінчення процедури він встановлюється на першому непрочитаному елементі. Якщо тип деякої змінної зі списку не збігається з типом елементів файлу, то фіксується помилка введення-виведення.

Rename(Var f:filevar; s:anystring) – ім'я файлу f замінюється іменем, заданим рядком s. Нове ім'я не повинно збігатися з іменами вже існуючих файлів.

Page 62: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

60Reset(Var f:filevar) – відкриває вже існуючий файл f. Вказівник файлу

встановлюється на перший елемент. Якщо такого файлу не існує, то виникає помилка введення-виведення.

Rewrite(Var f:filevar) – утворює новий файл f. Якщо такий вже існував, то він очищається. Вказівник файлу знаходиться на початку файлу.

Seek(Var f:filevar; n:Integer) – встановлює вказівник файлу f на n-й елемент. Перший елемент має номер 0, другий – 1 і т.д.

Write(Var f:filevar; a1,….,an:filetype) – запис у файл f значень змінних із списку. Список повинен складатися хоча б з однієї змінної, інакше не виконуватимуться ніякі дії. Після виконання процедури вказівник файлу міститься після останнього записаного елемента. Якщо тип деякої змінної зі списку не збігається з типом елементів, то фіксується помилка введення.

Процедури Flush, Read, Seek, Write застосовуються лише до відкритих файлів, а процедури Erase і Rename – до закритих файлів. Порушення цього правила призводить до виникнення помилки введення-виведення

ФункціїEof(Var f:filevar):Boolean – має значення True, якщо вказівник файлу

міститься на мітці кінця файлу, і False – в іншому випадку.FilePos(Var f:filevar):Integer – визначає номер елемента, в якому міститься

вказівник файлу.FileSize(Var f:filevar):Integer– визначає кількість елементів у файлі.Усі три функції повинні застосовуватись до відкритих файлів.Контроль операцій введення-виведення. Спосіб контролю правильності

операцій введення-виведення залежить від стану директиви контролю цих операцій. Директива має вигляд: {$І+} або {$І-}. За замовчуванням директива перебуває в активному стані {$І+}. У цьому режимі, якщо виникне помилка введення-виведення, робота програми переривається і користувач отримує повідомлення про номер та місцезнаходження помилки. Такий спосіб контролю незручний, бо може призвести до втрати даних.

Якщо директива {$І} перебуває в пасивному стані {$І-}, то за умови виникнення помилки введення-виведення виконання програми не припиняється, але наступні операції введення-виведення затримуються. Стан затримування зберігається доти, доки не буде викликана цілочислова функція IOResult. Ця функція повертає значення 0, якщо попередні операції введення-виведення були коректними, і деяке ненульове значення, якщо виявлені помилки. Після звертання до цієї функції значення її обнуляється. Хоча ця функція лише фіксує наявність чи відсутність помилок, контролюючи кожну операцію введення-виведення шляхом переведення директиви {$І} в пасивний стан тільки на момент виконання цієї операції, можна ідентифікувати причину виникнення помилки і передбачити програмні засоби для її усунення без переривання роботи програми і зі збереженням даних.

Наведемо програму, що показує, яким чином можна передбачити і обробити помилку, пов'язану з відкриттям для запису неіснуючого файлу. Користувач може ввести помилкове ім'я, і якщо файл з таким іменем не існує, програма

Page 63: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

61повідомить про це і ще раз попросить ввести ім'я файлу. Якщо такий файл існує, то буде виданий його розмір.

Program demo_control_IO;Uses crt;Var s : string[14]; b : Boolean; f : File of byte;begin ClrScr; GotoXY(30,5); Write(' Назва файлу : ') ;b:=False; Repeat GotoXY(45,5);Readln(s);Assign(f,s); {$І-} Reset(f); {$І+} If IOResult=0 then b:=True else begin GotoXY(30,7);Write('Такий файл не знайдено'); GotoXY(42,5);Write(' '); end until b; GotoXY(35,9);Write('Розмір: ',FileSize(f),' байт');Close(f); Repeat until keypressedend.Текстові файли. Окреме місце в мові Паскаль займають текстові файли. На

відміну від інших файлів, текстові файли не складаються з послідовності однакових елементів. Компонентами їх є рядки символів, що можуть мати довільну довжину. У кінці кожного рядка записується знак кінця рядка. У кінці файлу записується признак кінця файлу. Текстовий файл описується за допомогою стандартного ідентифікатора Техt. Наприклад,

Var f:Text. Оскільки текстові файли не мають регулярної структури, то до них не

можна застосовувати стандартні підпрограми FilePos, FileSize і Seek. Забороняється також одночасно читати і писати в один і той самий текстовий файл.

Процедури. Стандартні процедури Assign, Close, Reset, Rewrite мають ту саму дію. Процедури Read і Write модифіковані.

Read(Var f:Text;Var a1,…,an:anytype)– зчитує з файлу f значення і присвоює їх змінним із списку. Тип anytype може бути символьним, рядковим, цілим або дійсним. Дія і результат процедури Read залежать від типу величин, що зчитуються. Для параметра-змінної символьного типу з файлу буде зчитано символ і присвоєно відповідній змінній. Якщо до виконання процедури Read функція Eof набула значення Тruе, то символьній змінній буде присвоєно символ Chr($1А) (символ ^Z – кінець файлe), а якщо функція Eoln набула значення Тruе (в той-же час функція Eof набула значення False), то змінній буде присвоєно значення Сhr($0D) і Сhr($0A) (символ Сr – повернення каретки).

Page 64: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

62Для параметра-змінної рядкового типу процедура Read буде читати всі

символи з одного рядка файлу до символу кінця рядка, але не включаючи його. Якщо довжина рядка перевищує довжину рядка-змінної, то зайві праві символи буде відкинуто.

Для параметра-змінної цілого типу чи деякого його піддіапазону процедура Read чекатиме надходження послідовності символів, які утворюють цілочислову константу. Пропуски, символи табуляції чи мітки кінця рядка, які передують числовій послідовності, пропускаються. Зчитування припиняється за умови зустрічі першого пропуску, знака табуляції чи мітки кінця рядка, що йдуть за числовою послідовністю, або за умови зустрічі мітки кінця файлу. Якщо числова послідовність не відповідає очікуваному формату цілого числа, то фіксується помилка введення-виведення.

Наприклад, якщо в текстовому файлі є послідовність символів-149 5К4 і процедури зчитування мають виглядread(f,a);Read(f,b);(а і b – цілочислові змінні), то змінній а буде присвоєно значення -149, а під

час спроби зчитати значення змінної b фіксується помилка введення-виведення ('5К4' не є цілочисловою константою).

Для параметра-змінної дійсного типу процедура Read чекатиме надходження послідовності символів, що утворюють константу дійсного типу. Пропуски, символи табуляції чи мітки кінця рядка, що передують числовій послідовності, пропускаються. Зчитування припиняється за умови зустрічі першого пропуску, знака табуляції чи, мітки кінця рядка, що йдуть за числовою послідовністю, або за умови зустрічі мітки кінця файлу. Якщо числова послідовність не відповідає очікуваному формату дійсного числа, то фіксується помилка введення-виведення.

Наприклад, якщо в текстовому файлі є послідовність символів1965.0503_ _-1.607Е+042.1А-05і процедури зчитування мають виглядRead(f,a,b);Read(f,c);(a,b і с-змінні дійсного типу), то змінній а буде присвоєно значення

1.9650503Е+03, змінній b - значення -7.607Е+04, а під час спроби зчитати значення змінної с фіксується помилка введення-виведення (послідовність '2.1А-05' не є дійсною константою).

Якщо в двох останніх випадках (під час зчитування величин числового типу) функція Еоf мала значення Тruе перед виконанням процедури Read або функція Еоln набула значення Тruе під час пропуску початкових пропусків, знаків табуляції чи міток кінця рядка, то змінній, що зчитується, не присвоюється ніяке значення.

В усіх випадках наступна процедура Read буде починати зчитування з того місця, де закінчилась попередня процедура Read.

Readln(Var f:Text; Var a1,…,an:anytype) – процедура, аналогічна процедурі Read, проте з тією відмінністю, що наступний оператор зчитування

Page 65: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

63виконуватиметься з початку нового рядка, а символи, залишені в попередньому рядку, ігноруються. Виклик процедури Readln без списку параметрів-змінних приводить просто до переміщення вказівника файлу на початок наступного рядка. Таким чином оператор Readln(f,a,b) аналогічний складеному оператору;

begin Read(f,a);Read(f,b);Readln(f) end; .Write(Var f:Text; Var a1,…,an:anytype) – записує у файл, який визначає f,

одне або більше значень із списку змінних. Тип anytype може бути символьним, рядковим, цілим, логічним або дійсним. У процедурі Write допускається форматоване виведення аналогічно форматованому виведенню на екран. В даному випадку вільні знакомісця записуються у файл як пропуски.

Writeln(Var f:Text; Var a1,…,an:anytype) – процедура, аналогічна процедурі Write, але на відміну від неї після закінчення запису значень змінних із списку у файл записується мітка кінця рядка і наступний оператор виведення здійснюватиме запис даних з нового рядка. Виклик процедури Writeln без списку параметрів-змінних приводить до запису в файл порожнього рядка.

Слід зазначити, що стандартні системні файли (con, com1, lpt1 ш т.д.) системою Turbo Pascal інтерпретуються як текстові і до них можна застосовувати процедури Readln і Writeln з тим самим змістом.

Наприклад, процедури Readln(Con) або Readln чекають натискування клавіші введення, процедура Writeln(Lst) виводить на друкуючий пристрій порожній рядок.

ФункціїEof(f:text):Boolean – аналогічна Eof для типізованих файлів. Eoln(f:text):Boolean – функція набуває значення Тruе, якщо вказівник файлу

міститься на мітці кінця рядка або на мітці кінця файлу, і False – в іншому випадку.

SeekEof(f:text):Boolean – функція, аналогічна функції Eof, але на відміну від неї ігнорує всі пропуски, символи табуляції і кінця рядка.

SeekEoln(f:text):Boolean – функція, аналогічна функції Eoln, але на відміну від неї ігнорує всі пропуски і символи табуляції.

Файли без типу. Система Turbo Pascal передбачає операції з файлами, які не мають типу. Ці файли сумісні з усіма типами файлів і призначені, як правило, для прямого доступу до файлу.

Опис безтипового файла складається з ключового слова File (наприклад: Var f:File; ). До файлів без типу можна застосовувати всі стандартні підпрограми, крім Read, Write і Flush. Вважають, що елементами файлів без типу є об'єкти довжиною 128 байтів. Під час використання процедури Seek вказівник файлу пересуватиметься по елементах такої довжини. Так, процедура Seek(f,2) помістить вказівник на третій елемент (байти з номерами 256..383). Операції зчитування і запису відбуваються лише порціями по 128 байтів. Це здійснюють процедури BlockRead і BlockWrite.

BlockRead(Var f:File; Var v:anytype; n:Integer; Var m:Integer) – процедура зчитує n блоків по 128 байтів з безтипового файла f. Результат вміщується в область оперативної пам'яті, яку займає змінна v (anytype – будь-який тип.).

Page 66: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

64Необов'язковий параметр m показує, скільки блоків було фактично зчитано. Якщо m<n, то це означає, що в процесі зчитування файл закінчився.

BlockWrite(Var f:File; Var v:anytype; n:Integer; Var m:Integer) процедура записує n блоків по 128 байтів у безтиповий файл f. Дані, які записуються, беруться з області оперативної пам'яті, яку займає змінна V (anytype – будь-який тип). Необов'язковий параметр m показує скільки блоків було фактично записано. Якщо m<n то це означає, що з деякої причини не всі блоки були записані.

Page 67: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

65

Приклад вирішення лабораторного завдання:6.2 Методичні вказівки

а) вивчити основну термінологію, яка пов`язана з файловими структурами даних: файл та його структура, фізичний та логічний записи, методи доступу, поточний вказівник файлу;

б) вивчити стандартні процедури та функції, які забезпечують основні операції з файлами прямого та послідовного доступу;

Задача А: Створити програму для запису у файл асортименту товару в магазині. Структура запису: назва товару, кількість, ціна.

Задача В: знайти у файлі інформацію про товар, назва якого вводиться з клавіатури.

Блок-схеми і текст програм:

Задача А:uses crt; type tov=record

nazva:string;kilk:integer;cina:real end;

var f:file of tov; x:tov;beginAssign(f,’market.dat’);Rewrite(f);repeatwriteln('Введіть інформацію про товар’);write('назва:');readln(x.nazva);write(‘кількість:');readln(x.kilk);write('ціна:');readln(x.cina);write(f,x);writeln(‘Для виходу натисніть [ESC]')until readkey=#27; close(f)end.

Задача B:type tov=record

nazva:string;kilk:integer;cina:real end;

var f:file of tov; x:tov;s:string;beginAssign(f,’market.dat’);Reset(f);write('назва:');readln(s);while not eof(f) do begin read(f,x);if x.nazva=s then writeln(x.kilk,’ ’, x.cina:2:2);end; close(f); readlnend.

вийти?Так

Ні

Кінець

Початок

Ввеcти x

Assign(f,’market.dat’)Rewrite(f);

write(f,x)

close(f)

Введення x

Ніx.nazva

=s

Так

not eof(f)

Так

Ні

Кінець

Початок

ввести s

Assign(f,’market.dat’)Reset(f);

read(f,x)

close(f)

Page 68: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

66в) засвоїти правила роботи з комбінованими типами даних: структура

записів, опис записів у програмі, доступ до окремих полів записів, записи з варіантами, оператор приєднання;

г) розробити алгоритми розв`язання задач свого варіанта, записавши їх у вигляді блок-схем. Файл повинен складатися із деякої кількості окремих записів, а не одного масиву.

д) підготувати текстовий варіант програми та попередніх даних. Провести відлагодження програми, перевіривши всі можливі ситуації.

6.3 Контрольні запитання1. Тип даних запис.2. Запис з варіантом.3. Файловий тип даних.4. Оператор приєднання.5. Операції з файлами прямого доступу(типизованими).6. Операції з файлами послідовного доступу(текстовими).7. Операції з безтиповими файлами.8. Особливості роботи з файлами у програмі.

6.4 Варіанти завданьВаріант1

Задача А: Створити файл, який містить інформацію про особисту колекцію книголюба. Структура запису: шифр книги, автор, рік видання, місцезнаходження (номер стелажу, шафи та т.і.). Кількість записів довільна.

Задача В: Написати програму, яка видає наступну інформацію:— місцезнаходження книги автора A назви B. Значення A,B ввести з

клавіатури;— список книг автора C, які знаходяться в колекції;— кількість книг видання X року, які знаходяться в колекції.

Варіант 2Задача А: Створити файл-довідник, який містить дані про біполярні

транзистори. Структура запису: марка, провідність (n-p-n, p-n-p), максимальний струм колектора, максимальна напруга колектор-емітер, мінімальний і максимальний коефіцієнти підсилення (h21e), максимальна робоча частота. Кількість записів довільна.

Задача В: Написати програму, яка дозволяє шукати у довіднику:— всю інформацію по введеній марці транзистора з клавіатури;— по введеному з клавіатури струму, напрузі і коефіцієнту підсилення

видати всі підходящі транзистори;— видати всі комплементарні пари транзисторів (у яких параметри

однакові, а провідність різна).

Page 69: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

67Варіант 3

Задача А: Утворити файл, який містить інформацію про співробітників університету. Структура запису: прізвище працюючого, назва відділу, рік народження, стаж роботи, посада, оклад. Кількість записів довільна.

Задача В: Написати програму, яка видає дозволяє отримати наступну інформацію:

— список працівників пенсійного віку на сьогоднішній день з зазначенням стажу роботи;

— середній стаж працюючих у відділі X.

Варіант 4Задача А: Утворити файл, який містить інформацію про пацієнтів дитячої

клініки. Структура запису: прізвище пацієнта, стать, вік, місце проживання (місто), діагноз. Кількість записів довільна.

Задача В: Написати програму, яка видає наступну інформацію:— кількість пацієнтів, які прибули до клініки з іншого міста;— список пацієнтів старших X років з діагнозом Y. Значення X,Y ввести з

клавіатури.

Варіант 5Задача А: Утворити файл, який містить інформацію про здачу студентами

сесії. Структура запису: індекс групи, прізвище студента, оцінки з п`яти екзаменів та п`яти заліків (“З”–зараховано, “Н”– не зараховано). Кількість записів довільна.

Задача В: Написати програму, яка видає наступну інформацію:— прізвища невстигаючих студентів з вказівкою індексів груп та кількостей

заборгованостей;— середній бал, отриманий кожним студентом групи X, та всією групою в

цілому.

Варіант 6Задача А: Утворити файл, який містить інформацію про асортимент взуття

в крамниці фірми. Структура запису: артикул, назва, кількість, ціна однієї пари. Кількість записів довільна. Артикул починається з літери Ж для жіночого взуття, Ч – чоловічого, Д – дитячого.

Задача В: Написати програму, яка видає наступну інформацію:— про наявність та ціну взуття артикула X;— асортиментний список жіночого взуття з вказівкою назви та кількості пар

кожної моделі, яка є у продажу.Варіант 7

Задача А: Створити файл-довідник, який містить дані про напівпровідникові діоди. Структура запису: марка, максимальний струм, максимальна зворотна напруга, падіння напруги у відкритому стані, максимальна робоча частота. Кількість записів довільна.

Page 70: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

68Задача В: Написати програму, яка дозволяє шукати у довіднику:— всю інформацію по введеній марці діода з клавіатури;— по введеному з клавіатури струму, зворотній напрузі і частоті видати всі

підходящі діоди;— видати всю інформацію про діоди з падінням напруги у відкритому стані

менше, ніж введено з клавіатури.

Варіант 8Задача А: Створити файл, який містить значення функції sin(x), cos(x), tg(x)

коли x змінюється від 0 до 314 з кроком 0.5.Задача В: Написати програму, яка у файлі, шукає від’ємні елементи, і коли

вони є, то виводить їх на екран. Коли від’ємних елементів немає, на екран вивести перший та останній елементи.

Варіант 9Задача А: Створити файл, який містить інформацію про наявність квитків і

рейсів Аерофлоту. Структура запису: номер рейсу, пункт призначення, час вильоту, час прибуття, кількість вільних місць у салоні. Кількість записів довільна.

Задача В: Написати програму, яка видає інформацію наступного типу:— час відправлення літаків у місто X;— наявність вільних місць на рейс у місто X ;з часом відправлення Y.Вказівки: значення X,Y вводиться по запиту з клавіатури.

Варіант 10Задача А: Написати програму яка створює файл, що містить інформацію

про розклад телепрограм на день. Структура запису: назва програми, час початку програми, час закінчення програми.

Задача В: Написати програму, яка дозволяє отримати наступну інформацію:

— усю програму телепередач на день;— по введеному з клавіатури часу видати назву програми, котра буде

транслюватися в цей час;— назву самої довгої та самої короткої (за тривалістю) телепрограми.

Page 71: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

69РЕКОМЕНДОВАНА ЛІТЕРАТУРА

1. Ковалюк Т.В. Основи програмування. – К.: Видавнича група BHV,

2005. – 384 с.

2. TURBO PASCAL: АЛГОРИТМИ І ПРОГРАМИ: Чисельні методи в фізиці

та математиці: Навч. Посібник /А.Б.Бартків, Я.Т.Гринчишин,

А.М.Ломакович, Ю.С.Рамський. – К.: Вища шк., 1992. – 247 с.: іл.

3. Довгаль С.И., Литвинов Б.Ю., Сбитнев А.И. Персональные ЭВМ:

ТурбоПаскаль V 6.0, Объектное программирование, Локальные сети.

(учебное пособие) – Киев: «Информсистема сервис», 1993.– 440с. с ил.

4. Ставровский А. Б. Турбо Паскаль 7.0. Учебник. – К.: Издательская

группа BHV, 2001. – 400 с. (Серия «Библиотека студента»).

Page 72: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

70Додаток А – Робота в середовищі Turbo (Borland) Pascal

Система програмування Turbo(Borland) Pascal є інтегрованим середовищем, яке включає екранний редактор; компілятор; редактор зв’язків; відлагоджувач. Інтегроване середовище дозволяє набирати тексти програм з використанням вбудованого редактора текстів, компілювати їх, виконувати, проводити відладку програм.

Після успішного запуску системи з’являється екранний редактор, що має вигляд, наведений на рисунку А.1.

Рисунок A.1 – Вікно програми Turbo PascalВерхній рядок екрану містить головне меню, нижній – функціональні

клавіші і коротка довідка про їх призначення у поточному режимі.Решта частина екрана належить вікну редактора, що призначений для

введення і коригування початкового тексту програми.Ім’я файлу, звідкіля був прочитаний текст програми (новому файлу

надається ім’я NONAME00.PAS), розташовується зверху вікна посередині.Зверху по краях розташовані два спеціальні поля, що використовуються

при роботі з мишкою. Квадрат зліва дозволяє закрити поточний файл, стрілка зправа – розгорнути на весь екран чи мінімізувати вікно.

Зліва від стрілки розміщується цифра 1 – номер вікна. Одночасно можна працювати з декількома програмами, кожна з яких буде розміщена в окремому вікні редактора.

Внизу зліва два числа, що записані через “:”, які вказують поточну позицію курсору – номер рядка і позицію у рядку відповідно.

Крім вікна редактора, у Pascal використовуються також вікна режиму відлагоджування, виведення результатів роботи програми, довідкової служби, стеку, регістрів.

Головне меню можна активізувати за допомогою мишки або натискання клавіші F10. Така клавіша (чи комбінація клавіш) називається гарячою

Page 73: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

71клавішею.

Головне меню включає в себе наступні пункти:File – дії з файлами і вихід із системи;Edit – редагування тексту;Search – пошук текстового рядка, процедури, функції чи місця помилки;Run – виконання програми;Compile – компілювання програми із активного вікна;Debug – відладка програми;Tools – запуск допоміжних програм;Options – встановлення параметрів середовища;Window – робота з вікнами;Help – довідкова система.Головне меню, за своєю суттю, є лише заголовком для тих підменю, які

включають в себе кожний з пунктів меню.Пункт File містить наступні підменю:New – створює і відкриває нове вікно редактора з ім’ям nonameAA.pas, де

АА порядковий номер вікна з ім’ям noname;Open – відкриває для редагування файл, що був створений і збережений

раніше;Save – записує вміст активного вікна редактора у файл; гаряча клавіша F2;Save as – записує вміст активного вікна редактора у файл під іншим ім’ям;Save all – записує вміст усіх вікон редактора у відповідні файли;Change dir – змінює поточний каталог користувача;Print – друкує поточний файл;Print setup – настроює середовище для друку поточного файлу;Dos shell – здійснює тимчасовий вихід у MS DOS. Для повернення в

редактор середовища Pascal необхідно в командному рядку набрати Exit;Exit – завершує роботу в середовищі Borland Pascal; гаряча клавіша Alt-X.Пункт Edit містить підменю:Undo – відміняє останню зміну, тобто відновлює вид активного вікна

редактора, який передує останній зміні; гаряча клавіша Alt-Backspace;Redo – відміняє дію останньої команди Undo;Cut – видаляє виділений блок, поміщуючи його при цьому в буфер обміну

Clipboard; гаряча клавіша Shift-Del;Copy – копіює виділений блок у буфер обміну Clipboard; гаряча клавіша

Ctrl-Ins або Ctrl-C;Paste – копіює вміст буфера обміну Clipboard в активне вікно редактора;

гаряча клавіша Shift-Ins або Ctrl-V;Clear – видаляє виділений блок, не поміщаючи його в буфер обміну

Clipboard; гаряча клавіша Ctrl-Del;Show Clipboard – показує вміст буфера обміну.Пункт Search включає в себе підменю:Find – виконує пошук текстового рядка в активному вікні редактора;

Page 74: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

72Replace – відшукує в активному вікні заданий текстовий фрагмент і

замінює його на новий;Search Again – повторює пошук (і заміну) заданого фрагмента в усьому

тексту;Go To Line Number – переміщує курсор у вікні редактора на рядок з

заданим номером;Show Last Compiler Error – виділяє рядок тексту з виявленою під час

компілювання синтаксичною помилкою;Find Error – виконує пошук рядка у тексті програми, що визвав помилку

виконання;Find Procedure – виконує пошук у тексті програми заданої процедури чи

функції.Пункт Run містить підменю:Run – виконує компіляцію, компонування виконання програми з файлу

редактора; гаряча клавіша Ctrl-F9;Step Over – здійснює покрокове виконання головного тіла програми,

виключаючи покрокове виконання процедур і функцій користувача; гаряча клавіша F8;

Trace Into – забезпечує покрокове виконання програм, включаючи покрокове виконання усіх процедур і функцій користувача; гаряча клавіша F7;

Go To Cursor – здійснює виконання програми після компіляції і компоновки до першого оператора у рядку з курсором; гаряча клавіша F4;

Program Reset – припиняє відлагодження програми і видаляє програму, що виконується з пам’яті, закриває всі відкриті в ній на даний момент файли; гаряча клавіша Ctrl-F2;

Parameters – дозволяє задати рядок параметрів, які передаються програмі, що виконується.

Пункт Compile містить підменю:Compile – компілює програму чи модуль, що знаходиться в активному

вікні редактора; гаряча клавіша Alt-F9;Make – компілює програму з перекомпіляцією лише змінених модулів

(TPU-файлів); гаряча клавіша F9;Build – повністю перекомпілює програму, включаючи перекомпіляцію всіх

модулів;Target – дозволяє вибрати режим компіляції;Primary File – задає ім’я початкового файлу, тобто того файлу, з котрого

необхідно починати компіляцію і виконання програми;Clear Primary File – очищує ім’я, що задане опцією Primary File;Information – показує статистику програми.Пункт Debug включає в себе:Breakpoints – дозволяє переглядати, коригувати і видаляти контрольні

точки;Call Stack – активізує вікно програмного стека, що відображує всі виклики

підпрограм; гаряча клавіша Ctrl-F3;

Page 75: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

73Register – активізує вікно регістра, що відображує поточний стан усіх

регістрів мікропроцесора персонального комп’ютера;Watch – активізує вікно відлагодження;Output – активізує вікно виведення результату роботи програми;User Screen – активізує вікно виведення результату роботи програми і

розгортає його на весь екран; гаряча клавіша Alt-F5;Evaluate/Modify – дозволяє в процесі відлагодження переглядати чи

замінювати значення будь-якої змінної, а також знайти значення будь-якого виразу; гаряча клавіша Ctrl-F4;

Add Watch – додає у вікно спостереження(відлагодження) змінні або вирази разом з їх поточними значеннями, тим самим дозволяючи спостерігати за зміною цих значень; гаряча клавіша Ctrl-F7;

Add Breakpoint – дозволяє встановити у поточному рядку контрольну точку; гаряча клавіша Ctrl-F8 дозволяє як встановлювати, так і знімати контрольну точку.

Пункт Tools містить підменю:Messages – активізує вікно повідомлень. Середовище шукає і показує файл

з потрібним фрагментом тексту програми;Go To Next – шукає фрагмент, що заданий наступним повідомленням у

вікні Messages; гаряча клавіша Alt-F8;Go To Previous – шукає фрагмент, що відповідає попередньому

повідомленню у вікні Messages; гаряча клавіша Alt-F7;Grep – ініціює роботу утиліти Grep; по замовчуванню шукає у всіх файлах

з розширенням .PAS поточного каталогу ім’я змінної, процедури чи функції, на котрій до моменту виклику опції стояв курсор; гаряча клавіша Shift-F2.

Пункт Options включає в себе:Compiler – задає параметри, за допомогою яких можна керувати

генерацією машинного коду програми;Memory Sizes – регулює розмір пам’яті, котру займає робоча програма;Linker – регулює режим роботи компонувальника;Debugger – визначає відлагоджувач, що використовується і режим

оновлення екрана дисплея в процесі відлагодження;Directories – визначає групи функціональних каталогів: XE&TPU

directories вказує каталог, де будуть розташовуватися готові до роботи .exe- і .tpu-файли; Include directories містить імена каталогів, в яких необхідно шукати файли, що включаються, якщо такі не знайдені в поточному каталозі; Unit directories містить каталоги, в яких буде вестись пошук .tpu-файлів, якщо середовище не виявляє їх в поточному каталозі; Object directories вказує імена каталогів для пошуку .obj-файлів, якщо такі не знайдені в поточному каталозі;

Environment – дозволяє встановити деякі додаткові опції оточення (колір, робота з мишкою і т.д.);

Open – дозволяє задати ім’я конфігураційного файлу, де міститься інформація про настроювання середовища;

Page 76: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

74Save – зберігає поточне настроювання середовища в конфігураційному

файлі;Save As – дозволяє вказувати ім’я каталогу і файлу, в котрому середовище

буде зберігати свої настроювання.Пункт Window містить підменю:Tile – розташовує вікна так, щоб кожне було видно на екрані, вирівнюючи,

по можливості, їх розміри;Cascade – розташовує вікна на екрані каскадом; Close All – закриває всі відкриті вікна;Refresh Display – обновлює екран шляхом видалення слідів програми, що

працювала у режимі відлагодження;Size/Move – дозволяє переміщувати активне вікно по екрану або змінювати

його розміри; гаряча клавіша Ctrl-F5;Zoom – розгортає вікно на весь екран чи повертає йому попередній вид;

гаряча клавіша F5;Next – активізує наступне вікно; гаряча клавіша F6;Previous – активізує попереднє вікно; гаряча клавіша Shift-F6;Close – закриває активне вікно; гаряча клавіша Alt-F3;List – виводить список всіх відкритих вікон; гаряча клавіша Alt-0.Пункт Help містить підменю:Contents – дозволяє переглядати вміст довідкової служби;Index – виводить алфавітний список всіх посилань довідкової служби;

гаряча клавіша Shift-F1;Topic Search – видає інформацію, про зарезервоване слово в межах

курсору; гаряча клавіша Ctrl-F1;Previous Topic – виводить попереднє довідкове повідомлення; гаряча

клавіша Alt-F1;Using Help – дає роз’яснення про те, як користуватися довідковою

службою;Files – дозволяє встановити потрібний файл довідкової служби;Compiler Directives – виводить довідку директив компілятора;Procedures And Functions – містить довідку про стандартні процедури і

функції;Reserved Words – містить довідку про зарезервовані слова;Standard Units – містить довідку про стандартні модулі;Borland Pascal Language – містить довідку про мову Borland Pascal;Error Messages – містить довідку повідомлень про помилки;About – містить інформацію про авторські права.

Page 77: МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИinel.stu.cn.ua/~asr/forstudent/files/metodP.doc · Web viewWord 0..65535 символьний Char складені

75Додаток Б – Приклад титульного листа звіту

Міністерство освіти і науки України

Чернігівський державний технологічний університет

Кафедра промислової електроніки

З В І Тпро виконання циклу лабораторних робіт

по курсу "Програмування та алгоритмічні мови"

Частина 1

Мова програмування "Turbo Pascal"

Виконав: студент групи (шифр групи)

(П.І.Б. студента)

Перевірив: (П.І.Б. викладача)

Чернігів (рік)