Файл: Могилев А.В. Информатика.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 31.03.2021

Просмотров: 6800

Скачиваний: 51

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

221 

writeln; 
if a<c then m:=c else m:=a; 
if b<d then n:=b else n:=d; 
if m<n then l:=n-m else 1:=0; 
writeln("длина общей части отрезков=',1:6:2)  

end. 

Оператор варианта

 имеет следующую форму: 

case <выражение> of  

 <список констант 1> : <оператор 1>; 
<список констант 2> : <оператор 2>; 
………………………… 
<список констант N> : <оператор N>  

end. 
 
Выражение, стоящее между служебными словами  case и of, должно иметь значение орди-

нального типа. Любой список констант может состоять из одной константы. 

Оператор варианта вычисляет значение выражения, записанного после  case. Если его зна-

чение совпадает с одной из констант в некотором списке, то выполняется оператор, стоящий после 
этого списка. Если значение выражения не совпало ни с одной константой во всех вариантах, то 
оператор варианта ничего не делает. 

В

 

качестве примера приведем программу, которая в зависимости от номера месяца выдает 

сообщение о времени года. 

 
Программа 4 

program seasons; 

var k:integers 

begin 

writeln('введите номер месяца') ; 

readin(k); 
case k of 

1,2,12:writeln('зима'); 

3, 4,5:writeln('весна') ; 
6, 7,8:writeln('лето'); 
9,10,11:writeln('осень')  

end 

end. 

 

Для реализации циклов в Паскале имеются три оператора Если число повторений известно 

заранее, то удобно воспользоваться оператором цикла с параметром. В других случаях следует ис-
пользовать операторы цикла с предусловием (цикл «пока» ) или с постусловием (цикл «до»). 

Цикл  с  предусловием

  является  наиболее  мощным  в  Паскале.  Другие  операторы  цикла 

можно выразить через него. Его форма такова: 

 
while - <логическое выражение> do <оператор> 
 
Действие: вычисляется значение логического выражения. Если оно равно true, то выполня-

ется оператор, после чего снова вычисляется значение логического выражения, в противном слу-
чае действие заканчивается. 

В качестве примера использования такого цикла решим следующую задачу. На склад при-

возят  однородный  груз  на  машинах  различной  грузоподъемности.  На  компьютер,  управляющий 
работой  склада,  поступает  информация  о  весе  груза  очередной  машины.  Составить  программу 
подсчета количества машин,

 

прибывших

 

на склад до его заполнения, если вместимость склада не 

более 100 тонн. 

Введем обозначения: sum - сумма веса груза, хранящегося в этот момент на складе; num - 

число  разгруженных  машин;  w  -  масса  груза  очередной  машины.  Вначале  величины  sum  и  num 
равны нулю. Цикл разгрузки продолжается, пока выполняется неравенство sum < 100. 


background image

 

222 

 

Программа 5 

program store; 

var sum,w:real; 
num:integer; 

begin 

num:=0;sum:=0; 

while sum<100

 

do

 

begin 

writeln('введите вес груза машины'); 

readln(w); 
sum:=sum+w; 
if sum<=100 then num:=num+l 
else writeln('груз уже не поместится')  
end; 

writeln('число разгруженных машин =',num;3)  

end. 

 
Оператор

 цикла с постусловием

 имеет форму: 

repeat <последовательность операторов>  
until <логическое выражение> 
Действие: выполняется последовательность операторов. Далее вычисляется значение логи-

ческого выражения. Если оно равно true, то действие заканчивается, в противном случае снова вы-
полняется последовательность операторов и т.д. 

Решим предыдущую задачу, применяя цикл с постусловием. Цикл разгрузки заканчивается, 

если выполняется условие: sum > 100. 

 
Программа 6 

program store2; 

var sum,w:real; man:integer; 

begin 

num: =0; sum: =0; 

repeat 

writeln('введите вес груза машины'); 

readln(w); sum:=sum+w; 
if sum<=100 then num:=num+l .  

else writeln('груз ухе не поместится') 

until sum>=100; 
writeln('количество разгруженных машин =',num:3)  
end. 

Оператор

 цикла с

 

параметром

 предусматривает повторное выполнение некоторого опера-

тора  с  одновременным  изменением  по  правилу  арифметической  прогрессии  значения  управляю-
щей переменной (параметра) этого цикла. Оператор цикла с параметром имеет две формы. 

Форма

 

1: 

for <параметр>:= <выражение

 

1> to <выражение 2> do <оператор> 

Параметр, выражение 1, выражение 2 должны быть одного ординального типа; 
Параметр в этом цикле возрастает. Действие эквивалентно действию следующего составно-

го оператора: 

begin 

<параметр>:=<выражение 1>; 
while <параметр> <= <выражение 2> do  
begin 

<оператор>; 
<параметр>:=suсс(<параметр>) 

end 

end. 


background image

 

223 

Если в этом описании отношение <= заменить на >= , а функцию succ на pred, то параметр в 

цикле будет убывать, в этом случае цикл с параметром принимает форму 2. 

Форма 2: 
for <параметр>:=<выражение 1> downto <выражение 2> do <оператор> 

Пример:

 составим программу, по которой будет напечатана таблица перевода километров в 

мили (1 миля = 1,603 км). Параметром цикла можно считать целую величину k - количество кило-
метров. Пусть эта величина изменяется от 1 до 10 (с шагом 1, разумеется). 

 
Программа 7 

program mili; 

const a=1.603;

 

b='км'; с='мили'; 

var k:integer; m:real; 

begin 
writeln(b:5,c:7); writeln; 

for k:=l to 10 do 

begin 
m:=k/a; writeln(k:5,m:6:3) 

end 

end. 

Запишем в этой программе цикл с параметром в форме 2: 

for k:=10 downto 1 do 

begin 
m:=k/a; writeln(k:5,m:6:3)  
end. 
 

Тогда значения k в таблице будут убывать от 10 до 1 с шагом 1.

  

Контрольные вопросы 

 

1. Как в Паскале реализуется развилка? 
2. В чем различие в назначениях условного

 

оператора и оператора варианта? Как реализу-

ется оператор варианта? 

3. Какого типа циклы реализуются в языке Паскаль? каким образом? 

 

3.3. СТРУКТУРЫ ДАННЫХ 

 

Мы уже познакомились с простыми типами real, integer, boolean, byte,

 

char. 

В Паскале программист по своему желанию может определить новый тип путем перечис-

ления его элементов - перечисляемый тип, который относится 

к простым ординальным типам.

 

Описание перечисляемого типа выполняется в разделе

 

типов по схеме: 

type <имя типа> = <список имен>  
 
Примеры: 
 
type operator = (plus,minus,multi, divide); 
color = (white,red,blue,yelow,purple,green); 
 
В списке должно быть не более 256 имен. 
Поскольку перечисляемый тип относится к ординальным, то к его элементам можно при-

менять функции ord(x), pred(x), succ(x) и операции отношения. Отметим, что данные этого типа не 
подлежат вводу и выводу с помощью функций ввода/вывода и могут использоваться внутри про-
граммы для повышения ее читабельности и понятности. 

Для иллюстрации работы с перечисляемыми типами приведем программу 8, переводящую 

английские названия дней недели на русский язык. 

 


background image

 

224 

Программа 8 

program

 

week; 

type days=(mon,tue,wed,thu,fri,sat,sun); 

var d:days; 

begin 

for d:=mon to sun do  
case d of 

mon: writeln("понедельник"); 
tue writeln("вторник"); 
wed writeln("среда"); 
thu writeln("четверг"); 
fri writeln("пятница"); 
sat writein("суббота") ; 

sun writeln("воскресенье")  
end  

end. 

 

Интервальный  тип

  -  это  подмножество  другого  уже  определенного  ординального  типа, 

называемого 

базовым.

  Интервал  можно  задать  в  разделе  типов  указанием  наименьшего  и  наи-

большего  значений,  входящих  в  него  и  разделяющихся  двумя  последовательными  точками,  на-
пример: 

 
type days=(mon,tue,wed,thu,fri,sat,sun); 
workday s=mon.. fri; 
index=1..30; 
letter='a'..'z'; 
 
Можно задать интервал и в разделе переменных: 
 
vara:1..100;b:-25..25; 
 
Операции и функции - те же, что и для базового типа. Использование интервальных типов в 

программе  позволяет  экономить  память  и  проводить  во  время  выполнения  программы  контроль 
присваиваний. 

Пример:

 если k - номер месяца в году, то вместо описания 

 
var k:integer; 
 

можно написать 

 
vark:1..12; 
 

Интервальный тип тоже относится к простым ординальным типам. 
 

СОСТАВНЫЕ СТРУКТУРЫ. Данные, с которыми имеет дело ЭВМ, являются абстракция-

ми некоторых реальных или существующих в воображении людей объектов. Мы уже познакоми-
лись с некоторыми типами данных: стандартными, перечислимыми, интервалами. Этими типами 
можно  было  обойтись  при  решении  простых  задач.  Однако  естественно  и  часто  очень  удобно 
группировать однотипные данные в последовательности - массивы, строки символов, объединять 
разнотипные данные об одном и том же объекте в виде записей. Значительные удобства представ-
ляются пользователю в Паскале при организации однотипных величин в виде множества с соот-
ветствующим  набором  операций:  объединения,  пересечения  и  т.д.  Наконец,  последовательность 
однотипных  величин  переменной  длины  можно  представить  в  Паскале  в  виде  файла  данных  и 
хранить на внешних носителях, используя его в разных программах. 

Таким  образом,  подобно  составному  оператору,  содержащему  несколько  других  операто-

ров, составные типы образуются из других типов, при этом существенную роль играет метод об-


background image

 

225 

разования или структура составного типа. 

Часто используемый составной тип - массив. 

Массив -

  это  последовательность,  состоящая 

из  фиксированного  числа  однотипных  элементов.  Все  элементы  массива  имеют  общее  имя  (имя 
массива) и различаются индексами. Индексы можно вычислять, их тип должен быть ординальным. 
При описании массивов используются служебные слова array и of. В описании массива указывает-
ся тип его элементов и типы их индексов. 

Схема описания такова: 
 
type <имя типа> = array [<список типов индексов>] оf <тип элементов> 
 
Тип элементов - произвольный, он может быть составным. Число типов индексов называет-

ся размерностью массива. После описания типа массива конкретные массивы можно задать в раз-
деле описания переменных. 

Например: 
 
type vector = array [1.. 10] of real; 
table = array ['A'..'Z',1..5] of integer; 
var a,b : vector; 
с: table; 
 
Обращение к элементу массива осуществляется с помощью задания имени переменной, за 

которым следует заключенный в квадратные скобки список индексов элемента. 

Например: 
 
а[7]:=3.1; b[k*k+l]:=0; с['М',3]:=-14; 
 
Если массивы имеют одно и то же описание, то во многих версиях Паскаля допустимо их 

копирование, например b:=а; 

Описание массива можно совместить с описанием соответствующих переменных: 
 
var a,b : array [1.. 10] of real; 
d : array [byte] of char; 
 
В Турбо-Паскале разрешена инициализация начальных значений составных переменных с 

помощью, так называемых, типизированных констант. Типизированные константы используются 
как переменные того же типа. Их применение экономит память, однако они не могут быть исполь-
зованы для определения других переменных того же типа. 

Схема описания констант массива: 
 
const <имя массива>: <тип массива> = (<список значений элементов>)  
 
Тип массива может быть описан ранее: 
 
type digits 

=

 array [1 ..5] of char; 

const a : digits =('0';2','4';6';8'); 
 

Пример:

  используя  массив,  составим  программу,  которая  напечатает  на  экране  20  чисел 

Фибоначчи. 

Последовательность Фибоначчи определяется равенствами 
 
а[1]=а[2]=1; a[k]=a[k-l]+a[k-2] при

 

к>2.

 

 
Использование  массива  позволяет  создать  эффективную  программу.  Для  вывода  каждого 

члена последовательности отведем на экране 5 позиций.