Міністерство освіти та науки України
Національний університет “Львівська Політехніка”
Кафедра САПР
Курсова робота
“Програмування наближеного обчислення диференційних
рівнянь методом Адамса”
з курсу “Проблемно-орієнтовні мови програмування”
Керівник:
Завдання до курсової роботи
Тема курсової роботи: Програмування наближеного обчислення диференційних рівнянь методом Адамса за допомогою проблемно-орієнтовних мов програмування. Знайти точне і наближене значення функції, абсолютну та відносну похибку обчислень у цих точках. Побудувати графік функції.
Анотації
Родак І.А. “ Програмування наближеного обчислення дифференційних рівнянь методом Адамса за допомогою проблемно-орієнтованих мов програмування.” Курсова робота. -НУ “Львівська політехніка”, каф.: САПР, дисципліна: “Проблемно-орієнтовні мови програмування”, 2008.
Курсова робота складається з 33 сторінок, 5 таблиць, блок-схеми, графіка.
В даній курсовій роботі було описано основні теоритичні відомості про мови програмування та їхні середовища,зроблено математичний аналіз індивідуального завдання. Розроблена блок-схема та алгоритм розвязання поставленої задачі.Складено програми на алгоритмічних мові програмування С.
Зміст
Завдання до курсової роботи.....................................................................................2
Анотації........................................................................................................................3
Зміст..............................................................................................................................4
Вступ.............................................................................................................................5 1.Основні теоритичні відомості про мови програмування та їх середовища .... 10
1.1Алгоритмічна мова програмування Паскаль.....................................................10
1.2.Алгоритмічна мова програмування „Сі”.....................................................................15
2.Математичний аналіз....................................................................................................................24
3. Блок-схема та опис алгоритму обчислення функції .........................................27
4. Опис програм на алгоритмічній мові “Сі” та їх опиc.......................................29
5.Результати виконання програми на алгоритмічній мові „Сі”............................30
7.Графік функції f(x).................................................................................................31
Висновки та аналіз результатів................................................................................32
Список використаної літератури............................................................................. 33
Вступ
Розвиток обчислювальної техніки супроводжується створенням нових і вдосконаленням існуючих мов програмування (МП)—засобів спілкування програмістів з ЕОМ. Під МП розуміють правила подання даних і запису алгоритмів їх обробки, що автоматично виконуються ЕОМ. У більш абстрактному вигляді МП є засобом створення програмних моделей об’єктів і явищ зовнішнього світу. На сьогодні вже створено десятки різних МП (як примітивних, так і близьких до мови людини). Щоб розібратися в розмаїтті МП, потрібно знати їх класифікацію, а також історію створення, еволюцію і тенденції розвитку. Цей вступ і присвячений розгляду зазначених питань.
Рушійні сили еволюції МП
Щоб розуміти тенденції розвитку МП, потрібно знати рушійні сили їх еволюції. Для з’ясування цього питання будемо розглядати МП з різних точок зору.
По-перше, МП є інструментом програміста для створення програм. Для створення якісних програм потрібні зручні МП. Тому однією з рушійних сил еволюції МП є прагнення розробників до створення більш досконалих програм.
По-друге, процес розроблення програми можна порівнювати з промисловим виробництвом, в якому визначальними чинниками є продуктивність праці колективу програмістів, собівартість і якість програмної продукції. Створюються різноманітні технології розроблення програм (структурне, модульне, об’єктно-орієнтоване програмування та ін. ), що повинні підтримуватися МП. Тому другою рушійною силою еволюції МП є прагнення до підвищення ефективності процесу виробництва програмної продукції.
По-третє, програми можна розглядати як аналог електронних приладів обробки інформації, в яких замість радіодеталей і мікросхем використовують конструкції МП (елементна база програми). Як і електронні прилади, програми можуть бути найпростішими (рівня детекторного приймальника) і дуже складними (рівня автоматичної космічної станції), при цьому рівень інструменту повинен відповідати складності виробу. Крім того, людині зручніше описувати об’єкт, що моделюється, використовуючи терміни предметної галузі, а не мовою цифр. Тому третьою рушійною силою, що веде до створення нових, спеціалізованих, орієнтованих на проблемну галузь, потужних МП, є збільшення різноманітності і підвищення складності задач, які розв’язуються за допомогою ЕОМ.
По-четверте, вдосконалення самих ЕОМ призводить до необхідності створення мов, що максимально реалізують нові можливості ЕОМ.
По-п’яте, програми є інтелектуальним продуктом, який потрібно накопичувати і примножувати. Але програми, як і технічні вироби, мають властивість морального старіння, однією з причин якого є їх залежність від типу ЕОМ і операційного середовища. З моральним старінням програм борються шляхом їх модернізації і випуску нових версій, проте в умовах частої зміни типів ЕОМ і операційних середовищ розробники будуть тільки тим і займатися, що модернізувати старі програми. Мова програмування повинна забезпечувати тривалий життєвий цикл програми. Прагнення до цього є п’ятою рушійною силою розвитку МП.
Історія розвитку МП
--- Відомо, що першим програмістом була жінка—леді Ада Лавлейс, дочка лорда Байрона. Вона розробляла програми для одного з перших механічних комп’ютерів, створеного на початку минулого століття англійським ученим Чарльзом Беббіджом. Однак програмування в сучасному розумінні почалося з моменту створення першої електронної обчислювальної машини. Але незважаючи на це, ім’я цієї видатної жінки—Ada—присвоєно одній з найпотужніших сучасних МП, що є базовою для Міністерства оборони США. Перші ЕОМ, створені людиною, мали невеликий набір команд і вбудованих типів даних, але дозволяли виконувати програми на машинній мові. Машинна мова (ММ)—єдина мова, яку розуміє ЕОМ. Вона реалізується апаратно: кожну команду виконує певний електронний пристрій. Програма на ММ являє собою послідовність команд і даних, заданих у цифровому вигляді. Наприклад, команда вигляду 1А12 або 0001101000010010 означає операцію додавання (1А) вмісту регістрів 1 і 2. Машинною мовою дані представляються числами і символами. Операції є елементарними і з них будується вся програма. Введення програми в цифровому вигляді виконувалося безпосередньо в пам’ять з пульту ЕОМ або з примітивних пристроїв введення. Природно, що процес програмування був дуже трудомістким, розібратися в програмі навіть автору було досить складно, а ефект від застосування ЕОМ був незначним. Цей етап в розвитку МП показав, що програмування є складною проблемою, що важко піддається автоматизації, а саме програмне забезпечення визначає ефективність застосування ЕОМ.
Класифікація МП
Виходячи з вищезазначеного, МП можна класифікувати за такими ознаками:
За ступенем орієнтації на специфічні можливості ЕОМ МП поділяються на:
машинно-залежні;
машинно-незалежні.
До машинно-залежних МП відносяться машинні мови, асемблери і автокоди, що використовуються в системному програмуванні. Програма на машинно-залежній МП може виконуватися лише на ЕОМ даного типу. Програма на машинно-незалежній МП після трансляції на машинну мову стає машинно-залежною. Ця ознака МП визначає мобільність одержуваних програм (можливість перенесення на ЕОМ іншого типу).
За ступенем деталізації алгоритму одержання результату МП поділяються на:
мови низького рівня;
мови високого рівня;
мови надвисокого рівня.
Рівень МП визначається на основі складності елементів мови, з яких будується програма. Найнижчим рівнем є машинна мова, а найвищим, мабуть, рівень природної мови людини, якою формулюється задача типу “Дано:. . . Треба:. . . ”. До мов низького рівня належать машинні мови, асемблери та автокоди. До мов високого рівня належать мови, які мають типи даних (наприклад, масиви) та програмні конструкції (наприклад, цикли), що безпосередньо не реалізуються машинною мовою. Взагалі, одному оператору мови високого рівня відповідає певна програма машинною мовою. Традиційно до мов високого рівня відносять мови класу FORTRAN, PL/1, Pascal, C, Basic, Ada. До мов надвисокого рівня відносять мови, які мають найбільш абстрактні механізми опису задачі та вбудовані засоби її розв’язування. Ці мови дають змогу зосередитися на самій задачі, а не на деталях її розв’язування. До мов надвисокого рівня належать мови класу Lisp, Prolog.
За ступенем орієнтації на розв’язування задач певного класу МП поділяються на:
проблемно-орієнтовані;
універсальні.
Проблемно-орієнтовані МП містять спеціалізовані засоби опису та розв’язування задач певного класу. Універсальні ж МП не містять таких засобів, дозволяють розв’язувати будь-які задачі, але більшими зусилями.
За можливістю доповнення новими типами даних і операціями МП поділяються на такі:
що розширюються;
що не розширюються.
МП, що дозволяють розширювати склад типів даних і операцій, фактично містять механізм адаптації мови для розв’язування певних задач. Вони є замкнутими МП.
За можливістю управління реальними об’єктами і процесами МП поділяються на:
мови систем реального часу;
мови систем умовного часу.
Мови систем реального часу забезпечують створення систем управління реальними об’єктами, в яких час є важливим чинником. Однією з таких мов є мова Ada, що використовується в системах військового призначення США.
За засобом одержання результату МП поділяються на:
процедурні;
непроцедурні.
Процедурні МП потребують задання певного алгоритму одержання результату, а непроцедурні мають вбудований механізм пошуку розв’язку.
За типом задач, що розв’язуються, МП поділяються на:
мови системного програмування;
мови прикладного програмування.
Як правило, мови системного програмування є мовами низького рівня і забезпечують найповніше використання апаратних можливостей ЕОМ. Для розв’язування прикладних задач використовуються мови вищих рівнів.
Непроцедурні мови за типом вбудованої процедури пошуку розв’язків поділяються на:
реляційні;
функціональні;
логічні.
Тип вбудованої процедури пошуку розв’язків визначає парадигму обчислень і структуру програми.
Тенденції розвитку МП
Мови системного програмування, на яких створюються операційні системи, транслятори й інші системні програми, розвиваються в напрямку підвищення їхнього рівня та незалежності від ЕОМ. У наш час майже 90% системного програмного забезпечення створюється не мовою асемблера, а мовою C. Наприклад, операційна система Unix практично повністю написана мовою C. Ця мова дає змогу одержувати програми, які за своєю ефективністю не поступаються програмам, що написані мовою асемблера. Щоправда, збільшується обсяг програм, зате ефективність їх створення значно вища. Машинна незалежність досягається використанням стандарту мови, що підтримується всіма розробниками трансляторів, а також використанням так званих крос-систем для еквівалентного перетворення програм з однієї мови низького рівня на іншу. Іншим напрямом є підвищення рівня самої машинної мови. Наприклад, відомі Lisp-машини, в яких машинною мовою є мова Lisp (реалізована апаратно). Іншим прикладом є ЕОМ 5-ї ґенерації з машинною мовою штучного інтелекту Prolog. МВР розвиваються в напрямку підтримки технологій програмування, забезпечення низькорівневих операцій (рівня асемблера), забезпечення нових інформаційних технологій (НІТ) і незалежності від середовища реалізації. Слід зазначити, що за своїми можливостями МВР поступово зближаються і програмістам стає все складніше визначати переваги тієї чи іншої мови. Останнім часом широкого розповсюдження набула технологія об’єктно-орієнтованого програмування (ООП): практично всі сучасні МВР підтримують ООП. Й усі сучасні програмні системи побудовані на її принципах. Сьогодні кожний студент, що програмує, знає, що таке інкапсуляція (приховання деталей реалізації об’єкта), успадкування (побудова нових об’єктів з існуючих) і поліморфізм (позначення одним ім’ям різних елементів програми, які обираються динамічно). Для позначення факту підтримки ООП до назви мови додають слово Object (наприклад, ObjectPascal) або інші (наприклад, C++). Windows, мережі ЕОМ, сервери, бази даних та Internet, як основа НІТ, найбільше впливають на сучасні МП. Розробники МП тепер зобов’язані включати в мови засоби підтримки НІТ, щоб привернути програмістів на свою сторону. Для підтримки Windows створюються системи візуального програмування з додатковою назвою Visual, наприклад, Visual C++, Visual Basic (принципово відрізняється від простого Basic) й ін. Для роботи з БД, мережами та Internet у МП включаються спеціальні внутрішні або зовнішні засоби. Прагнення до створення програм, що не залежать від типу ЕОМ і операційної системи, призвело до створенню мови Java. Основне завдання мови Java—забезпечити виконання програм, що розповсюджуються через Web-сторінки Internet, на будь-якій робочій станції. Крім того, Java підтримує всі засоби НІТ і незабаром, мабуть, стане найпопулярнішою МП. Популярність мов штучного інтелекту за останні 5 років, на жаль, помітно знизилася. Це пов’язано передусім з психологічними проблемами, яких зазнають програмісти в процесі використання цих мов. Наприклад, в найпотужнішій мові Lisp програма має дуже складну для розуміння спискову структуру і невеликий за обсягом проект дуже швидко виходить з-під контролю. В мові Prolog програміст повинен точно знати логіку роботи вбудованої машини логічного виведення, а робота програми залежить від структури і змісту бази знань (БЗ). Якщо з проектуванням програми і структури БЗ програміст справляється, то для заповнення БЗ йому потрібно бути експертом в предметній галузі або постійно спілкуватися з експертом й використовувати його знання, що є складним завданням. Отже, щоб мови штучного інтелекту набули широкого використання, потрібно створити додаткові програмні засоби підтримки програмістів. Вивчення питань еволюції МП спрямоване на полегшення вибору мови для розв’язання певних задач. Проте слід усвідомлювати, що не потрібно вивчати всі існуючі МП. Достатньо вивчити по одній мові кожного класу в міру потреби, адже в процесі еволюції мови одного класу зближаються. І пам’ятати головне: найкращою є та мова, яку знаєш досконало.
Мови програмування низького рівня
Орієнтовані на конкретний тип процесора і враховують його особливості.
Переваги
З допомогою мов низького рівня створюються ефективні і компактні програми, оскільки розробник отримує доступ до всіх можливостей процесора.
Недоліки
Програміст, що працює з мовами низького рівня, має бути високої кваліфікації, добре розуміти будову комп’ютера.
результуюча програма не може бути перенесена на комп’ютер з іншим типом процесора.
Мови низького рівня, як правило, використовують для написання невеликих системних додатків, драйверів пристроїв, модулів стиків з нестандартним обладнанням, коли найважливішими вимогами є компактність, швидкодія і можливість прямого доступу до апаратних ресурсів.
Асемблер
Мови програмування високого рівня
Можна сказати є більш зрозумілими людині, ніж комп’ютеру. Особливості конкретних комп’ютерних архітектур в них не враховуються, тому створені програми легко переносяться з комп’ютера на комп’ютер, де встановлено транслятор цієї мови. Розробляти програми на таких мовах значно простіше і помилок допускається менше.
Фортран
Кобол
Алгол
Паскаль
Java
C
C++
C#
Objective C
SmallTalk
J++
Коротка історія деяких мов програмування
Мова програмування C
C - мова програмування, яку розробив Денніс Річі у 1972 році з метою переписання вихідних кодів операційної системи UNIX. В C поєднуються можливості мов високого рівня та можливість адресування апаратних засобів ЕОМ на рівні мови ассемблера.
Класичним Сі називають реалізацію мови, що відповідає першому виданню книги "Мова програмування С" Брайана Кернігана та Денніса Річі від 1978 року.
Редакцією стандарту мови Сі є стандарт ISO від 1999 року (ISO/IEC 9899:1999). Дана реалізація носить назву С99.
Мова програмування C++
C++ (Сі-плюс-плюс) — універсальна мова програмування. Належить до високорівневих, трансльованих, об’єктно-орієнтованих мов. Базується на мові Сі.
У 1990-х роках Сі++ стала однією з найуживаніших мов програмування загального призначення.
У 1998 році ратифіковано міжнародний стандарт мови Сі++: ISO/IEC 14882 «Standard for the C++ Programming Language». Поточна версія цього стандарту — ISO/IEC 14882:2003.
Мова програмування Pascal
Pascal - алгоритмічна мова програмування універсального призначення.
Роком створення Pascal вважається 1970-й, і творцем цієї мови програмування є Ніколас Вірт. Pascal належить до Algol-подібних мов програмування, оскільки використовує семантику Algol. Однак Pascal мав суттєве удосконалення — строга типизація. Це означало, що присвоювання можна було виконувати лише для змінних, що належать до одного типу (одночасно вказувались правила, за якими типи вважались однаковими). Це удосконалення суттєво покращувало стиль програмування, оскільки значну частину помилок вдавалось виявити ще на етапі компіляції — що збільшує надійність програм.
Однак мова розроблялась як дослідницький проект і первісний Pascal був мало придатний для написання великих проектів, оскільки програму не можна було скласти з кількох програмних частин — просто не було передбачено такої можливості. Але ця мова програмування швидко завоювала популярність у навчальних закладах при вивчені програмування. А коли зявились діалекти мови де можливим було окреме компілювання програмних частин — Pascal став засобом написання великих програмних систем.
Разом із популярністю мови стало відомим і ім’я Ніколаса Вірта. Працюючи у Швейцарському федеральному технічному інституті разом із своїми учнями і послідовниками удосконалював теорію мови програмування загального використання. Так у 1980 році з’явилась Modula (хоча коли говорять Modula, мають на увазі Modula-2). Modula-2 стала завершенням розвитку лінії структурованого програмування. У 1990 році — з’явився Oberon що вже використовував принципи Об’єктно-орієнтованого програмування.
Тепер можна говорити про існування родини Pascal-подібних мов, куди належать Pascal, Modula-2, Oberon, Oberon-2, ActiveOberon, Component Pascal.
1.Основні теоритичні відомості про мови програмування та їх середовища.
1.1.Алгоритмічна мова програмування Паскаль.
1.1.1Структура програми
Алфавіт мови Турбо Паскаль
Програма на мові Турбо Паскаль записується за допомогою знаків (символів). Сукупність допустимих при написанні програми символів складає алфавіт мови. До алфавіту мови Турбо Паскаль входять:
- великі і малі літери латинського алфавіту: A, B, ... , Z, a, b, ... , z
- десять цифр: 0 до 9
- спеціальні символи:“,”, [,],(,),{,},+,-,/,,\,;,:,?,<,>,+,-,|,^,$,*,@.
- комбінації символів (складені символи): := ( присвоєння ), >= ( більше або дорівнює ), <= (менше або дорівнює ), <> (не дорівнює ), .. ( діапазон )
Складені символи розглядаються компілятором як єдине ціле, тому пропуски між складовими є недопустимими. Знак підкреслювання часто відносять до літер, оскільки його можна використовувати в тих самих випадках, що і літери. Зокрема, його можна використовувати при написанні імен (ідентифікаторів). Зі знаку підкреслювання може починатись ім’я.
В Турбо Паскаль виділена невелика сукупність слів, які називаються зарезервованими словами. Зарезервовані слова мають чітко визначені написання і правила використання, а тому не можуть використовуватися як імена об’єктів (ідентифікатори) у програмі.
Зарезервовані слова є тими елементами, з яких будуються команди (оператори) програми, помічаються початки (кінці) різних розділів програми, деякі дії, а також способи організації даних.
Ідентифікатори
Ідентифікатори – це слова, які введені користувачем для позначення об’єктів в програмі. Правила формування імен полягають у наступному:
1) ім’я повинно складатись лише з літер і цифр, а також знака підкреслювання, який відноситься до літер
2) ім’я повинно починатись з літери
3) довжина імені не повинна перевищувати 63 символи.
Типи даних
Стандартні типи даних. Одним з найважливіших понять у програмуванні є змінна. Змінна — це поіменована ділянка оперативної пам'яті комп'ютера, де зберігається значення деякої величини. Кількість змінних та їхні властивості задає користувач. Тип змінної визначає її допустимі значення, а також операції, які можна над нею виконувати. Розглянемо стандартні типи даних: числові цілі (табл.1), числові дійсні (табл.2), символьний та логічний.
Табл.1. Цілочислові типи
Тип
Діапазон значень
Необхідна пам’ять, в байтах
Byte
0 .. 255
1
ShortInt
- 128 ..127
1
Integer
-32768 .. 32767
2
Word
0 .. 65535
2
LongInt
-2147483648 .. 2147483647
4
Табл.2. Дійсні типи
Тип
Діапазон
Необхідна пам’ять, в байтах
Single
1,5×10- 45.. 3,4×1028
4
Real
2,9×10-39.. 1,7×1038
6
Double
5×10-324.. 1,7×10308
8
Extended
3,4×10-4932..1,1×104932
10
Comp
-9,2×10+18.. 9,2×10+18
8
Символьний тип (char) — це множина символів кодової таблиці комп'ютера ASCII. Символьна стала — це символ, взятий у лапки, наприклад,'а','5','%'.
Логічний тип (boolean) характеризується двома значеннями: false (хибність) та true (істинність).
Усі стандартні типи (окрім дійсного) є впорядкованими, тобто для кожного даного визначені наступне та попереднє значення.
Нестандартні прості типи. Усі наведені вище типи даних є стандартними. їх не треба описувати у розділі типів. Користувач може визначити свої власні типи даних у розділі type так:
type <ім'я типу 1> = <опис типу 1>;
…
<ім'я типу n> = <опис типу n>;
Організація розгалужень
Розгалуження – точка (місце) програми, починаючи з якої, виконується одна з декількох гілок програми, в залежності від виконання або невиконання заданих в точці розгалуження умов.
В мові Паскаль організація розгалужень здійснюється за допомогою операторів if та case. Допоміжну роль в організації розгалужень відіграє оператор goto. Логічні вирази тип даних boolean має два значення true (істина) і false (хибність). Логічні операції дозволяють будувати з одного або двох логічних виразів новий логічний вираз: Ä(А) або (А)Ä(В). Тут Ä - логічна операція, А, В – логічні вирази. В першому випадку операція називається унарною (або одномісною), а в другому – бінарною (або двомісною). В Turbo Pascal є унарна логічні операція not (не) і бінарні логічні операції and (і), or (або), xor (роздільне або). Ці операції задаються за допомогою таблиць:
Значення А
Значення В
Значення
(А) and (B)
Значення
(A) or (B)
Значення
(A) xor (B)
true
true
true
true
false
true
false
false
true
true
false
true
false
true
true
false
false
false
false
false
Значення побудованого логічного виразу однозначно визначається значеннями його складових. Оператори, призначені для організації розгалужень
Оператор переходу.
Призначений для зміни послідовності виконання операторів програми.
Синтаксис: goto M
Тут M – мітка.
Мітки, що використовується в програмі, повинні бути описані в розділі опису зміних.
Умовний оператор.
Призначений для організації процесу обчислень в залежності від деякої умови.
Синтаксис: if U then R1
[else R2]
Тут U – умова, що являє собою логічний вираз; R1 і R2 – оператори.
Семантика: якщо умова вірна (значення логічного виразу є true), то здійснюється виконання оператора R1, після чого комп’ютер переходить до виконання наступного за if оператора. Якщо умова є невірною (значення логічного виразу є false), то здійснюється виконання оператора R2, якщо в операторі є частина else... .
Оператор вибору.
Призначений для розгалуження процесу обчислень на декілька гілок в залежності від значення спеціальної змінної – параметра вибору (селектора).
Синтаксис: case P of
X1: R1;
X2: R2;
. . . .
XN: RN
[else F ]
end;
Тут P – змінна або вираз, що має порядковий тип – параметр вибору (селектор); X1, ... , XN – значення параметра вибору; R1, ... , RN, F – оператори.
Цикл – ділянка програми, яку комп’ютер виконує декілька разів підряд. В залежності від того, в який спосіб задано кількість повторів виконання тіла циклу, цикли поділяють на ітераційні та арифметичні.
Арифметичний цикл – це цикл, тіло якого виконується фіксовану кількість разів.
Ітераційний цикл – цикл, виконання якого завершується при настанні (або ненастанні) певної умови.
Оператор for.
Синтаксис: for лічильник:=a to b do оператор;
Лічильник – змінна перераховного типу, зокрема цілого або типу char. a, b – змінні або значення перераховного типу (того ж, що і у лічильника). Оператор – простий або складений оператор. Він є тілом циклу.
Є ще одна форма оператора for:
for лічильник:=a downto b do оператор;
Виконання оператора в цій формі цілком подібне до наведеної вище, за виключенням того, що в цьому випадку змінна лічильник пробігає значення від більшого a до меншого b, зменшуючись кожний раз на 1.
Оператор while.
Синтаксис: while умова do оператор;
Умова – будь-який логічний вираз; оператор – простий або складений оператор.
Оператор repeat.
Синтаксис: repeat
оператор_1;
. . . . . . .
оператор_n;
until умова;
Умова – будь-який логічний вираз; оператор_1,..., оператор_n – оператори тіла циклу.
Одновимірні масиви.
Масив – це сукупність однотипних змінних, якій присвоєно ім’я. Всередині сукупності кожна змінна однозначно характеризується одним або декількома номерами (індексами). Одновимірний масив – це масив, в якому змінні характеризуються одним номером..
Синтаксис опису масиву приведено нижче:
Var ім’я_змінної-масиву:array[k..m] of тип_елементів;
Тут слово array вказує на те, що змінна, ім’я якої стоїть перед двокрапкою, є масивом. Число k задає номер першого елемента масиву, а число m – номер останнього. k і m в описі масиву повинні бути константами одного з порядкових типів. Тип елементів масиву може бути як одним з простих типів, так і структурованим типом.
Доступ до кожної змінної масиву можна здійснювати за її ім’ям. .
Двовимірні масиви
Двовимірний масив, як і одновимірний, є сукупністю однотипних змінних, яким присвоєно ім’я. Різниця полягає в іменуванні цих змінних. У випадку двовимірного масиву, кожна змінна характеризується двома числами – індексами. Такий спосіб іменування змінних – елементів масиву є зручним, коли в масив використовують для збереження елементів матриць чи числових таблиць. Перший індекс пов’язують з номером рядка, а другий – з номером стовпця елемента матриці.
Опис двовимірного масиву можна здійснювати в наступний спосіб:
Var A:array[1..m, 1..n] of тип_елементів;
Підпрограми
Підпрограми призначені для реалізації алгоритмів опрацювання окремих частин деякої складної задачі. Вони дають змогу реалізовувати концепцію структурного програмування, суть якого полягає в розкладанні складної задачі на послідовність простих підзадач і в складанні для алгоритмів розв'язування кожної підзадачі відповідних підпрограм. Розрізняють два види підпрограм — підпрограми-процедури та підпрограми-функції. Підпрограми поділяються на стандартні та підпрограми користувача. Стандартні підпрограми створювати не потрібно — вони містяться у стандартних модулях System, Crt, Dos тощо. Підпрограма користувача — це пойменована група команд, яку створюють і описують в основній програмі в розділах procedure абo function і до якої звертаються з будь-якого місця програми потрібну кількість разів.
1. Процедури (procedure). Загальний опис процедури:
procedure <назва> ( <список формальних параметрів> );
<розділ описів та оголошень процедури>
begin
<розділ команд процедури>
end;
У списку формальних параметрів перераховують змінні разом із зазначенням їхніх типів. Розрізняють параметри-аргументи (інший термін: параметри-значення) — вхідні дані для процедури, і параметри-результати (інший термін: параметри-змінні), через які можна повертати результати роботи процедури в основну програму. Перед списками параметрів-результатів кожного типу записують слово Var. Зауважимо, що масиви фіксованих розмірів у списках формальних параметрів не можна описувати за допомогою слова array.
Розділи описів і оголошень у підпрограмах мають таку саму структуру як і в основній програмі.
До процедури звертаються з розділу команд основної програми або іншої підпрограми. Процедуру викликають за допомогою команди виклику:
І <назва процедури> (<список фактичних параметрів>);
Параметри, які записують у команді виклику процедури, називаються фактичними. Фактичними параметрами-аргументами можуть бути сталі, змінні, вирази, а параметрами-результатами — лише змінні. Типи даних тут не зазначають.
Між фактичними і формальними параметрами має бути відповідність за кількістю й типами. Зверніть увагу, відповідні фактичні та формальні параметри можуть мати різні імена.
Команда виклику функціонує так: значення фактичних параметрів присвоюються відповідним формальним параметрам процедури, виконується процедура, визначаються параметри-результати, значення яких надаються (повертаються) відповідним фактичним параметрам у команді виклику.
Змінні, описані в розділі описів основної програми, називаються глобальними. Вони діють у всіх підпрограмах, з яких складається програма. Змінні, описані в розділі описів конкретної процедури, називаються локальними. Вони діють тільки в межах даної процедури.
Процедури можуть отримувати і повертати значення не тільки через параметри-результати, але й через глобальні змінні. Тому списків параметрів у процедурі може і не бути.
2. Функції (function). Функція, на відміну від процедури, може повертати в місце виклику лише один результат простого стандартного типу.
Загальний опис функції:
function <назва>(<список формальних параметрів>): <тип функції>;
<розділи описів і оголошень функції>;
begin
<розділ команд функції, де має бути така команда:
назва: =вираз>
end;
У розділі команд функції має бути команда присвоєння значення деякого виразу назві функції. Результат функції повертається в основну програму через її назву (як і випадку використання стандартних функцій, таких як sin, cos). Виклик функції здійснюється лише з виразів так:
<назва> (<список фактичних параметрів>).
3. Рекурсивні функції. Рекурсією називається алгоритмічна конструкція, де підпрограма викликає сама себе. Рекурсія дає змогу записувати циклічний алгоритм, не використовуючи команду циклу.
Записи
Тип даних record (запис) є структурованим типом даних, що складається з фіксованої кількості компонент одного або декількох типів. Запис описується в розділі type або Var. Опис типу запис починається словом record, а завершується словом end. Між цими словами розміщується список компонент, які називаються полями, з вказівкою їх назв і типів.
Формат опису:
Type Zp=record
назва_поля_1: тип_поля_1;
. . . . . . . . . .
назва_поля_n: тип_поля_n;
end;
Доступ до конкретного поля запису дає складене ім’я вигляду
<назва запису>.<назва поля>
Текстові файли
1. Опис типів та оголошення типованих фнйлін. Чисто виникає потреба опрацьовувати інформацію, розташовану на зовнішніх носіях (на дисках). Прикладами таких даних є інформація про успішність студентів, розклад руху транспорту, наявність. товарів у магазинах, адресні книжки.
Файл — це сукупність даних, які розташовані на зовнішньому носії. Дані у файлі називаються елементами. Кількість даних, на відміну від масиву, під час описування файлу не зазначають. Елемент файлу не має індекса. Тип елементів може бути як простим, так і складеним, але не може бути файлом.
Файловий тип даних описують у розділі описів типів так:
type <ім'я типу>= file of <базовий тип> ;
або безпосередньо у розділі оголошення змінних
Var <список змінних>: file of <базовий тип>;
2. Дії з файлами. Для того, щоб знайти потрібний елемент файлу, необхідно послідовно переглянути всі попередні. Це називається послідовним доступом до файлу.
Для опрацювання файлу його необхідно відкрити, виконати необхідні дії та закрити.
Для визначення кінця файлу є стандартна логічна функціяeof (<ім'я файла>).
Значення цієї функції буде true, якщо досягнуто кінець файлу.
Файл можна відкрити лише або для читання, або для записування в нього інформації.
Для роботи з файлами є такі команди (процедури модуля System):
assign(<ім'я файлу>,<зовнішнє ім'я>) - налагоджує зв'язок
між іменем файлу і файлом на зовнішньому носії;
reset(<ім'я файлу>) - відкриває файл для читання з нього даних;
read(<ім'я файлу>,<ім'я змінної>) - читає (вводить) дане з файлу в оперативну пам'ять;
close(<ім'я файлу>) - закриває файл;
rewrite(<ім'я файлу>) - відкриває файл для записування в нього даних;
write(<ім’я файлу>,<ім'я змінної>) - записує (виводить) дане у файл.
Тут <ім'я файлу> - ім'я файлової змінної, задане у розділі оголошення змінних, <зовнішнє ім'я> - ім'я файлу даних на зовнішньому носії, взяте у лапки, наприклад, 'D:\1.txt'.
3. Текстові файли. Дані у типованих файлах, описаних вище, певним чином кодуються комп'ютером. Ці файли не можна редагувати або переглядати за допомогою звичайного текстового редактора. Тому, окрім типованих, використовують текстові файли, які не мають такого недоліку.
Елементами текстових файлів є рядки (послідовності символів: букв, цифр, знаків та пропусків). Такий файл можна створювати та редагувати за допомогою текстового редактора. Розмежовувачем між елементами файлу є пропуск. Уведення кожного рядка закінчується натисканням на клавішу вводу. Для перевірки чи є символи у рядку використовують функцію
eoln(<ім'я файлу>),
яка приймає значення ігие, якщо знайдено кінець рядка. Текстові файли описують у розділі опису змінних так:
Var <список імен змінних> : text;
Дані з рядка текстового файлу можна зчитати за допомогою команд
read(<ім'я файлу>, <список параметрів>);
readln(<ім'я файлу>, <список параметрів>);
1.2.Алгоритмічна мова програмування Сі
Сі - універсальна мова програмування. Вона розроблялась в тісному зв’язку з системою UNIX, однак не є прив’язаною до цієї операційної системи і може використовуватись у будь-яких операційних системах або машинах.
Сі - мова порівняно “низького рівня” У ній немає:
а) прямих операцій над такими об’єктами як множини, стрічки, списки і масиви;
б) операцій які маніпулюють з цілими масивами або стрічками, натомість використовуються структури;
в