Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка_ОТтаП_Ч1

.pdf
Скачиваний:
45
Добавлен:
12.05.2015
Размер:
1.51 Mб
Скачать

begin

writeln('Введiть через пробіл два числа'); writeln('Пiсля 2го числа натисніть ENTER'); read(X,Y);

MYLT:=X*Y;

writeln('Їх Добуток дорівнює ',MULT) end.

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

.

2.2. Ідентифікатори.

Імена об’єктів програми: змінних, програм, функцій тощо. називаються ідентифікаторами. Вони складаються з літер латинського алфавіту i цифр, але обов'язково повинні починатися з літери, наприклад:

SUMMA, FLAG1, FLAG.

Для наочності можна використовувати символ підкреслювання: FLAG_1,FLAG_2. Довжина ідентифікатора не повинна перевищувати 8 символів (для компілятора Turbo Pascal). Зайві праворуч символи не враховуються при компіляції.

2.3. Оператори присвоювання.

Програма FIRST вміщує оператор:

MULT:=X*Y;

Цей оператор присвоювання, змiст якого полягає в тому, що значення добутку Х*Y присвоюється змiннiй MULT.

Природно, що змінні X та Y перед виконанням оператора присвоювання повинні одержати деякі значення. В цьому випадку ці значення вводяться за допомогою оператора READ.

20

2.4. Введення та виведення інформації.

Для введення i виведення інформації використовують

оператори READ, READLN, WRITELN, WRITELN.

У програмі FIRST оператор:

writeln('Введiть через пробіл два числа');

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

writeln('Пiсля 2го числа натисніть ENTER');

виведе своє повідомлення з початку нового рядка екрана. При вводі даних, пробіл після числа, яке відповідає Х, потрібен для розділення двох чисел, що вводяться оператором READ(X,Y)

(пробіл вказує, що введення першого числа закінчено).

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

Тому послідовність

write('Введiть два числа'); read(X,Y);

задасть наступну конфігурацію введення.

Введіть два числа 56 78.

В операторі виведення можна комбінувати виведення тексту та виведення даних у потрібному порядку, наприклад:

writeln('добуток ', X, ' та ', Y, ' дорівнює ', MULT);

Результат матиме вигляд:

добуток 56 та 78 дорівнює 4368

21

Аналогічно, оператор readln після введення потрібних даних встановлює курсор на початок наступного рядка.

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

writeln('добуток, X:4, 'та', Y:4,

' дорівнює ', MULT:5);

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

добуток 56 та 78 дорівнює 4368

Оператор writeln без списку даних лише переводить курсор у першу позицію нового рядка.

Якщо треба очистити екран перед виведенням даних використовується вмонтована функція CLRSCR. Можна

встановити курсор у потрібній позиції екрана за допомогою вмонтованої функції GOTOXY(N,M), де N-номер рядка, а M-

номер стовпця (рядки та стовпці екрана нумеруються з одиниці). Щоб застосувати вищеназвані функції, потрібно доповнити

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

Crt.

Приклад. Послідовність операторів:

program FIRST; Uses Crt;

Var

X,Y:integer;

MULT:integer; Begin

clrscr;

gotoxy(5,10); writeln('екран очищено');

……………..

End.

22

очистить екран, а потім виведе повідомлення у п'ятому рядку, починаючи з 10-ї позиції.

2.5. Числові типи даних.

Цілі типи

Таблиця 2.1

 

Назва типу

Область значень

 

 

byte

0…255

 

 

shortint

-128…127

 

 

integer

-32768…32767

 

 

word

0…65535

 

 

longint

-2147483648…2147483647

 

 

У програмі FIRST використані дані цілого

типу

integer,

тобто змінні

X,Y,MULT можуть мати

тільки

цілочисельні

значення.

Діапазон та конкретний

вигляд

внутрішнього подавання чисел типу integer залежить

від

типу комп’ютера, зокрема - від розрядності процесора.

Для 16-

розрядних комп’ютерів діапазон цілих чисел: від -32768 до +32767. В будь-якому випадку вмонтована функція MAXINT дозволить дізнатися про значення максимального числа.

Спробуйте виконати програму:

program MAX_INT; begin

writeln(MAXINT);

end.

Буде виведено: 32767

З цілими числами у Паскалі можна виконувати наступні операції:

+ додавання;

23

- віднімання; * множення;

div цілочислове ділення; mod остача від ділення.

Наприклад: 5+4=9 5-2*2=1 (5-2)*2=6 10 di v2=5 12 div 2=6 11 mod 2=1 11 mod 3=2

Можна використовувати функції:

ABS(X) - обчислення абсолютного значення числа X.

Наприклад: ABS(-3)=3; ABS(5)=5.

SQR(X) - квадрат числа X. Наприклад: SQR(3)=9;

SQR(-2)=4.

Дійсні типи

Таблиця 2.2

Назва типу

Область значень

 

 

real

2.9*10E-39…1.7*10E38

 

 

double

5.0*10E-324…1.7*10E308

 

 

extended

1.9*10E-4951…1.1*10E4932

 

 

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

1.0 ; 3.14 ; -0.5123

Також можна використовувати експоненційну форму запису числа:

10.02E+1 ; -6.3700E-3

де число після E означає степінь до якого треба привести число 10 і помножити на число перед E, тобто:

10.02E+1 = 10 * 10.02 = 100.2

24

- 6.3700E - 3 10 3 * 6.37 -0,00637

Для цих типів допустимі операції : + додавання;

-віднімання;

*множення; / ділення.

Крім цього, можна використовувати вмонтовані функції (тільки для дійсних аргументів):

Abs(X) – обчислення абсолютного значення числа X; Sqr(X) – квадрат числа X;

Sqrt(X) – квадратний корінь з X; Sin(X) – sin(x) (X в радіанах); Cos(X) – cos(x) (X в радіанах); Exp(X) – експонента X;

Ln(X) – натуральний логарифм; Arctan(X) – arctg(x) (результат в радіанах); Int(X) – отримати цілу частину числа X,

Frac(X) – отримати дробову частину числа X.

Інші функції можна моделювати зі стандартних за допомогою математичних формул, наприклад:

Таблиця 2.3

Функція

Математичний вираз

Вираз на Паскаль

 

 

 

 

 

 

 

tg X

sin X / cos X

SIN(x)/COS(x)

 

 

 

 

 

 

 

ctg X

cos X / sin X

COS(x)/SIN(x)

 

 

 

 

 

 

 

log y x

ln x / ln y

LN(X)/LN(Y)

 

 

 

 

 

 

 

lg x

ln x / ln 10

LN(X)/LN(10)

 

 

 

 

 

 

 

X Y

e y ln

 

x

 

 

EXP(y*LN(ABS(x)))

 

 

 

 

 

На відміну від більшості мов програмування, мова Паскаль добре підходить для перетворення типів.

Якщо змінній типу real присвоєно значення типу integer, то ці значення автоматично перетворюються на дійсний еквівалент (-2>-2.0, 5>5.0 і т.д.). Але для того,

25

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

1) TRUNC(X) - функція, яка повертає цілу частину свого дійсного аргументу X;

2) ROUND(X) - функція, яка округляє дійсний аргумент до найближчого цілого.

Наведемо декілька прикладів роботи цих стандартних функцій.

Значення функцій

TRUNC(4.2), TRUNC(4.5) та TRUNC(4.8)

збігаються та дорівнюють 4.

Значення

ROUND(4.2) дорівнює 4, а ROUND(4.8) дорівнює 5.

Або, наприклад, значення

TRUNC(-4.7) дорівнює -4, а значення ROUND(-4.7)

дорівнює -5.

Таким чином, функція ROUND виконує в деякому значенні більш осмислену дію, ніж функція TRUNC. Функція ROUND не просто відкидає дрібну частину, а досліджує її, щоб визначити: до якого найближчого цілого (більшого чи меншого) слід округлити дійсне значення.

Подання даних типу integer і типу real в мові Pascal істотно відрізняються один від одного. Пов'язано це з тим, що дійсні числа в загальному випадку подані з визначеною точністю, яка залежить від конкретної реалізації транслятора мови. Через це при програмуванні мовою Pascal, як і багатьма іншими мовами, потрібно дотримуватися точності дійсних чисел при їх обробці, наприклад, вирази

(3 * х) / 3 і 3 * (х / 3)

не є еквівалентними. Дійсно, якщо х = 2, перший вираз дорівнює 2, а другий - 1,999... . Ще один важливий момент: дійсні функції від цілих аргументів повертають дійсне, а не ціле значення.

26

Наприклад, результат функції SQRT(25) дорівнює дійсному числу 5.0, а не цілому числу 5.

2.6.Арифметичні вирази.

Взагальному випадку арифметичні вирази складаються із змінних, сталих, чисел, знаків арифметичних операції (+,- ,*,/,div,mod) і викликів функцій (як стандартних, так і

визначених користувачем). Наведемо декілька прикладів:

25, Х, -А, (Y+Z*K)/2,

SIN(B div C),

SUM(A1,A2,A31+A32) і MULT(B1,B2 mod B3)

де SUM і MULT - функції, визначені програмістом.

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

not (логічне заперечення);

*, /, div, mod,and (логічне множення);

+, -, or (логічне додавання);

=, <>, <, >, <=, >=, in (належність до множини).

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

Розглянемо приклад. Формула Y А В буде написана мовою

С В С В

Pascal так: Y:=(A-B)/((C + B)/(C - B));

27

2.7. Приклад.

Приклад

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

tg lg2

1.Спочатку визначимося з набором змінних, в формулі

присутні літери грецького алфавіту , , , , проте ми вже знаємо, що в мові Паскаль для назв змінних можна використовувати лише латинські літери та цифри, тому відповідні змінні можемо назвати alpha, beta,

gamma, delta або взагалі просто a, b, c, d.

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

real.

Var

a, b, c, d : real;

3.Змінні a, b, c використовуються у правій частині

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

запам’ятати в змінній d і вивести за допомогою оператора

Write.

4. В формулі використовуються функції tg X і lg X - які не мають прямих відповідників у мові Паскаль, але їх можна змоделювати через стандартні функції, як зазначалося вище.

tg a – SIN(a)/COS(a); lg b – LN(b)/LN(10);

5.Для знаходження квадрату – використаємо функцію SQRT,

апорядок операцій визначимо за допомогою дужок, тоді загальна формула прийме вигляд: d:=(SIN(a)/COS(a)-SQR(LN(b)/LN(10)))/c;

6.Тепер запишемо програму повністю:

28

Program Laba_1; Var

a, b, c, d : real; Begin

Write(’Введіть число a :’);

Readln(a);

Write(’Введіть число b :’);

Readln(b);

Write(’Введіть число c :’);

Readln(c); d:=(sin(a)/cos(a)-sqr(ln(b)/ln(10)))/c;

Writeln(’d = ’ , c:5:3); end.

Ведемо значення для змінних a, b, c – відповідно 2.1, 3.3, 0.4, тоді отримаємо результат роботи програми:

Введіть число a: 2.1 Введіть число b : 3.3 Введіть число c : 0.4 d = -4,946

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

Початок

a, b, c

d := ( sin(a)/cos(a) - sqr( ln(b)/ln(10) ) ) / c

d

Кінець

Мал. 2.1

Зауваження: При вводі даних треба враховувати, що логарифм визначений тільки для додатних чисел, отже b

29