Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Системолог_08.06.11.doc
Скачиваний:
425
Добавлен:
23.02.2016
Размер:
8.69 Mб
Скачать

А) б)

Рисунок 7 – Два типових алгоритми обробки елементів матриць

Приклад. Знайти добуток додатніх елементів в стовпцях матриці. Вважається, що матриці в оперативній пам’яті немає – її треба буде ввести. Звертаємось до інструкції:

  1. Задача відноситься до типу рис. 7-б;

  2. На зовнішньому циклі потрібно задіяти індекс стовпців;

  3. Згідно з табл. 6 задача відноситься до типу 2, а тому в підготовчі операції потрібно занести D=1.

Тому блок-схема повинна мати вигляд (рисунок 8):

3.2. Основи програмування на мові Pascal for Windows

3.2.1. Загальні положення

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

Абетка мови Pascal включає в себе літери латині (A…Z, a…z), арабські цифри (0…9) та спеціальні символи:

+ | - | * | / | = | < | > | [ | ] | { | } | ( | ) | @ | $ | ’ | ^ | & | # | |.

Останній в цьому переліку символ – пропуск. До спеціальних символів в мові Pascal відносяться пари символів <> | <= | >= | := | (* | *). В програмі ці символи не можна розділити пропусками.

Рисунок 8 – Приклад блок-схеми для обробки елементів матриці

Із символів мови складаються слова, які можна розділити на зарезервовані слова (program, label, for, end і т.д.), ідентифікатори і константи. Слова в операторах відділяються пропусками або іншими спеціальними символами. Там де є ці символи дозволяється проставити будь-яку кількість пропусків. Цим досягається хороша читабельність програми.

Кожний оператор закінчується символом «;». Дозволяється проставити в програмі підряд декілька символів «;», лишні сприймуться як пусті оператори.

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

Ідентифікатор – символічне ім’я об’єкта (мітки, константи, змінної, типа, процедури, функції, програми). Як ідентифікатори можуть бути застосовані будь-які сполучення букв латині, цифр та знака підкреслення, але вони не повинні починатися з цифри. Ідентифікатор може мати довільну довжину, але транслятором будуть сприйматися лише перші 63 символи. Ідентифікатори, як і зарезервовані слова можна писати і вводити в пам'ять як великими, так і малими літерами кирилиці. Ідентифікатори StrumA_B та sTruma_b сприймаються транслятором як один і той же ідентифікатор.

В мові Pascal основними елементами даних є константи і змінні.

Константа – не змінює свого значення протягом виконання програми. Вона може бути задана явно своїм значенням або позначена ідентифікатором.

Змінні міняють свої значення в процесі виконання програми. Кожній змінній відповідає її ідентифікатор.

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

{Це коментар} або (*Тут пояснення*).

3.2.2. Структура Pascal-програми

Програма на мові Pascal складається із заголовка, розділу описів та розділу операторів. Ці розділи повинні в програмі розташовуватися в такому порядку, як це показано на рисунку 9.

Program <Ім’я>;

РОЗДІЛ ОПИСУ

Uses <модулі>;

Label <мітки>;

Const <константи>;

Type <типи даних>;

Var <змінні>;

Процедури і функції;

РОЗДІЛ ОПЕРАТОРІВ

Begin

<оператори алгоритму>

End.

Рисунок 9 – Структура Pascal-програми

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

Заголовок має службове слово Program та ім’я програми – ідентифікатор.

Блок модулів починається службовим словом Uses, після якого потрібно вказати імена бібліотечних модулів, які потрібно підключити до створюваної програми. Як правило, в програмі є оператори роботи з екраном (введення даних, очистка екрану, виведення результатів). В цьому випадку потрібно обов’язково задіяти оператор

Uses wincrt;

Якщо в програмі використовуються оператори безумовної передачі управління Goto <мітка>; то всі мітки повинні бути описані в блоці опису міток.

Мітки – це цілі числа, що беруться з діапазону 1:9999.

Опис міток ведеться по схемі: Label 12, 421, 9475;

Після виконання оператора Goto 25, наступним в програмі обов’язково буде виконуватись оператор, помічений міткою 25:

25: А:=1;

Змінній А присвоюється значення 1.

Решту блоків розділу опису розглянемо пізніше. До речі, не всі блоки розділу опису обов’язково повинні бути в програмі.

3.2.3. Типи даних

Всі дані в мові Pascal строго типізовані, тобто обов’язково віднесені до одного із типів.

Тип – це множина даних з однаковими характеристиками, до яких можна застосовувати лише їм притаманні операції та функції.

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

Дані цілого типу зберігають цілі числа в діапазоні в залежності від їх опису:

0:255Byte;

Integer;

0:65535Word;

Longint.

Над даними цілого типу можливі такі операції +, -, *, div, mod. Якщо дві змінні цілого типу мають значення a=23; b=7, то a+b=30; a-b=16; a*b=161; a div b =3 (ціла частина частки); a mod b =2 (остача від ділення).

До даних цілого типу можна застосувати функцію:

abs(-23)=23 – модуль числа;

SQR(7)=49 – квадрат числа;

ODD(-7) – True – істина, якщо число непарне;

RANDOM(50) – генерація випадкових чисел від 0 до 50.

Дані дійсного типу можуть бути представлені в формі з фіксованою точкою (4754.725) і в формі з плаваючою точкою (4.754725Е3). Дійсні числа описуються службовим словом Real, що дає можливість зберігати числа в діапазоні з точністю зберігання мантиси в 12 значущих цифр. Над дійсними числами можливі дії:

+, -, *, /.

До них можна застосовувати такі функції:

В мові Pascal немає операції піднесення до степеня. Тому: .

Дані булевого типу можуть бути лише двох видів: TRUE (істина) та FALSE (хибність). Описуються вони службовим словом boolean. Над ними можуть виконуватись дії:

NOT – логічне заперечення (операція НІ, інверсія);

AND – логічне множення (операція І, кон’юнкція);

OR – логічне додавання (операція АБО, диз’юнкція).

Дані символьного типу являють собою один символ, взятий з двох боків в апострофи (а, &, % і т.д.). Описуються змінні цього типу службовим словом char. Всіх символів в мові Pascal 256 і вони зберігаються в операційній системі Windows в таблиці ANSI (Додаток 1). Кожний символ має порядковий номер. До типу char можна застосувати такі операції порівняння (<, <=, >, >=, =, <>). Символ вважається більшим, якщо більшим є його ординарний номер (1>9=false).

До них можна застосувати функції:

Ord(1)=49;

Succ(1)=2;

Pred(1)=0;

Chr(49)= 1;

Upcase(h)=H.

3.2.4. Константи

Константи в програмі задаються в явному вигляді. Їх тип визначається по їх зображенню в програмі. Площа кругу визначається виразом 3.1416*R*R. Тут 3.1416 числова константа дійсного типу. Якщо така константа в тілі програми зустрічається часто, її краще замінити ідентифікатором. Це робиться в блоці опису констант по типу:

Const PI=3.1416; K=True;

C=’@’;

CD=255;

При такому представленні числа  для його уточнення число 3.1416 потрібно буде замінити в програмі на 3.141592 лише один раз.

3.2.5. Блок опису змінних

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

Var a1, alfa, cent: real;

l: boolean;

k1, a2, i, n: byte; m, k: integer;

beta: real; ch: char;

3.2.6. Оператори мови Pascal

Оператори програми записуються в розділі операторів. Вони реалізують на мові Pascal дію, представлену блок-схемою розв’язку задачі. Покажемо, як при програмуванні задачі кодуються блоки блок-схем.

Блок процесу кодується оператором присвоювання S:=A;

де S – ідентифікатор змінної, А – вираз, := – знак присвоєння (пропуском символи не розділяються).

Змінна S та вираз А повинні бути одного типу. Єдине виключення : S – змінна дійсного типу, а А – вираз цілого типу. Зворотної дії це правило немає. В цьому випадку потрібно застосовувати функції ROUND (заокруглення до цілого) або TRUNC (відкидання дробової частини числа). Наприклад, алгебраїчний вираз

в програмі буде записаний так:

Y:=(x*sqr(x)cos(sqr(x))+sqr(sin(x)))/((sin(sqrt(abs(x)))/(cos(sqrt(abs(x))))+exp(sqr(x)-1))+0.4343*ln(exp(4*ln(x)));

Якщо площу круга потрібно записати в змінну цілого типу, то маємо оператор:

Pl:=ROUND(3.1416*R*R);

Блок «Рішення» кодується оператором умовної передачі управління. В залежності від структури алгоритму цей оператор може мати скорочений або повний вигляд (Рисунок 10).

ні так ні

так

а) б)

Рисунок 10 – Структури розгалуження

На рисунку 10а) представлена шунтуюча структура розгалуження, яка кодується умовним оператором скороченого виду:

іf <умова> then S;

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

На рисунку 10б) представлена альтернативна структура розгалуження, що кодується оператором:

іf <умова> then S1 else S2;

в даному операторі буде виконаний один із операторів S1 або S2 в залежності від значення логічного виразу <умова>.

Блок введення інформації кодується процедурамиRead та Readln, що розміщені в бібліотечному модулі Wincrt. При виконанні цих операторів робота програми призупиняється і відбувається очікування введення даних Read (a, b, c, …, k).

Дані для змінних a, b, c, … , k вводяться з клавіатури і розділяються один від одного хоч би одним пропуском. Введені дані повинні чітко відповідати типу і порядку слідування змінним списку оператора Read. Ознакою закінчення введення є натискання на клавішу Enter. Відмінність процедури Readln від Read та, що перша після введення даних переводить курсор на новий рядок дисплея.

Для виведення даних на екран монітора застосовуються процедури Write та Writeln. Форма її запису: Writeln(a, b, …, k); де (a, b, …, k) – список параметрів виведення, серед яких можуть бути константи, ідентифікатори змінних, текстові константи, які з двох сторін обмежуються апострофами, або вирази. Для введення чисел після ідентифікатора через двокрапку можна вказувати формат. Перше число формату вказує скільки позицій виділяється під числа, а друге – скільки із них приділяється для дробової частини числа.

Наприклад:

для цілих чисел: а:=12; Writeln(а:5) буде надруковано «12»;

для дійсних: b:=25.4776; Writeln(b:7:3) буде надруковано «25.478».

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

Writeln(’’:10,’Значення В=’, В:7:4); здійснить відступ 10 позицій з лівої частини рядка, а потім роздрукує значення змінної В з поясненням.

Блок організації цикла кодується оператором For i:=nп To nк Do S;

Крок переадресації циклу в цьому операторі завжди 1. Якщо в програмі потрібно використати крок переадресації не 1, а інше число (n), то в середині оператора S повинен бути оператор i:=i+(n-1).

Виконання оператора for відповідає роботі блока рисунок 5.

Оператор S, як правило складається з декількох простих операторів, а тому повинен мати структуру:

Begin <оператори тіла циклу> End;

Службові слова Begin та End являються логічними дужками, а тому після Begin та перед End знак «;» не ставиться.