Основи програмування мовою Паскаль
Короткий курс лекцій — | «Основи програмування мовою Паскаль «| — | — | |Запровадження. — | Насамперед, варто згадати, що вивчення мови програмування — |є ознайомлення з формальними правилами записи алгоритмів для| |їх наступного виконання комп’ютером. Формальність ця виникає з — |самих принципів, закладених архітектуру обчислювальних пристроїв, і — |жорсткості математичної логіки. Тому… Читати ще >
Основи програмування мовою Паскаль (реферат, курсова, диплом, контрольна)
| | |Короткий курс лекцій | | «Основи програмування мовою Паскаль «| | | | | |Запровадження. | | Насамперед, варто згадати, що вивчення мови програмування | |є ознайомлення з формальними правилами записи алгоритмів для| |їх наступного виконання комп’ютером. Формальність ця виникає з | |самих принципів, закладених архітектуру обчислювальних пристроїв, і | |жорсткості математичної логіки. Тому, постарайтеся сприйняти все | |досить суворі правила як неминучість, налаштувати себе серйозну, | |скрупульозну, часом складну роботу. Однак не боятися, засмучуватися| |і ремствувати долю: трохи акуратності, уваги, знання попереднього | |матеріалу — і вже програміст. | | | |Основні поняття. | | Як людина алгоритм, є, як ви пригадуєте, послідовністю | |інструкцій, програма мовою Паскаль складається з команд (операторів), | |записаних у порядку і форматі. | | Команди дають змогу одержувати, удається зберігати й обробляти дані різних | |типів (наприклад, цілі числа, символи, рядки символів, т.д.). Проте, крім| |команд у запису програми беруть участь ще звані «службові слова ». | |Це і елементи формальності, організуючі структуру програми. Їх не | |дуже багато, та їх значення важко переоцінити. Службові слова можна | |використовувати лише з своєму прямому призначенню. Перевизначати їх | |дозволяється. | | Вам вже відомо, що основна призначення комп’ютера — полегшити | |людині роботи з великими обсягами інформації, тому переважна | |більшість програм побудовано за одним, досить простому принципу: | |даних із зовнішнього світу (введення), обробка їх за відповідному | |алгоритму, зберігання необхідної інформації та висновок в зовнішній (стосовно| |до комп’ютера) світ отриманих результатів. Всі ці дії реалізуються | |через в мовами програмування команди, алгоритмічні | |структури та структури даних. | | | |Основна структура програми. | | Правила мови Паскаль передбачають єдину всім програм форму | |основний структури: | |Program; | | | |Begin | | | |End. | | Тут слова Program, Begin і End є службовими. Правильне і | |доречне вживання цих слів обов’язковий. | | Кутові дужки в форматі зазначають, що натомість при реальному | |програмуванні має бути подставлено конкретне значення. Сама запис | |програми у принципі може здійснюватися загалом у одну стоку. У цьому її | |частини повинні відокремлюватися друг від друга хоча б прогалиною. Проте, така| |запис незручною для читання, недостатньо наочна, тож рекомендую | |дотримуватися наведеної структури, а тілі програми з можливості | |записувати за одним оператору в рядку. | | Ім'я програми вибирається програмістом самостійно відповідно до| |правилами побудови ідентифікаторів. | | Усі об'єкти, які є зарезервованими в Паскале, наявність | |яких зумовлено ініціативою програміста, перед першим використанням в| |програмі мають бути описані. Це виробляється у тому, щоб комп’ютер | |перед її виконанням зарезервував пам’ять під відповідні | |об'єкти і навіть поставив у відповідність цим ділянкам пам’яті ідентифікатори. | |Розділ описів може полягати з п’яти підрозділів: | | 1. Опис міток (Label). | | 2. Опис типів (Type). | | 3. Опис констант (Const). | | 4. Опис змінних (Var). | | 5. Опис процедур та зняття функцій (Procedure, Function). | | За відсутності потреби у певному виді об'єктів, | |відповідний підрозділ то, можливо опущений. | | | |Алфавіт мови. | | Основу будь-якої мови становить алфавіт, тобто кінцевий, | |фіксований набір символів, що використовуються складання текстів на | |даному мові (у разі - програм). Звісно, стрункість картини | |трохи псує наявність діалектів, створюваних стихійно і часто-густо | |які включають у собі апокрифічні (неканонічні) букви і знаки. У | |програмуванні цю проблему вирішується запровадженням поняття «стандарт мови ». | |Воно практично незастосовно мови людським, вічно мерехтливим і | |змінюваним. Ми із Вами переважно говоритимемо про ту самодостатньою | |частини мови Паскаль, що входить у різні його комп’ютерні реалізації| |в незмінному вигляді. У плані вивчення, я — не бачу великого сенсу викладати вам| |суворі правила стандарту, хоча такі існують. Обмежимося деякими | |зауваженнями, розкривають все-таки формальності вживання символів в | |мові Паскаль. | | Отже, алфавіт мови Паскаль становлять: | | 1) літери латинського алфавіту; | | 2) арабські цифри; | | 3) спеціальні знаки. | | Використання символів першої групи найчастіше питань бракує, | |але свої тонкощі тут є. По-перше, це вживання заголовних і | |малих літер літер. Більшість існуючих трансляторів не розрізняють літери | |різних регістрів. Отже, записи «progRaM «і «PROGram «вважатимемо| |ідентичними. По-друге, деякі символи латиниці і кирилиці збігаються по| |накресленню. Чи не можна замість літери «До «латинської написати «K «російську? | |Відповідь: у зошиті (якщо їх зможете розрізнити) — будь ласка, у програмі | |на ЕОМ — в жодному разі. На кожен вид вони може бути схожі, але вже коды-то у | |них абсолютно різні, а комп’ютер, як ви знаєте, оперує всередині себе| |не літерами, які числовими кодами. | | Що стосується звичних арабських цифр сказати можна лише те, що зі своїми | |допомогою записуються як числа. Цифри як звичайних | |символів можна використовувати у різних інших конструкціях мови. | | Найскладніше стан справ зі спеціальними знаками, тому їх | |доведеться розібрати докладно, іноді забігаючи вперед, але поки можете | |пропускати повз вух незрозумілі терміни, не забуваючи, проте, записувати все| |в зошит. Потім, щодо відповідних структур, ви матимете | |можливість зазирнути в розділ у тому, щоб уточнити який знак в | |цьому місці необхідно використовувати. | | Найчастіше уживаним спеціальним символом є прогалину (в | |значимих місцях ми позначати їх у записах знаком «V »). Його | |використання пов’язані з форматами основний структури програми, розділів | |описів, операторів. Не слід плутати наявність прогалини із повною відсутністю | |символу. | |. кінець програми, поділ цілою й дробової частин речовинного | |числа (десяткова точка), поділ полів в перемінної типу Record; | |, поділ елементів списків; | |. вказівку діапазону; | |: використовують у складі оператора присвоювання, і навіть для | |вказівки формату виведення в операторі Writeln; | |; відокремлює один розділ програми від іншого, поділяє оператори; | | «використовується обмеження строковых констант; | | - + * / () арифметичні знаки (використовуються в своєму | |призначенню); | | < > знаки відносин; | | = використовують у складі оператора присвоювання, в розділах | |описів констант і типів, використовують як знак відносини (одно); | | @ ім'я спеціального оператора визначення адреси перемінної, | |підпрограми; | | ^ використовується для іменування динамічних змінних; | | {} обмеження коментарів у програмі; | | [ ] укладають у собі індекси елементів масивів; | | _ символ підкреслення застосовується також як будь-яка літера, | |наприклад, в ідентифікаторах — замість прогалини; | | # позначення символу з його коду; | | $ позначення директиви компілятора, позначення шестнадцатеричного| |числа. | | Постає питання, аякже бути з російськими літерами та інші знаками, | |наявними на клавіатурі? Деякі версії Паскаля припускають їхнє | |використання у програмі, але стандарт мови цього передбачає. | |Тому включати ці символи у програмі можна лише ролі строковых | |констант чи всередині коментарю, тобто там, де транслятор при компіляції| |їх ігнорує. З використанням цих знаків як даних, вони | |рівноправні з усіма символами, що може зберігати у пам’яті і | |обробляти комп’ютер. | | | |Ідентифікатори. | | Імена операторів, змінних, констант, типів величин, ім'я самої | |програми призначаються програмістом і називаються в Паскале | |ідентифікаторами. Існують правила, яких мають відповідати все | |ідентифікатори: | |ідентифікатор може бути унікальним, тобто у тому ж ім'ям різні | |об'єкти неможливо знайти названі; | |ідентифікатор має обмеження за довжиною (залежить від конкретної реалізації | |мови за комп’ютером); | |ідентифікатор може лише з символів латинського алфавіту, цифр і| |знака підкреслення («_ «); | |ідентифікатор неспроможна починатися з цифри. | | | |Константи. | | З усіх підрозділів описів тепер ми розглянемо лише опис | |констант і змінних, інші - пізніше. | | Власне кажучи, в Паскале константами є будь-які явно задані в | |програмі дані (наприклад, 7493, «привіт », 54.899). Слід звернути вашу | |увагу, що з записи числових констант з дробової частиною цю частину| |відокремлюється від цілої не коми, як, можливо, ви звикли, а точкою. Для | |записи великих по модулю або дуже малих (близьких нанівець) чисел | |є можливість запис їхніх в так званої експоненційною формі. З| |такий записом ви зустрічались у математики й фізиці, але називали її | |стандартним виглядом числа. | | Приклад: 2. 4 5 6 7 Є - 0 6 | |мантиса ^порядок | | Тут літера «Є «відокремлює мантиссу (сукупність значущих цифр числа з | |десяткової точкою після першої) від порядку (показника ступеня десятки в | |стандартному вигляді числа). Ви маєте навчитися як читати вересня такому | |вигляді, і записувати. | | Константи, які становлять строковые величини, полягають у | |апострофи. | | Якщо один й та величина використовують у програмі кілька разів, то | |зручніше було б позначити її якимось ім'ям і використовувати цю ім'я | |скрізь, де потрібно записати відповідну константу. Крім скорочення | |розміру вихідного тексту програми, це дасть можливість уникнути випадкових помилок,| |і навіть спростить налагодження програми. Опис поіменованих констант | |починається службовим словом Const. Далі йдуть записи виду: | |=; | |Приклад: | |Const | |Pi=3.14; | |Name1= «Тетяна »; | |Name2= «Віктор »; | |R21=6.33187E+03; | |W_W_W=934 122; | |Поняття перемінної. Типи. | | Дані, як ви знаєте, зберігаються у пам’яті комп’ютера, але для вказівки | |на конкретну інформацію дуже незручно постійно записувати фізичні | |адреси осередків. Проблема в мовами програмування високого рівня, в | |частковості в Паскале, вирішена запровадженням поняття перемінної. Змінна в | |Паскале — іменований ділянку пам’яті для зберігання даних певного | |типу. Значення перемінної (інформація у осередках пам’яті) в | |хід виконання програми то, можливо змінено. Константами ж, як вже | |знаєте, називаються величини, значення яких описані протягом виконання програми | |змінено не може. Конкретні перемінні і константи представляють | |собою об'єкти унікальне суспільство й відрізняються одна від друга ім'ям. | | Як даних програми мовою Паскаль можуть виступати числа,| |символи, цілі рядки символів. Зауважте, що з тими різними видами | |інформації виконуються абсолютно різні дії. Наприклад, з числовими | |величинами виробляються арифметичні операції, чого неможливо зробити з | |символьними. З іншого боку, різновиди даних вимагають різного обсягу | |пам'яті для зберігання. Відповідно до цими міркуваннями у мові Паскаль | |уведено поняття «Тип «(TYPE). Тип перемінної зазначає, які дані | |можуть бути у тому ділянці пам’яті, у яких діях ця | |змінна може брати участі. Існують зарезервовані (базові) типи в| |мові Паскаль, але, як далі ви переконаєтеся, є можливість створювати| |свої власні, зумовлені програмістом типи змінних. | | До базовим типам ставляться: | |тип цілих чисел — Integer | |тип «довгих «цілих чисел — Longint | |тип дійсних (речовинних) чисел (тобто — з дробової частиною) — Real| | | |тип неотрицательных цілих чисел від 0 до 255 — Byte | |тип неотрицательных цілих чисел від 0 до 65 535 — Word | |символьний тип — Char | |строковый тип — String | |логічний тип — Boolean | | Фізично типи даних відрізняються одна від друга кількістю осередків | |пам'яті (байтів), відведених для зберігання відповідної перемінної. | |Логічне ж відмінність проявляється у інтерпретації що зберігається інформації. | |Наприклад, перемінні типу Char та певного типу Byte займають у пам’яті за одним | |байту. Однак у першому випадку вміст осередки пам’яті інтерпретується як| |ціле беззнаковое число, тоді як у другому — як код (ASC) символу. | | На відміну від констант, неименованных змінних немає. Усі | |використовувані у програмі перемінні мають бути описані у відповідній | |розділі описи. | | Розділ описи змінних починається службовим словом Var, після | |якого йдуть записи наступного виду: :; | | Список може складатися з кількох імен (цьому вони поділяються | |комами), в тому числі вже з імені. Тип, указываемый після двокрапки, | |визначає, які дані тепер можуть зберігатися в описаних в такий спосіб | |змінних. До кожного що у програмі типу змінних розділ| |їхні описи мусить бути, принаймні, одна власна рядок. | | Приклад: | |Var | |A, B, H22, Angle: Real; | |Name3: String; | |Flag: Boolean; | |I, J, K, Count: Word; | |Оператор присвоювання. Арифметичні висловлювання. | | Найпростішим дією над перемінної є занесення у ній | |величини відповідного типу. Інколи мені кажуть звідси, як і справу присвоєння | |перемінної конкретного значення. Така команда (оператор) загалом | |виглядає мовою Паскаль так: | | :=; | | Вислів, вказане праворуч від знака » := «, має спричинить значенням| |тієї самої типу, якого і самі змінна, чи типу, сумісної з перемінної| |щодо команди присвоювання. Наприклад, перемінної типу Real можна | |привласнити значення типу Integer чи Word (втім, навпаки робити не можна).| |Вислів спочатку обчислено, потім, його результат ляже в | |осередки пам’яті, відведені для перемінної. | | Що ж являє собою вираз мовою Паскаль? Багато залежить | |від типу висловлювання. Розглянемо спочатку висловлювання арифметичні, тобто ті,| |результатом якого є число. | | До складу арифметичного висловлювання мовою Паскаль можуть входити: | |числові константи; | |імена змінних; | |знаки математичних операцій; | |математичні функції і функції, повертають число; | |які і напівзачинені круглі дужки. | | Правила побудови висловів нагадують математичні з декотрими | |уточненнями. Вислів записується до однієї рядок (ніякої многоэтажности),| |між операндами обов’язково має бути знак операції (Запис «2x «- не | |допускається), знаки деяких операцій та назви деяких функцій відмінні| |від звичних вам. | | Операції: | |+ складання; | |- віднімання; | |/ розподіл; | |* множення; | |MOD залишок від розподілу (записується так: A MOD B; читається: залишок від| |розподілу A на B); війни операція застосовна лише у цілим числам; | |DIVX целочисленное розподіл (записується так A DIVX B; читається: | |результат розподілу A на B без дробової частини); війни операція теж застосовується | |лише цілих операндов. | | Аргументи функцій завжди записуються в круглі дужки: | |SIN (X) sin x; | |COS (X) co x; | |ARCTAN (X) arctg x; | |ABS (X) абсолютне значення x (у математиці - |x|); | |SQR (X) спорудження x в квадрат; | |SQRT (X) вилучення квадратного кореня; | |TRUNC (X) відкидання дробової частини x; | |ROUND (X) округлення x до найближчого цілого числа; | | По виконанні другого оператора присвоювання в ділянці пам’яті, | |відведеному під зміну R, виявиться результат зазначеного висловлювання, | |проте, на жаль, ознайомитися ми зможемо, поки що не маємо | |можливості «зазирнути «на згадку про машини, вивести значення перемінної хоча | |на екран. | | | |Складовою оператор | | Цей оператор, слід сказати, оператором перестав бути. Річ у тім, що | |як і арифметичні дії трапляється необхідно укладати в | |дужки, послідовності команд (операторів) також інколи вимагають | |об'єднання. Це дозволяють зробити звані операторные дужки. | |Формат (загальний вигляд) складеного оператора такий: | |Begin | |; | |; | |… | | | |End; | | Можливо, така структура нагадує вам основну структуру програми.| |Справді, відмінність в тому, що тільки після End наприкінці складеного | |оператора ставиться точка з коми, тож під кінець програми — точка. По | |суті вся програма є великий складовою оператор. | | Зверніть увагу, що вищу точку з коми перед End може | |переносити. | | Складовою оператор дає можливість виконати довільне | |кількість команд там, де мається на увазі використання лише одну | |оператора. Як багато дізнаєтеся потім, його необхідність зустрічається досить | |часто. | | | |Оператори введення та виведення інформації | | Якщо ви пригадуєте, під час розгляду прикладу роботи оператора | |присвоювання ми зіштовхнулися із необхідністю дізнатися результат виконання | |програми. Ми розібралися про те, як інформацію зберігати (в змінних), | |як обробляти (з допомогою висловів), але два фундаментальнейших | |інформаційних процесу залишилися поза уваги: отримання інформації | |і передачі його в зовнішній стосовно комп’ютера світ. Поки наші програми| |може використати лише інформацію, котрі знаходяться безпосередньо в | |тексті програми. Дізнатися, які значення цей час мають перемінні, | |теж за можливе. Програмування таких умов втрачає| |сенс. | | Взаємодія пристроїв опрацювання і збереження інформації із зовнішнього | |середовищем (хоча б із користувачем) є обов’язковою умовою. За такий | |інтерфейс у мові Паскаль відповідають оператори виводу-введення-висновку інформації. Ці | |інструкції дозволяють запровадити аргументи, параметри розрахунків під час | |виконання програми (а чи не на етапі її написання), здійснити висновок | |розрахованих даних в зрозумілому людині вигляді. | | Спочатку оператори введення (формати операторів): | |Read (); | |Readln (); | | У цьому форматі ці команди дозволяють вводити дані в перемінні у | |час виконання програми з клавіатури. Елементами списку введення може бути| |імена змінних, що їх заповнені значеннями, уведеними з | |клавіатури. | | Виконання операторів введення відбувається так: хід програми | |припиняється, на екран виводиться курсор, комп’ютер хоче від | |користувача набору даних для змінних, чиї імена зазначені у списку | |введення. Користувач з клавіатури вводить необхідні значення тому порядку,| |де вони потрібні списком введення, натискає Enter. Після цього | |набрані дані потрапляють у відповідні їм перемінні і виконання | |програми триває. | | Примітка: дані при введення поділяються прогалинами. | | Різниця між роботою процедур Read і Readln (від Read line) полягає у | |наступному: після виконання Read значення наступного даного зчитується з | |тієї ж рядки, а після виконання Readln — з новою рядки. | | Для виведення інформацією Паскале також є дві команди: | |Write (); | |Writeln (); | | Такий формат використання Write і Writeln дозволяє виводити на екран| |монітора дані зі списку виведення. Елементами списку виведення можуть бути | |імена змінних, висловлювання, константи. Перш ніж вивести на екран | |комп'ютер значення висловів спочатку обчислить. Елементи списку, як і| |в операторах введення, поділяються комами. | | Різниця між двома операторами виведення таке: після виконання | |оператора Writeln (від Write line) відбувається перехід нові рядок, а | |після виконання інструкції Write, перехід нові рядок немає і| |печатку по наступним командам виведення Write чи Writeln відбуватиметься | |тій самій рядку. При виклик оператора Writeln без параметрів просто | |відбувається перехід нові рядок. | | Наведемо досвід використання операторів введення та виведення: | |Program Inteface; | |Var | | R, S: Real; | |Begin | | Write («Запровадьте радіус кола »); {Печатка на екрані та прохання введення} | | Readln®; {Введення значення | |зміну R з клавіатури} | | S:=4*ARCTAN (1)*SQR®; {Обчислення площі кола (pR2)} | | Writeln («Площа кола радіусом », R, «дорівнює «, P. S) | |End. | | Ця програма затребувана у користувача значення радіуса кола, | |забезпечує можливість увести його значення, розраховує і виводить на | |екран величину площі кола з такою радіусом. Отже, з’являється | |можливість, не вносячи змін — у текст програми, вводити різні | |значення радіуса і реально отримувати, відповідні їм значення площі кола. Для| |цього йому досить кілька разів запустити програму. Також цю програму | |демонструє таке правило: видача результатів мусить бути | |прокоментована те щоб був ясний сенс надрукованих чисел. | |Справді, адже можна було обмежитися Writeln (S), але значення | |виведеного програмою вересня цьому випадку було б зрозуміло тільки тому, хто | |цю програму написав. | | | |Мітки. Оператор безумовного переходу. | | Кожен будинок надворі має власний номер, все люди мають власні | |імена, навіть осередки пам’яті комп’ютера мають кожна свою адресу. Усе це | |прийнято у тому, щоб матимуть можливість однозначно зазначити | |визначається об'єкт. Так само, для свідчення про оператори програми | |застосовуються мітки. | | Мітка у стандарті мови Паскаль є ціле | |ненегативне число. Всі використовувані у програмі мітки би мало бути | |перераховані розділ описи міток, нинішньому службовим словом Label, | |наприклад: | | Label 1, 2, 8; | | Однією міткою можна позначити лише одне оператор. Мітка від позначеного| |оператора відокремлюється двокрапкою. | |Приклад: | | 6: Writeln (14/2); | | В усіх життєвих наведених раніше програмах оператори виконувалися один за | |іншим у порядку, де вони було записано з тексту. Така | |алгоритмічна структура називається прямим проходженням. Проте, у мові | |Паскаль спочатку існує оператор, порушує прямолінійне виконання| |програми, передавальний управління довільну її точку. Така інструкція | |називається безумовним переходом і має тої формат: | | Goto; | | Оператор, якого відбувається перехід може бути помечен даної | |міткою. | | Використовувати оператор безумовного переходу треба дуже обережно | |щоб уникнути отримання хибних результатів чи його повної «зациклення «| |програми. Взагалі, вживання згаданої команди серед програмістів | |вважається поганою манерою. Як багато переконаєтеся, завжди є можливість | |нього. | | | |Умовний оператор | |Однією з основних алгоритмічних структур є галуження | |(альтернатива). | | Якщо умова виконується, він виконано інструкція «1 », якщо ні,| |то — інструкція «2 ». Попри те що, що у схемою присутні два дії,| |виконано буде лише одна, оскільки умова або брехливо, або істинно. | |Третього просто немає. Така схема дозволяє виконувати завдання, яких у | |залежність від сформовані обставини потрібно б здійснити те чи інше | |дію. Немає сумніву, що кількість завдань що така величезна. Більше| |того, дуже складно придумати реально значиме завдання, алгоритм виконання | |якого містив в собі просте пряме проходження команд. Навіть | |примітивний приклад, узятий із курсу математики, як ви пересвідчитеся, неспроможна | |бути без використання розгалуження. Отже, необхідно обчислити значення| |висловлювання y=1/x. Вам відомо, що це функція який завжди має значення,| |тобто задля всіх значень аргументу існує значення результату. Наша| |завдання так скласти алгоритм, щоб виконавець в жодному разі встав | |у безвихідь, навіть за отриманні нуля як аргумент. Сформулювати це | |природному мові неважко: | |1. Одержати значення x. | |2. Якщо x=0, то повідомити, що вираз значення немає, інакше — | |обчислити y як 1/x. | | Отже використовується наведена вище алгоритмічна структура.| |Вона має простими словами: | | Якщо {Якщо виконується умова} | | то {то виконати дію № 1 } | | інакше {інакше — виконати дію № 2 } | |все | | Як це записати на Паскале? Так точно як і, лише англійською. | | Формат умовного оператора мовою Паскаль: | | If | | Then | | Else; | | Зверніть увагу, що у Thenі Elseчастини треба лише один | |оператор. Але що робити, щоб вирішити завдання, у якій з виконання чи | |невиконання умови потрібно здійснити не одне, а кілька дій? Тут | |приходять допомогу вже відомий вам складовою оператор. У операторные | |дужки можна зрозуміти скільки завгодно операторів. | | Варіант умовного оператора у разі: | |If | |Then Begin end | |Else Begin < група операторів 2> end; | | Знак «точка з коми «не ставиться перед службовим словом Else, але | |оператори в групах, природно, відокремлюються друг від друга цим знаком. | | Тепер поговоримо щодо умов. У програмах мовою Паскаль умови | |є висловлювання, значенням якого є величина | |логічного (Boolean) типу. Це може бути як просто змінна зазначеного| |типу, і складна послідовність висловлювань, пов’язаних логічними | |операціями. | | У простих умовах можна застосовувати знаки операцій порівняння: | |>(більше), =(більше або одно), | |=(D1*(45−2)) {Значення висловлювання на лівої частини більше або | |одно значенням висловлювання з правій частині} | | P. S «ABC «{Значення перемінної P. S не одно строковой константі «ABC «} | | Наведемо приклад рішення є ще однією завдання: «Із двох чисел вибрати | |найбільше ». | | На погляд, рішення очевидно, але це менш тривіально, як | |здається. | |Program Example; | |Var A, B, C: Real; {A, B — для зберігання аргументів, З — результат} | |Begin | |Writeln («Запровадьте два числа »); | |Readln (A, B); {Вводимо аргументи з клавіатури} | |If A>B Then C:=A Else C:=B; {Якщо A>B, то результат — A, інакше результат — | |B} | |Writeln (C); {Виводимо результат на екран} | |End. | | Ще одна класичний приклад: «По заданим коефіцієнтам вирішити | |квадратне рівняння ». Це завдання складніше, тому перш ніж писати | |програму складемо алгоритм, записавши її як блок-схемы. | |Спочатку вводимо коефіцієнти, потім обчислюємо дискриминант. Тепер виникає| |дві можливості: або відсутність дійсних коренів у разі | |негативного дискриминанта, або ці коріння можна все ж виявити й | |вивести на екран у разі неотрицательного дискриминанта (випадок рівності | |дискриминанта нулю входить сюди ж, коренів — два, лише вони однакові J). | | При записи алгоритму мовою програмування треба врахувати, що у | |галузі «немає «не одну дію, а через три, тож слід застосувати складовою | |оператор. Арифметичні висловлювання пам’ятаймо нотувати у відповідність до| |правилами мови Паскаль. У іншому, цю програму не складніше попередньої. | | | | | | | |Program Sq1; | |Var A, B, З, D, X1, X2: Real; | |Begin | |Writeln («Запровадьте коефіцієнти квадратного рівняння »); | |Readln (A, B, C); | |D:=B*B-4*A*C; | |If D:?); | | | |Begin | | | |End; | |Розділ описів може мати таку ж підрозділи, як і розподіл описів | |програми (опис процедур і державних функцій — зокрема). Але всі | |описані тут об'єкти «видимі «лише цій процедурі. Вони тут локальны | |як і імена формальних параметрів. Об'єкти, описані до цього часу | |розділі описів програми і переопределенные у процедурі, | |називаються глобальними з цією підпрограми і доступні для від використання. | |Легко помітити схожість структури програми які і кожній із її процедур.| |Справді, ще й процедура і полягала основна програма реалізують якийсь | |алгоритм, просто процедура це не дає рішення усієї завдання. Відмінність в заголовку| |й у знаку після End. | |Формат описи функції: | |Function (:; | |< Ім'я форм. параметра 2>:?):; | | | |Begin | | | |End; | |У тілі функції обов’язково має бути хоча б команда присвоєння такого | |виду: :=; | |Зазначене вираз має спричинить значенням тієї самої типу, як і тип | |результату функції, описане вище. | |Виклик процедури представляє у програмі самостійну інструкцію: | |(, < Фактичний параметр 2>?); | |Типи фактичних параметрів би мало бути так само, як і в соответсвующих | |їм формальних. | |Виклик функції має входити в вираз. При обчисленні значення такого | |висловлювання функція буде викликана, дії, перебувають у її тілі, будуть | |виконані, в вираз буде подставлено значення результату функції. | |Наведемо найпростіший досвід використання підпрограми. | |Завдання: «Знайти максимальне із трьох запроваджених чисел ». Аби вирішити | |скористаємося описом функції, приймаючої значення максимального з цих двох| |чисел, які у неї вигляді параметрів. | |Program Fn; | |Var | |A, B, C :Real; | |Function Max (A, B: Real):Real; {Описуємо функцію Max з формальними} | |Begin {параметрами A і B, яка } | |If A>B Then Max:=A {значення максимального їх } | |Else Max:=B {Тут A і B — локальні перемінні } | |End; | |Begin | |Writeln («Запровадьте три числа »); | |Readln (A, B, C); | |Writeln («Максимальним із усіх є «, Max (Max (A, B), C)) | |End. | |Зверніть увагу до стислість тіла програми і прозорість | |дій всередині функції. Формальні параметри A і B, використовувані в | |подпрограмме, немає нічого спільного змінним A і B, описаним в | |основну програму. | |Існує дві за способом передачі фактичних параметрів в підпрограму: по | |значенням і з засланні. У першому випадку значення переменной-фактического | |параметра при виклик підпрограми присвоюється локальної перемінної, | |що є формальним параметром підпрограми. Що потім відбувалася | |з локальної перемінної, це зовсім не позначиться на відповідної | |глобальної. Для одних завдань це добре, а часом потрібно зробити в | |подпрограмме дії над самими перемінними, зазначеними як | |фактичних параметрів. Ніхто на допомогу приходить другий спосіб. Відбувається | |таке: при зверненні до подпрограмме немає формування | |локальної переменной-формального параметра. Просто час виконання | |підпрограми ім'я цій локальній перемінної буде вказувати ту область| |пам'яті, як і ім'я відповідної глобальної перемінної. Якщо цього разі| |змінити локальну зміну, зміняться дані й у глобальної. | |Передача параметрів по засланні особливий тим, що з описі підпрограми| |перед ім'ям переменной-формального параметра ставиться службове слово Var.| |Тепер використання кронштейна як фактичних параметрів висловів чи | |безпосередніх значень не допускається — повинно бути іменами | |змінних. | |Ще одна класичний приклад. Завдання: «Розташувати гаразд неубування три| |цілих числа ». | |Program Pr; | |Var | | S1, S2,S3 :Integer; | |Procedure Swap (Var A, B: Integer);{Процедура Swap з параметрами-переменными}| | | |Var З: Integer; {З — незалежна локальна змінна} | |Begin | | C:=A; A:=B; B:=C {Змінюємо місцями вміст A і B} | |End; | |Begin | |Writeln («Запровадьте три числа »); | |Readln (S1,S2,S3); | |If S1>S2 Then Swap (S1,S2); | |If S2>S3 Then Swap (S2,S3); | |If S1>S2 Then Swap (S1,S2); | |Writeln («Числа гаразд неубывания: V », S1, S2,S3) | |End. | | | |Фундаментальна обізнаність із файлами | |Тип-файл є послідовність компонент одного типу, | |розташованих осіб на зовнішньому устрої (наприклад, на диску). Елементи можуть | |бути будь-якого типу, крім самого типа-файла. Кількість елементів в файлі| |в описах не оголошується. Фундаментальна обізнаність із фізичними файлами відбувається після | |звані файлові перемінні. | |Для завдання типа-файла варто використовувати зарезервовані слова File і | |Of, після чого вказати тип компонент файла. | |Приклад: | |Type | |N = File Of Integer; {Тип-файл цілих чисел} | |З = File Of Char; {Тип-файл символів} | |Є наперед визначений в Паскале тип файла безпосередньо з ім'ям Text. Файли цього | |типу називають текстовими. | |Ввівши файловий тип, можна знайти й перемінні файлового типу: | |Var | |F1: N; | |F2: З; | |F3: Text; | |Тип-файл можна описати так і безпосередньо під час введення файлових змінних: | |Var | | Z: File Of Word; | |Файлові перемінні мають специфічне застосування. Із них не можна | |виконувати ніяких операцій (присвоювати значення, порівнювати тощо.). Їх | |можна використовувати тільки до операцій з файлами (читання, запис і| |т.д.). | |Елементи файла вважаються розташованими послідовно, тобто як і, | |як елементи лінійного масиву. Відмінність полягає у цьому, що, по-перше, | |розміри файла можуть змінюватися, по-друге, спосіб звернення до елементам | |зовсім інша: неможливо звернутися до произвольному елементу файла; | |елементи його проглядаються лише поспіль з початку до кінця, причому у | |кожен час доступний лише одне елемент. Можна уявити,| |що кожного файла існує покажчик, що складає в момент на| |певний компонент файла. Після завершення операції читання чи записи | |покажчик автоматично пересувається наступного року компонент. | |Перш ніж, як здійснювати вхід-видобуток, файлова змінна мусить бути | |пов'язана з конкретною зовнішнім файлом з допомогою процедури Assign. | |Формат: | | Assign (,); | |Ім'я файла задається або строковой константою, або через зміну типу | |Sting. Ім'я файла має відповідати правилам яка працює цей час| |ОС. Якщо рядок імені порожня, то зв’язок файлової | |перемінної здійснюється зі стандартним пристроєм виводу-введення-висновку (як | |правило — з консоллю). | |Після цього файл повинен бути відкритий одній з процедур: | |Reset (); | |Відкривається існуючий файл для читання, покажчик поточної компоненти | |файла налаштовується початку файла. Якщо фізичного файла, | |відповідного файлової перемінної немає, виникає ситуація | |помилки виводу-введення-висновку. | |Rewrite (); | |Відкривається новий порожній файл для записи, йому присвоюється ім'я, заданий | |процедурою Assign. Якщо файл з такою назвою вже є, він | |знищується. | |Після роботи з файлом він, зазвичай, може бути закритий процедурою Close.| | | |Close (); | |Це вимога обов’язково необхідно дотримуватися для файла, куди | |здійснювалася запис. | |Тепер на безпосередню організацію читання і запис. | |Для введення інформації з файла, відкритого для читання, використовується вже | |знайомий вам оператор Read. Щоправда, у його форматі та використання ви | |помітите певні зміни: | |Read (,); | |Відбувається зчитування даних із файла в перемінні, чиї імена зазначені у| |списку введення. Змінні би мало бути тієї самої типу, як і компоненти файла. | | | |Висновок інформації виробляє, як і здогадатися оператор Write (,); | |Дані зі списку виведення заносять у файл, відкритий для записи. | |Для текстових файлів використовуються також оператори Readln і Writeln з | |відповідними доповненнями, які належать до файловому уведенню-висновку. | |Цікаво, що виведення даних на монітор і введення з клавіатури у мові Паскаль | |теж є діями з файлами. Вони навіть мають визначені | |файлові перемінні текстового типу: Output і Input відповідно. | |Змінна Output завжди відкрита для записи, Input — для читання. Не | |вказувати файлові перемінні в операторах вводу-виводу (то дійдемо формату, | |розглянутому у темі «Оператори виводу-введення-висновку »), то разі записи по | |вмовчанням вибирається файл Output, у разі читання — Input. | |Як вам відомо, будь-який файл конечен і продовжувати читання потім із нього інформації | |можна лише до певної межі. Як це межа встановити? Перевірити,| |закінчено чи файл, можна викликом стандартної логічного функції Eof () | |Вона виробляє значення True, якщо файл закінчено, і False — у протилежному | |разі. | |Вирішимо таку завдання: «Написати програму, яка з клавіатури | |список прізвищ учнів, та був опубліковує його, крім учнів, у | |яких прізвище починається з літери «Ш «». | |Оскільки заздалегідь кількість даних невідомо, то тут для їх збереження | |використовуємо файл. Тип елементів — строковый. | |Program L; | |Var | |I, N: Integer; | |F: File Of String; | |P.S: String; | |Begin | |Assign (F, «Spis.lst »); {Чи пов’язуємо зміну F з файлом Spis. lst} | |Writeln («Запровадьте кількість учнів »); | |Readln (N); {Вводимо кількість учнів} | |Rewrite (F); {Створюємо файл для запис у нього даних} | |For I:=1 To N Do {Всім учнів} | |Begin | |Writeln («Запровадьте прізвище »); | |Readln (S); | |Write (F, S) | |End; | |Close (F); | |Reset (F); | |Writeln; Writeln («Список учнів: »); | |While Not (Eof (F)) Do | |Begin | |Read (F, S); | |If S[1] «Ш «Then | |Writeln (S) | |End; | |Close (F) | |End. |.