Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3755.doc
Скачиваний:
13
Добавлен:
04.05.2019
Размер:
714.24 Кб
Скачать
  • Подсчитать число нулей в однобайтовом числе.

    Лабораторная работа № 2 Работа со строками

    Цель работы

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

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

    I. Требования к выполнению заданий

    1. Нельзя использовать циклы.

    2. Нельзя использовать оператор IF.

    3. Нельзя использовать операторы ввода-вывода (надо использовать операторы присваивания).

    4. Из всего множества подпрограмм языка Паскаль надо использовать только функции и процедуры для работы со строками.

    5. В итоге надо записать все действия по решению задачи в виде одного оператора присваивания.

    II. Варианты заданий

    1. Написать программу, которая:

    • выводит на экран одну строку длиной 80 символов;

    • при каждом нажатии клавиши «Enter» (10 раз) «раздвигает» эту строку относительно центра.

    2. Написать программу, которая «переворачивает» заданную строку (последний символ переставляется на место первого, предпоследний – на место второго и т.д.).

    3. Написать программу, которая выполняет следующие действия:

    • объявляет строку длиной 20 символов;

    • заполняет эту строку 16-ю одинаковыми символами;

    • в центре введенных 16 символов выводит 8 пробелов;

    • в центре введенных 8 пробелов помещает 4 цифры, соответствующие текущему году, взяв это значение из переменной типа Word.

    4. Задана строка длиной до 255 символов. Известно, что в ней содержится не более 7 запятых. Каждый фрагмент, заключенный между соседними запятыми, переписать в отдельную строковую переменную.

    5. Заданы две строки S1 и S2 максимальной длиной 10 символов. Все символы строки S2, которые также содержатся в строке S1, заменить на пробелы. Символы в S1 и S2 не повторяются.

    6. В строке цифр длиной до 20 символов все вхождения четырех цифр, образующих номер текущего года, обработать следующим образом:

    • вычесть из текущего года год своего рождения;

    • полученную разность поместить в поле шириной из 4 символов;

    • поместить сформированное поле в конец исходной строки;

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

    7. В строке длиной до 20 символов обработать каждое вхождение заданного символа следующим образом:

    • в левой половине строки относительно каждого найденного символа поменять местами тетрады;

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

    8. Задана строка длиной до 12 символов. Подсчитать, сколько раз в эту строку входит подстрока из 3-х символов. В месте каждого вхождения подстроки заменить порядок следования символов на обратный.

    9. Заданная строка состоит из последовательности следующих конструкций:

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

    10. Заданы две строки S1 и S2. В S1 содержится последовательность следующих конструкций: a1 and ? = ?; a2 and ? = ?; ...., где а1, а2, ... - целые числа. Строка S2 состоит только из целых чисел, разделенных запятыми. Выполнить последовательность операций and в строке S1, используя в качестве недостающих операндов соответствующее по порядку целое число из строки S2. Результат операции поместить в строке S1 вместо знака вопроса.

    11. В строке длиной до 10 символов найти все вхождения заданной подстроки. В начале и в конце каждого вхождения добавить символ подчеркивания.

    12. Заданы две строки S1 и S2. В строке S1 имеется заданное число «пустых» комментариев . Строка S2 состоит из слов, разделенных пробелами. Число слов должно быть числу комментариев. Перенести слова из строки S2 в строку S1 внутрь комментариев.

    13. Заданная строка состоит из последовательности четырехсимвольных номеров текущего года, разделенных пробелами. Изменить порядок следования цифр в полях года. Оставить от номера года только 3 последние цифры.

    Лабораторная работа № 3 Исследование особенностей операций ввода-вывода в Паскале

    Цель работы

    Получение навыков по использованию операторов ввода-вывода.

    I. Требования к выполнению заданий

    Для каждого упражнения записать отдельную линейную программу и выполнить эту программу в пошаговом режиме, наблюдая (и фиксируя на бумаге) значения заданных переменных в окне "Watch".

    II. Варианты заданий

    1. Обработка пустого входного потока

    Задан пустой входной поток: = . . .

    В списке ввода находятся:

    1. две переменные целого типа;

    2. две символьные переменные;

    3. две переменные строкового типа.

    Какие значения получат переменные?

    2. Ввод целых 16-ричных и десятичных значений

    В списке ввода находятся:

    1. две целые переменные;

    2. две вещественные переменные.

    Заданы входные потоки:

    1. $ A $B

    2. 1 0 11

    Какие значения получат переменные?

    3. Ввод символьных значений

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

    Заданы входные потоки:

    1) abcd

    2)a’’b’’c’’d

    Какие значения получат переменные?

    4. Ввод и вывод булевских значений

    Var

    a, b : boolean;

    Begin

    a := false;

    b := true;

    end.

    Дополнить программу операторами:

    1. Read (a,b);

    2. Write (a,b).

    Зафиксировать и объяснить результаты.

    5. Использование клавиши «Tab» в качестве разделителя

    В списке ввода находятся:

    а) две переменные целого типа;

    б) две переменные символьного типа.

    В ходные потоки:

    1. 1 #92

    2. 1 Tab 2

    3. 1 Alt+9 2

    Какие значения получат переменные?

    6. Вывод значения в заданную позицию.

    Для двух переменных целого и строкового типов вывести их значения, начиная соответственно с 25-й и 45-й позиции.

    Выполнить эти действия двумя способами:

    1. с помощью пробелов;

    2. с помощью задания форматов вывода.

    7 . Исследование различий в работе операторов Read и Readln

    Входной поток: 1234

    Var

    a, b : real;

    S1, S2 : string;

    Begin

    Read (a, S1);

    Readln (S2);

    Read(b)

    End.

    Определить значения переменных a, b, S1 и S2. При выполнении каких операторов программа переходит в состояние ожидания ввода?

    8. Вывод вещественных значений

    Описаны переменные:

    1. a : real;

    2. a : single.

    Зафиксировать образы экрана.

    Var

    a : ...;

    Begin

    a := 0.25;

    .....

    End.

    Дополнить программу операторами:

    Writeln (a);

    Writeln (a:4);

    Writeln (a:4:1);

    Writeln (a:4:-1);

    Writeln (a:-4:1);

    9. Отображение знака «+» при выводе

    Зафиксировать образы экрана для всех 3-х случаев.

    1) Var

    a : real;

    Begin

    a := 0.25;

    Write (a);

    Write (a);

    Write (a);

    End.

    2) Var

    a : byte;

    Begin

    a := 25;

    Write (a);

    Write (a);

    Write (a);

    End.

    3) Повторить пункт 2 для a: shortint;

    10. Записать операторы ввода-вывода:

    1. для ввода в одной строке значений нескольких переменных с «подсказками»;

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

    Лабораторная работа № 4 Разработка циклов с известным числом повторений

    Цель работы

    1. Получение навыков нахождения обобщенных (рекуррентных) формул, необходимых для разработки цикла.

    2. Получение навыков написания циклических программ.

    I. Требования к выполнению заданий

    Для каждого варианта выполнить следующее:

    1. найти обобщенную формулу (или формулы) вычисления, позволяющие:

    • записать более компактно процесс вычислений;

    • реализовать вычисления более эффективно;

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

    i | s[i]

    -

    Значения s[i]

    -----|---------

    1 |

    2 |

    3 |

    Замечание: в процессе вычислений все промежуточные значения переменной S надо записывать в строку в форме:

    s1 s2 s3 s4 ………..

    1. С использованием накопленных в строке промежуточных значений построить на экране (в выбранном масштабе) график функции si=f(i) вида:

    | s1

    | *

    | s3*

    |

    |-----+-------+-------+--------+-------------------------- i

    | 1 2 3 4

    | *

    | s2 s4*

    |

    ||s(i)

    Замечание: строить график можно с помощью стандартных процедур вывода write/writeln или с использованием средств модуля CRT Турбо Паскаля (таких как процедура gotoxy, позиционирующая курсор на экране в нужную позицию).

    II. Варианты заданий

    вар.

    Задание

    1

    S = –1/2 + 2/(2*3*4) – 3/(2*3*4*5*6) + 4/(2*3*4*5*6*7*8) –

    –5/(2*3*4*5*6*7*8*9*10)

    2

    S = –x2/2 + x4/(3*4) – x6/(5*6) + x8/(7*8) – x10/(9*10)

    3

    S = -2/3 + 1 – 6/5 + 8/6 – 10/7

    4

    S = –3 +2 – 5/3 + 6/4 – 7/5

    5

    S = -x-1 + x-2/2 – x-3/(2*3) + x-4/(2*3*4) – x-5/(2*3*4*5)

    6

    S = –1 + ½ – (2*3)/6 + (2*3*4)/8 – (2*3*4*5)/10

    7

    S = - 1 + x/2 – x2/(2*4) + x3/(2*4*6) – x4/(2*4*6*8) + x5/(2*4*6*8*10)

    8

    S = 3 + 4*(1/(2*3*4) – 1/(4*5*6) + 1/(6*7*8) – 1/(8*9*10) +

    + 1/(10*11*12))

    9

    S = (16/5 - 4/239) – (16/(3*53) - 4/(3*2393)) + (16/(5*55) – 4/(5*2395)) –

    – (16/(7*57) – 4/(7*2397))

    10

    S = 6/3*(1 – 1/(3*3) + 1/(32*5) – 1/(33*7) + 1/(34*9))

    11

    S = –x + 1/2*(x3/3) – 1/2*3/4*(x5/5) + 1/2*3/4*5/6*(x7/7) –

    – 1/2*3/4*5/6*7/8(x9/9)

    Лабораторная работа № 5 Изучение условных операторов в Турбо Паскале

    Цель работы

    Получение навыков написания и анализа программ с разветвляющимися алгоритмами.

    I. Требования к выполнению работ

    Все бригады выполняют одни и те же упражнения, внося исправления в выданные программы таким образом, чтобы получался обозначенный в каждом задании результат. Всего упражнений четыре. Исходные модули соответствующих упражнениям программ TEST1.PAS (для задания 1), TEST2.PAS (для задания 2), TEST3.PAS (для задания 3), TEST4.PAS (для задания 4) студенты получают у преподавателя. Исходные (до исправлений) листинги этих программ приведены ниже.

    II. Задания

    1. Оператор Case

    Чему надо научиться при отладке этой программы:

    1. использованию нескольких констант выбора для одного оператора Case;

    2. использованию ELSE в операторе CASE.

    Что должна делать программа?

    Программа с новой строки задает вопрос и ждет ответа в виде символа в той же строке, где находится вопрос.

    1. В случае ввода символов Д, д, Y, y программа должна выводить с новой строки сообщение: Вы ответили 'Да'.

    2. В случае ввода символов Н, н, N, n программа должна выводить с новой строки сообщение: Вы ответили 'Нет'.

    3. В случае ввода символов, отличных от перечисленных в п. п. 1 и 2, программа должна выводить с новой строки сообщение:

    Вы ответили '▫' , но это недопустимый символ.

    введенный символ

    Как работает программа?

    Программа зациклена таким образом, что задает вопросы и обрабатывает ответы до тех пор, пока в ответ на очередной вопрос не будет нажата клавиша <Esc>.

    Что требуется сделать с текстом программы?

    1. Исправить синтаксические ошибки в программе.

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

    3. Исправить семантические ошибки, чтобы программа делала то, что положено (см. пункт "Что должна делать программа?").

    При этом надо исправить и операторы внутри конструкции CASE, и операторы, расположенные над конструкцией CASE (но не под конструкцией!).

    Program TEST1;

    USES

    CRT;

    const

    text : string=''; { Перевод ответа для вывода его на экран }

    reply: char=''; { Введенный ответ пользователя

    BEGIN

    ClrScr;

    repeat

    { Ввод ответа }

    Writeln;

    Writeln(' Ответьте Д/д/Y/y для ''Да'' или Н/н/N/n для ''Нет'': ');

    Read(reply);

    { Трансляция ответа }

    Case reply of

    Д:;

    д:;

    Y:;

    y:

    text:='''Да''';

    'Н':

    'н':

    'N':

    'n':

    text:='''Нет''';

    else

    if ord(reply)<32

    then

    text:='пустым символом';

    else

    text:='''+reply+'''+' , но это недопустимый символ';

    End;

    writeln(' Вы ответили ',text);

    reply:=readkey;

    until Ord(reply)=27;

    End.

    2. Вложенные операторы if

    Чему надо научиться при отладке этой программы:

    1. трассировке разветвляющихся программ;

    2. интерпретации вложенных операторов if .

    Что должна делать программа?

    1. С новой строки выводится вопрос в виде: x= и ожидается ввод значения x в той же строке, где находится вопрос.

    2. Определяется, к какому из 5 интервалов (см. график функции) принадлежит значение x.

    3. В соответствии с интервалом значения переменной x переменная y принимает значение или Y0, или Y1, или Y2, или Y3, или Y4.

    4. Значение переменной y выводится на экран со следующей строки в формате с фиксированной точкой (одна десятичная цифра после точки).

    Как работает программа?

    Программа зациклена таким образом, что задает вопросы и выдает ответы до тех пор, пока в ответ на очередной вопрос не будет нажата клавиша <Esc>.

    Что требуется сделать с текстом программы?

    1. Исправить синтаксические ошибки в программе.

    2. Запустить программу в отладочном режиме, заполнив окно Watch следующими выражениями:

    x

    x < X1

    x < X2

    x < X3

    x < X4

    y

    1. Проверить в отладочном режиме реакцию программы на различные значения X.

    2. Исправить семантические ошибки, чтобы программа делала и выводила то, что положено (см. пункт "Что должна делать программа?"). При этом в операторах IF надо исправлять лишь то, что расположено после THEN.

    3. Убедить преподавателя, что этот вариант программы работает правильно.

    4. Исправить текст программы так, чтобы в ней вместо вложенных операторов IF, в каждом из которых значение X сравнивается лишь с одной из границ интервала, использовались "невложенные" операторы IF, в каждом из которых значение X сравнивалось бы c обеими границами интервала.

    5. Убедить преподавателя, что и этот вариант программы работает правильно.

    Program TEST2;

    Uses

    Crt;

    Var

    x,

    y: real;

    Const

    Y0 = -2;

    X1 = -5; Y1 = -0.5;

    X2 = -2; Y2 = 1.5;

    X3 = 3; Y3 = 4;

    X4 = 7; Y4 = 6;

    Begin

    ClrScr;

    repeat

    { Ввод значения аргумента }

    writeln;

    writeln('x='); read(x);

    { Вычисление значения функции }

    if (x < X2)

    then { Слева от X2? }

    { Вычисление на интервале (-∞, X2) }

    if (x < X1)

    then { Слева от X1? }

    { Вычисление на интервале (-∞, X1) }

    y:= Y4;

    else

    { Вычисление на интервале [X1, X2) }

    y:= Y3;

    else

    { Вычисление на интервале [X2, +∞) }

    if (x < X4)

    then { Слева от X4? }

    { Вычисление на интервале [X2, X4) }

    if (x < X3)

    then { Слева от X3? }

    { Вычисление на интервале [X2, X3) }

    y:=Y1;

    else

    { Вычисление на интервале [X3, X4)}

    y:= Y2;

    else

    { Вычисление на интервале [X4, +∞) }

    y:= Y0;

    { Вывод значения функции }

    Writeln('y=',y);

    until Ord(readkey)=27;

    End.

    3. Составной оператор в операторе if

    Чему надо научиться при отладке этой программы:

    использованию составного оператора в операторе IF.

    Что должна делать программа?

    1. С новой строки выводится вопрос в виде x= и ожидается ввод значения x в той же строке, где находится вопрос.

    2. Определяется, к какому из 3 интервалов (см. график функции) принадлежит значение x .

    3. В соответствии с интервалом значения переменной x переменная принимает значение или 2, или 3, или 4 и со следующей строки на экран выводится сообщение вида:

    или ( при x<=X1 )

    Интервал (-,<Ц.Ц>] ; y=<Ц.Ц>

    или ( при X1<x<=X2 )

    Интервал (<Ц.Ц>,<Ц.Ц>] ; y=<Ц.Ц>

    или ( при x>X2 )

    Интервал (<Ц.Ц>,+) ; y=<Ц.Ц>,

    где запись <Ц.Ц> означает представление границы интервала или значения функции в виде числа с фиксированной точкой с одной цифрой в дробной части и одной - в целой.

    Как работает программа?

    Программа зациклена таким образом, что задает вопросы и выдает ответы до тех пор, пока в ответ на очередной вопрос не будет нажата клавиша <Esc>.

    Что требуется сделать с текстом программы?

    1. Исправить синтаксические ошибки в программе.

    2. Запустить программу в отладочном режиме, заполнив окно Watch следующими выражениями:

    x

    x < X1

    x < X2

    y

    1. Проверить в отладочном режиме реакцию программы на различные значения X.

    2. Исправить семантические ошибки, чтобы программа делала и выводила то, что положено (см. пункт "Что должна делать программа").

    3. Убедить преподавателя, что этот вариант программы работает правильно.

    4. Исправить текст программы так, чтобы в ней вместо вложенных операторов IF, в каждом из которых значение X сравнивается лишь с одной из границ интервала, использовались "невложенные" операторы IF, в каждом из которых значение X сравнивалось бы c обеими границами интервала.

    5. Убедить преподавателя, что и этот вариант программы работает правильно.

    Program TEST3;

    Uses

    Crt;

    Var

    x, { Аргумент }

    y:real; { Функция }

    Const

    x1 = -2.517, { Левая граница промежутка }

    x2 = 3.571; { Правая граница промежутка }

    Const

    l_br:char = ''; { Левая скобка }

    r_br:char = ''; { Правая скобка }

    Var

    l_int:string[6]; { Левая граница промежутка }

    r_int:string[6]; { Правая граница промежутка }

    Begin

    ClrScr;

    repeat

    { Ввод значения аргумента }

    writeln;

    writeln('x='); read(x);

    { Вычисление значения функции }

    if (x <= x1)

    then { Левее х1? }

    begin

    { Вычисление значения функции на (-∞, x1] }

    l_br:= '(';

    r_br:= ')';

    l_int:='+∞';

    str(x1:5, r_int);

    y:= 2;

    end;

    else

    if (x <= x2)

    then { Левее х2? }

    begin

    { Вычисление значения функции на (x1, x2] }

    l_br:= '(';

    r_br:= ')';

    str(x1:3, l_int);

    str(x2:3, r_int);

    y:= 3;

    end;

    else

    begin

    { Вычисление значения функции на (x2, +∞) }

    l_br:= '(';

    r_br:= ')';

    str(x2:5, l_int);

    r_int:='-∞';

    y:= 4;

    end;

    { Вывод результата }

    writeln('Интервал ',

    l_br, l_int:3,',', r_int:3, r_br,' ; y=',y:5);

    { Считывание клавиши для проверки на окончание}

    until Ord(readkey)=27;

    End.

    1. Последовательность операторов if

    Чему надо научиться при отладке этой программы:

    1. интерпретации вложенных операторов if ;

    2. выделению операторов, относящихся к ветвям "if" и "else" .

    Что должна делать программа?

    1. С новой строки выводится вопрос в виде x= и ожидается ввод значения x в той же строке, где находится вопрос.

    2. Определяется, к какому из интервалов (см. график функции) принадлежит значение x.

    3. В соответствии с интервалом значения переменной x переменная y вычисляется по соответствующей формуле.

    4. Значение переменной y выводится на экран со следующей строки в формате с фиксированной точкой (одна десятичная цифра после точки).

    Особенности выполнения задания

    1. Базовая функция на интервале [X2,+ ∞] получена путем переворота относительно оси X функции, подобной той, которая имеет место на интервале [-∞,X2].

    2. На интервале [X3,X5] базовая функция "опускается" вниз на Y35.

    Как работает программа?

    Программа зациклена таким образом, что задает вопросы и выдает ответы до тех пор, пока в ответ на очередной вопрос не будет нажата клавиша <Esc>.

    Что требуется сделать с текстом программы?

    1. Добавить в операторы IF в нужные по логике работы программы места операторные скобки BEGIN и END (удалять что-либо в программе или вставлять что-либо, отличное от BEGIN и END, категорически запрещено) .

    2. Запустить программу в отладочном режиме, заполнив окно Watch следующими выражениями:

    x

    x <= X1

    x < X2

    x >= X3

    x < X4

    x < X5

    y.

    1. Проверить в отладочном режиме реакцию программы на различные значения X.

    2. Убедить преподавателя, что этот вариант программы работает правильно.

    Program TEST4;

    Uses Crt;

    Var

    x, y : real;

    Const

    X1 = -3;

    X2 = 0;

    X3 = 3;

    X4 = 4;

    X5 = 5;

    B = -3;

    Y35 = 3;

    Begin

    ClrScr;

    Repeat

    { Ввод значения аргумента }

    Writeln;

    Write('x = '); Readln(x);

    { Вычисление значения функции }

    if (x < X2)

    then { Слева от X2? }

    { Вычисление на интервале (-∞, X2) }

    { по формуле для интервала (-∞, X1) }

    y:= -x + B;

    if (x >= X1)

    then { Нужна поправка? }

    { Вычисление на интервале [X1, X2) }

    y:= -y { Изменение знака }

    else

    { Вычисление на интервале [X2, +∞) }

    { по формуле для интервала (X2,X3] }

    y:=0.5*x;

    if (x >= X4)

    then { Справа от X4? }

    { Вычисление на интервале [X4, +∞) }

    y:= 4 - y;

    if ((x >= X3) and (x < X5)) {в интервале [X3,X5)? }

    then { Вычисление на интервале [X3,X5) }

    y:= y - Y35;

    { Вывод значения функции }

    Writeln(' y = ',y:6:1);

    until Ord(readkey)=27

    End.

    Лабораторная работа № 6 Создание и обработка массивов

    Цель работы

    Получение навыков обработки информации, представленной в виде массивов.

    I. Требования к выполнению задания:

    • можно использовать циклы и условные операторы;

    • нельзя использовать функции для работы со строками;

    • необходимо до минимума сократить число используемых вспомогательных массивов (по согласованию с преподавателем);

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

    • один или несколько подряд идущих пробелов рассматриваются как разделители слов (чисел), где слово - это непрерывная последовательность символов (отличных от пробела), а число - непрерывная последовательность цифр. Таким образом, массив символов надо рассматривать следующим образом:

    С трока № 1 Строка № 2 Строка № 3

    слово пробелы слово пробелы слово пробелы слово пробелы слово

    разделители слов

    а массив чисел надо рассматривать так:

    С трока № 1 Строка № 2 Строка № 3

    число пробелы число пробелы число пробелы число пробелы число

    разделители чисел

    • инициализация массивов производится или случайными числами (если элементы массива - числа), или значениями, вводимыми с клавиатуры (если элементы массива - символы);

    • в программе необходимо предусмотреть вывод исходного состояния заданного массива (массивов) и вывод результата в приемлемой для восприятия форме.

    II. Варианты заданий

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

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

    3. Написать программу, которая в двухмерном массиве символов переписывает все слова в обратном порядке.

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

    5. Написать программу для определения в прямоугольной матрице столбца с минимальной суммой положительных элементов.

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

    7. Написать программу нахождения в двухмерном массиве символов самой длинной непрерывной неубывающей последовательности положительных целых чи­сел.

    8. В двухмерном массиве содержатся только числа 0, 1 и 2. Напи­сать программу для упорядочивания элементов этого массива по возраста­нию за один проход по массиву. Не допускается использование вспомогательных массивов.

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

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

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

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

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

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

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

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

    17. Написать программу, которая в двух двухмерных массивах симво­лов находит самое длинное общее слово.

    18. Написать программу, которая для двух двухмерных массивов сим­волов находит множество всех слов, которые в этих массивах встречают­ся.

    19. Написать программу, которая в заданном двухмерном массиве сим­волов находит все пары слов, из которых одно является обращением (ин­версией) другого.

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

    21. Написать программу, которая в заданном двухмерном массиве сим­волов меняет местами соответствующие (по номеру) слова из первой и второй половин.

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

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

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

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

    26. Подсчитать число слов, у которых левая и правая половины одинаковые.

    27. Найти в двухмерном массиве символов сумму чисел в каждой строке.

    Лабораторная работа № 7 Использование множеств

    Цель работы

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

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

    1. Подсчитать количество различных цифр в десятичной записи натурального числа N (число выбрать произвольно). Вывести эти числа на экран.

    2. Напечатать в возрастающем порядке все цифры, не входящие в десятичную запись натурального числа N (число выбрать произвольно).

    3. Дан текст, состоящий из латинских букв. Текст заканчивается точкой. Напечатать все буквы, входящие в текст не менее двух раз.

    4. Дано предложение, состоящее из русских букв. Конец предложения – точка. Напечатать по одному разу все гласные буквы (а, е, и, о, у, ы, э, ю, я), не входящие в это предложение.

    5. Вывести на печать все цифры, не входящие в десятичную запись натурального числа N.

    6. Дана непустая последовательность слов из русских букв: между соседними словами – произвольное число пробелов или запятая, за последним словом – точка. Напечатать в алфавитном порядке все гласные буквы, которые входят в каждое слово.

    7. Дана непустая последовательность слов из русских букв: между соседними словами – произвольное число пробелов или запятая, за последним словом – точка. Напечатать все гласные буквы, которые не входят более чем в одно слово.

    8. Дана непустая последовательность слов из русских букв: между соседними словами – запятая, за последним словом – точка. Напечатать все звонкие согласные буквы (б, в, г, д, ж, з, л, м, н, р), которые входят хотя бы в два слова.

    9. Дана непустая последовательность слов из русских букв: между соседними словами – произвольное число пробелов или запятая, за последним словом – точка. Напечатать все глухие согласные буквы (с, т, ф, х, ц, ч, ш, щ), которые не входят ни в одно слово.

    10. Имеется две строки. Определить строку, содержащую максимальное количество упоминаний високосных лет. Найденные даты в найденной строке вывести на экран.

    11. Имеется три строки символов. Определить строку, содержащую минимальное число различных символов, не входящих в две другие строки. Для найденной строки вывести на экран эти различные символы.

    12. Имеется массив строк с программой на Паскале. Подсчитать, сколько в этой программе правильных идентификаторов и шестнадцатеричных констант. Вывести найденные идентификаторы и константы на экран.

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

    Лабораторная работа № 8 Использование записей и файлов

    Цель работы:

    • приобретение навыков представления таблиц в виде массивов записей и файлов;

    • приобретение навыков в обработке и поиске информации в массивах записей и файлах;

    • приобретение навыков в работе с файлами разных типов.

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

    1 Часть (записи)

    1 (2)

    В виде массива записей представлена информация об итогах сес­сии на 1 курсе. Сведения о каждом студенте представлены в следующем виде

    Форма документа

    Итоги экзаменационной сессии

    № п/п

    ФИО

    Пол

    № группы

    Результаты экзамена

    Математика

    Программирование

    История

    Необходимо написать программу, которая выполняет следующие действия:

    для варианта 1

    • выводит список студентов, которые учатся в определенной группе;

    • определяет и выводит на экран список студентов, имеющих задол­женность хоть по одному из трех предметов;

    для варианта 2

    • определяет и выводит на экран процент студентов, сдавших сессию только на 4 и 5;

    • определяет и выводит на экран список всех студентов в порядке убывания средней успеваемости.

    3 (4)

    В виде массива записей представлена информация о студентах различных факультетов. Сведения о каждом студенте представлены в следующем виде:

    Форма документа

    Информация о студенте

    п/п

    ФИО

    Пол

    Возраст

    Факультет

    Фимилия

    Имя

    Отчество

    Написать программу, которая выполняет следующие действия:

    для варианта 3

    • определяет и выводит на экран факультет, на котором наиболь­ший процент мужчин;

    • выводит список студентов определенного возраста;

    для варианта 4

    • определяет и выводит на экран самое распространенное мужское и женское имя;

    • определяет и выводит на экран список трех фамилий (в алфавитном порядке) тех студентов, возраст и отчество которых являются самыми распространенными.

    5 (6)

    В виде массива записей представлена информация о погоде в определенной местности.

    Форма документа

    Сводка погоды

    Номер записи

    Дата

    Температура

    Влажность

    Давление

    Год

    Месяц

    Число

    Написать программу, которая выполняет следующие действия:

    для варианта 5

    • выводит сводку погоды в определенный день;

    • определяет и выводит на экран годы максимума и минимума температур в определенный день;

    для варианта 6

    • определяет и выводит на экран среднюю температуру определенного месяца;

    • выводит на экран сводку погоды за определенный период.

    7 (8)

    В виде массива записей представлена информация об абонентах различных АТС.

    Форма документа

    Телефонная книга

    ФИО абонента

    Домашний адрес

    № телефона

    Фамилия

    Имя

    Отчество

    Улица

    № дома

    № квартиры

    Написать программу, которая выполняет следующие действия:

    для варианта 7

    • по номеру телефона выводит ФИО и адрес абонента;

    • выводит на экран номера и фамилии всех абонентов, проживающих в одном доме;

    для варианта 8

    • выводит номера телефонов всех абонентов, имеющих определенную фамилию;

    • выводит на экран абонентов определенной АТС.

    9 (10)

    В виде массива записей представлено расписание движения пригородных поездов.

    Форма документа

    Расписание движения пригородных поездов

    Номер поезда

    Пункт назначения

    Время отправления

    Время прибытия

    Примечание (раб. или празд. дни)

    Ч

    Мин

    Ч

    Мин

    Написать программу, которая выполняет следующие действия:

    для варианта 9

    • по номеру поезда выводит информацию о времени отправления и прибытия;

    • выводит на экран номера поездов, которые прибывают сразу после полуночи;

    для варианта 10

    • выводит номера поездов, которые направляются в определенный пункт назначения;

    • выводит на экран номера поездов, которые отправляются в определенный пункт назначения в утренние часы.

    11 (12)

    В виде массива записей представлен каталог строительных объектов.

    Форма документа

    Каталог строительных объектов

    Шифр объекта

    Наименование объекта

    Код СМУ

    Год вступления в эксплуатацию

    Сметная стоимость

    Район города

    Написать программу, которая выполняет следующие действия:

    для варианта 11

    • выводит информацию об объектах, которые вступят в эксплуатацию в этом году;

    • выводит на экран все объекты, строительством которых занято определенное СМУ;

    для варианта 12

    • выводит информацию об объектах, которые вступят в эксплуатацию в определенном районе города;

    • выводит на экран объекты с минимальной и максимальной сметной стоимостью.

    13 (14)

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

    Форма документа

    Амбулаторная карта

    № амб. карты

    ФИО

    Год рождения

    Пол

    Адрес

    Страховая компания

    Отметка о ФЛГ

    Отметка о прививках

    Написать программу, которая выполняет следующие действия:

    для варианта 13

    • определяет и выводит на экран фамилию самого пожилого пациента, который не сделал прививку;

    • определяет и выводит на экран список пациентов из одного дома, которые прошли ФЛГ;

    для варианта 14

    • определяет и выводит на экран всех женщин, у которых общая страховая компания (определяется пользователем);

    • определяет и выводит информацию о несовершеннолетних пациентах, которым необходимо сделать ФЛГ и прививки.

    15 (16)

    В виде массива записей представить информацию об абонентах библиотеки.

    Форма документа

    Информация об абоненте библиотеки

    № читат. билета

    ФИО

    Год рожд.

    Место работы (учебы)

    Дата возврата книг

    Кол-во выданных книг

    Отметка о пере-регист-рации

    Написать программу, которая выполняет следующие действия:

    для варианта 15

    • выводит список абонентов-должников, которые работают на конкретном предприятии;

    • определяет и выводит на экран среднее количество книг, которое берут абоненты определенной возрастной группы;

    для варианта 16

    • определяет и выводит на экран номера читательских билетов абонентов, у которых одинаковая фамилия;

    • выводит список абонентов, которые не прошли перерегистрацию.

    17 (18)

    В виде массива записей представлена информация о товарах на складе.

    Форма документа

    Товар на складе

    Наименование товара

    Кол-во на складе

    Требуем. кол-во

    Информация о покупателе

    Дата получения товара

    Стоимость товара

    Написать программу, которая выполняет следующие действия:

    для варианта 17

    • выводит список товаров, количество которых на складе необходимо пополнить;

    • выводит товары, которые заказал определенный покупатель;

    для варианта 18

    • выводит покупателей, которые не получили товар, несмотря на его наличие на складе;

    • определить покупателя, который сделал самый дорогой заказ.

    19 (20)

    В виде массива записей представлена информация об абитуриентах.

    Форма документа

    Анкета абитуриента

    № п/п

    ФИО

    Год рожде-ния

    Место-житель-ство

    Оценка вступ. экзаменов

    № спец.

    Проход. балл

    Матем.

    Физика

    Сочинение

    Написать программу, которая выполняет следующие действия:

    для варианта 19

    • выводит список абитуриентов, которые набрали необходимый проходной балл;

    • определяет средний возраст абитуриентов;

    для варианта 20

    • определяет процент иногородних абитуриентов;

    • выводит номера специальностей в порядке убывания «популярности».

    21 (22)

    В виде массива записей представлена информация о владельцах автомобилей.

    Форма документа

    Учетная карточка владельца автомобиля

    Поряд. №

    ФИО

    Знак ГАИ

    Марка автомобиля

    Дата последнего техосмотра

    Местожительство

    Фамил.

    Иниц.

    Улица

    № дома

    № кв.

    Написать программу, которая выполняет следующие действия:

    для варианта 21

    • выводит список автовладельцев, которые проживают в одном доме;

    • выводит список владельцев автомобиля «ОКА», которые не прошли техосмотр;

    для варианта 22

    • выводит марки автомобилей в порядке убывания «популярности»;

    • по знаку ГАИ выводит информацию о владельце.

    23 (24)

    В виде массива записей представлена ведомость на зарплату.

    Форма документа

    Ведомость на зарплату

    № п/п

    ФИО

    Долж-ность

    Оклад

    Число дней по бюлл.

    Аванс

    Налог 13%

    Зарплата за месяц

    Отметка о полу-чении

    Написать программу, которая выполняет следующие действия:

    для варианта 23

    • выводит список сотрудников, которые болели в этом месяце;

    • выводит среднюю зарплату сотрудников, определенной должности;

    для варианта 24

    • выводит список сотрудников, которые не получили зарплату;

    • выводит минимальную и максимальную зарплату.

    25 (26)

    В виде массива записей представлена информация о сотруднике.

    Форма документа

    Сведения о сотруднике

    Табельный номер

    ФИО

    Пол

    Год рождения

    Адрес

    Должность

    Стаж работы на предприятии

    Написать программу, которая выполняет следующие действия:

    для варианта 25

    • выводит список сотрудников, проживающих в одном доме;

    • определяет и выводит средний возраст сотрудников;

    для варианта 26

    • выводит список сотрудников, которые имеют стаж работы более 10 лет;

    • определяет и выводит в процентах количество мужчин и женщин.

    2 Часть (файлы)

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

    • как типизированного файла из записей;

    • как типизированного файла из символов;

    • как типизированного файла из строк;

    • как текстового файла.

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

    Лабораторная работа № 9 Изучение механизма передачи данных в процедуры

    Цель работы:

    • приобретение навыков в ручной трассировке (отладке) сложных программ;

    • приобретение навыков в анализе области видимости переменных в программе;

    • приобретение навыков в организации обмена данными между программой и подпрограммами.

    I. Требования к выполнения заданий

    В каждом варианте необходимо проанализировать программу, состоящую из основного блока и четырех подпрограмм – p1, p2, p3 и p4. И в основном блоке, и в вызываемых из него процедурах используются одноименные переменные – в разных вариантах это или a, b, c или u, v, w или p, q, r или x, y, z. Эти переменные в разных местах программы могут быть:

    • глобальной переменной;

    • локальной переменной процедуры;

    • формальным параметром процедуры.

    Целью анализа программы в каждом варианте являются определение (с учетом области видимости) и фиксация на бумаге текущих значений всех переменных после выполнения каждого оператора в основном блоке и в каждой из процедур. Внутри каждой из процедур обязательно должны отдельной строкой фиксироваться значения указанных переменных на момент входа в процедуру.

    II. Варианты заданий

    1 (2)

    program var1; program var2;

    var var

    a, a,

    b, b,

    c : integer; c : integer;

    procedure p1( a : integer; procedure p1(var b : integer );

    var b : integer ); var

    var a : integer; ¦ a ¦ b ¦ c ¦

    c : integer; ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=11; ------+---+---+---+

    a:=11; ------+---+---+---+ b:=12; ------+---+---+---+

    b:=12; ------+---+---+---+ c:=a+b; ------+---+---+---+

    c:=a+b; ------+---+---+---+ end; { p1 }

    end; { p1 }

    procedure p2( a : integer;

    procedure p2; var b : integer );

    var var

    c : integer; ¦ a ¦ b ¦ c ¦ c : integer; ¦ a ¦ b ¦ c ¦

    begin ------+---+---+---+ begin ------+---+---+---+

    a:=21; ------+---+---+---+ a:=21; ------+---+---+---+

    b:=22; ------+---+---+---+ b:=22; ------+---+---+---+

    c:=a+b; ------+---+---+---+ c:=a+b; ------+---+---+---+

    end; { p2 } end; { p2 }

    procedure p3(var b : integer ); procedure p3;

    ¦ a ¦ b ¦ c ¦ var

    begin ------+---+---+---+ c : integer; ¦ a ¦ b ¦ c ¦

    a:=31; ------+---+---+---+ begin ------+---+---+---+

    b:=32; ------+---+---+---+ a:=31; ------+---+---+---+

    c:=a+b; ------+---+---+---+ b:=32; ------+---+---+---+

    end; { p3 } c:=a+b; ------+---+---+---+

    end; { p3 }

    procedure p4(var b : integer );

    procedure p4(var b : integer );

    var ¦ a ¦ b ¦ c ¦

    a : integer; ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=41; ------+---+---+---+

    a:=41; ------+---+---+---+ b:=42; ------+---+---+---+

    b:=42; ------+---+---+---+ c:=a+b; ------+---+---+---+

    c:=a+b; ------+---+---+---+ end; { p4 }

    end; { p4 } ¦ a ¦ b ¦ c ¦

    ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=4; ------+---+---+---+

    a:=1; ------+---+---+---+ b:=5; ------+---+---+---+

    b:=2; ------+---+---+---+ c:=6; ------+---+---+---+

    c:=3; ------+---+---+---+ p1(a); ------+---+---+---+

    p1(a,c); ------+---+---+---+ p2(a,c); ------+---+---+---+

    p2; ------+---+---+---+ p3; ------+---+---+---+

    p3(a); ------+---+---+---+ p4(a) ------+---+---+---+

    p4(a) ------+---+---+---+ end. { var2 }

    end. { var1 }

    3 (4)

    program var3; program var4;

    var var

    a, u,

    b, v,

    c : integer; w : integer;

    procedure p1; procedure p1(var v : integer );

    var var

    c : integer; ¦ a ¦ b ¦ c ¦ u : integer; ¦ u ¦ v ¦ w ¦

    begin ------+---+---+---+ begin ------+---+---+---+

    a:=11; ------+---+---+---+ u:=11; ------+---+---+---+

    b:=12; ------+---+---+---+ v:=12; ------+---+---+---+

    c:=a+b; ------+---+---+---+ w:=u+v; ------+---+---+---+

    end; { p1 } end; { p1 }

    procedure p2(var b : integer ); procedure p2( u : integer;

    var var v : integer );

    a : integer; ¦ a ¦ b ¦ c ¦ var

    begin ------+---+---+---+ w : integer; ¦ u ¦ v ¦ w ¦

    a:=21; ------+---+---+---+ begin ------+---+---+---+

    b:=22; ------+---+---+---+ u:=21; ------+---+---+---+

    c:=a+b; ------+---+---+---+ v:=22; ------+---+---+---+

    end; { p2 } w:=u+v; ------+---+---+---+

    end; { p2 }

    procedure p3(var b : integer );

    ¦ a ¦ b ¦ c ¦ procedure p3;

    begin ------+---+---+---+ var

    a:=31; ------+---+---+---+ w : integer; ¦ u ¦ v ¦ w ¦

    b:=32; ------+---+---+---+ begin ------+---+---+---+

    c:=a+b; ------+---+---+---+ u:=31; ------+---+---+---+

    end; { p3 } v:=32; ------+---+---+---+

    w:=u+v; ------+---+---+---+

    procedure p4( a : integer; end; { p3 }

    var b : integer );

    var procedure p4(var v : integer );

    c : integer; ¦ a ¦ b ¦ c ¦ ¦ u ¦ v ¦ w ¦

    begin ------+---+---+---+ begin ------+---+---+---+

    a:=41; ------+---+---+---+ u:=41; ------+---+---+---+

    b:=42; ------+---+---+---+ v:=42; ------+---+---+---+

    c:=a+b; ------+---+---+---+ w:=u+v; ------+---+---+---+

    end; { p4 } end; { p4 }

    ¦ a ¦ b ¦ c ¦ ¦ u ¦ v ¦ w ¦

    begin ------+---+---+---+ begin ------+---+---+---+

    a:=3; ------+---+---+---+ u:=4; ------+---+---+---+

    b:=4; ------+---+---+---+ v:=5; ------+---+---+---+

    c:=5; ------+---+---+---+ w:=6; ------+---+---+---+

    p1; ------+---+---+---+ p1(u); ------+---+---+---+

    p2(a); ------+---+---+---+ p2(u,w); ------+---+---+---+

    p3(a); ------+---+---+---+ p3; ------+---+---+---+

    p4(a,c) ------+---+---+---+ p4(u) ------+---+---+---+

    end. { var3 } end. { var4 }

    5 (6)

    program var5; program var6;

    var var

    x, p,

    y, q,

    z : integer; r : integer;

    procedure p1; procedure p1( p : integer;

    var var q : integer );

    z : integer; ¦ x ¦ y ¦ z ¦ var

    begin ------+---+---+---+ r : integer; ¦ p ¦ q ¦ r ¦

    x:=11; ------+---+---+---+ begin ------+---+---+---+

    y:=12; ------+---+---+---+ p:=11; ------+---+---+---+

    z:=x+y; ------+---+---+---+ q:=12; ------+---+---+---+

    end; { p1 } r:=p+q; ------+---+---+---+

    end; { p1 }

    procedure p2(var y : integer );

    var procedure p2;

    x : integer; ¦ x ¦ y ¦ z ¦ var

    begin ------+---+---+---+ r : integer; ¦ p ¦ q ¦ r ¦

    x:=21; ------+---+---+---+ begin ------+---+---+---+

    y:=22; ------+---+---+---+ p:=21; ------+---+---+---+

    z:=x+y; ------+---+---+---+ q:=22; ------+---+---+---+

    end; { p2 } r:=p+q; ------+---+---+---+

    end; { p2 }

    procedure p3(var y : integer );

    ¦ x ¦ y ¦ z ¦ procedure p3(var q : integer );

    begin ------+---+---+---+ ¦ p ¦ q ¦ r ¦

    x:=31; ------+---+---+---+ begin ------+---+---+---+

    y:=32; ------+---+---+---+ p:=31; ------+---+---+---+

    z:=a+b; ------+---+---+---+ q:=32; ------+---+---+---+

    end; { p3 } r:=p+q; ------+---+---+---+

    end; { p3 }

    procedure p4( x : integer;

    var y : integer ); procedure p4(var q : integer );

    var

    z : integer; ¦ x ¦ y ¦ z ¦ var

    begin ------+---+---+---+ p : integer; ¦ p ¦ q ¦ r ¦

    x:=41; ------+---+---+---+ begin ------+---+---+---+

    y:=42; ------+---+---+---+ p:=41; ------+---+---+---+

    z:=x+y; ------+---+---+---+ q:=42; ------+---+---+---+

    end; { p4 } r:=p+q; ------+---+---+---+

    ¦ x ¦ y ¦ z ¦ end; { p4 }

    begin ------+---+---+---+ ¦ p ¦ q ¦ r ¦

    x:=3; ------+---+---+---+ begin ------+---+---+---+

    y:=4; ------+---+---+---+ p:=1; ------+---+---+---+

    z:=5; ------+---+---+---+ q:=2; ------+---+---+---+

    p1; ------+---+---+---+ r:=3; ------+---+---+---+

    p2(x); ------+---+---+---+ p1(p,r); ------+---+---+---+

    p3(x); ------+---+---+---+ p2; ------+---+---+---+

    p4(x,z) ------+---+---+---+ p3(p); ------+---+---+---+

    end. { var5 } p4(p) ------+---+---+---+

    end. { var6 }

    7 (8)

    program var7; program var8;

    var var

    a, a,

    b, b,

    c : integer; c : integer;

    procedure p1( a : integer; procedure p1(var b : integer );

    var b : integer ); var

    var a : integer; ¦ a ¦ b ¦ c ¦

    c : integer; ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=11; ------+---+---+---+

    a:=11; ------+---+---+---+ b:=12; ------+---+---+---+

    b:=12; ------+---+---+---+ c:=a+b; ------+---+---+---+

    c:=a+b; ------+---+---+---+ end; { p1 }

    end; { p1 }

    procedure p2( a : integer;

    procedure p2; var b : integer );

    var var

    c : integer; ¦ a ¦ b ¦ c ¦ c : integer; ¦ a ¦ b ¦ c ¦

    begin ------+---+---+---+ begin ------+---+---+---+

    a:=21; ------+---+---+---+ a:=21; ------+---+---+---+

    b:=22; ------+---+---+---+ b:=22; ------+---+---+---+

    c:=a+b; ------+---+---+---+ c:=a+b; ------+---+---+---+

    end; { p2 } end; { p2 }

    procedure p3(var b : integer ); procedure p3;

    ¦ a ¦ b ¦ c ¦ var

    begin ------+---+---+---+ c : integer; ¦ a ¦ b ¦ c ¦

    a:=31; ------+---+---+---+ begin ------+---+---+---+

    b:=32; ------+---+---+---+ a:=31; ------+---+---+---+

    c:=a+b; ------+---+---+---+ b:=32; ------+---+---+---+

    end; { p3 } c:=a+b; ------+---+---+---+

    end; { p3 }

    procedure p4(var b : integer );

    procedure p4(var b : integer );

    var ¦ a ¦ b ¦ c ¦

    a : integer; ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=41; ------+---+---+---+

    a:=41; ------+---+---+---+ b:=42; ------+---+---+---+

    b:=42; ------+---+---+---+ c:=a+b; ------+---+---+---+

    c:=a+b; ------+---+---+---+ end; { p4 }

    end; { p4 }

    ¦ a ¦ b ¦ c ¦

    ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=4; ------+---+---+---+

    a:=1; ------+---+---+---+ b:=5; ------+---+---+---+

    b:=2; ------+---+---+---+ c:=6; ------+---+---+---+

    c:=3; ------+---+---+---+ p1(a); ------+---+---+---+

    p1(a,c); ------+---+---+---+ p2(a,c); ------+---+---+---+

    p2; ------+---+---+---+ p3; ------+---+---+---+

    p3(a); ------+---+---+---+ p4(a) ------+---+---+---+

    p4(a) ------+---+---+---+ end. { var8 }

    end. { var7 }

    9 (10)

    program var9; program var10;

    var var

    a, a,

    b, b,

    c : integer; c : integer;

    procedure p1( a : integer; procedure p1(var b : integer );

    var b : integer ); var

    var a : integer; ¦ a ¦ b ¦ c ¦

    c : integer; ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=21; ------+---+---+---+

    a:=21; ------+---+---+---+ b:=22; ------+---+---+---+

    b:=22; ------+---+---+---+ c:=a+b; ------+---+---+---+

    c:=a+b; ------+---+---+---+ end; { p1 }

    end; { p1 }

    procedure p2( a : integer;

    procedure p2; var b : integer );

    var var

    c : integer; ¦ a ¦ b ¦ c ¦ c : integer; ¦ a ¦ b ¦ c ¦

    begin ------+---+---+---+ begin ------+---+---+---+

    a:=11; ------+---+---+---+ a:=11; ------+---+---+---+

    b:=12; ------+---+---+---+ b:=12; ------+---+---+---+

    c:=a+b; ------+---+---+---+ c:=a+b; ------+---+---+---+

    end; { p2 } end; { p2 }

    procedure p3(var b : integer ); procedure p3;

    ¦ a ¦ b ¦ c ¦ var

    begin ------+---+---+---+ c : integer; ¦ a ¦ b ¦ c ¦

    a:=31; ------+---+---+---+ begin ------+---+---+---+

    b:=32; ------+---+---+---+ a:=31; ------+---+---+---+

    c:=a+b; ------+---+---+---+ b:=32; ------+---+---+---+

    end; { p3 } c:=a+b; ------+---+---+---+

    end; { p3 }

    procedure p4(var b : integer );

    procedure p4(var b : integer );

    var ¦ a ¦ b ¦ c ¦

    a : integer; ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=41; ------+---+---+---+

    a:=41; ------+---+---+---+ b:=42; ------+---+---+---+

    b:=42; ------+---+---+---+ c:=a+b; ------+---+---+---+

    c:=a+b; ------+---+---+---+ end; { p4 }

    end; { p4 } ¦ a ¦ b ¦ c ¦

    ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=4; ------+---+---+---+

    a:=1; ------+---+---+---+ b:=5; ------+---+---+---+

    b:=2; ------+---+---+---+ c:=6; ------+---+---+---+

    c:=3; ------+---+---+---+ p1(a); ------+---+---+---+

    p1(a,c); ------+---+---+---+ p2(a,c); ------+---+---+---+

    p2; ------+---+---+---+ p3; ------+---+---+---+

    p3(a); ------+---+---+---+ p4(a) ------+---+---+---+

    p4(a) ------+---+---+---+ end. { var2 }

    end. { var1 }

    11 (12)

    program var11; program var12;

    var var

    a, u,

    b, v,

    c : integer; w : integer;

    procedure p1; procedure p1(var v : integer );

    var var

    c : integer; ¦ a ¦ b ¦ c ¦ u : integer; ¦ u ¦ v ¦ w ¦

    begin ------+---+---+---+ begin ------+---+---+---+

    a:=21; ------+---+---+---+ u:=21; ------+---+---+---+

    b:=22; ------+---+---+---+ v:=22; ------+---+---+---+

    c:=a+b; ------+---+---+---+ w:=u+v; ------+---+---+---+

    end; { p1 } end; { p1 }

    procedure p2(var b : integer ); procedure p2( u : integer;

    var var v : integer );

    a : integer; ¦ a ¦ b ¦ c ¦ var

    begin ------+---+---+---+ w : integer; ¦ u ¦ v ¦ w ¦

    a:=11; ------+---+---+---+ begin ------+---+---+---+

    b:=12; ------+---+---+---+ u:=11; ------+---+---+---+

    c:=a+b; ------+---+---+---+ v:=12; ------+---+---+---+

    end; { p2 } w:=u+v; ------+---+---+---+

    end; { p2 }

    procedure p3(var b : integer );

    ¦ a ¦ b ¦ c ¦ procedure p3;

    begin ------+---+---+---+ var

    a:=31; ------+---+---+---+ w : integer; ¦ u ¦ v ¦ w ¦

    b:=32; ------+---+---+---+ begin ------+---+---+---+

    c:=a+b; ------+---+---+---+ u:=31; ------+---+---+---+

    end; { p3 } v:=32; ------+---+---+---+

    w:=u+v; ------+---+---+---+

    procedure p4( a : integer; end; { p3 }

    var b : integer );

    var procedure p4(var v : integer );

    c : integer; ¦ a ¦ b ¦ c ¦ ¦ u ¦ v ¦ w ¦

    begin ------+---+---+---+ begin ------+---+---+---+

    a:=41; ------+---+---+---+ u:=41; ------+---+---+---+

    b:=42; ------+---+---+---+ v:=42; ------+---+---+---+

    c:=a+b; ------+---+---+---+ w:=u+v; ------+---+---+---+

    end; { p4 } end; { p4 }

    ¦ a ¦ b ¦ c ¦ ¦ u ¦ v ¦ w ¦

    begin ------+---+---+---+ begin ------+---+---+---+

    a:=3; ------+---+---+---+ u:=4; ------+---+---+---+

    b:=4; ------+---+---+---+ v:=5; ------+---+---+---+

    c:=5; ------+---+---+---+ w:=6; ------+---+---+---+

    p1; ------+---+---+---+ p1(u); ------+---+---+---+

    p2(a); ------+---+---+---+ p2(u,w); ------+---+---+---+

    p3(a); ------+---+---+---+ p3; ------+---+---+---+

    p4(a,c) ------+---+---+---+ p4(u) ------+---+---+---+

    end. { var3 } end. { var4 }

    13 (14)

    program var13; program var14;

    var var

    x, p,

    y, q,

    z : integer; r : integer;

    procedure p1; procedure p1( p : integer;

    var var q : integer );

    z : integer; ¦ x ¦ y ¦ z ¦ var

    begin ------+---+---+---+ r : integer; ¦ p ¦ q ¦ r ¦

    x:=21; ------+---+---+---+ begin ------+---+---+---+

    y:=22; ------+---+---+---+ p:=21; ------+---+---+---+

    z:=x+y; ------+---+---+---+ q:=22; ------+---+---+---+

    end; { p1 } r:=p+q; ------+---+---+---+

    end; { p1 }

    procedure p2(var y : integer );

    var procedure p2;

    x : integer; ¦ x ¦ y ¦ z ¦ var

    begin ------+---+---+---+ r : integer; ¦ p ¦ q ¦ r ¦

    x:=11; ------+---+---+---+ begin ------+---+---+---+

    y:=12; ------+---+---+---+ p:=11; ------+---+---+---+

    z:=x+y; ------+---+---+---+ q:=12; ------+---+---+---+

    end; { p2 } r:=p+q; ------+---+---+---+

    end; { p2 }

    procedure p3(var y : integer );

    ¦ x ¦ y ¦ z ¦ procedure p3(var q : integer );

    begin ------+---+---+---+ ¦ p ¦ q ¦ r ¦

    x:=31; ------+---+---+---+ begin ------+---+---+---+

    y:=32; ------+---+---+---+ p:=31; ------+---+---+---+

    z:=x+y; ------+---+---+---+ q:=32; ------+---+---+---+

    end; { p3 } r:=p+q; ------+---+---+---+

    end; { p3 }

    procedure p4( x : integer;

    var y : integer ); procedure p4(var q : integer );

    var

    z : integer; ¦ x ¦ y ¦ z ¦ var

    begin ------+---+---+---+ p : integer; ¦ p ¦ q ¦ r ¦

    x:=41; ------+---+---+---+ begin ------+---+---+---+

    y:=42; ------+---+---+---+ p:=41; ------+---+---+---+

    z:=x+y; ------+---+---+---+ q:=42; ------+---+---+---+

    end; { p4 } r:=p+q; ------+---+---+---+

    ¦ x ¦ y ¦ z ¦ end; { p4 }

    begin ------+---+---+---+ ¦ p ¦ q ¦ r ¦

    x:=3; ------+---+---+---+ begin ------+---+---+---+

    y:=4; ------+---+---+---+ p:=1; ------+---+---+---+

    z:=5; ------+---+---+---+ q:=2; ------+---+---+---+

    p1; ------+---+---+---+ r:=3; ------+---+---+---+

    p2(x); ------+---+---+---+ p1(p,r); ------+---+---+---+

    p3(x); ------+---+---+---+ p2; ------+---+---+---+

    p4(x,z) ------+---+---+---+ p3(p); ------+---+---+---+

    end. { var5 } p4(p) ------+---+---+---+

    end. { var6 }

    15 (16)

    program var15; program var16;

    var var

    a, a,

    b, b,

    c : integer; c : integer;

    procedure p1( a : integer; procedure p1(var b : integer );

    var b : integer ); var

    var a : integer; ¦ a ¦ b ¦ c ¦

    c : integer; ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=21; ------+---+---+---+

    a:=21; ------+---+---+---+ b:=22; ------+---+---+---+

    b:=22; ------+---+---+---+ c:=a+b; ------+---+---+---+

    c:=a+b; ------+---+---+---+ end; { p1 }

    end; { p1 }

    procedure p2( a : integer;

    procedure p2; var b : integer );

    var var

    c : integer; ¦ a ¦ b ¦ c ¦ c : integer; ¦ a ¦ b ¦ c ¦

    begin ------+---+---+---+ begin ------+---+---+---+

    a:=11; ------+---+---+---+ a:=11; ------+---+---+---+

    b:=12; ------+---+---+---+ b:=12; ------+---+---+---+

    c:=a+b; ------+---+---+---+ c:=a+b; ------+---+---+---+

    end; { p2 } end; { p2 }

    procedure p3(var b : integer ); procedure p3;

    ¦ a ¦ b ¦ c ¦ var

    begin ------+---+---+---+ c : integer; ¦ a ¦ b ¦ c ¦

    a:=31; ------+---+---+---+ begin ------+---+---+---+

    b:=32; ------+---+---+---+ a:=31; ------+---+---+---+

    c:=a+b; ------+---+---+---+ b:=32; ------+---+---+---+

    end; { p3 } c:=a+b; ------+---+---+---+

    end; { p3 }

    procedure p4(var b : integer );

    procedure p4(var b : integer );

    var ¦ a ¦ b ¦ c ¦

    a : integer; ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=41; ------+---+---+---+

    a:=41; ------+---+---+---+ b:=42; ------+---+---+---+

    b:=42; ------+---+---+---+ c:=a+b; ------+---+---+---+

    c:=a+b; ------+---+---+---+ end; { p4 }

    end; { p4 } ¦ a ¦ b ¦ c ¦

    ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=4; ------+---+---+---+

    a:=1; ------+---+---+---+ b:=5; ------+---+---+---+

    b:=2; ------+---+---+---+ c:=6; ------+---+---+---+

    c:=3; ------+---+---+---+ p1(a); ------+---+---+---+

    p1(a,c); ------+---+---+---+ p2(a,c); ------+---+---+---+

    p2; ------+---+---+---+ p3; ------+---+---+---+

    p3(a); ------+---+---+---+ p4(a) ------+---+---+---+

    p4(a) ------+---+---+---+ end. { var8 }

    end. { var7 }

    17 (18)

    program var17; program var18;

    var var

    a, a,

    b, b,

    c : integer; c : integer;

    procedure p1( a : integer; procedure p1(var b : integer );

    var b : integer ); var

    var a : integer; ¦ a ¦ b ¦ c ¦

    c : integer; ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=31; ------+---+---+---+

    a:=31; ------+---+---+---+ b:=32; ------+---+---+---+

    b:=32; ------+---+---+---+ c:=a+b; ------+---+---+---+

    c:=a+b; ------+---+---+---+ end; { p1 }

    end; { p1 }

    procedure p2( a : integer;

    procedure p2; var b : integer );

    var var

    c : integer; ¦ a ¦ b ¦ c ¦ c : integer; ¦ a ¦ b ¦ c ¦

    begin ------+---+---+---+ begin ------+---+---+---+

    a:=21; ------+---+---+---+ a:=21; ------+---+---+---+

    b:=22; ------+---+---+---+ b:=22; ------+---+---+---+

    c:=a+b; ------+---+---+---+ c:=a+b; ------+---+---+---+

    end; { p2 } end; { p2 }

    procedure p3(var b : integer ); procedure p3;

    ¦ a ¦ b ¦ c ¦ var

    begin ------+---+---+---+ c : integer; ¦ a ¦ b ¦ c ¦

    a:=11; ------+---+---+---+ begin ------+---+---+---+

    b:=12; ------+---+---+---+ a:=11; ------+---+---+---+

    c:=a+b; ------+---+---+---+ b:=12; ------+---+---+---+

    end; { p3 } c:=a+b; ------+---+---+---+

    end; { p3 }

    procedure p4(var b : integer );

    procedure p4(var b : integer );

    var ¦ a ¦ b ¦ c ¦

    a : integer; ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=41; ------+---+---+---+

    a:=41; ------+---+---+---+ b:=42; ------+---+---+---+

    b:=42; ------+---+---+---+ c:=a+b; ------+---+---+---+

    c:=a+b; ------+---+---+---+ end; { p4 }

    end; { p4 } ¦ a ¦ b ¦ c ¦

    ¦ a ¦ b ¦ c ¦ begin ------+---+---+---+

    begin ------+---+---+---+ a:=4; ------+---+---+---+

    a:=1; ------+---+---+---+ b:=5; ------+---+---+---+

    b:=2; ------+---+---+---+ c:=6; ------+---+---+---+

    c:=3; ------+---+---+---+ p1(a); ------+---+---+---+

    p1(a,c); ------+---+---+---+ p2(a,c); ------+---+---+---+

    p2; ------+---+---+---+ p3; ------+---+---+---+

    p3(a); ------+---+---+---+ p4(a) ------+---+---+---+

    p4(a) ------+---+---+---+ end. { var2 }

    end. { var1 }

    19 (20)

    program var19; program var20;

    var var

    a, u,

    b, v,

    c : integer; w : integer;

    procedure p1; procedure p1(var v : integer );

    var var

    c : integer; ¦ a ¦ b ¦ c ¦ u : integer; ¦ u ¦ v ¦ w ¦

    begin ------+---+---+---+ begin ------+---+---+---+

    a:=31; ------+---+---+---+ u:=31; ------+---+---+---+

    b:=32; ------+---+---+---+ v:=32; ------+---+---+---+

    c:=a+b; ------+---+---+---+ w:=u+v; ------+---+---+---+

    end; { p1 } end; { p1 }

    procedure p2(var b : integer ); procedure p2( u : integer;

    var var v : integer );

    a : integer; ¦ a ¦ b ¦ c ¦ var

    begin ------+---+---+---+ w : integer; ¦ u ¦ v ¦ w ¦

    a:=21; ------+---+---+---+ begin ------+---+---+---+

    b:=22; ------+---+---+---+ u:=21; ------+---+---+---+

    c:=a+b; ------+---+---+---+ v:=22; ------+---+---+---+

    end; { p2 } w:=u+v; ------+---+---+---+

    end; { p2 }

    procedure p3(var b : integer );

    ¦ a ¦ b ¦ c ¦ procedure p3;

    begin ------+---+---+---+ var

    a:=11; ------+---+---+---+ w : integer; ¦ u ¦ v ¦ w ¦

    b:=12; ------+---+---+---+ begin ------+---+---+---+

    c:=a+b; ------+---+---+---+ u:=11; ------+---+---+---+

    end; { p3 } v:=12; ------+---+---+---+

    w:=u+v; ------+---+---+---+

    procedure p4( a : integer; end; { p3 }

    var b : integer );

    var procedure p4(var v : integer );

    c : integer; ¦ a ¦ b ¦ c ¦ ¦ u ¦ v ¦ w ¦

    begin ------+---+---+---+ begin ------+---+---+---+

    a:=41; ------+---+---+---+ u:=41; ------+---+---+---+

    b:=42; ------+---+---+---+ v:=42; ------+---+---+---+

    c:=a+b; ------+---+---+---+ w:=u+v; ------+---+---+---+

    end; { p4 } end; { p4 }

    ¦ a ¦ b ¦ c ¦ ¦ u ¦ v ¦ w ¦

    begin ------+---+---+---+ begin ------+---+---+---+

    a:=3; ------+---+---+---+ u:=4; ------+---+---+---+

    b:=4; ------+---+---+---+ v:=5; ------+---+---+---+

    c:=5; ------+---+---+---+ w:=6; ------+---+---+---+

    p1; ------+---+---+---+ p1(u); ------+---+---+---+

    p2(a); ------+---+---+---+ p2(u,w); ------+---+---+---+

    p3(a); ------+---+---+---+ p3; ------+---+---+---+

    p4(a,c) ------+---+---+---+ p4(u) ------+---+---+---+

    end. { var3 } end. { var4 }

    21 (22)

    program var21; program var22;

    var var

    x, p,

    y, q,

    z : integer; r : integer;

    procedure p1; procedure p1( p : integer;

    var var q : integer );

    z : integer; ¦ x ¦ y ¦ z ¦ var

    begin ------+---+---+---+ r : integer; ¦ p ¦ q ¦ r ¦

    x:=31; ------+---+---+---+ begin ------+---+---+---+

    y:=32; ------+---+---+---+ p:=31; ------+---+---+---+

    z:=x+y; ------+---+---+---+ q:=32; ------+---+---+---+

    end; { p1 } r:=p+q; ------+---+---+---+

    end; { p1 }

    procedure p2(var y : integer );

    var procedure p2;

    x : integer; ¦ x ¦ y ¦ z ¦ var

    begin ------+---+---+---+ r : integer; ¦ p ¦ q ¦ r ¦

    x:=21; ------+---+---+---+ begin ------+---+---+---+

    y:=22; ------+---+---+---+ p:=21; ------+---+---+---+

    z:=x+y; ------+---+---+---+ q:=22; ------+---+---+---+

    end; { p2 } r:=p+q; ------+---+---+---+

    end; { p2 }

    procedure p3(var y : integer ); ¦ x ¦ y ¦ z ¦ procedure p3(var q : integer );

    begin ------+---+---+---+ ¦ p ¦ q ¦ r ¦

    x:=11; ------+---+---+---+ begin ------+---+---+---+

    y:=12; ------+---+---+---+ p:=11; ------+---+---+---+

    z:=x+y; ------+---+---+---+ q:=12; ------+---+---+---+

    end; { p3 } r:=p+q; ------+---+---+---+

    end; { p3 }

    procedure p4( x : integer;

    var y : integer ); procedure p4(var q : integer );

    var

    z : integer; ¦ x ¦ y ¦ z ¦ var

    begin ------+---+---+---+ p : integer; ¦ p ¦ q ¦ r ¦

    x:=41; ------+---+---+---+ begin ------+---+---+---+

    y:=42; ------+---+---+---+ p:=41; ------+---+---+---+

    z:=x+y; ------+---+---+---+ q:=42; ------+---+---+---+

    end; { p4 } r:=p+q; ------+---+---+---+

    ¦ x ¦ y ¦ z ¦ end; { p4 }

    begin ------+---+---+---+ ¦ p ¦ q ¦ r ¦

    x:=3; ------+---+---+---+ begin ------+---+---+---+

    y:=4; ------+---+---+---+ p:=1; ------+---+---+---+

    z:=5; ------+---+---+---+ q:=2; ------+---+---+---+

    p1; ------+---+---+---+ r:=3; ------+---+---+---+

    p2(x); ------+---+---+---+ p1(p,r); ------+---+---+---+

    p3(x); ------+---+---+---+ p2; ------+---+---+---+

    p4(x,z) ------+---+---+---+ p3(p); ------+---+---+---+

    end. { var5 } p4(p) ------+---+---+---+

    end. { var6 }

    Лабораторная работа № 10 Указатели и динамические переменные

    Цель работы:

    • приобретение навыков в работе с указателями;

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

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

    Часть 1. Простые ссылочные типы

    1.

    type

    rеf = ^integer;

    var

    p, q : ref;

    Пусть переменные р и q имеют значения, показанные на рисунке. Ответить на следующие вопросы:

    1. что является значением переменной р: ссылка на объект (переменную) целого типа или сам этот объект?

    Что обозначает р^:

    • ссылку на объект целого типа,

    • сам этот объект?

    • целое 5?

    Каковы типы р и p^?

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

    P^:= q^;

    if p = q then p:=nil else if p^ = q^ then q: = p;

    if p = q then q^ := 4;

    writeln(p^).

    2.

    type

    D = record

    a : boolean;

    b, c : ^rеа1

    end;

    var

    r : ^D.

    Пусть ссылочная переменная r имеет значение, показанное на рисунке.

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

    if r^.b <> nil

    then r^.с:=r^.b;

    r^.b^:=r^.с^ - 1.4;

    r^.а:= r^.b = r^.c.

    3.

    var

    p, q : ^integer;

    r : ^char;

    Какие из следующих операторов неправильные? Почему и как их исправить?

    1. p:=q;

    2. q:=r;

    3. p:=nil;

    4. r:=nil;

    5. q=p^;

    6. p^:=nil;

    7. r^:=p^;

    8. q^=ord(r^);

    9. if r<>nil then r^:=nil^,

    10. if q>nil then q^:=p^;

    11. if q = p then write(q);

    12. if q<>r then read(r^).

    4. Имеется программа

    program dynamic;

    var

    x : ^boolean;

    y : boolean;

    begin

    {A} new(x);

    {B} x^:=true; y:=not x^;

    {C} dispose(x);

    {D} writeln(y)

    end.

    Ответьте на следующие вопросы:

    1. какие переменные существуют в каждой из точек А, В, С и D и каковы их значения в эти моменты?

    2. почему объекты (переменные), создаваемые процедурой new и уничтожаемые процедурой dispose, называют динамическими? Почему им не дают имена?

    3. можно ли переменной х присвоить ссылку на переменную у? Можно ли с помощью процедуры dispose уничтожить переменные х и у?

    5.

    type

    A = ^char;

    В = record

    f1 : char;

    f2 : A

    end;

    var

    p : ^B;

    q : A.

    Нарисовать структуру значений (как в варианте 2) ссылочных переменных р и q после выполнения следующих операторов:

    new(q);

    q^:='7';

    new(p);

    p^.fl := succ(q^);

    p^.f2:=q.

    6. Найти и исправить ошибки в следующей программе. Нарисуйте графическое (как в варианте 2) представление в памяти.

    program errors;

    var

    a, b : ^integer;

    begin

    if a=nil

    then read(a);

    a^:=5;

    b:=nil;

    b^:=2;

    new(b); read(b^); writeln (b, b^);

    new(a); b:=a; dispose(a); b^:=4;

    end.

    7. Какие следующие описания являются недопустимыми? Если есть, то почему и как их исправить?

    type

    В =record

    p:real;

    q:C

    end;

    C = ^B.

    Нарисуйте графическое представление в памяти (как в варианте 2).

    8. Допустимы ли в языке Паскаль конструкции

    1. P^[2],

    2. q^ + 2,

    3. q^[2]^,

    4. r^^ ?

    Если да, то нарисуйте графическое представление в памяти (как в варианте 2) и приведите примеры использования.

    9. Описать переменную р (и, если надо, вспомогательные переменные) и выписать операторы, присваивающие ей указанные значения [см. рисунок (а-г)].

    10.

    type

    цепочка =^звено;

    звено = record

    элем : integer;

    след : цепочка

    end;

    var

    р : цепочка.

    Выписать операторы, которые преобразуют значение переменной р, показанное ниже на рисунке, часть а, к значениям, показанным на рисунке, часть 6, в и г. (Звенья, ставшие ненужными, надо уничтожить).

    11.

    type

    chain = ^elem;

    elem = record

    data : integer;

    link : chain

    end;

    var

    p, q : chain.

    Нарисовать структуру значения переменной р в памяти (как в варианте 2) после выполнения (независимого) следующих групп операторов:

    1. new(p); p^ data := 4; p^.link := nil;

    2. new(p); p^.data := 7; p^.link := p;

    3. new(q); q^ data := 2; q^.link := nil;

    new(p); p^.data := 1; p^.link := q;

    1. new(p); p^.data := 5; new(p^.link); p^.link^ := p^ .

    Часть 2. Стеки и списки

    Из задания ко второй части работы № 8 (файлы) надо взять ту часть, которая относилась к созданию и обработке типизированного файла из записей и выполнить её следующим образом:

    1. создать во внешней памяти типизированный файл из записей;

    2. перед обработкой информации из файла прочитать ее в оперативную память в связанную динамическую переменную (по указанию преподавателя):

      1. в стек (одно звено соответствует одной записи);

      2. в список (одно звено соответствует одной записи).

    3. обработать информацию из стека (списка) в соответствии с заданием.

    Все элементарные действия (заполнение файла, запись элемента в стек/список и т.п.) должны быть оформлены в виде подпрограмм, а все объявления и подпрограммы должны быть оформлены в виде модуля (модулей).

    Библиографический список

    1. Поляков Д.Б., Круглов И.Ю. Программирование в среде Турбо Паскаль (версия 5.5): Справ.-метод. пособие. М.: Изд-во МАИ, 1992. 576 с.

    2. Епанешников А.М., Епанешников В.А. Программирование в среде Turbo Pascal 7.0. М.: «ДИАЛОГ-МИФИ», 1997. 288 с.

    3. Немнюгин С.А. Turbo Pascal. Программирование на языке высокого уровня: Учебник для вузов. СПб.: Питер, 2003. 544 с.

    Содержание

    Лабораторная работа № 1 …………………………………………….

    1

    Лабораторная работа № 2 ……………………………………………

    2

    Лабораторная работа № 3 ……………………………………………

    4

    Лабораторная работа № 4 ……………………………………………

    7

    Лабораторная работа № 5 ……………………………………………

    9

    Лабораторная работа № 6 ……………………………………………

    19

    Лабораторная работа № 7 ……………………………………………

    22

    Лабораторная работа № 8 ……………………………………………

    24

    Лабораторная работа № 9 ……………………………………………

    31

    Лабораторная работа № 10 …………………………………………

    46

    Языки программирования

    Составители:

    К у з ь м и н Юрий Михайлович

    Е л е с и н а Светлана Ивановна

    Г р и н ч е н к о Наталья Николаевна

    Редактор Р.К. Мангутова

    Корректор С.В. Макушина

    Подписано к печати 20.08.05. Формат бумаги 60х84 1/16.

    Бумага газетная. Печать трафаретная. Усл. печ. л. 3.0

    Уч.-изд. л. 3,25. Тираж 50 экз. Заказ

    Рязанская государственная радиотехническая академия.

    390005, Рязань, ул. Гагарина, 59/1.

    Редакционно-издательский центр РГРТА.

  • Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]