double arrow

ЗАДАЧИ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ


КОНТРОЛЬНЫЕ ВОПРОСЫ

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

Записи, рассмотренные ранее, имеют строго определенную структуру. В некоторых случаях это резко ограничивает возможности их применения. Поэтому в языке Pascal имеется возможность задать тип записи, содержащий произвольное число вариантов структуры. Такие записи называются записями с вариантами. Записи с вариантами обеспечивают средства объединения записей, которые похожи, но не идентичны по форме. Они состоят из фиксированной и вариантной частей.

Использование фиксированной части не отличается от рассмотренного ранее. Вариантная часть формируется с помощью оператора case. Он задает особое поле записи – поле признака, которое определяет, какой из вариантов в данный момент выполнения программы будет активизирован. Значением признака в каждый текущий момент выполнения программы должна быть одна из расположенных далее констант. Константа, служащая признаком, задает вариант записи и называется константой выбора. Формат:

type rec = record

case <поле признака> : <имя типа> of

<константа выбора1> : (поле, … : тип);

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .




<константа выбораN> : (поле, … : тип)

end;

Компоненты каждого варианта (идентификаторы полей и их типы) заключаются в круглые скобки. У части case нет отдельного end, как следовало бы ожидать по аналогии с оператором case. Одно слово end заканчивает всю конструкцию записи с вариантами. Необходимо отметить, что количество полей каждого из вариантов не ограничено.

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

Например:

type rec = record

Number : integer;

Code : integer;

case FLG : boolean of

true : (Prl1 : integer);

false : (Prl2 : real)

end;

var prec :rec;

При использовании записей с вариантами необходимо придерживаться следующих правил:

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

- запись может иметь только одну вариантную часть, причем вариантная часть должна размещаться в конце записи;

- если поле, соответствующее какой-либо метке, является пустым, то оно записывается следующим образом - <метка>: ( );

1. Что такое массив?

2. Как определить местоположение элемента в массиве?

3. Что такое индекс? Каким требованиям он должен удовлетворять?

4. Каким образом задается описание массива, что в нем указывается?

5. Общие и отличительные черты одномерных, двумерных и n-мерных массивов.

6. В каких операциях могут участвовать массивы и какие к ним при этом предъявляются требования?

7. Каким образом в Pascal задается обращение к элементу массива?

8. Почему при описании массивов предпочтительнее употреблять константы, а не указывать размеры массива в явном виде?



9. Что называется инициализацией массива, и зачем она применяется?

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

а) var A:array[1..20] of real;

б) type MAS=array[‘A’..”d”];

var A:MAS;

в) var A:array[integer] of char;

г) var MM:array[false..true] of char;

д) type SS=packed array[-20..0] of integer;

var MAS:SS;

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

а) var A:array[1..,1..7] of real;

б) type MAS=array[‘A’..’D’,-2..3] of integer;

var ARR:MAS;

в) var W:array[5,7] of integer;

д) var MASS:array[1..5],[1..7] of real;

e) type MM=packed array[1..10] of char;

var A:array[2..7] of MM;

12. Сколько компонентов содержит каждый из описанных ниже массивов?

а) var MB:array[‘A’..’C’,2..5] of real;

б) var MC:array[false..true] of array[1..5] of char;

в) type WW=(m1,m2,m3,m4);

var ZAR:array[WW] of array[WW] of boolean;

13. Используя описания массивов из п.12, определить, какие из приведенных обращений к элементам массивов, являются неправильными и почему:

а) MB[“b”,3] б) MB[‘B’][6] в) MC[true,2] г) MC[3,false]

14. Будет ли правильной запись оператора A[i]:=B, если известно, что описаны они следующим образом:

type mas=array[1..5,1..3] of real;

mas1=array[1..3] of real;

var A:mas; B:mas1;

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

const a=’деталь’; b=’.’;

type mas= packed array[1..6] of char;

var s:char; ma:mas; i:integer;

а) s:=a; б) ma:=a; в) s:=b; г) ma[6]:=b; д) ma:=b; е) i:=ord(ma[i]);

16. Указать, какие операции над массивами (как едиными объектами) допустимы в Pascal, и найти ошибки в следующей программе:



program mas;

var x,y:array[1..20] of real;

z,u:array[1..50] of real;

i:integer;

begin

read(x,y);

if x<>y then begin

z:=x;

x:=y;

y:=z

end

else x:=x+y;

for i:=1 to 20 do u[i]:=x[i]+y[i];

z:=u;

writeln(x)

end.

17. Что такое множество? Каким требованиям должны удовлетворять все элементы множества? Преимущества использования типа множество.

18. Что такое базовый тип множества? Как он задается?

19. Какое множество называется пустым, как оно обозначается?

20. Как задается описание множественного типа?

21. Какие операции допустимы над множествами? Каков тип результатов выражений с применением операций над множествами?

22. Какие множества считаются равными, неравными? Имеет ли значение для сравниваемых множеств порядок следования элементов?

23. Для чего применяются операции «больше или равно», «меньше или равно»? В чем их отличие?

24. Для чего применяется операция in? Особенности ее применения.

25. Что называется объединением множеств?

26. Что называется пересечением множеств?

27. Что называется разностью множеств?

28. Что такое строка?

29. Каким идентификатором определяются данные строкового типа?

30. Какова максимально возможная длина строки? Как определить текущую длину строки?

31. Какие выражения называются строковыми?

32. Какие операции допустимы над строковыми данными?

33. Каким образом производится сравнение строк?

34. Какие требования предъявляются к записи выражений с операндами строкового и литерного типа?

35. Как можно обратиться к отдельным символам строки?

36. Назначение специальных процедур и функций обработки данных строкового типа. Приведите примеры.

37. Почему запись называют комбинированным типом данных?

38. Как определяется тип записи? Что называется полем записи?

39. Какие требования предъявляются к идентификаторам поля записи?

40. Чем определяется объем памяти, требуемый для размещения записи?

41. Что такое составное имя поля записи? Из каких частей оно состоит и как записывается?

42. Зачем при обращении к полю записи используется предложение with?

43. Как вы понимаете вложение записей? Каков максимально допустимый уровень вложения? Приведите примеры вложения записей.

44. Зачем применяются записи с вариантами? Из каких частей состоит запись с вариантами?

45. Что называется полем признака? Для чего оно записывается в операторе case?

46. Как записываются компоненты каждого варианта записи?

47. Какие правила следует соблюдать при использовании записей с вариантами?

Задача 1.

Создайте матрицу 5x5, значение каждого элемента которой равно сумме номера строки и столбца, на пересечении которых он находится, и вычислите сумму элементов каждой строки.

Задача 2.

Найдите сумму элементов массива ниже главной диагонали, произведение не равных нулю элементов выше главной диагонали и количество элементов в главной диагонали, попадающих в интервал [-1;1].

Задача 3.

Дана матрица целых чисел размером 10x12. Найдите индексы всех ее седловых точек. (Седловой точкой называется элемент, который является наименьшим в своей строке и наибольшим в своем столбце или, наоборот, наибольшим в своей строке и наименьшим в своем столбце.)

Задача 4.

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

Задача 5.

Заполнить массив А размером 10х10, состоящий из целочисленных величин следующим образом:

а) 0 0 0 … 0 б) 1 2 … 10 в) 1 2 3 … 10

0 1 0 … 0 11 12 … 20 0 1 2 … 9

0 0 2 … 0 21 22 … 30 0 0 1 … 8

. . . . . . . . . . . . . . . . . . . . . . . . . .

0 0 0 … 9 91 92 … 100 0 0 0 . . . 1

Задача 6.

Дана программа. На вход ее подается следующий текст:

5A7233111BGE2257CDE.,

признаком конца текста является точка. Определить, что напечатано в результате обработки этого текста программой ZAF:

program ZAF;

var z:set of 0..9;

i,k:integer;

si:char;

begin

readln;

write(‘=>’);

z:=[ ];

repeat

read(si);

k:=ord(si)-ord(‘0’);

if k in [0..9] then z:=z+[k]

until k=’.’;

if z=[ ] then writeln(‘в тексте нет цифр’)

else

begin

writeln(‘в тексте имеются следующие цифры:’);

for i:=1 to 9 do

if i in z then writeln(i:2);

writeln

end

end.

Задача 7.

Если дано описание var p:set of 0..9;

i,j:integer;

и i=3 и j=5, то какое значение получит переменная p при выполнении следующего оператора присваивания:

а) p:=[i+3, j div 2, j..sqr(i)-3];

б) p:=[2*i..j];

в) p:=[i, j, 2*i, 2*j]

Задача 8.

Составьте программу шифрования текстового сообщения. Можно использовать такой способ шифрования. Шифровальщик задает ключ шифрования – целое число, который определяет величину смещения букв русского алфавита, например: ключ = 3, тогда в тексте буква «а» заменяется на «г» и т.д. Используются все буквы русского алфавита. Е считывается дважды.

Задача 9.

Составить программу, определяющую сколько раз в данной строке встречается символ «а».







Сейчас читают про: