Лабораторная работа 2.
Оболочка Lazarus.

horizontal rule

Задание

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

horizontal rule

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

  1. Все файлы создаваемых программ необходимо сохранять на личном сетевом диске в папке M:\PL, созданной на лабораторной работе "Операционная система Windows".
  2. В тексте задания имеются гиперссылки на файлы, которые необходимо создать во время выполнения задания. Гиперссылка на файл выглядит как файл. Создание соответствующего файла можно выполнить одним из двух следующих способов:
    1. Вызвать контекстное меню гиперссылки (выполнение данной операций изучалось в лабораторной работе "Операционная система Windows") и выполнить команду Сохранить объект как..., указав папку M:\PL в качестве местоположения для сохранения файла
    2. Перейти по гиперссылке и скопировать текст файла из окна Internet-обозревателя непосредственно в окно интегрированной оболочки Lazarus (выполнение данной операций изучалось в лабораторной работе "Операционная система Windows"), а затем в оболочке сохранить файл под нужным именем.
  3. Обратите внимание: в этой и следующих лабораторных работах после выполнения задания необходимо ответить на контрольные вопросы и выполнить контрольные задания!

Задание

Задание необходимо сдать до 22 сентября включительно. 

  1. Самостоятельно изучите понятия АЛГОРИТМ, ПРОГРАММА, КОДИРОВАНИЕ ПРОГРАММЫ, КОМПИЛИРОВАНИЕ ПРОГРАММЫ, ОТЛАДКА ПРОГРАММЫ, ПОШАГОВОЕ ВЫПОЛНЕНИЕ ПРОГРАММЫ (STEP OVER, TRACE INTO). 
  2. Запустите оболочку Lazarus с помощью ярлыка, созданного при выполнении лабораторной работы "Операционная система Windows"
  3. Выберите команду меню "Окружение" -> "Параметры окружения", откройте вкладку "Файл", в поле "Каталог для сборки пробных проектов" пропишите M:\PL/
  4. Выберите команду меню "Проект" -> "Создать проект" -> "Программа" или "Файл" -> "Создать..." -> "Программа". Текст программы project1.lpr поместите в открывшееся окно, <текст в угловых скобках> (вместе с угловыми скобками!) замените на соответствующие личные данные (например, <группа> на ММ-196). bulletОткомпилируйте программу, убедитесь, что она не содержит синтаксических ошибок.
    Меню "Запуск" -> "Собрать (Ctrl+F9)". bulletВыполните программу и просмотрите результат выполнения. Сохраните файл.
    Меню "Запуск" -> "Запуск (F9)".
  5. Создайте файл example.lpr. bulletОткомпилируйте программу, убедитесь, что выдана синтаксическая ошибка Unknown identifier (Неизвестный идентификатор). Изучите справку по данной ошибке. bulletИсправьте ошибку: с помощью контекстного поиска (меню "Поиск" -> "Заменить") замените RedLn на ReadLn. Выполните программу и просмотрите результат выполнения. Сохраните файл.
  6. Создайте файл project2.lpr, <текст в угловых скобках> замените на соответствующие личные данные. bulletОткомпилируйте программу, убедитесь, что выдана синтаксическая ошибка ";" expected (Ожидается ";"). Изучите справку по данной ошибке bulletИсправьте ошибку: добавьте ; в конец оператора R:=A mod 3 bulletОткомпилируйте программу, убедитесь, что выдана синтаксическая ошибка Error in statement (Ошибка в операторе). Изучите справку по данной ошибке. Исправьте ошибку: удалите ; в конце оператора WriteLn('Число делится на 3 нацело.'); bulletОткомпилируйте программу, убедитесь, что она не содержит синтаксических ошибок. Выполните программу и просмотрите результат выполнения. Сохраните файл.
  7. Создайте файл project3.lpr, <текст в угловых скобках> замените на соответствующие личные данные. bulletОткомпилируйте программу, убедитесь, что выдана синтаксическая ошибка Unknown identifier (Неизвестный идентификатор) bulletИсправьте ошибку: замените
    R2: Real; на
    R2,R05:Real
    bulletОткомпилируйте программу, убедитесь, что она не содержит синтаксических ошибок. Выполните программу, введя следующие входные данные: bullet4 bullet-4 bullet4.0 bullet-4.0 bulletfour bulletПросмотрите и проанализируйте результаты выполнения. Сохраните файл.
  8. Создайте файл project4.lpr, <текст в угловых скобках> замените на соответствующие личные данные. bulletОткомпилируйте программу, убедитесь, что выдана синтаксическая ошибка Type mismatch (Несоответствие типов). Изучите справку по данной ошибке bulletИсправьте ошибку: замените
    A, B, RMul, RDiv: Integer;
    на
    A, B, RMul:Integer;
    RDiv: Real
    bulletОткомпилируйте программу, убедитесь, что она не содержит синтаксических ошибок. Выполните программу, введя следующие входные данные: bullet10 и 2 bullet10.0 и 2.0 bullet10 и 0 bullet1тысяча и 2 bullet1000000 и 200000 bulletПросмотрите и проанализируйте результаты выполнения. Сохраните файл.
  9. Создайте файл project5.lpr, <текст в угловых скобках> замените на соответствующие личные данные. bulletОткомпилируйте программу, убедитесь, что выдана синтаксическая ошибка Type mismatch (Несоответствие типов). bulletИсправьте ошибку: замените
    Triangle(A, B, C, R, S);
    на
    Triangle(A, B, C, S, R);
    . bulletОткомпилируйте программу, убедитесь, что она не содержит синтаксических ошибок. Выполните программу. При вводе данных разделяйте их пробелами. Просмотрите результат выполнения. Что происходит, если в качестве длин сторон треугольника вводятся данные, не подчиняющиеся соотношению "сумма длин двух любых сторон треугольника должна быть больше длины третьей стороны"? Сохраните файл.
  10. Создайте файл project6.lpr, <текст в угловых скобках> замените на соответствующие личные данные. bulletОткомпилируйте программу, убедитесь, что она не содержит синтаксических ошибок. Выполните программу, убедитесь, что имеет место ошибка времени выполнения File not found (Файл не найден). bulletИсправьте ошибку: замените
    MyFile='project15.dpr'; на
    MyFile='project1.dpr';
    . bulletВыполните программу и просмотрите результат выполнения. Сохраните файл.
  11. Выполните программу project5.lpr. Вместо ввода исходных данных нажмите Ctrl+C (нажмите клавишу Ctrl и, удерживая ее, нажмите клавишу C). Убедитесь, что произошло аварийное прерывание выполнения программы и возврат в турбо-оболочку.
  12. Создайте файлы p.lpr, u1.pas, u2.pas (меню "Файл" -> "Создать модуль"). Сделайте окно файла p.pas активным. В меню "Запуск" выполните команду "Собрать все". 
    Внесите изменения в программу u2.pas: текст процедуры Proc2 должен иметь вид
    procedure Proc2;
    begin
        WriteLn('Это процедура P2 из модуля unit U2.');
    end;
    Сохраните файл. Сделайте окно файла p.lpr активным. В меню "Запуск" выполните команду "Собрать все".
  13. Создайте файл project7.lpr, <текст в угловых скобках> замените на соответствующие личные данные. bulletОткомпилируйте программу, убедитесь, что она не содержит синтаксических ошибок. Выполните программу, убедитесь, что имеет место алгоритмическая ошибка: переменные A и B не меняются местами. bulletДобавьте в окно "Окно наблюдений" переменные A, B, X, Y. Измените размеры окон так, чтобы окна PROJECT7.LPR и "Окно наблюдений" не перекрывались.
    Меню "Вид" -> "Окна отладки" -> "Окно наблюдений" bulletВыполните программу по шагам. Убедитесь, что во время выполнения переменные X и Y в окне просмотра имели значения Unknown identifier, а переменные A и B принимают неверные (по смыслу задачи) значения.
    Меню "Запуск" -> "Шаг в обход" (F8) bulletВыполните трассировку программы (Trace into, выполнение по шагам с заходом в подпрограммы). Убедитесь, что во время выполнения переменные A, B, X, Y принимают неверные (по смыслу задачи) значения.
    Меню "Запуск" -> "Шаг со входом" (F7) bulletИсправьте алгоритмическую ошибку:
    После спецификации процедуры Exchange добавьте текст:
    var Tmp: Real;
    Измените тело процедуры Exchange следующим образом:
    Tmp := X;
    X := Y;
    Y := Tmp;
    bulletДобавьте в окно просмотра переменную Tmp. Выполните трассировку программы. Посмотрите, как во время выполнения меняются значения переменных A, B, X, Y, Tmp. Убедитесь, что программа выдает верные результаты. Сохраните файл. bullet* Как исправить ошибку в алгоритме, не используя временную переменную Tmp?
  14. В программе project4.lpr установите точку останова на оператор RDiv := A/B;.
    Меню "Запуск" -> "Добавить точки останова" (F5) bulletПоместите в окно просмотра переменные A, B, RMul, RDiv. bulletВыполните программу до точки останова. bulletВыполните программу до конца. Удалите точку останова. Завершите отладку программы.
    Меню "Запуск" -> "Останов" (Ctrl+F2)
  15. Создайте файл project8.lpr, <текст в угловых скобках> замените на соответствующие личные данные. bulletРасставьте точки останова на операторы
    F := F*i;
    Sum := Sum + 1/i;
    Fact := Factorial(N1);
    bulletВыполните программу для значений 4 и 4. Завершите отладку программы.

     

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

  1. Покажите на примерах, как в оболочке Lazarus осуществляется:
    запуск и выход из оболочки,
    загрузка и сохранение файла,
    вызов справки, в т.ч. по ключевому слову, на которое указывает курсор,
    контекстный поиск и замена текста,
    компиляция и запуск программы.
  2. Объясните понятия: синтаксическая ошибка, ошибка времени выполнения, логическая ошибка.
  3. Используя приемы отладки, ответьте на следующие вопросы по программе project8.lpr: bulletКаково значение переменной F при вызове подпрограммы Factorial(14), когда:
    a) i равно 5
    b)
    i равно 9
    c) i равно 12 ? bulletКаково значение переменной Sum при вызове подпрограммы Harmonic(25), когда:
    a) i равно 5
    b) i равно 10
    c) i равно 20 ?
  4. Покажите на примерах, как в оболочке Lazarus осуществляется: bulletдобавление, редактирование и удаление переменных в окне просмотра значений переменных, bulletпошаговое выполнение программ, в т.ч. с пошаговым выполнением операторов в вызываемых подпрограммах, bulletвыполнение программы до строки, на которую указывает курсор, bulletзавершение отладки программы, bulletсоздание, редактирование и удаление точек останова программы.