Лабораторная
работа 2.
Оболочка
VirtualPascal.
Задание
Контрольные вопросы и задания
Несколько замечаний перед тем,
как приступить к выполнению задания...
- Все файлы создаваемых программ
необходимо сохранять на личном сетевом
диске в папке Z:\<фамилия>\PL,
созданной на лабораторной работе "Операционная
система Windows".
- В тексте задания имеются гиперссылки на
файлы, которые необходимо создать во
время выполнения задания. Гиперссылка на
файл выглядит как файл.
Создание соответствующего файла можно
выполнить одним из двух следующих
способов:
- Вызвать контекстное меню гиперссылки
(выполнение данной операций изучалось
в лабораторной работе "Операционная
система Windows") и выполнить команду Сохранить
объект как..., указав папку Z:\<фамилия>\PL
в качестве местоположения для
сохранения файла
- Перейти по гиперссылке и скопировать
текст файла из окна Internet-обозревателя
непосредственно в окно
интегрированной оболочки VirtualPascal (выполнение
данной операций изучалось в
лабораторной работе "Операционная
система Windows"), а затем в оболочке
сохранить файл под нужным именем.
- Обратите внимание: в этой и следующих
лабораторных работах после выполнения
задания необходимо ответить
на контрольные вопросы и выполнить
контрольные задания!
Задание необходимо сдать до 25
октября включительно.
- Изучите презентацию "Интегрированная
оболочка Turbo Pascal": PDF
4 цветных слайда
на листе (520 Кб).
- Запустите оболочку VirtualPascal с помощью
ярлыка, созданного при выполнении
лабораторной работы "Операционная
система Windows".
Создайте файл prog1.pas,
<текст в
угловых скобках>
(вместе с угловыми скобками!) замените на
соответствующие личные данные (например,
<группа> на ММ-181).
- Откомпилируйте программу, убедитесь,
что она не содержит синтаксических
ошибок.
- Выполните программу и просмотрите
результат выполнения. Сохраните файл.
- Создайте файл example.pas.
- Откомпилируйте программу, убедитесь,
что выдана синтаксическая ошибка Unknown
identifier (Неизвестный идентификатор).
Изучите справку по данной ошибке.
- Исправьте ошибку: с помощью
контекстного поиска (меню Search,
команда Replace) замените RedLn
на ReadLn.
Выполните программу и просмотрите
результат выполнения. Сохраните файл.
- Создайте файл prog2.pas,
<текст в
угловых скобках>
замените на соответствующие личные
данные.
- Откомпилируйте программу, убедитесь,
что выдана синтаксическая ошибка ";"
expected (Ожидается ";"). Изучите
справку по данной ошибке
- Исправьте ошибку: добавьте ;
в конец оператора R:=A
mod 3
- Откомпилируйте программу, убедитесь,
что выдана синтаксическая ошибка Error
in statement (Ошибка в операторе).
Изучите справку по данной ошибке.
Исправьте ошибку: удалите ;
в конце оператора WriteLn('Число
делится на 3 нацело.');
- Откомпилируйте программу, убедитесь,
что она не содержит синтаксических
ошибок. Выполните программу и
просмотрите результат выполнения.
Сохраните файл.
- Создайте файл prog3.pas,
<текст в
угловых скобках>
замените на соответствующие личные
данные.
- Откомпилируйте программу, убедитесь,
что выдана синтаксическая ошибка Unknown
identifier (Неизвестный идентификатор)
- Исправьте ошибку: замените
R2: Real; на
R2,R05:Real
- Откомпилируйте программу, убедитесь,
что она не содержит синтаксических
ошибок. Выполните программу, введя
следующие входные данные:
- Просмотрите и проанализируйте
результаты выполнения. Сохраните файл.
- Создайте файл prog4.pas,
<текст в
угловых скобках>
замените на соответствующие личные
данные.
- Откомпилируйте программу, убедитесь,
что выдана синтаксическая ошибка Type
mismatch (Несоответствие типов). Изучите
справку по данной ошибке
- Исправьте ошибку: замените
A, B, RMul, RDiv: Integer; на
A, B, RMul:Integer;
RDiv: Real
- Откомпилируйте программу, убедитесь,
что она не содержит синтаксических
ошибок. Выполните программу, введя
следующие входные данные:
- 10 и 2
- 10.0 и 2.0
- 10 и 0
- 1тысяча
и 2
- 1000000 и 200000
- Просмотрите и проанализируйте
результаты выполнения. Сохраните файл.
- Создайте файл prog5.pas,
<текст в
угловых скобках>
замените на соответствующие личные
данные.
- Откомпилируйте программу, убедитесь,
что выдана синтаксическая ошибка Type
mismatch (Несоответствие типов).
- Исправьте ошибку: замените
Triangle(A, B, C, R, S); на
Triangle(A, B, C, S, R);.
- Откомпилируйте программу, убедитесь,
что она не содержит синтаксических
ошибок. Выполните программу. При вводе
данных разделяйте их пробелами.
Просмотрите результат выполнения. Что
происходит, если в качестве длин сторон
треугольника вводятся данные, не
подчиняющиеся соотношению "сумма
длин двух любых сторон треугольника
должна быть больше длины третьей
стороны"? Сохраните файл.
- Создайте файл prog6.pas,
<текст в
угловых скобках>
замените на соответствующие личные
данные.
- Откомпилируйте программу, убедитесь,
что она не содержит синтаксических
ошибок. Выполните программу, убедитесь,
что имеет место ошибка времени
выполнения File not found (Файл не найден).
- Исправьте ошибку: замените
MyFile='prog15.pas'; на
MyFile='prog1.pas';.
- Выполните программу и просмотрите
результат выполнения. Сохраните файл.
- Выполните программу prog5.pas.
Вместо ввода исходных данных нажмите Ctrl+C
(нажмите клавишу Ctrl и, удерживая ее,
нажмите клавишу C). Убедитесь, что
произошло аварийное прерывание
выполнения программы и возврат в турбо-оболочку.
- В меню Compile выполните команду Destination.
Убедитесь, что в данной команде место
сохранения исполняемого файла указано Disk.
Откомпилируйте программу. Не закрывая
турбо-оболочку, убедитесь, что в папке PL
появился файл prog5.exe
и запустите его. Убедитесь, что работа
программы не претерпела каких-либо
изменений по сравнению с запуском
программы из турбо-оболочки (включая
аварийное прерывание выполнения).
Удалите файл prog5.exe.
- Создайте файлы p.pas,
u1.pas,
u2.pas.
Сделайте окно файла p.pas
активным. В меню Compile выполните
команду Make. В окне результатов
компиляции показано общее количество
откомпилированных строк программы (Total
lines), запишите это число. Выполните
программу.
Внесите изменения в программу u2.pas:
текст процедуры Proc2
должен иметь вид
procedure Proc2;
begin
WriteLn('Это процедура P2 из
модуля unit U2.');
end;
Сохраните файл. Сделайте окно файла
p.pas
активным. В меню Compile выполните
команду Make. Запишите общее количество
откомпилированных строк программы.
В меню Compile выполните команду Build.
Запишите общее количество
откомпилированных строк программы.
Целью данного задания является показ
разницы между режимами компиляции Make
и Build. Объясните, почему во всех
рассмотренных случаях получилось разное
общее количество откомпилированных
строк программы.
- Создайте файл shablon.pas,
<текст в
угловых скобках>
замените на соответствующие личные
данные. В дальнейшем, при выполнении
лабораторных работ, связанных с
разработкой программ, используйте
данный файл как шаблон исходного
текста новой программы.
- Создайте файл prog7.pas,
<текст в
угловых скобках>
замените на соответствующие личные
данные.
- Откомпилируйте программу, убедитесь,
что она не содержит синтаксических
ошибок. Выполните программу, убедитесь,
что имеет место алгоритмическая ошибка:
переменные A
и B не
меняются местами.
- Добавьте в окно Watches (Просмотр
значений переменных) переменные A,
B, X,
Y.
Измените размеры окон так, чтобы окна PROG7.PAS
и Watches (Просмотр значений переменных)
не перекрывались.
- Выполните программу по шагам.
Убедитесь, что во время выполнения
переменные X
и Y в окне
просмотра имели значения Unknown identifier,
а переменные A
и B
принимают неверные (по смыслу задачи)
значения.
- Выполните трассировку программы (Trace
into, выполнение по шагам с заходом в
подпрограммы). Убедитесь, что во время
выполнения переменные A,
B, X,
Y
принимают неверные (по смыслу задачи)
значения.
- Исправьте алгоритмическую ошибку:
После спецификации процедуры Exchange
добавьте текст:
var Tmp: Real;
Измените тело процедуры Exchange
следующим образом:
Tmp := X;
X := Y;
Y := Tmp;
- Добавьте в окно просмотра переменную Tmp.
Выполните трассировку программы.
Посмотрите, как во время выполнения
меняются значения переменных A,
B, X,
Y, Tmp.
Убедитесь, что программа выдает верные
результаты. Сохраните файл.
- * Как исправить ошибку
в алгоритме, не используя временную
переменную Tmp?
- Загрузите в окно редактирования файл stack.pas.
- Добавьте в рабочую область окно Call
stack (Стек вызовов). Измените размеры
окон так, чтобы окна stack.pas
и Call stack (Стек вызовов) не
перекрывались.
- Выполните трассировку программы.
Посмотрите, как во время выполнения
меняется стек вызовов подпрограмм.
- Удалите из окна просмотра все
переменные. Закройте окно Call stack (Стек
вызовов). Закройте окно Watches (Просмотр
значений переменных). Закройте окно stack.pas.
- В программе prog4.pas
установите точку останова на оператор RDiv
:= A/B;.
- Поместите в окно просмотра переменные
A, B,
RMul, RDiv.
- Выполните программу до точки останова.
- Выполните программу до конца. Удалите
точку останова. Завершите отладку
программы.
- Создайте файл prog8.pas,
<текст в
угловых скобках>
замените на соответствующие личные
данные.
- Расставьте точки останова на
операторы
F := F*i;
Sum := Sum + 1/i;
Fact := Factorial(N1);
- Получите список точек останова и с его
помощью перейдите к 3-й точке останова.
- Выполните программу для значений 4
и 4.
Завершите отладку программы.
- Покажите на примерах, как в оболочке VP
осуществляется:
запуск и выход из оболочки,
загрузка и сохранение файла,
вызов справки, в т.ч. по ключевому слову,
на которое указывает курсор,
контекстный поиск и замена текста,
компиляция и запуск программы,
просмотр результатов выполненной
программы,
переключение между окнами редактора,
каскад и черепица окон, изменение
размеров и перемещение окна.
- Объясните понятия: синтаксическая
ошибка, ошибка времени выполнения,
логическая ошибка.
- Пусть стек вызовов некоторой программы
в некоторый момент ее выполнения имеет
вид:
E(2, 5)
D
E(1, 3)
C
A
- Ответьте на следующие вопросы, ответ
обоснуйте (используйте текст программы
stack.pas):
- Каково имя программы?
- Какие из следующих утверждений верны:
a) Программа имеет в точности
четыре подпрограммы.
b) Программа имеет не менее четырех
подпрограмм.
c) В теле подпрограммы D
есть оператор вызова подпрограммы E.
d) Процедура E
может содержать оператор вызова
процедуры C.
- *
Напишите программу, стек вызовов
которой в некоторый момент ее
выполнения совпадал бы с вышеуказанным.
- Используя приемы отладки, ответьте на
следующие вопросы по программе prog8.pas:
- Каково значение переменной F
при вызове подпрограммы Factorial(14),
когда:
a) i равно 5
b) i равно 9
c) i равно 12 ?
- Каково значение переменной Sum
при вызове подпрограммы Harmonic(25),
когда:
a) i равно 5
b) i равно 10
c) i равно 20 ?
- Покажите на примерах, как в турбо-оболочке
осуществляется:
- добавление, редактирование и удаление
переменных в окне просмотра значений
переменных,
- пошаговое выполнение программ, в т.ч. с
пошаговым выполнением операторов в
вызываемых подпрограммах,
- выполнение программы до строки, на
которую указывает курсор,
- завершение отладки программы,
- создание, редактирование и удаление
точек останова программы.