Програмування Структури перехід та вибір варіанту типи символів та перелічувані

Реферат з інформатики

Пр$ограмування: Структури перехід та вибір варіанту, типи символів та перелічувані.

1

. Мітки та переходи

У мові Паскаль будь-який оператор і кінець складеного оператора (слово end) можна відмітити, тобтоідентифікувати, додати йому індивідуальне ім’я. Це ім’я називається міткою. У авторській версії мови міткамимогли бути цілі сталі від 1 до 9999, у мові Борланд-Паскаль до них додано ідентифікатори. М$ітка записується передоператором або словом end через двокрапку, наприклад,

1 : money := 21;

mmm : money:=0;

finita : end.

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

label список-міток-через-кому ;

наприклад, label 1, mmm, finita;.

Мітка, означена в блоці, повинна відмічати рівно один оператор у тілі цього блоку.

Мітк$и використовуються в операторах переходу, що мають вигляд

goto мітка

наприклад,

goto 1; if x>1000 then goto mmm.

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

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

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

Якщо відзначений кінець програми, то її виконання завершується.

Якщо відзначений кінець т$іла циклу, то виконуються дії, які слідують за виконанням тіла (перевірка умовипродовження while-циклу або неявна зміна параметра for-циклу).

Оператор переходу й відповідний відмічений оператор повинні бути$ записаними в тілі блоку (програми абопідпрограми), де цю мітку означено. Іншими словами,

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

Ми не схильні популяризувати використання операторів переходу. Більше того, у св$ій час було доведено, що без них узагаліможна обійтися (достатньо умовних операторів і while-циклів). Проте є три випадки, коли указання переходудоречно й зручно:

на кінець підпрограми;

зсередини циклу на його кінець;

зсередини циклу на наступний за циклом оператор.

У Турбо Паскаль для указання таких переходів є спеціальні оператори, відповідно, exit,continue і break, тобто»вийти» (з підпрограми), «продовжувати» і «перервати» (в$иконання циклу). Розумно використовуючи ціоп$ератори, можна обійтися без міток і goto. Насправді ці три оператори – виклики процедур. Їх імена не єслужбовими словами виділяти їхнім .

2. Тип символів

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

У мові Паскаль символ позначається символьною сталою, що є символом в апострофах: ‘A’, ‘1’, ‘.’ тощо. Сам симво$л»апостроф» задається символьною сталою »».

Символьна стала – це не символ, а його позначення в мові Паскаль.

Не всі символи позначаються сталими мови Паскаль, але будь-який символ можна задати за допомогою викликуфункції chr. Символам у комп’ютері ставляться у відповідність номер$и від 0 до 255. Якщо i – цілий вираз іззначенням від 0 до 255, то вираз вигляду chr(i) задає символ із номером, що є значенням i. Відповідністьсимволів та номерів від 0 до 127 зафіксовано в Американському стандартному коді для обміну інформацією (ASCII). Наприклад, chr(48) позначає те ж саме, що й стала ‘0’, chr(48+1) – то ж саме, що ‘1’, chr(65) $є синонімом сталої ‘A’, chr(97) – сталої ‘a’.

Цілий номер символу породжується викликом функції «порядковий номер», тобто виразом вигляду ord(c), дезначенням виразу c є символ. Наприклад, ord(‘0’)=48, ord(‘A’)=65, ord(‘a’)=97. Засвоїмозначенням, функції chr іord взаємнообернені, тобто chr(ord(c))=c забудь-якогосимволу c, і ord(chr(n))=n забудь-якого n=0, 1, … , 255.

Крім функції ord, для символів означені порівняння, пр$ичому

a<b ? ord(a)<ord(b).

Очевидно, наприклад, що ‘ ‘ < ‘_’ < ‘0’ < ‘1’ < … < ‘9’ < ‘A’ < ‘B’ < … < ‘Z’ < ‘a’ < ‘b’ < … < ‘z’.

До символів застосовна операція катенації, або дописування, що позначається знайомим знаком «+». Їїрезультатом є не символ, а послідовність із двох символів, аб$о рядок. Наприклад, ‘1’+’2′ є послідовн$істьсимволів, яку можна задати літералом ’12’.

Множина символів і операції, означені для них, утворюють тип символів, іменований char. Змінні цього типуназиваються символьними.

Задачі

1). Указати різницю між 0 і ‘0’, A і ‘A’, — і ‘-‘.

2)Обчислити значення виразу:

а) chr(ord(‘0’)+9); б) chr(ord(‘A’)+1); в) chr(ord(‘A’)+25);

г) chr(ord(‘0’)-16); д) ‘Z’>’a’; е) ord(‘9’)-ord(‘0’).

3)Написати вираз, що задає перевірку, чи є значення символьної змінної ch:

а) цифрою від ‘0’ до ‘9’;;

б) латинською буквою.

4)Написати $вираз, що задає обчислення:

а) цілого числа від 0 до 9 за значенням символьної зм$інної ch від ‘0’ до ‘9’;

б) символу від ‘0’ до ‘9’ за цілим значенням змінної dg від 0 до 9.

5)Написати програму друкування таблиці символів та їх номерів, починаючи з символу ‘ ‘ (пропуск), номер якого 32.

3.. Перелічувані типи

Елементи кожного з типів Boolean, char і integer упорядковані відповідно до операції порівняння <. У цьомупорядку їх можна взаємно однозначно зіставити натуральним числам 0, 1, … (перелічити їх). За будь-якимнатуральним числом можна указати наступне за ним і попереднє перед ним (крім$ числа 0). Так само забудь-яким елементом, крім найбільшого, цих типів можна назвати наступний за ним і за будь-яким елементом,

крім найменшого, – попередній перед ним. Напр$иклад, наступним за false є true, наступним за chr(0) – chr(1), заchr(254) – chr(255).

Елементи типу real теж упорядковані, але поставити їм у відповідність натуральні 0, 1, … неможливо, як і задійсним числом указати наступне за ним. Отже, всім базовим типам, окрім типу real, притаманно те, що для нихозначено операції «наступний», «попередній» та «порядковий номер».

У мові Паскаль перелічуваним н$азивається тип, для якого означено операції SUCC (наступний), PRED(попередній) і ORD (порядковий номер елемента), а також порівнянн$я =, <>, <, >, <=, >=.

Типи boolean, char і integer, на відміну від типу real, є перелічуваними. Операції succ, pred, ord записуються у виглядівикликів функцій: вирази pred(1), succ(‘a’) і ord(true) мають значення відповідно 0, ‘b’ і 1.

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

У мові Бор ланд-Паскаль для всіх перелічуваних типів означено операції, аналогічні succ і pred. Вонизастосовуються до змінних перелічуваних типів у вигляді викликів процедур INC і DEC. Виклик inc(z)рівносильн$ий оператору z:=succ(z), dec(z) – оператору z:=pred(z). У виклику може бути другий аргумент –цілочисловий вираз. Наприклад, виклик inc(z, 2) задає збільшення z на дві «одиниці» того типу, до якогоналежить z. Якщо змінна z типу char і має значення ‘A’, то в результаті виконання inc(z, 2) її значенням буде ‘C’.

Значення виразу може бути й від$’ємним – тоді z зменшиться. Аналогічно за виконання dec(z, 3) значення zзменшується у його типі, наприклад, від 3 до 0 або від ‘D’ до ‘A’.

4. Означення власних перелічуваних типів

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

type ім’я = вираз, що описує е$лементи множини;

Службове слово type – це англійське «тип»$. З виразами, що задають множини елементів, ми будемо знайомитисяпоступово.

Найпростіший вираз – це ім’я типу, уже означене вище або ім’я стандартного типу. Наприклад, означення

type int = integer;

задаєновеіменуваннятипу integer. Після цього означення скрізь замість довгого імені integer можна писати коротке іnt.

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

Мова Паскаль дозволяє програмісту означати свої власні перелічувані типи. Вони називаютьсятипами-пере$ліками та типами-діапазонами. Переліки наочно подають множини таких значень, що природнопозначаються словами. Наприклад, сигнали світлофора або дні тижня.

Множину днів тижня, позначену {Пн, Вт, Ср, Чт, Пт, Сб, Нд} у мові Паскаль можна задати, означившитип-перелік з ім’ям, $наприклад, Weekd:

type Weekd=(Mon, Tue, Wed, Thu, Fri, Sat, Sun).

Тутужитоскороченнявіданглійськихслів Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday –понеділок, вівтороктощодонеділі.

Аналогічно сигнали світлофора можна задати, определив тип Lights:

type Lights=(red, yellow, green) {чер$воний, жовтий, зелений}

Як бачимо, перелік задається виразом вигляду( список ідентифікаторів )

Ідентифікатори$ списку після цього означення виступають сталими відповідного типу. Сталі не можутьповторюватися в означеннях того самого блока. Наприклад, якщо разом із типом сигналів світлофора означити

ще тип кольорів райдуги, то використовувати імена red, yellow, green не можна.

Порядок сталих у списку задає операції ord, pred і succ, означені для всякого переліку. Наприклад, ord(Mon)=0,ord(Tue)=1 тощо, ord(Sun)=6, succ(Mon)=Tue, pred(Sat)=Fri. Увідповідностізізначеннями $ord означенойпорівняння, наприклад, red<yellow, Mon<Sun.

Вираз із ст$алими перелічуваних типів можна присвоювати однотипним із ними змінним.

Сталі й змінні перелічуваних типів, на відміну від базових типів, не можна вказувати у викликах процедурвиведення та введення.

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

стала1..стала2,

де стала1 <= стала2. Наприклад, ми можемо означити типи

type hundred=0..99; chesslet=’A’..’H’; Workd=Mon..Fri

абозмінні var stop : red..yellow; column : chesslet тощо.

Для діапазону означено ті самі операції, що для його базового типу.

5.. Оператор вибору варіантів

Розробимо $програму «найпростіший калькулятор» . Будемо використовувати змінну signop іззначеннями 1, 2, 3 або 4, що познає знаки операцій відповідно «+», «-«, «*», «/». Її значення, отримане врезультаті читання, порівнюємо з 1, 2, 3, 4 та виконуємо відповідні їм дії:

if signop=1 then first:=first+second e$lse

if signop=2 then first:=first-second else

if signop=3 then first:=first*second else

{signop=4}

first:=first/second;

Цейоперат$орзадаєвибірпотрібногооператоразтих, якізаписанопісляслів then, залежновідзначеннязмінноїsignop. Такий вибір у мові Паскаль можна задати інакше, використавши оператор вибору варіантів, абоcase-оператор (case – англійське «випадок»). У даній програмі він має вигляд:

case signop of

1: first:=first+second;$

2: first:=first-second;

3: first:=first*second;

4: first:=first/second

end;

Виразпісляслова case (тутцеім’я signop) називаєтьсяселекторомваріантів. Його значення послідовнопорівнюється з числами, що «відмічають» оператори-варіанти. Як тільки значення селектора співпаде з числом, будевиконано відповідний оператор, і все закінчиться. Якщо ж значення селектора відрізняється від усіх чисел-відміток

варіантів, то жодний із варіантів не виконується.

Селектором може бути довільний вираз б$удь-якого перелічуваного типу. Варіант може бути$ відмічений списком ізкількох сталих відповідного типу; вони записуються через кому. Наприклад, нехай робочий час у робочі дні 8годин, а у вихідні – 0. За дії означення типу Weekd ми можемо запам’ятати в змінній wt робочий час:

var dd : Weekd; wt : integer;

case dd of

Mon, Tue, Wed,Thu, Fri : wt:=8;

$Sat, Sun : wt := 0

end.

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

У мові Бор ланд-Паскаль у списках, що від$значають варіанти, можна записувати не тільки сталі, але й діапазони.

Наприклад, останній оператор можна переписати так:

case dd of

Mon .. Thu, Fri: wt:=8;

Sat, Sun: wt:=0

end.

За останнім варіантом можна після слова else указати необов’язковий альтернативний варіан$т. Цей варіантвиконується, якщо значення селектора немає в жодному зі списків. Наприклад, останній оператор можна переписати втакому вигляді:

case dd ofMon .. Fri: wt:=8;

Sun: wt:=0

else wt:=0

end.

Задачі

1)Переписати «найпростіший калькулятор із використанням case-оператора і читанням знаків операцій увигляді символів.

$

2)У давньояпонському календарі був прийнятий 60-річний цикл із п’яти 12-річних підциклів, послідовно позначенихкольорами – зеленим, червоним, жовтим,$ білим та чорним. У кожному підциклi послідовні роки мали назви тварин: пацюка,

корови, тигра, зайця, дракона, змії, коня, вівці, мавпи, курки, собаки та свині. 4-й рік нової ери – рік зеленого пацюка – бувпочатком чергового циклу.

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

Post Comment