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

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

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

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

= > ВОРОНОВ

 

1970 1985 3 4 3

= > КАРАТАЕВ

1971 1985 5 5 5

= > КОРОТКОВА

1971 1985 4 5 5

= > РОМАНОВ

1970 1985 5 5 5

= > МАКАРОВ

 

1970 1985 3 4 5

СПИСОК ОТЛИЧНИКОВ:

КАРАТАЕВ

ГОДР=1971 ГОДПТ=1985

РОМАНОВ

ГОДР = 1970 ГОДПТ=1985

В а р и а н т ы з а д а н и я

1.Распечатать анкетные данные студентов-отличников.

2.Распечатать анкетные данные студентов, успеваю­ щих на 4 и 5.

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

4.Распечатать анкетные данные студентов, получив­

ших в последнюю сессию оценки 2.

5.Распечатать анкетные данные студентов, получив­ ших в первую сессию все оценки 5.

6.Распечатать анкетные данные студентов, получив­ ших за все время обучения одну оценку 4, а все ос­ тальные оценки-5 .

7.Распечатать список студентов, фамилии которых начинаются с буквы А, и их оценки за все время обу­

чения.

8.Распечатать список студентов, фамилии которых начинаются с буквы Б, и их даты рождения.

9.Распечатать оценки в последнюю сессию студентов,

фамилии которых начинаются с букв В и Г.

10.Распечатать фамилии и даты рождения студентов, не получивших ни одной оценки 3 за все время обу­ чения.

11.Упорядочить список студентов по среднему баллу и распечатать его.

12.Упорядочить список студентов по среднему баллу

последней сессии и распечатать его.

13.Вычислить средний балл группы и распечатать список студентов, имеющих средний балл выше сред­ него балла группы.

14.Вычислить средний балл группы и распечатать список студентов, имеющих средний балл ниже сред­ него балла группы.

15.Вычислить средний балл группы в последнюю сес­ сию и распечатать список студентов, имеющих сред­ ний балл, равный среднему баллу группы.

16.Упорядочить список студентов по году рождения , и

распечатать его.

17. Распечатать список студентов, упорядоченный по алфавиту.

18.Распечатать список студентов, упорядоченный по месяцу рождения.

19.Распечатать список отличников, упорядоченный по

году рождения.

20. Распечатать список студентов, упорядоченный пО дате рождения;

З А Д А Н И Е ? . ИСПОЛЬЗОВАНИЕ КОМБИНИРОВАННЫХ ТИПОВ ПРИ ОБРАБОТКЕ СТАТИСТИЧЕСКИХ ДАННЫХ

Це л ь з а д а н и я

1.Закрепление навыков в написании программ с ис­ пользованием записей.

2.Получение навыков в обработке статистических

данных на ЭВМ.

П о с т а н о в к а з а д а ч и Определена запись:

RECORD НАЗВ:PACKED ARRAY! 1..ИЗ OF CHAR: ПЛОШ:REAL; НАС,ШКОЛЫ,БОЛЬНИЦЫ,БУЗЫ: INTEGER;

END:

Используя предложенную структуру записи, соста* вить программу, которая для каждой из указанных со­ юзных республик (список республик определяется соот­

ветствующим вариантом) вводит следующую информа­ цию:

-название республики; -численность населения, проживающего на терри­

тории республики; -площадь территории республики;

-число школ, больниц, вузов; печатает название республики (список республик), удов­

летворяющей требованиям, указанным в варианте, И соответствующие характеристики.

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

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

2.Статистические данные о заданных республиках.

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

4.Выводы.

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

1.Величина М, т. е. количество букв в названии рес­ публики, должна быть описана в разделе констант.

2.Записи, характеризующие отдельную республику, следует объединить в массив.

3.В качестве примера программы следует разобрать приведенную ниже программу ВМ, которая для задан­ ного количества (N=3) вычислительных машин опре­ деляет отношения стоимости к производительности. Производительность задается в миллионах операций в секунду отдельно для скалярных и векторных опера­ ций; стоимость - в тысячах долларов. Программа выби­ рает ЭВМ с минимальным отношением для скаляр­

ных операций и ЭВМ с минимальным отношением для векторных операций и печатает их характеристи­ ки:

P R O G R A M вм <iN P U T ,O U T P U T >;

CONST N=3; M»12;

TYPE MAUI»RECORD

ФИРМА,НАЭВ: PACKED ARRAYC1..M3 OF CHAR; ГОДВЫП1 1980..1985;

ПР0ИЗВ:RECORD СКАЛ, BEKTsINTEGER END; СТОИМОСТЬ: INTEGER;

СТКПР:ARRAYCl.*23 OF REAL

END;

VAR MASBM:ARRAYC1..N3 OF МАШ; I,J,J1,Л2аINTEGER; R1,R2:REAL; BEGIN READLN;

FOR I:*1 TO N DO

WITH MASBMCI3, ПРОИЗВ DO BEGIN

WRITE( ВВОДИ НАЗВАНИЕ ФИРМЫ ИЗ *,И:3, БУКВ=>'>; FOR J:*1 ТО М DO READ(фИРМАСJ3);

READLN;

WRITE(ВВОДИ НАЗВАНИЕ ЭВМ ИЗ',М:3, £УКВ=>'>; FOR J:=1 ТО М DO READ(НАЗВСJ3);

READLN;

WRIТЕ(•ВВОДИ ХАРАКТЕРИСТИКИ» >*>; READLN(ГОДВЫП,СКАЛ,ВЕКТ,СТОИМОСТЬ); СТКПРС 131«СТОИМОСТЬ/СКАЛ; СТКПРС2ЭI«СТОИМОСТЬ/ВЕКТ

END; (* ЗАКОНЧЕН ВВОД ИСХОДНЫХ ДАННЫХ •)

R1:=MASBMl13.СТКПР113; Jls=l;

R2:=MASBMC2D.СТКПРС2Э; J2:=l; FOR I:=2 TO N DO

WITH MASBMCI 3 DO BEGIN

IF СТКПРС13<R1 THEN BEGIN R1s=СТКПРС13; Jls=I END; IF СТКПРC23<R2 THEN BEGIN R2:=СТКПРС21; J2:=I END

END; (* ЗАКОНЧЕН ВЫБОР *> WITH MASBMCJ1D,ПР0ИЗВ DO

WRITELN(ФИРМА,HA3B,ГОДВЫЛs5,СКАЛ:в,BEKTsВ,СТОИМОСТЬ:8); WITH MASBMCJ23,ПРОИЗВ DO'

WRITELN(ФИРМА,HA3B,ГОДВЫЛs5,СКАЛs8,BEKTs8,СТОИМОСТЬ:8>

END.

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

ВВОДИ НАЗВАНИЕ ФИРМЫ ИЗ 12 БУКВ = > CONTROL

DATA

ВВОДИ НАЗВАНИЕ ЭВМ ИЗ 12 БУКВ = > CYBER 205 ВВОДИ ХАРАКТЕРИСТИКИ = > 1981 50 400 16500 ВВОДИ НАЗВАНИЕ ФИРМЫ ИЗ 12 БУКВ» > CRAY ВВОДИ НАЗВАНИЕ ЭВМ ИЗ 12 БУКВ» > CRAY Х -М Р ВВОДИ ХАРАКТЕРИСТИКИ» >1983 200 400 11000 ВВОДИ НАЗВАНИЕ ФИРМЫ ИЗ 12 БУКВ = > CRAY

ВВОДИ НАЗВАНИЕ ЭВМ ИЗ 12 БУКВ» >CRAY 2

 

ВВОДИ ХАРАКТЕРИСТИКИ» >1985 200 1200 1500

 

CRAY

CRAY Х -М Р

1983

200

400

11000

CRAY

CRAY 2

1985

200

1200

15000

В а р и а н т ы з а д а н и я

1.Латвия, Эстония, Литва. Напечатать название рес­ публики с максимальной плотностью населения, число школ, больниц, вузов в республике.

2.Белоруссия, Украина, РСФСР. Напечатать название республики с минимальной плотностью населения, число школ, больниц, вузов в республике.

3.Грузия, Армения, Азербайджан. Напечатать назва­ ния республик в порядке невозрастания плотности на­ селения в них.

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

5.Таджикистан, Молдавия, Украина. Напечатать спи­

сок республик, указав плотность населения, число школ и больниц, приходящихся на 1000 человек.

6. Армения, Латвия, Белоруссия. Напечатать название республики с минимальной обеспеченностью больница­ ми.

7.РСФСР, Таджикистан, Грузия. Напечатать список республик в порядке неубывания числа больниц, при­ ходящихся на 1000 человек.

8.Эстония, Туркмения, Армения, Казахстан. Напеча­ тать название республики, в которой приходится боль­ ше всего вузов на 1000 человек, площадь этой респуб­

лики и плотность населения.

9. Киргизия, Литва, Азербайджан. Напечатать список республик в порядке неубывания плотности населения, указав число школ, больниц, вузов, приходящихся на 1000 человек.

10.Грузия, Молдавия, Украина. Напечатать данные об этих республиках, расположив их в порядке невозраста­ ния числа школ, приходящихся на 1000 человек.

11.Латвия, Белоруссия, Грузия. Напечатать список рес­ публик в порядке неубывания плотности населения в

них с указанием числа больниц, приходящихся на 1000 человек.

12.Эстония, РСФСР, Таджикистан. Напечатать список республик в порядке невозрастания плотности населе­ ния в них с указанием числа школ, приходящихся на 1000 человек.

13.Казахстан, Молдавия, Киргизия. Напечатать назва­ ние и характеристики республики, в которой наиболь­

шее количество вузов приходится на 1000 человек.

14.Армения, Украина, Азербайджан. Напечатать дан­ ные о числе школ и больниц в республике с мини­ мальной плотностью населения.

15.Литва, Узбекистан, Белоруссия. Напечатать данные о числе вузов в республике с максимальной плотно­ стью населения.

16.Молдавия, Туркмения, Армения. Напечатать назва­

ние республики, в которой на 1000 человек приходится наибольшее количество больниц.

17. РСФСР, Латвия, Киргизия. Напечатать названия ре­ спублик в порядке неубывания в них числа школ, приходящихся на 1000 человек.

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

вних числа вузов, приходящихся на 1000 человек.

19.Украина, Грузия, Казахстан. Напечатать названия республик со всеми характеристиками в порядке неу­ бывания числа больниц, приходящихся на 1000 чело­ век.

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

век.

ГЛАВА 6

МНОЖЕСТВЕННЫЕ ТИПЫ ДАННЫХ

Множественный тип данных S строится на основе неко­ торого базового типа BS, в качестве которого использу­ ется любой ограниченный или скалярный тип, кроме не­ ограниченного целого и вещественного типов.

В общем виде множественный тип данных задается сле­ дующим образом: TYPE S = SET OF BS. Базовый тип BS определяет конечное множество значений множествен­ ного типа S. Любые подмножества базового множества могут являться значениями переменных множественного типа S. Они образуются перечислением через запятую элементов базового множества или выражений базового типа и заключаются в квадратные скобки. Множество, не содержащее элементов, называется пустым и обозна­ чается как [ \

6.1. ПЕРЕМЕННЫЕ МНОЖЕСТВЕННЫХ ТИПОВ ДАННЫХ

Примеры описаний переменных множественных типов данных:

TYPE ГОРОДА=(МОСКВА,КИЕВ,ЯЛТА'; lir=SET OF ГОРОДА;

VAR PI,РР1:МГ;

Р2:SET OF А*.. F ‘; РЗ,Р4:SET OF В..9;

Переменная Р1 множественного типа МГ может принимать следующие значения:

[МОСКВА]

[КИЕВ]

[ЯЛТА]

[МОСКВАДЛТА]

[МОСКВА,КИЕВ]

[КИЕЗДЛТА]

[МОСКВА,КИЕВДЛТА]

[ ]

 

В общем случае, если базовое множество содержит N элементов, производный множественный тип опре­ деляет 2N подмножеств. В данном примере перемен­

ная Р1 типа МГ может принимать 2*^=8 различных

76

Над множествами определены три операции: +, *, которые означают соответственно объединение, пересе­ чение и разность множеств. С их помощью можно строить различные выражения множественного типа.

Объединением двух множеств называется множест­ во элементов, принадлежащих обоим множествам. На­ пример:

[’В’.’Р] +

=

[’B7C7D7F].

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

[0..4]*[5,б] = [ ], [КИЕВ,ЯЛТА]*[МОСКВА,КИЕВ] = [КИЕВ].

Разностью двух множеств называется множество, содержащее те элементы первого множества, которые не являются элементами второго. Например:

[1Д9] - [2,4,8,9] = [1,5].

Для сравнения множеств используются операции отношения = , < > , < = , > = . Выражение А=В истинно только тоща, когда сравниваемые множества содержат одни и те же элементы. Выражение А о В истинно только тогда, коща одно из сравниваемых множеств содержит хотя бы один элемент, не входящий в дру­ гое множество. Выражение А < =В истинно только тог­ да, когда все элементы множества А одновременно яв­ ляются и элементами множества В. Выражение А > = В истинно только тоща, коща все элементы множества В одновременно являются и элементами множества А.

Следующие выражения истинны:

[’C..’E’]=[’D7E7C’]; [7,1,3] < > [2,4.6,8];

[КИЕВ] < = [МОСКВА.КИЕВ]; [’А’.-’Е’] > = [’А’,’В’];

Результат логического типа вырабатывает и специ­ альная операция определения принадлежности элемен­ та некоторому множеству. Эта операция обозначается в языке ПАСКАЛЬ служебным словом IN. Слева от IN в общем случае пишется выражение соответствующего базового скалярного типа, а справа - выражение множе­ ственного типа. Например, выражение 5 IN [3..7] имеет значение TRUE, так как 5 является элементом множе-

ства

[3,4,5,6,7], а выражение

К+2 IN [0..7]*[4,6,8] при

К= 1

имеет значение FALSE,

так как 3 не входит в

множество [4,6], полученное в результате пересечения исходных множеств.

Расположим операции, предназначенные для рабо­

ты с множествами, в порядке

убывания приоритета:

1)*; 2) + , - ; 3) IN, =, О , < = ,

> = . В группы объе­

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

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

PROGRAM MN <INPUT,OUTPUT);

VAR С:CHAR; К:INTEGER;

BEGIN К:=0;

READLN; WRITE<*=>*);

REPEAT

READ(C);

IF NOT <C IN

f

V 1) THEN

BEGIN

IF C IN [ ,0 ,..,9 ,3 THEN

K:=K+1;

 

WRITE(C)

 

END

UNTIL EOLN;

WRITELN; WRITELN(*ЧИСЛО ЦИФР В СТРОКЕ»*,Ks2)

END.

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

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

= >12 7*ABC/7654.0RP: 65;9 127ABC76540RP659

ЧИСЛО ЦИФР В СТРОКЕ = 10

Для вывода элементов некоторого множества, сформированного в процессе выполнения программы, необходимо воспользоваться оператором цикла, внутри

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

BB:SET OF ’AVZ’

можно организовать вывод элементов следующим обра­ зом:

FOR I:=A' ТО 'Z' DO

IF I IN BB THEN WRITE!1:2);

Причем параметр цикла I должен быть описан либо как символьная переменная, либо как I:’A\.’Z’. Печать элементов множества производится в том по­ рядке, в котором они встречаются в. базовом множест­ ве.

Приведенная ниже программа LAT формирует множество LB, в которое входят только латинские бук­ вы, встретившиеся во входной строке, и множество знаков препинания PR из входной строки:

PROGRAM LAT (INPUT,OUTPUT );

A*..*Z'j PR:SET OF

 

;

VAR CvI(J:CHAR; LBiSET OF

 

BEGIN READLN; WRITE < => );

 

 

 

LB:«C3; PR:=£Jj

 

 

 

REPEAT READ<C> ;

 

 

 

IF C IN C”A ’.. ‘Z*J THEN LB:«LB+CC3

t*,* e

? J

ELSE

IF C IN C*t

THEN PRi=PRfCCJ

UNTIL EOLN;

WRITELN<*ЛАТИНСКИЕ БУКВЫ*);

FOR I:- A* TO *Z* DO IF I IN LB THEN WRITE!I:2);

HRITELN;

WRITELN('ЗНАКИ ПРЕПИНАНИЯ*);

FOR J:e••• JO *?• DO

IF J IN PR THEN WRITE(Ji2)

END.

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

= >FYWA.*12 PRLLLLO.ORPA:PR?8; ЛАТИНСКИЕ БУКВЫ

A F L O P R W Y ЗНАКИ ПРЕПИНАНИЯ

:?

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

1.Какие типы данных используются в качестве базо­ вых при построении множественных типов?

2.Дано описание переменной множественного типа:

VAR PM:SET OF (ВЕНЕРА, САТУРН, МАРС);