Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 основи програмування книга.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.77 Mб
Скачать

4.8. Поняття виразу. Значення виразу. Тип виразу

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

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

Таблиця пріоритетів.

Функції, not.

Мультиплікативні операції: * , / ,div , mod , and

Аддитивні операції: : + , - , or

Відношення: = , <> , > , < , >= , <= , in

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

a + b + c = (a + b) + c, a * b * c = (a * b) * c

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

Важливо розуміти, що в ході обчислення значення виразу кожний проміжний результат – дане деякого типу, точно визначеного знаком операції або функції і типами операндів. Будь-яка невідповідність типу значення операнду приведе до помилки, яка виявляється компілятором при синтак­сич­ному аналізі. Наочне уявлення про структуру виразу дає так зване дерево виразу. Наприклад, вираз sin(x+pi/2) - cos(2*y-pi) може бути представлений у виді дерева:

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

4.9. Розділ операторів. Оператор присвоювання

Дії, що роблять над даними, описуються у розділі операторів.

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

розділ

операторів

Самим основним, фундаментальним оператором мови є оператор присвоювання. За допомогою оператора присвоювання здійснюється перетворення інформації.

Він має вид:

< ім’я > := < вираз >

оператор

п рисвоювання

Ім’я ліворуч від символу присвоювання := є ім’я змінної, якій присвоюється значення виразу, який стоїть праворуч. Тому поряд зі значенням виразу важливим атрибутом є його тип. Тип виразу у правій частині оператора присвоювання повинен співпадати або бути сумісним з типом змінної з лівої частини. Компілятор на етапі синтаксичного аналізу програми здійснює цю перевірку – так званий контроль типів. Допустиме присвоювання змінних будь-яких типів, за винятком типу File.

Root1 := Pi*(x - y)

Solution := Discriminant >=0

Discriminant := Sqrt(b*b-4*a*c)/2/A

Index := Index + 1

Letter := Succ(Succ(Letter))

4.10. Оператори введення - виведення

Для організації введення - виведення даних у мові Pascal використовуються оператори - процедури Read, Readln, Write, Writeln. За допомогою цих операторів організується введення даних з файлу Input та виведення даних у файл Output.

Текстові файли Input ,Ouтput представляються користувачу як текст, що поділений на рядки і забезпечений ознакою кінця файлу і ознаками кінців рядків. Кожен рядок може містити числа або символьні дані (тобто рядок складається з декількох даних типів Integer, Real, Сhar). Читання / запис здійснюється через так званий буфер файла. В момент звернення до файла його буфер встановлений на деяке дане – елемент файла. Буфер файла може бути переміщений або до наступного даного, або до першого даного наступного рядка.

Оператор Read(х) читає дане з Input у змінну х і переміщує буфер до наступного даного.

Оператор Write(х) пише дане в Output зі змінної х і переміщує буфер у наступну позицію.

Оператор Readln(х) читає дане з файла Input у змінну х та переміщує буфер у наступний рядок.

Оператор Writeln(х) пише дане в Output зі змінної х та переміщує буфер у наступний рядок.

Оператори введення/виведення можуть використовуватись у більш загальній формі:

Read( <список змінних> ),

Readln( <список змінних> )

Write( <список виразів або рядків> )

Writeln( <список виразів або рядків> )

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