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

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

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

как и неупакованный. Например, массивы АР и ANP, описанные как

VAR AP:PACKED ARRAY[1..3] OF BOOLEAN;

ANPiARRAY[1..3] OF BOOLEAN;

идентичны в смысле объема и характера хранимой информации, но различаются способами представления в памяти ЭВМ. Рассмотрим 3-и компоненты этих век­ торов-АР[3] и ANP[3]. Как видно, способ доступа оди­ наков, но время, затраченное на выборку из памяти АР[3], значительно больше. Поэтому программисту на­ до каждый раз тщательно взвешивать все "за” и "про­ тив", прежде чем применять упакованные массивы.

К упакованным символьным массивам в языке ПАСКАЛЬ относятся строки символов, которые зада­ ются либо в разделе операторов, либо в разделе кон­ стант. Как известно, тип константы однозначно опреде­ ляется ее записью. Поэтому если, например, в разделе констант определена константа ST=‘END’, то она при­ надлежит к типу PACKED ARRAY[1.3] OF CHAR. Для включения в состав строки символа "одиночная кавыч­ ка" надо записать две одиночные кавычки подряд, на­ пример ‘ПОД“ЕЗД‘.

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

Операции отношения выполняются посимвольно, слева направо. Например, ‘STRING’ < ‘STRONG', так как в алфавите символ Т стоит раньше ‘0 ‘, т. е. Т < ‘О*.

4.3. ВВОД/ВЫВОД ЭЛЕМЕНТОВ МАССИВОВ

Вводить и выводить массивы можно только поэле­ ментно. Исключение составляет вывод строк и упако­

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

PROGRAM Т (INPUT,OUГР(JT>;

CONST S= *СТРОКА *;

TYPE MASI=PACKED ARRAYCl..61 OF CHAR;

MAS2=ARRAYC1. .3,1. .23 OF REAL;

VAR XSsMASl;

XF:MAS2;

I,J:INTEGER;

(« ФРАГМЕНТ

1

*)

 

BEGIN READLN;

WRITECXS=>');

FOR I:=1 TO 6 DO

READ(XSCII);

<* ФРАГМЕНТ

2

*)

 

READLN;

WRITECXF=>1);

FOR I:=1 TO 3 DO

 

FOR

Jz = l TO 2 DO READ<XFCI,JI);

<* ФРАГМЕНТ

3

*>

 

WRITELNIS,•= •,XS) ;

<* ФРАГМЕНТ

4

*>

 

FOR IS=I TO 3 DO

 

BEGIN

 

FOR J; = l TO 2 DO WRITE<XFCI,JJ:6:2); WRITELN

END

END.

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

xs= >ABCDEF

XF= >1.1 1.2 1.1 2.2 3.1 3.2

CTPOKA=ABCDEF

1.101.20

2.10220

3.103.20

П е р в ы й ф р а г м е н т , осуществляющий ввод упакованного символьного массива XS, начинается с оператора READUN, который пропускает все символы первой строки ДО первого символа следующей строки во входном файле INPUT. Первая строка состоит из одного пробела и символа "конец строки". Она образу­ ется автоматически и должна быть просто пропущена (см. гл. 1). Затем оператор WR1TELN(’XS= > ‘) высвечи­ вает на экране приглашение для начала ввода. Набран­ ная на терминале входная строка символов вводится в

цикле символ за символом, пока параметр цикла I не исчерпает свои значения.

В

т о р о й Ф р а г м е н т

программы вводит вещест­

венную

матрицу при помощи двух вложенных опера­

торов цикла.

выводит

строку

S, опреде­

Т р е т и й ф р а г м е н т

ленную в разделе констант,

символ

"=" и

после этого

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

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

Рассмотрим программу, которая во входной строке произвольной длины (/> =3) подсчитывает число слов END:

PROGRAM EL(INPUT,OUTPUT)}

TYPE PM=PACKED ARRAYС1..33 OF CHAR;

VAR SsPM; K:INTEGER;

BEGIN Ki~B;

READLN; WRITE(•=>');

READ(SC13,SC23);

REPEAT

READ(SI31>;

IF S='END' THEN KJ=K+1;

SC13s=SI23; SC2J:*=SC3I

UNTIL EOLN;

WRITE('ЧИСЛО СЛОВ END= ,K:2>

END.

Программа EL сначала вводит первые три симво­ ла входной строки в массив S, затем в цикле сравнивает массив S с символьной строкой *END‘ и в случае их совпадения увеличивает счетчик слов К на единицу. Затем значение второго компонента массива пересылается на место первого, значение третьего-на место второго. После этого в конце цикла проверяется, есть ли еще символы во входной строке или был счи­ тан последний символ; если символы еще есть, то осу­ ществляется возврат на начало цикла, ще считывается из входного файла очередной символ-новое значение третьего компонента массива S.

В программе используется стандартная функция языка ПАСКАЛЬ - EOLN, которая вырабатывает булев­ ское значение TRUE, если считан последний символ

входной строки, и значение FALSE в противном слу­ чае.

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

= > ENDROENLZENDWAPENDFY ЧИСЛО СЛОВ END=3

8*. Написать фрагмент программы, осуществляющий ввод данных в массив А, если есть описания:

TYPE ФИГУРЫ= (РОМБ,ТРЕУГОЛЬНИК,КВАДРАТ,ТРАПЕ­ ЦИЯ);

VAR AARRAY[1..10] OF А1ШАУ[ФИГУРЫ] OF REAL;

LINIEGER; ^ФИГУРЫ;

9. Будет ли правильной запись оператора А[1]:=В, ес­ ли известно, что описаны они следующим образом:

TYPE MAS=ARRAY[1..5I1..3] OF REAL;

MAS1 =ARRAY[1..3] OF REAL;.

VAR AMAS; B:MAS1;

10. Ограничено ли количество измерений массивов в языке ПАСКАЛЬ?

11*. Какие из приведенных операторов являются не­ правильными, если в программе имеются следующие описания:

CONST А = ’ДЕТАЛЬ’; В=7;

TYPE MAS=PACKED ARRAY[1..6] OF CHAR;

VAR S:CHAR; MAMAS; LINTEGER;

a) S:=A;

б)

M A=A;

в)

S:=B;

г) МА[б]:=В;

д)

M A=B;

e)

I:=ORD(MA[I]);

12*. Ввести текст, состоящий из 30 символов. Напеча­ тать его в обратном порядке.

13*. Составить программу ввода и вывода списка груп­ пы, состоящей из 25 человек. Длина каждой фамилии не превышает 15 букв.

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

З А Д А Н И Е 1. РАБОТА С МАССИВАМИ ЧИСЕЛ

Це л ь з а д а н и я

1.Получение практических навыков в работе с масси­ вами.

2.Знакомство с алгоритмами упорядочения.

П о с т а н о в к а з а д а ч и Для конкретного варианта составить массив исход­

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

56

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

ВВЕДИ ИСХОДНЫЙ МАССИВ

1.11.2 1.3 1.4

2.12.2 2.3 2.4

3.13.2 3.3 3.4

4.14.2 4.3 4.4

5.15.2 5.3 5.4

МАССИВ ПОСЛЕ ПЕРЕСТАНОВКИ СТРОК

5.105.20 5.30 5.40

2.102.20 2.30 2.40

3.103.20 ЗЛО 3.40

4.104.20 4.30 4.40

1.101.20 1.30 1.40

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

1.В массиве из 20 целых чисел найти наибольший элемент и поменять его местами с первым элементом.

2.В массиве из 10 целых чисел найти наименьший элемент и поменять его местами с последним элемен­

том.

3.В массиве из 15 вещественных чисел найти наи­ больший элемент и поменять его местами с послед­ ним элементом.

4.В массиве из 25 вещественных чисел найти наи­

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

5.Упорядочить по неубыванию массив, содержащий 20 целых чисел.

6.Упорядочить по невозрастанию массив, содержащий 10 целых чисел.

7.Упорядочить по неубыванию массив, содержащий

15вещественных чисел.

8.Упорядочить по невозрастанию массив, содержащий 25 вещественных чисел.

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

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

11. Дан массив вещественных чисел, содержащий 15 элементов, записать в этот же массив сначала все от­

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

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

13. Дан двумерный массив, содержащий 5 строк и 3 столбца. Элементами массива являются целые числа. Упорядочить массив по неубыванию элементов первого столбца.

14. Дан двумерный массив, содержащий 4 строки и 5 столбцов. Элементами массива являются целые числа. Упорядочить массив по невозрастанию элементов пято­ го столбца.

15.Дан двумерный массив, содержащий 3 строки и 4 столбца. Элементами массива являются вещественные числа. Упорядочить массив по неубыванию элементов первого столбца.

16.Дан двумерный массив, содержащий 4 строки и 4 столбца. Элементами массива являются вещественные числа. Упорядочить массив по невозрастанию элемен­ тов второго столбца.

17.Дан двумерный массив, содержащий 2 строки и 4 столбца. Элементами массива являются целые числа. Упорядочить массив по неубыванию элементов первой

строки.

18.Дан двумерный массив, содержащий 3 строки и 4 столбца. Элементами массива являются целые числа. Упорядочить массив по невозрастанию элементов третьей строки.

19.Дан двумерный массив, содержащий 5 строк и 3 столбца. Элементами массива являются вещественные числа. Упорядочить массив по неубыванию элементов первой строки.

20.Дан двумерный массив, содержащий 3 строки и 2 столбца. Элементами массива являются целые числа.

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

З А Д А Н И Е 2. РАБОТА С УПАКОВАННЫМИ СИМВОЛЬНЫМИ МАССИВАМИ

Це л ь з а д а н и я

1.Получение навыков в работе с символьными масси­

вами.

2. Знакомство с методами оптимизации расхода ма­ шинного времени и памяти ЭВМ.

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

Составить список из N наименований товара. Уста­ новить цену и количество каждого товара. Для состав­ ленных исходных данных написать npoipaMMy ввода входной информации, используя массивы. Определить стоимость каждого товара и суммарную стоимость всех товаров. Результат распечатать в виде таблицы.

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

1.Постановка задачи с указанием исходных данных и структуры выходной таблицы.

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

3.Выводы.

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

зоне 10<N<15. Названия товаров оформить в виде дву­ мерного массива. Например, описание

MASARRAY[1..12] OF PACKED ARRAY[1..15] O F C H A R

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

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

НОМЕР

НАЗВА­

ЦЕНА ЗА КОЛИЧЕСТВО

СУММАРНАЯ

П/П

НИЕ

ЕДИНИ­ ТОВАРА

СТОИМОСТЬ

 

ТОВАРА

ЦУ ТО­

 

 

 

ВАРА

 

Итого: ...

Отчет составил: ФИО.

Рамку таблицы следует выполнить какими-либо симво­ лами, например Т, ’=’ или