Смекни!
smekni.com

Програмування основних алгоритмічних структур (стр. 1 из 2)

Тема. Програмування основних алгоритмічних структур.

1. Оператори присвоювання, вводу-виводу; запис лінійних алгоритмів.

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

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

Вид оператора:

ім’я змінної := вираз

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

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

ПРИКЛАДИ:

a :=41;

b := false;

c := a+8;

c := c div 2;

d := ‘a’;

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

Типовими помилками при використанні цього оператора, є:

· несумісні типи даних змінної та виразу;

· використання в лівій частині оператора замість змінної виразу.

Розповсюдженими є також синтаксичні помилки при записі виразів в лівій частині оператора.

ПРИКЛАДИ:

var

a: integer;

b:real;

a:=a/2; операція ділення дає результат дійсного типу, а змінна a – цілочисельна;

b+1:=a–2; в лівій частині оператора записаний вираз;

b:=sqrt(sqr(a)+1; в лівій частині не вистачає закритої дужки.

Оператор виводу інформації призначений для обчислення значень виразів і виводу їх на екран. Є два оператори виводу: write та writeln. Вид оператораwrite :

write(список виразів)

Список задає вирази, значення яких обчислюються та виводяться на екран. При цьому ці значення не запам’ятовуються. В більшості випадків в ролі виразів використовуються константи або змінні. Наступний оператор виводу write продовжує вивід інформації у тому ж рядкові екрану, у якому закінчилась дія попереднього оператора.

Оператор writeln має аналогічний формат і призначення. Відмінність від попереднього оператора полягає в тому, що вивід інформації закінчується переходом на новий рядок, тобто наступний оператор виводу буде виводити інформацію з нового рядка екрану. При цьому допускається використання “порожнього” оператора writeln (тобто оператора, у якому відсутній список виразів). Такий оператор використовують для переходу при виводі інформації на новий рядок або пропуск рядка.

ПРИКЛАД:

1. write(‘Моя програма’);

write(a,b,c);

write(b*b-4*a*c);

2. writeln(x,y);

writeln(x/y);

writeln;

Для кращої наочності виводу інформації існує форматний вивід даних. Такий спосіб виводу дозволяє виділяти певну кількість позицій під кожен елемент списку виводу. Форматний вивід розглянемо на прикладі оператора write. Для даних цілого, логічного та літерного типів форматний вивід має вигляд:

write(вираз:n),

де n задає кількість позицій екрану, які відводяться для виводу значення виразу. Якщо ця кількість менша за потрібну, мова ПАСКАЛЬ автоматично розширяє поле виводу. Якщо кількість позицій більша за потрібну, значення вирівнюється по правому краю поля, а зайві позиції заповнюються пробілами.

Для даних дійсного типу форматний вивід має вигляд:

write(вираз:n:m),

де n задає загальну кількість позицій екрану, які відводяться для виводу значення виразу, а m - кількість позицій для дробової частини числа. Слід пам’ятати, що загальна кількість позицій виводу повинна включати одну позицію на знак числа, і одну позицію на десяткову точку. Якщо значення m менше за дійсну кількість цифр у дробовій частині, то зайві цифри відкидаються з округленням. Якщо значення n менше за потрібне, мова ПАСКАЛЬ автоматично розширяє поле виводу. Якщо кількість позицій більша за потрібну, значення вирівнюється по правому краю поля, а зайві позиції заповнюються пробілами.

ПРИКЛАДИ:

write(a:4,b:6,c:1);

write(b*b-4*a*c:5);

writeln(x:8:3,y:6:2);

Оператор вводу даних призначений для вводу даних з клавіатури та присвоювання їх змінним. Є два оператори вводу даних: read та readln . Оператор read має такий вид :

read(список змінних)

де список задає ті змінні, значення яких необхідно ввести з клавіатури. Можна вводити з клавіатури значення всіх стандартних типів даних, крім boolean.

При виконанні оператора очікується введення даних вказаного типу. Значення повинні вводитись у строгій відповідності з синтаксисом мови ПАСКАЛЬ. При цьому ніякого додаткового повідомлення про очікування вводу даних на екрані не виводиться. Дані можна вводити списком, розділяючи їх символом “пробіл”, або по одному. Введення закінчується натискуванням клавіші Enter.

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

Типовими помилками використання оператора є :

· розбіжність типу змінної і типу значення, що вводиться;

· введення виразів, а не значень.

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

ПРИКЛАДИ:

write(‘введіть цілі значення змінних a,b,c’);

readln(a,b,c);

write(‘введіть два довільних дійсних числа’);

readln(x,y);

Для покращення наочності тексту програми рекомендується використовувати коментарі. Їх наявність не обов’язковою, але дозволить пояснити особі, що працює з текстом програми, зміст окремих її блоків. Коментар являє собою послідовність будь-яких символів, укладених у фігурні дужки. Коментар не є оператором, і його не потрібно відокремлювати від інших об’єктів програми символом “;”.Навпаки, він є роздільником і може використовуватись для відокремлення складових рядків програми аналогічно символу “пропуск”. Але таке використання коментарю, очевидно, було б дуже незручним.

ПРИКЛАД:

p:=(a+b+c)/2; {обчислення півпериметра трикутника}

s:=sqrt(p*(p-a)*(p-b)*(p-c)); {обчислення площі за формулою Герона}

Лінійним називається алгоритм, у якому оператори виконуються в порядку їх слідування в програмі. Для запису таких алгоритмів достатньо наведених операторів. Розглянемо приклади запису лінійних алгоритмів.

Задача 1 Два робітники виконували спільну роботу протягом місяця на умовах погодинної оплати праці. Перший відпрацював t1годин, а другий – t2 годин. Вартість однієї години першого робітника становить p1 грн., другого – p2 грн. Обчислити середню заробітну плату робітників.

Розв’язання. Середня заробітна плата обчислюється за формулою:

pc=(p1 * t1 + p2 * t2)/(t1 + t2)

Програма для обчислень має вигляд:

program zarplata;

var p1,p2:real;

t1,t2:integer;

pc:real;

x:real;

y:integer;

begin

write(‘введіть кількість відпрацьованих годин робітниками’);

readln(t1,t2);

write(‘введіть вартості годин:’);

readln(p1,p2);

x:=p1*t1+p2*t2;

y:=t1+t2;

pc:=x/y;

writeln(‘Середня зарплата становить pc=’,pc:7:2,’грн’);

end.

2. Умовні оператори; запис розгалужень.

Лінійні алгоритми зустрічаються на практиці рідко. В більшості випадків обчислення носять розгалужений або циклічний характер. При цьому оператори об’єднуються в групи, які виконуються як один оператор. Для цього призначений складений оператор. Складений оператор використовується також в тому випадку, якщо необхідно виконати декілька операторів, а синтаксис мови ПАСКАЛЬ припускає наявність лише одного оператора. Складений оператор може містити довільну кількість операторів, відділених один від одного крапкою з комою. Отже, він являє собою сукупність операторів мови ПАСКАЛЬ, об’єднаних операторними дужками begin та end.

ПРИКЛАД

begin

readln(x,y);

z:=x+y;

writeln(‘z=’,z);

end;

Операторні дужки не є операторами, тому символ “;” перед службовим словом end не обов’язковий. Складений оператор використовується в умовних операторах та операторах циклу, які будуть розглянуті далі.

Умовний оператор дозволяє виконувати один з декількох операторів, що входять у його склад, у залежності від виконання певної умови. До умовних відносять оператори if та case.

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

Вид оператора:

if логічний вираз then оператор1 else оператор2

Якщо вираз приймає значення true, то виконується оператор1 (гілка then), у противному випадку, якщо вираз приймає значення false, то виконується оператор2 (гілка else). Після цього виконується наступний за оператором if оператор.

В будь-якому випадку виконується лише один оператор із вказаних у гілках . Неможлива ситуація, коли виконується або обидва оператори, або не виконується жоден із них.

Якщо по якійсь із гілок має бути декілька операторів, вони повинні бути об’єднані операторними дужками у складений оператор.

Якщо одна із гілок не містить ніяких дій, то можна скористуватись скороченою формою оператора:

if логічний вираз then оператор

Якщо вираз приймає значення true, то виконується оператор (гілка then), у противному випадку ця гілка пропускається (обходиться ). Далі виконується наступний за цим оператор.

ПРИКЛАДИ:

1. Пошук більшого із двох значень: z=max(x,y)

if x>y then z:=x else z:=y;

2. Впорядкування значень двох змінних за зростанням

if x>y then

begin

z:=x; x:=y; y:=z