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

Методичка Паскаль

.pdf
Скачиваний:
101
Добавлен:
30.04.2015
Размер:
592.26 Кб
Скачать

Тема 7. Тип-диапазон

Краткое изложение теоретического материала.

Тип-диапазон называют также ограниченным и интервальным типом.

Тип-диапазон есть подмножество своего базового типа, в качестве ко-

торого может выступать любой порядковый тип, кроме самого типа-

диапазона (т.е. типы Integer, Boolean, Char, перечисляемый тип).

Диапазон задается границами своих значений внутри базового типа:

<минимальное значение> .. <максимальное значение>

Причем минимальное значение должно быть меньше либо равно мак-

симальному.

Например:

Type Digit = ’0’..’9’; { тип-диапазон, ограничение наложено на Char } Year = 1900..2009; { тип-диапазон, ограничение на Integer } Week = (mon, tues, wed, thur, fri, sat, sun); { перечисляемый тип

(дни недели)}

Var d : Digit;

 

y : Year;

 

m : 1..12;

{ переменная m относится к ограниченному типу}

work : mon .. fri; { тип-диапазон, ограничение наложено на Week }

Тип-диапазон наследует все свойства своего базового типа.

Назначение типа-диапазона:

-наглядность программы;

-дополнительная проверка корректности данных.

41

Тема 8. Множество (множественный тип)

Краткое изложение теоретического материала

Множество – это неупорядоченный набор однотипных элементов.

Количество элементов в множестве – от 0 до 256.

Пустое множество – это множество, которое не содержит ни одного элемента.

Два множества эквивалентны, если все их элементы одинаковы.

Первое множество включено во второе, если все элементы первого множества являются также элементами второго.

Пустое множество включено в любое другое.

Описание множественного типа:

Type <имя типа> = Set Of <базовый тип>;

В качестве базового типа может использоваться любой порядковый тип, мощность которого не больше 256. Из стандартных – это Char, Boolean. Integer напрямую в качестве базового типа для множества использовать нель-

зя. Сначала нужно описать тип-диапазон (не более 256 чисел).

Например:

Type digit = Set Of 0..9; setchar = Set Of Char;

Var d1, d2 : digit; c : setchar;

Для задания множества (т.е. присваивания ему некоторых значений)

используется конструктор множества – это список элементов множества,

разделенных запятыми. Список ограничен квадратными скобками.

Вкачестве элементов могут быть:

-константы

-

выражения

базового типа

-

диапазоны

 

Например:

42

d1

:= [ 0..3 , 6 ];

d2

:= [ ];

c := [‘a’ .. ‘z’ , ‘A’ .. ‘Z’ ];

 

Операции над множествами:

 

 

*

пересечение множеств: результат содержит элементы, общие для двух

 

множеств

 

 

 

+

объединение множеств: результат содержит элементы 1-го множества,

 

дополненные недостающими элементами из 2-го множества

 

 

-

разность множеств: результат содержит элементы из 1-го множества,

 

которых нет во 2-м множестве

 

 

=

проверка эквивалентности

 

 

<>

проверка неэквивалентности

 

 

<=

проверка вхождения

>=

 

 

 

 

in

проверка принадлежности элемента множеству (элемент задается

 

как выражение соответствующего типа)

 

 

 

Стандартные процедуры:

 

Include ( S , i );

включает элемент i в множество S;

 

Exclude ( S , i );

исключает элемент i из множества S.

Процедуры исполняются быстрее, чем операции + и - .

Примеры решаемых задач Пример 1. Составить программу, которая выведет на экран числа от 1

до 9 в случайном порядке.

Алгоритм: Будем использовать множество для хранения тех чисел, ко-

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

(функция Random) осуществляется до тех пор, пока не будет выбрано число,

43

которого нет в множестве; после чего это число выводится на экран и вклю-

чается в множество.

Программа:

Program S1;

Uses Crt;

Type Numbers = 1..9; { тип-диапазон }

SetNumbers = Set Of Numbers; { тип–множество чисел (от 0 до 9) }

Var Sn : SetNumbers;

I, N : Numbers;

Begin

Clrscr;

Randomize; { инициализируем датчик случайных чисел }

Sn := [ ];

{ множество выбранных чисел – сначала пустое }

For I := 1 To 9 Do { девять раз повторяем следующие действия: }

Begin

 

 

Repeat

{ повторяем формирование }

 

N := random(9) + 1 { целого числа из интервала от 1 до 9}

Until not (N in Sn);

{пока не получим число, которого нет

 

 

в множестве Sn }

Writeln ( N );

{ выводим полученное число на экран }

Include(Sn, N)

{ включаем это число в множество Sn }

End;

 

 

Readln

End.

Контрольные задания

8.1. Составить программу, которая вводит с клавиатуры N чисел и помещает четные из введенных в множество А, а нечетные – в множество В.

Элементы полученных множеств распечатать.

44

8.2. Составить программу, которая вводит предложение и формирует три множества: множество гласных, множество согласных, множество разде-

лителей. Элементы полученных множеств вывести на экран.

8.3. Составить программу, которая вводит с клавиатуры N целых чи-

сел и формирует 5 множеств: одно-, дву-, трех-, четырех- и пятизначных чи-

сел. Элементы полученных множеств вывести на экран.

8.4. Составить программу-тренажер по проверке знания таблицы ум-

ножения на заданное число N (оно должно вводиться с клавиатуры). Про-

грамма должна вразброс выводить 10 примеров вида «K * N =» (К изменяет-

ся от 1 до 10), причем так, чтобы примеры не повторялись. Пользователь вводит ответ, после чего программа должна выводить сообщение «Верно» или «Неверно».

8.5. «Решето Эратосфена». Алгоритм с таким названием позволяет выделить простые числа из интервала от 2 до N. Он состоит в следующем:

создаем исходное множество чисел от 2 до N. Множество простых чисел на начальном этапе пусто. Берем первое число – это 2. Оно является простым числом, включаем это число в множество простых чисел. Удаляем из исход-

ного множества чисел все числа, кратные 2 (т.е. 2, 4, 6 и т.д.). Вновь берем первое число из исходного множества чисел. Это 3 – простое число. Включа-

ем его в множество простых чисел, а из исходного множества исключаем все числа, кратные 3. Снова берем первое число из исходного множества (это число 5 - простое). Включаем его в множество простых, а из исходного ис-

ключаем все числа, кратные числу 5. Эти действия повторяем до тех пор, по-

ка исходное множество чисел не станет пустым.

45

Тема 9. Массивы в языке Паскаль

Краткое изложение теоретического материала

Массив – это упорядоченная (пронумерованная) последовательность

однотипных элементов. Массив имеет общее для всех элементов имя. Но-

мер элемента массива называют еще его индексом. В качестве индексов можно использовать значения любого порядкового типа. Например:

 

 

-8

12

0

234

3

А – массив из пяти целых чисел. Ин-

 

А

дексы элементов – целые числа от 1

 

 

 

 

 

 

1

2

3

4

5

 

 

 

 

до 5.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В - массив из 5 вещественных чисел.

 

 

3.5

7.8

0.8

-0.1

5.9

 

В

 

 

 

 

 

 

Индексы элементов – целые числа от

 

2001

2002

2003

2004

2005

 

 

 

 

2001 до 2005.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-8

12

0

234

3

C - массив из 5 целых чисел. Индексы

 

С

 

 

 

 

 

 

элементов – символы от целые числа

 

‘a’

‘b’

‘c’

‘d’

‘e’

 

 

 

 

 

 

 

 

 

 

 

от 1 до 5.

Мама

мыла

раму

и

Машу

W – массив из пяти строк. Индексы

W

 

 

 

 

элементов – целые числа от 1 до 5.

1

2

3

4

5

 

Доступ к элементам массива осуществляется по индексу, который ука-

зывается после имени массива в квадратных скобках. Например, в приведен-

ных выше примерах: A[2]=12, B[2005]=5.9, C[‘d’]=234, W[1+2]=’раму’.

46

Массивы реализованы практически во всех структурных и объектно-

ориентированных языках программирования.

Обработка массивов в языке Турбо Паскаль:

1.Описание нового типа данных - массив: a. Описание типа:

Type <имя типа>=Array [<min индекс>..<max индекс>] Of <тип эле-

ментов массива>;

b. Описание переменной, имеющей тип массив:

Var <имя переменной> : <имя описанного выше типа>;

Например:

Type List = Array [1..30] Of String;

MasNum = Array[1..15] Of Real;

Var Fam, Name : List; { Переменные Fam и Name – массивы строк } Year, a, b : MasNum; { Переменные Year, a и b – массивы веще-

ственных чисел }

2. Ввод элементов массива:

Для обработки массивов наиболее часто используется оператор цикла со счетчиком For.

Фрагмент программы, позволяющий осуществить ввод значений элементов массива A из N элементов, может быть записан следующим образом:

For i := 1 to n do begin

Write (‘введите ’ , i , ’-ый элемент ’);

Readln ( A[i] )

end;

3.Заполнение массива случайными числами зачастую используется в учебных (и не только) задачах, для того чтобы не вводить длинные число-

вые последовательности:

47

Randomize; { инициализация датчика случайных чисел } For i := 1 to n do

A[ i ] := random(100); { в этом случае значения элементов будут лежать в интервале от 0 до 99 }

4. Вывод массива на экран:

For i := 1 to n do

Writeln( A[i] );

5.Сортировка массива – это упорядочение его элементов по возраста-

нию или убыванию. Разработан не один десяток алгоритмов сортировки мас-

сива (см. соответствующую литературу). Ниже приведен фрагмент програм-

мы, реализующей один из алгоритмов сортировки массива. Алгоритм сор-

тировки по убыванию состоит в следующем:

Фиксируем первый элемент массива, сравниваем его со всеми после-

дующими (от 2-го до последнего – n-го), если какой-либо оказывается боль-

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

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

Зафиксируем второй элемент массива. Будем сравнивать его со все-

ми последующими (начиная уже с 3-го), и если найдем большие элементы,

будем менять их местами со вторым. В результате этих действий на втором месте окажется самый большой элемент массива из оставшихся.

Зафиксируем третий элемент и повторим описанные выше действия.

В результате повторения описанных действий (таких повторов будет

n-1, т.к. последний элемент сравнивать уже не с чем) массив будет отсорти-

рован по убыванию.

For i := 1 to n-1 do

48

For j := i+1 to n do

If A[ j ] > A[ i ] then

begin

{ меняем местами i-ый и j-ый элементы массива А }

p := A[ i ];

{ для этого используем Ъ

A[ i ] := A[ j ];

{ промежуточную переменную p, тип которой }

A[ j ] := p

{ должен совпадать с типом элементов массива }

end;

 

 

При сортировке по убывания нужно в тексте программы изменить лишь знак

«>» на знак «<».

Размер массива – это количество элементов в нем.

Размерность массива – это количество индексов, которые нужно ука-

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

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

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

Двумерный массив можно представить в виде совокупности пронуме-

рованных строк и столбцов:

 

 

1

2

3

4

5

6

 

 

 

 

 

 

 

 

 

1

24

-57

0

12

1

13

А

 

 

 

 

 

 

 

2

103

6

-134

2

15

-8

 

 

 

 

 

 

 

 

 

3

5

9

24

-11

-67

91

 

 

 

 

 

 

 

 

 

4

-7

10

8

421

36

-22

 

 

 

 

 

 

 

 

 

5

11

47

-3

14

59

32

 

 

 

 

 

 

 

 

Двумерный числовой массив А состоит из 5 строк и 6 столбцов. Для того чтобы обратиться к отдельному элементу этого массива, нужно указать после его имени индексы в квадратных скобках через запятую – сначала но-

мер строки, затем номер столбца. Например: А[1,3]=0, А[4,1]= -7, А[4,6]= - 22, А[2,5]=15.

49

Использование двумерных массивов в программах на языке Турбо Па-

скаль:

1.Описание двумерного массива: a. Описание типа:

Type <имя типа> = Array [ <min номер строки>..<max номер стро-

ки> , <min номер столбца>..<max номер столбца> ] Of <тип элемен-

тов массива>;

b. Описание переменной, имеющей тип массив:

Var <имя переменной> : <имя описанного выше типа>;

Например:

Type

Mas2 = Array[1..5, 1..6] Of Integer;

Var

a : Mas2;

{ Переменная a – двумерный массив целых чисел, в котором 5 строк и

6 столбцов }

2. Ввод элементов массива:

Для обработки двумерных массивов наиболее часто используется вложен-

ные циклы (цикл по строкам и цикл по столбцам, или элементам строки).

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

тов массива A из N строк и М столбцов, может быть записан следующим образом:

For i := 1 to n do

For j := 1 to m do

begin

Write ( ‘A [ ‘ , i , j , ’ ] = ‘);

Readln ( A[i , j] )

end;

3. Вывод массива на экран в виде прямоугольной матрицы (таблицы):

50