Особенности отладки и компиляции программ, содержащих процедуры и функции 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Особенности отладки и компиляции программ, содержащих процедуры и функции



При пошаговой отладке программ, содержащих процедуры и функции, при нажатии клавиши F7 в строке, которая содержит вызов подпрограммы, мы переходим в начало (на слово begin) данной подпрограммы. При завершении работы подпрограммы – если подсвечена конечная строка end или exit. При следующем нажатии F7 мы возвращаемся в ту строку основной программы, с которой попали в подпрограмму. Постоянный заход в подпрограммы часто бывает не нужен. Для пошагового исполнения основной программы без захода в подпрограммы используйте клавишу F8.

В меню Debug предусмотрено специальное окно для просмотра последовательности вызываемых функций и процедур. Это окно открывается клавишами Ctrl+F4 или через пункт меню Debug/Call stack. В этом окне прослеживается текущее, то есть изменяющееся при пошаговой отладке, состояние стека вызова подпрограмм. В верхней строке – исполняемая в данный момент подпрограмма, в нижней – основная программа, в промежутке между ними – последовательность вызовов подпрограмм от основной программы до текущей программы.

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

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

Пункты этого меню позволяют выбрать расположение окон на экране, переключаться между окнами, закрывать окна. Пункт Tile разделяет экран на отдельные кусочки, в каждом из которых находится свое окно. Такой способ разбиения имеет смысл применить, если открыто 2-4 окна. Пункт Cascade накладывает окна одно на другое таким образом, что край нижних окон виден из-под верхних. При таком раскладе окон каждое из них имеет достаточно большой размер и легко может быть активизировано.

Переключение между окнами производится нажатием клавиш, указанными в меню. Для изменения размера и положения окна нужно нажатием клавиш Ctrl+F5 вызвать пункт Size/Move. Размеры окна изменяются клавишами перемещения курсора. Когда требуемый размер установлен, нужно нажать Enter для фиксации положения окна. Если Вы забудете нажать Enter, все действия будут блокированы. Для перемещения окна при нажатии клавиш управления курсором надо держать нажатой клавишу Shift.

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

По нажатию клавиш Alt+F9 компилируется программа или модуль, находившиеся в активном окне. Используемые этой программой модули должны быть предварительно откомпилированы.

Компиляцию проектов, состоящих из нескольких модулей, удобно производить, установив основной файл – это, как правило, файл с основной программой. Для этого выбирается пункт Primary file и вводится имя файла. Уничтожение этой записи производится путем выбора пункта Clear primary file. Если начальный файл установлен, компиляция или компиляция с исполнением происходит всегда так, как будто активным окном являлось окно основной программы. Это позволяет вносить изменения в отдельных модулях и сразу запускать компиляцию и исполнение всего проекта, не переключаясь специально к основной программе.

Для подключения к основной программе модулей компилятор ищет их прежде всего в рабочем каталоге, а затем в каталогах, указанных в строке Units окна настройки, которое появляется при выборе пункта меню Options/Directories.

При нажатии клавиши F9 (Make) прежде всего происходит компиляция начального файла, заданного в строке Primary file. Если эта строка пуста, компиляция начинается с активного окна. когда в процессе компиляции программы или модуля встречаются ссылки на другие модули, проверяется необходимость перекомпиляции подключаемых модулей. Проверка заключается в сверке изменений файла с текстом модуля на Паскале и откомпилированного модуля (по времени внесения последних изменений в файл). Если в текст были внесены изменения, данный модуль компилируется вновь. Если файл модуля с текстом не найден, берется откомпилированный файл без проверки. Эта опция компилятора оптимальна по затратам времени на компиляцию, так как компилируется только то, что нужно. Компиляция и запуск на исполнение, вызываемые клавишами Ctrl+F9, производит компиляцию по данной логике.

В ряде случаев нам необходима обязательная перекомпиляция всех файлов (Build). В частности, это необходимо, если мы изменили опции компиляции в меню Options/Compiler. Изменение опций компиляции через окно не прослеживается далее автоматически, то есть среда не определяет, откомпилирован файл с новыми или старыми опциями, и не производит автоматически перекомпиляцию. Для полной компиляции всех файлов вызывается пункт Build.

Пункт Target устанавливает, для какой платформы – реального режима, защищенного режима или Windows – должны компилироваться файлы.


Одномерные массивы

 

Занятие 1. Понятие массива. Одномерные массивы. Способы задания одномерных массивов

На прошлом занятии мы завершили изучение простых типов Turbo Pascal и сегодня приступаем к изучению структурированных. Их в Turbo Pascal три:

1. Массивы

2. Записи

3. Множества

Мы начнем знакомство с ними с массивов.

В математике, экономике, информатике часто используются различные наборы данных: последовательности чисел, списки фамилий, таблицы. Для обработки наборов однотипных данных мы введем понятие массива. Под массивом мы будем понимать структуру, отличительной особенностью которой является то, что все ее компоненты есть данные одного типа, и после упорядочения к любому из них можно получить доступ, указав его номер. Массивы нужны и тогда, когда для решения задачи необходимо хранение последовательности значений.

Определение. Массив – это совокупность объектов, состоящая из фиксированного упорядоченного числа элементов, имеющих один и тот же тип.

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

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

Для описания массива используется словосочетание array of (массив из) и имеет вид:

array [тип индекса] of <тип>

Тип индекса – любой порядковый номер, определяющий границы изменения значений индекса.

Описание массива задается следующим образом:

<имя типа> = array [тип индекса] of <тип данных>;

Например,

Program Name;

Const

m=50;

Type

mas=array [1..m] of integer; {массив из m целых чисел}

digit = array [0.. 9] of char; {массив десяти символов, имеющих порядковые номера от 0 до 9}

matrix = array [byte] of string; {массив 256 строк, пронумерованных с 0 до 255}

Var

massiv: mas;

m: matrix;

d: digit;

a: array [1..n] of real; {явное описание переменной типа массив}

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

Если несколько массивов имеют одинаковый тип индексов и одинаковый базовый тип, то можно при описании объединить массивы в один список. Например

Var

a, b, c: mas;

Такой записью мы объявили три массива вещественных чисел a, b, c, каждый из которых содержит по 50 элементов:

A[1], А[2],... A[50],_

В[1], В[2],... В[50],

С[1], С[2],... С[50].

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

Общий объем = количество ячеек памяти * объем одной ячейки

Например, если возьмем переменную

Var

M: digit;

то объем памяти, выделенный под хранение переменной m будет равен 10 байтам и выглядеть это будет приблизительно так:

 

Индекс элемента                    
m   *   = в о с е м ь

m[4] – элемент массива m, находящийся в ячейке с индексом 4 и равный символу ‘в’

Примечание. Не путайте понятия "индекс" и "тип индекса". Тип индекса используется только в разделе описания массива, а индекс указывается в разделе операторов для обозначения конкретных элементов массива. В качестве индекса может быть выражение, частным случаем которого является константа или переменная.

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

Способы задания одномерных массивов

Для ввода и вывода числовых значений массива используются циклы.

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

1) случайным образом,

2) вводом элементов с клавиатуры

Предположим, что мы будем работать с массивом целых чисел. Пусть нам достаточно иметь максимальное количество элементов равное 50. Процедура принимает параметр по ссылке массив Massiv заданного типа и целую переменную n, отвечающую за количество заполняемых ячеек массива. Также нам нужна будет локальная переменная i, которая будет выполнять функции параметра цикла и использоваться для указания номера, определяющего местоположение элемента в массиве.

1. Формирование одномерного массива случайным образом. Зададим значение каждого элемента результатом случайной функции Random(10). Заполнение массива зададим циклическим оператором for, в теле которого выполняется вычисление случайного числа функцией Random(10), после чего это значение присваивается очередному i-му элементу массива.

Procedure InsertMas1(Var massiv:mas; n:integer);

Var

i: integer;

Begin

Randomize;

for i:=1 to n do

massiv[i]:= Random(10);

End;

2. Формирование одномерного массива вводом элементов с клавиатуры.

Procedure InsertMas2(Var massiv:mas; n:integer);

Var

i: integer;

Begin

for i:=1 to n do

begin

write('Введите ',i,'-ый элемент массива ');

readln(massiv[i]);

end;

End;

Вывод массива на экран осуществляется следующим образом:

Procedure PrintMas(massiv:mas; n:integer);

Var

i: integer;

Begin

for i:=1 to n

Write(Massiv[i]:5);

End;

Задание. Составьте программу-шаблон, в которой содержались бы два возможных варианта ввода элементов массива, оформленных в виде процедур, и одна процедура вывода полученного массива на экран. Результат работы покажите учителю для оценки.

Теперь проверьте себя, попробовав ответить на вопросы:

1. Что понимается под массивом?

2. Как обозначить в программе элементы массива?

3. Какие операции разрешены над элементами массива?

4. Как организовать в программе ввод и вывод элементов массива?

5. Приведите примеры, где можно использовать массивы.

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

a) Var a: Array[1..20] of Integer;

b) Type Myarrray: Array[1..20]

Var b: Myarrray;

c) Var sd:Array[1..n] of Integer;

d) Var dd:Array[1] of integer;

7. Сколько элементов в каждом из следующих массивов

a) Var mb: Array[2..20] of Integer;

b) Type myarray1[2..20] of Integer;

myarray2[-5..5] of Integer;

Var aa: myarray1;

bb: myarray2;

Дополнительное задание. (на усмотрение учителя)

1. Организуйте ввод в массив и выдайте на экран следующие последовательности:

а) 1, 3, 5, 7,..., 131

б) список учеников вашего класса

2. Организуйте ввод чисел в массив с клавиатуры, а вывод элементов массива в столбик. Ввод и вывод организуйте в процедурах.

3. Дан произвольный массив N элементов. Организуйте вывод элементов массива на экран начиная с последнего элемента.

 



Поделиться:


Последнее изменение этой страницы: 2016-08-12; просмотров: 208; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.161.222 (0.045 с.)