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

Практикум по основам программирования. Язык Паскаль

.pdf
Скачиваний:
9
Добавлен:
15.11.2022
Размер:
6.27 Mб
Скачать

2. Пример программы. Известны цены пяти наимено­ ваний товаров. Требуется ввести наименования товаров и их цены и распечатать данные в виде таблицы. Длина каждого наименования не превышает десяти символов.

PROGRAM TAB(INPUT.OUTPUT); CONST N=5;

VAR MASTOW:ARRAYС1..53 OF PACKED ARRAYCl..103 OF CHAR; ZENA:ARRAYС1..N3 OF REAL;

I,J:INTEGER;

BEGIN

WRITELNt ВВЕДИ НАЗВАНИЯ ТОВАРОВ ПО 10 СИМВОЛОВ'); READLN;

FOR I:=1 ТО N DO

FOR J:=l TO 10 DO READ(MASTOWCI,J3); WRITELNt'ВВЕДИ ЦЕНЫ ТОВАРОВ');

FOR I:=1 TO N DO READ(ZENACI3); FOR Is=1 TO 26 DO WRITEt'*');

WRITELN;

НАЗВАНИЕ

* ЦЕНА

*');

WRITELNt'* N *

WRITELNt'*П/П*

ТОВАРА

* РУБ.

*');

FOR I:=1 TO 26 DO WRITEt'*'); WRITELN;

FOR I:=1 TO N DO

WRITELNt'*',I;2,* * *,MASTOWC13,' ',ZENACI 3s6:2f'*'); FOR I:=l TO 26 ДО WRITEt'*')

END.

П р о т о к о л р а б о т ы п р о г р а м м ы :

ВВЕДИ НАЗВАНИЯ ТОВАРОВ ПО 10 СИМВОЛОВ СВЕРЛО РУБАНОК ПАЯЛЬНИК ОТВЕРТКА СТАМЕСКА ВВЕДИ ЦЕНЫ ТОВАРОВ

1.

45

3.7

10.2

5.35

2.1

 

 

N

НАЗВАНИЕ

ЦЕНА

П/П

 

ТОВАРА

РУБ

 

1

СВЕРЛО

 

1.45

 

2

РУБАНОК

 

3.70

 

3

ПАЯЛЬНИК

10.20

 

4

ОТВЕРТКА

 

5.35

 

5

СТАМЕСКА

2.10

З А Д А Н И Е 3. РАБОТА С МАССИВАМИ

ИПЕРЕЧИСЛИМЫМИ ТИПАМИ ДАННЫХ

Це л ь з а д а н и я

1.Получение навыков в организации программ с ис­ пользованием массивов значений перечислимых типов.

2.Получение практических навыков работы с массива­ ми, индексируемыми значениями перечислимых ти­ пов.

П о с т а н о в к а з а д а ч и Даны следующие описания:

I. TYPE АСУ= (АСУП, АСУТП, АСУТО, АСУМИВ, АСОИ); ЗАВОД= (БОРЕЦДЗЕРЖ ИНЕЦ,ДИНАМО,МАЛО- -

МЕТР,КОМПРЕССОР,ЗИЛ);

VAR TABnARRAY[3ABOfl] OF АСУ;

Для каждого завода ввести название одной автома­ тизированной системы управления (АСУ), которая на нем разработана.

П. TYPE СТРАНА® (АНГЛИЯ, ДАНИЯ, ПЕРУ, КЕНИЯ, ЯПО­

НИЯ, ПОЛЬША); МЕСЯЦ®(ЯН, ФВ, МР, АП, МЙ, ИН, ИЛ, АВ, СН,

ОК, НБ, ДК);

VAR ТЕМР:АККАУ[СГРАНА,МЕСЯЦ] OF REAL;

Для каждой страны задать значения среднемесяч­ ной температуры по всем месяцам.

Осуществить обработку массива (ТАБЛ или TEMP) согласно условию, заданному в варианте. Для наглядности программы использовать переменные пе­ речислимых типов данных.

С о д е р ж а н и е о т ч е т а

1.Постановка задачи.

2.Текст программы и результаты ее выполнения.

3.Выводы.

М е т о д и ч е с к и е у к а з а н и я При выполнении задания следует проанализиро­

вать приведенные фрагменты программы.

1. Приведенный ниже фрагмент протраммы предназна­ чен для заполнения массива ТАБЛ, т. е. для задания названий АСУ, которые разработаны на каждом заводе. При работе этого фрагмента следует ввести пять цело­ численных значений переменной М(допустимыми яв­ ляются целые числа от 1 до 5). Можно задать и оди­ наковые значения М в том случае, если на заводах разработаны одинаковые АСУ.

FOR I:=БОРЕЦ ТО ЗИЛ DO

BEGIN READ(М):

CASE М OF

1:ТАБЛС13:=АСУП:

2:ТАБЛСID:=АСУТП;

3:ТАБЛСI1:=АСУТО; 4: ТАБЛС П:=АСУМИВ; 5:ТАБЛСII:=АСОИ

END

EN D :

При этом переменная I должна быть описана как

VAR I:ЗАВОД.

2. Приведенный ниже фрагмент программы позволяет распечатать для каждой АСУ названия заводов, на ко­ торых она разработана:

FOR J:=АСУП ТО АСОИ DO BEGIN CASE J OF

АСУП: WRITE('АСУП*);

АСУТП: WRITE( АСУТП*); АСУТО: WRITE('АСУТО*);

АСУМИВ: WRIТЕ(*АСУМИВ *>;

АСОИ: WRITE< АСОИ*) END;

WRITELN(* РАЗРАБОТАНА НА ЗАВОДАХ:*); FOR I:=БОРЕЦ ТО ЗИЛ DO

IF ТАБЛСI T H E N

CASE ORD(I) OF

И: WRITE! БОРЕЦ);

Is WRITE Г ДЗЕРЖИНЕЦ*);

2:WRITE(' ДИНАМО);

3:WRITE С МАНОМЕТР'); 4; WRIТЕ(* КОМПРЕССОР *);

5:WRITE(' ЗИЛ')

END;

WRITELN

END;

При этом переменная J должна быть описана как

VAR J:ACy.

I. В а р и а н т ы з а д а н и я по А С У

1.Напечатать значение TRUE, если среди заводов, информация о которых обрабатывается в программе, есть заводы, разработавшие АСУ одного типа, и значе­ ние FALSE в противном случае.

2.Напечатать список заводов, разработавших АСУ вводимого типа.

3.Напечатать список заводов, разработавших АСУ одинакового типа.

4.Напечатать список заводов, разработавших АСУ разного типа.

5.Напечатать список АСУ, не разработанных ни на одном заводе.

6.Напечатать список АСЪ, разработанных одновре­

менно более чем на двух заводах.

7. Напечатать список АСУ, разработанных на всех за­ водах.

8. Напечатать список АСУ, разработанных одновре­ менно менее чем на трех заводах.

9. Напечатать список заводов, на которых не разрабо­ тана АСУ вводимого типа.

10. Напечатать список заводов, разработавших АСУ двух заданных типов.

П. В а р и а н т ы з а д а н и я по с т р а н а м

1.Напечатать список стран в порядке неубывания среднегодовой температуры.

2.Напечатать список стран в порядке невозрастания

среднегодовой температуры.

3. Напечатать список стран, в которых среднегодовая температура ниже заданной.

4.Напечатать список стран, в которых среднегодовая температура выше заданной.

5.Напечатать название страны, в которой самая вы­ сокая среднегодовая температура.

6.Напечатать название страны, в которой самая низ­ кая среднегодовая температура.

7.Для указанной страны напечатать названия меся­ цев, в которых среднемесячная температура ниже за­

данной.

8.Для указанной страны напечатать названия меся­ цев, в которых среднемесячная температура выше за­ данной.

9.Напечатать список стран, расположив их в порядке невозрастания среднемесячной температуры в данном месяце.

10. Напечатать список стран, расположив их в порядке неубывания среднемесячной температуры в данном месяце.

Г Л А В А 5

КОМБИНИРОВАННЫЕ ТИПЫ. ОПЕРАТОР ПРИСОЕДИНЕНИЯ

Комбинированные типы являются наиболее гибким меха­ низмом построения структур данных. Любой комбиниро­ ванный тип задает некоторый образ объектов, каждая часть которых может иметь различные характеристики. Язык ПАСКАЛЬ позволяет определять несколько вариан­ тов структуры объектов. Это означает, что разные пере­ менные, относящиеся к одному комбинированному типу, могут иметь отличающиеся друг от друга структуры.

5.1. ЗАПИСИ

Комбинированный тип характеризует объекты, на­ зываемые записями. Запись - это сложная переменная

64

с несколькими компонентами. В отличие от массивов компоненты записи (поля) могут иметь разные типы и доступ к ним осуществляется не по индексу, а по имени поля. При определении комбинированного типа задаются имя и тип каждого поля. Описание комбини­ рованного типа начинается со служебного слова RECORD и заканчивается словом END. В качестве примера рассмотрим запись, отражающую анкетные данные студента техникума:

TYPE СТУДЕНТ=RECQRD

ФИО:PACKED ARRAYC1..151 OF CHAR; ДАТАРОЖ:RECORD

ЧИСЛО:1..31;

МЕСЯЦ: (ЯНvфВ,МР,АП,МИ,ИН,ИЛ fАВ,СИ,ОК,НБ,ДК); ГОД:INTEGER

END;

ПОЛ: (МУЖ vЖЕН) END:

VAR СС:СТУДЕНТ; ГРУППА:ARRAY!1..303 OF СТУДЕНТ;

К каждому компоненту записи можно обратиться, используя имя переменной типа записи и имя поля, разделенных точкой. Такие имена в программах ис­ пользуются так же, как и переменные других типов. Например, оператор

СС.ФИО:=’АБРАМОВ АА .

заносит в поле ФИО переменной СС указанную строку из 15 символов.

Второе поле типа данных СТУДЕНТ с именем ДАТАРОЖ, в свою очередь, имеет тип записи и состо­ ит из трех полей. Доступ к этим полям осуществляет­ ся добавлением через точку имени соответствующего поля.

СС.ДАТАРОЖ.ЧИСЛО:=25; СС.ДАТАРОЖ.МЕСЯЦ: =ФВ; СС.ДАТАРОЖ.ГОД:=1971;

5.2. ОПЕРАТОР ПРИСОЕДИНЕНИЯ

Приведенные операторы присваивания можно за­ писать компактно, если использовать оператор присое­ динения, имеющий вид

WITH < список переменных-записей, полей > DO < оператор > ;

Имена переменных-записей и полей, указанные в заголовке оператора присоединения, можно опускать при обращении к компонентам записей в области дей­ ствия оператора WITH. Транслятор автоматически фор­ мирует полные имена:

WITH СС.ДАТАРОЖ DO BEGIN ЧИСЛО:=25; МЕСЯЦ:=®B; гОД;=1971

END:

Записи могут входить в качестве компонентов в другие переменные. Например, переменная ГРУП­ П А -это вектор, состоящий из 30 записей. Оператор присваивания нового значения полю МЕСЯЦ в пятой записи массива имеет вид

ГРУППА[5].ДАТАРОЖ.МЕСЯЦ: =ДК

Легко видеть, что к каждой записи (элементу мас­ сива) доступ осуществляется при помощи индекса.

Приведенный ниже фрагмент программы подсчи­ тывает число студентов мужского пола, родившихся в

1974 году:

. . .

 

К:=0; FOR I:=I ТО 30 DO

 

WITH ГРУППАС13,ДАТАРОЖ DO

 

IF <Г0Д=1974> AND <ПОЛ=МУХ> THEN К:=К+1;

 

WRITELNI'ЧИСЛО МУЖЧИН=',К:2);

Следует обратить внимание на то, что оператор присоединения стоит внутри цикла по I. Это объясня­ ется тем, что в области действия оператора присоеди­ нения нельзя изменять элементы списка перемен­ ных-записей и полей, указанные в заголовке. В дан­ ном примере в заголовке оператора WITH стоит ГРУППА[1] - элемент массива, зависящий от параметра I.

5.3. ЗАПИСИ С ВАРИАНТАМИ

При определении комбинированного типа в него можно включать вариантную часть. Это означает, что разные переменные, хотя они и относятся к одному

типу, могут иметь различные структуры. Например, пусть необходимо задать информацию о некотором че­ ловеке, указав фамилию и год рождения, а также, если это мужчина, то сообщить, военнообязан ли он и ка­ кую имеет специальность; если это женщина, то ука­ зать, замужем ли она и сколько имеет детей:

TYPE ПОЛ=(МУЖ,ЖЕН); 4EJl*RECORD

ФАМ:PACKED ARRAYС1..103 OF CHAR; ГОДРОЖ:1800..2000;

МК:ПОЛ;

CASE ПОЛ OF

МУЖ:(ВОЕН:BOOLEAN;СПЕЦ:PACKED ARRAYC1..153 OF CHAR);

ЖЕН:(ЗАМУЖ:BOOLEAN;ДЕТИ:INTEGER)

END; VAR 41,42:МЕЛ;

Вариантная часть записи начинается оператором CASE и следует за общей частью; после ее окончания в записи не могут появляться никакие другие поля, поэтому оператор CASE не закрывается служебным словом END.

Обычно некоторое поле общей части указывает ва­ риант. В примере - это поле МЖ, называемое полем признака или дискриминантом.

Все варианты описываются внутри оператора CASE. Каждый вариант характеризуется зада­ ваемым в скобках списком описаний присущих ему компонентов.

Перед списком стоит одна или несколько меток. Тип этих меток указывается в заголовке вариантной части (в отличие от оператора варианта, ще селектором ва­ рианта является выражение, а не тип). Отметим, что тип должен быть скалярным, при этом он задается именем.

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

Часто для сокращения записи поле признака (дис­ криминант) включается в заголовок вариантной части:

CASE МЖПОЛ OF

Для переменной 41 типа ЧЕЛ можно написать следующие операторы присваивания:

Ч1.ФАМ: = ’СТОЛЯРОВ Ч1.ГОДРОЖ:=1970; Ч1.МЖ:=МУЖ; Ч1.ВОЕН: =TRUE;

Ч1.СПЕЦ:= ’ПРОГРАММИСТ

Задав значение поля признака МЖ (некото­ рую константу типа ПОЛ), можно присваивать новые значения только полям вариантной час­ ти, помеченным такой же константой.

Хотя никакого контроля поля селектора при обраще­ нии к компоненту из вариантной части не производит­ ся, для надежности работы программы следует придер­ живаться этого правила.

5.4.ВОПРОСЫ И УПРАЖНЕНИЯ

1.Какой тип характеризует объекты называемые за­ писями?

2.Могут ли компоненты записи быть различных ти­ пов?

3.К какому типу относится следующее описание?

КНИГA=RECORD НАЗВ:PACKED ARRAY[1..20: OF CHAR; ГОДИЭД:100В. .1988;

ЦЕНА:REAL

END:

Назвать компоненты записи и их типы. 4*. Имеется описание:

TYPE CEMbR=RECORD

ГЛАВАСЕМЬИ:PACKED ARRAYC1..153 OF CHAR: ВОЗРАСТ:18..1Q0;

ДЕТИ:ARRAYС1•.71 OF RECORD

ИМЯ:PACKED ARRAYCl..103 OF CHAR: ГОДР:1900. .2000

END

END:

VAR А,В:СЕМЬЯ;

Занести исходную информацию в переменную А без использования оператора присоединения и продуб­ лировать ее в переменную В.

5. Указать ошибки в приведенных ниже описаниях типов:

A)*

TYPE rEOMTEAA=RECORD

 

НАЗВ:PACKED ARRAYCl..103»

 

S;SP:REAL;

Б)

ОБЕМ:REAL

TYPE ДЕРЕВО=(ЕЛЬ,СОСНА);

 

DEC=RECORD

 

НАЗВ:(СМЕШАННЫЙ,ХВО0НЫИ);

 

ХВОЙНЫЙ:ДЕРЕВО;

 

CASE ХВОЙНЫЙ OF

 

ЕЛЬ:(ВЫСОТА:REAL,

 

МЕСТО:PACKED ARRAYC1..51 OF CHAR)

 

СОСНА:(ВОЗРАСТ:INTEGER)

END;

6*. Известно, что

TYPE BPEMR=RECORD ЧАС:И..23*

МИН,СЕК:0. .59 END;

VAR Т1,Т2:ВРЕМЯ:

Написать программу, которая вводит значения по­ лей записей Т1 и Т2 и печатает TRUE, если Т1 пред­ шествует Т2, и печатает FALSE в противном случае.

7. Определить запись, включающую в себя следую­ щую информацию:

-название завода-изготовителя;

-название завода-поставщика сырья;

-номер магазина-потребителя;

-названия производимых товаров, 50 наименова­

ний;

-цена каждого товара за 1 штуку в рублях и ко­ пейках;

-количество каждого товара в штуках.

Все наименования содержат не более 15 символов.

8.Как осуществляется доступ к полям записей?

9.Что является селектором в операторе CASE при за­ дании вариантной части записи?

10. Могут ли записи входить компонентами в другие переменные?

11. Даны названия 15 ЭВМ. Для каждой ЭВМ известны

объем памяти, стоимость и быстродействие. Составить программу, которая вводит данные о всех ЭВМ, опре­ деляет, какая ЭВМ имеет минимальное отношение стоимость/быстродействие, и печатает название этой машины и ее характеристики.

5.5ПРАКТИЧЕСКИЕ ЗАДАНИЯ

З А Д А Н И Е 1. РАБОТА С КОМБИНИРОВАННЫМИ ТИПАМИ ДАННЫХ

Це л ь з а д а н и я

1.Получение навыков в организации ввода/Еывода зна­ чений комбинированных типов данных.

2.Получение практических навыков программирования задач с использованием записей.

П о с т а н о в к а з а д а ч и Составить список учебной группы, включающей 25

человек. Для каждого учащегося указать дату рожде­

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

Составить программу, которая обеспечивает ввод полученной информации, распечатку ее в виде табли­ цы, а также распечатку информации согласно конкрет­ ному варианту.

С о д е р ж а н и е о т ч е т а

1.Постановка задачи для конкретного варианта.

2.Исходная информация.

3.Текст программы и результаты ее выполнения.

4.Анализ допущенных ошибок.

М е т о д и ч е с к и е у к а з а н и я

1.Символьную информацию в программе следует за­ давать в виде упакованного массива.

2.Пример программы.

Программа ZAP вводит информацию о пяти сту­ дентах: фамилию, год рождения, год поступления в техникум и оценки последней сессии. Результатом ра­ боты программы является список отличников. В про­ грамме показаны возможности организации работы с записями с использованием оператора присоединения:

PROGRAM 2А Р (1NPUT,OUT PUT);

TYRE С ГУДЕНТ=RECORD ФИО.-PACKED ARRAY С 1. .101 OF CHAR; ГОДР:1965..1975;

ГОДПТ:1985..1988; ОЦЕНКИ:RECORD

АЛГ,ИСТ,ЭВМ:1. .5 END

END;

VAR ГРУППА:ARRAY!1..53 OF СТУДЕНТ;

SI:СТУДЕНТ; I,J:INTEGER;

BEGIN READLN;

WITH SI,ОЦЕНКИ DO

BEGIN FOR I:=1 TO 5 DO

BEGIN WRITE(*=>');

FOR J :=1 TO 10 DO READ<ФИОСJ 3>;

READLN(ГОДР,ГОДПТ,АЛГ,ИСТ,ЭВМ); ГРУППА!I3:=S1

END

END;

WRITELN < СПИСОК ОТЛИЧНИКОВ:');

FOR I:=1 TO 5 DO WITH ГРУППА!I3,ОЦЕНКИ DO

IF (АЛГ=5) AND <ИСТ=5> AND OBM=5) THEN WRITELN<<JlHOt' ГОДР=* ,Г0ДР:4, * ГОДПТ= ',ГОДПТ: 4) END.