Программирование с использованием массивов

Лабораторная работа № 9

ОСНОВЫ ПРОГРАММИРОВАНИЯ В СИСТЕМЕ

TURBO PASCAL.

РАБОТА С ГЛАВНЫМ МЕНЮ СИСТЕМЫ.

ПРОГРАММИРОВАНИЕ С ИСПОЛЬЗОВАНИЕМ МАССИВОВ

Цель:

Изучить команды режима DEBUG среды Turbo Pascal версии 7.0. Усвоить правила работы с переменными типа массив языка программирования Pascal. Приобрести дальнейшие навыки по отладке программ.

Общие сведения

Меню опции DEBUG

BREAKPOINTS. Эта опция позволяет просмотреть все контрольные точки и при необходимости удалить, переместить любую контрольную точку или задать условия ее работы. В диалоговом oкне опции приводится список всех контрольных точек с указанием имени файла (колонка Breakpoints list), номера строки в этом файле (колонка Line #], с ко­торой, связана контрольная точка, условия, при котором срабатывает останов программы в этой точке (колонка Condition), и количества проходов (колонка Pass], в течение которых ос­танов не происходит. Цветным указателем выделяется текущая контрольная точка.

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

С помощью командного поля Edit можно отредактировать текущую точку, т.е. установить новые ее параметры (файл, номер строки, условие и количество проходов). Задав новый файл и/или номер строки, можно переместить точку на новое место. Командное поле Delete ис­пользуется для удаления текущей точки, а поле Clear all — для удаления всех контрольных точек. С помощью поля View можно загрузить в окно редактора и установишь его содержимое так, чтобы увидетъ соответствующую контрольную точку.

CALL STACK. Делает активным окно программного стека. В этом окне содержатся все вызовы процедур и функций. Внизу стека находится PROCRAM, т.е. имя Вашей программы, в вершине стека - текущая процедура (функция). Каждое новое обращение к процедуре (функции) отображается в этом окна в виде имени подпрограммы и списка параметров вызова. Эта опция вызывается из редактора командой Ctrl – F3.

REGISTER. Делает активным окно регистров. В этом окне отображается текущее состояние всех регистров микропроцессора ПК.

WATCH. Делает активным окно отладки.

OUTPUT. Делает активным окно программы.

USER SCREEN. Делает активным окно программы и распахивает его на весь экран. Вызывается из редактора командой Alt-F5.

EVALUATE/MODIFY. Эта опция дает возможность в процессе отладки просмотреть со­держимое любой переменной или найти значение любого выражения. При необходимости можно с ее помощью установить новое значение любой переменной. При обращении к ней на экране разворачивается диалоговое окно, содержащее три поля: EXPRESSION (выражение]. RESULT {результат) и NEW VALUE {новое значение).

В первом поле следует ввести имя любой переменной или некоторое выражение. Сразу после того, как Bы нажмете Enter, в поле RESULT появится соответствующее значение или сообщение Unknown identifier {неопределенный идентификатор), если такая переменная не определена в Вашей программе. К моменту вызова опции программа должна находиться в режиме отладки, и противном случае это сообщение будет даваться для любых переменных и выражений с их участием.

Если Вы запросили значение переменной, Вы можете перевести курсор в нижнее поле NEW VALUE и установить новое значение переменной - это значение будет немедленно передано в программу.

При обращении к опции среда анализирует ближайшее окружение курсора в активном окне редактора и, если это возможно, выделяет идентификатор или константу, на которую указывает курсор. Выделенное автоматически переносится в поле EXPRESSION и предлагается в виде вычисляемого выражения. Таким образом, если перед вызовом этой опции установить курсор на интересующий Вас идентификатор, останется лишь нажать на Enter, чтобы тут же получить его значение в поле RESULT. Если прелагаемый идентификатор Вас не устраивает, можно его отредактировать или ввести новый. Для ввода нового нажмите на любую алфавитноцифровую клавишу, и предлагаемый в окне идентификатор исчезнет, заменившись вновь введенным символом. Для перехода к редактированию предлагаемого идентификатора следует сразу же после появления окна нажать Ноmе или End, затем перевести курсор к нужному месту идентификатора и отредактировать его с использованием клавиш Ins, Del и Backspace. Наконец, если сразу после вызова опции нажать End, а затем - клавишу перевода курсора вправо, появившийся в поле EXPRESSION идентификатор дополнится символом, расположенным справа от него в тексте программы. Теперь при каждом нажатии на клавишу перевода курсора вправо очередной символ из текста программы будет копироваться в поле EXPRESSION. Описанная возможность существенно облегчает ввод длинных выражений и составных идентификаторов.

Вы можете ввести (и вычислить) выражения с участием констант и переменных из Вашей программы, а также некоторых стандартных функций. Выражения составляются по правилам формирования выражений Турбо Паскаля, причем тип выражения может быть любым стан­дартным или определенным в программе типом. Фактически, единственным ограничением на выражения является то, что в них нельзя использовать вызовы нестандартных функций (можно использовать только следующие предварительно определенные функции и константы: АВS, ADDR, CHR, DSEG, НI, IORESULT, LENGTH, LO, MAXAVAIL, MEMAVAIL, ODD, OFS, ORD, PRED, PTR, ROUND, SEG, SIZEOF, SPTR, SSEG, SUCC, SWAP, TRUNC, а также массивы MEM, MEMW и MEML).

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

МеmL[$40:0], h

выдаст содержимое четырех байт оперативной памяти в шестнадцатеричном формате.

Допускаются следующие ключи:

С - формат CHAR (символьный);

S - формат STRING (строковый);

D - формат целых десятичных чисел;

$, Н или Х - шестнадцатеричный формат;

Fn - формат REAL (вещественный); число n определяет количество значащих цифр в выводимом результате;

М - формат копии памяти: выводится содержимое переменной побайтно, начиная с младшего байта, в шестнадцатеричном формате; если ключ указан для выражения, он игно­рируется;

Р - формат POINTER (указатель); результат выводится в видеPRT(SEG,OFS), например, Ptr($3EA1,$20);

R - формат RECORD (запись); выводится и круглых скобках список полой с указанием их значений, например: (X:1;Y:10;Z:5).

Перед ключем формата можно указать целое число, которое трактуется как коэффициент повторения. Если, например, в поле EXPRESSION содержится

UserList(0), 4D

то в качестве результата будет выдано в формате целых десятичных чисел значение четырех последовательных элементов массива UserList, начиная с элемента 0, т.е. UserListf[0], UserList[1] и т.д. Коэффициент повторения относится только к переменным (по отношению к выраже­ниям он игнорируется) и его можно указывать без ключа формата. Если, например,

var

UserList : array [0..20] of integer;

то обращения

UserList [0], 4D

UserList [0], 4

дадут идентичные результаты.

Выражения в поле EXPRESSION можно задавать многократно, можно использовать также ранее введенные выражения из протокола опции. Для выхода из диалога используйте клавишу Esc или поля Саncel. Опцию можно вызвать непосредственно из редактора командой Ctrl-F4. Отметим, что эта опция может использоваться как встроенный в Турбо Паскаль калькулятор

ADD WATCH. С помощью этой опции можно указать, отладчику те переменные и/или выражении, за изменением значений которых Bы хотели бы наблюдать при отладке про­граммы. Указанные переменные и выражения вместе с их текущими значениями будут постоянно содержаться в окне наблюдения, доступ к которому возможен с помощью клавиши F6. Если Вы сделаете активным это окно, Вы сможете перемещаться в нем, вызывая при необходимости «прокрутку» его содержимого. Таким образом можно наблюдать за произвольным количеством переменных и выражений.

Опцию можно вызвать непосредственно из редактора командой Ctrl - F7. При этом справедливо все сказанное выше относительно вызова опции DERUG/EVALUATE/MODIFY, т.е. выделение идентификатора, его редактирование и дополнение, использование коэффициента повторения и ключей формата. Сразу после добавления отслеживаемого выражения активизируется окно наблюдения.

ADD BREAKPOINT. С помощью этой опции меню DEBUG Вы можете установить в текущей строке контрольную точку. Текущая строка - это строка с курсором в окне редактора. Если для нее установлена контрольная точка, строка выделяется цветом (яркостью). В программе можно установить произвольное количество контрольных точек. После запуска программы с установленными контрольными точками (точкой) отладчик прекратит исполнение программы перед выполнением того оператора, который содержится и первой (по логике работы программы) контрольной точке. При этом на экране появится окно редактора с контрольной точкой и среда перейдет к режиму отладки программы. Если контрольная точка задана для строки, не содержащей исполняемого оператора (например, для строки со словом BEGIN), программа остановится перед первых после этой строки исполняемым оператором. Останов в контрольной точке можно сделать условным. Однажды установленная контрольная точка действует на каждое очередное обращение к соответствующей строке программы.

В диалоговом окне опции поле Condition задает условие останова. Это может быть про­извольное логическое выражение с использованием любых переменных, констант, вызовов функций. Если к моменту исполнения оператора с контрольной точкой это выражение имеет значение TRUE, произойдет останов прогона и среда перейдет к режиму отладки. Поле Pass count указывает количество обращений к оператору с контрольной точкой, после которого произойдет останов.

С помощью команды Ctrl-F8 контрольную точку можно установить/снять непосредст­венно из режима редактирования.

Программирование с использованием массивов

Массив — это структурированный тип данных, состоящий из фиксированного числа элементов одного типа. Тип элементов массива называется базовым. Число элементов массива фиксируется при описании и в процессе выполнения программы не меняется.

Доступ к элементу массива реализуется указателем имени массива и в квадратных скобках индекса. Индексы элементов массива это выражения любого скалярного типа кроме вещественного.

Определить массивы можно двумя способами:

1. Var

имя массива : array [тип индексов] of тип элементов;

2. Type

имя типа = array [тип индекса] of тип элементов;

Var

имя массива : имя типа;

Тип индекса (это тип-диапазон) определяет границы изменения значений индекса. Если задан один индекс, то массив называется одномерным, если два – двумерным, если n – n-мерным. Одномерные массивы используются для представления векторов, двумерные – для представления матриц.

Пример.

1-ый способ:

Var

A,B: array [1..10] of real; {одномерные массивы}

С: array [1..5,1..10] of integer; {двумерный массив}

2-ой способ:

Type

Mas1=array [1..10] of real;

Mas2=array [1..5,1..10] of integer;

Var

A,B:Mas1;

C:Mas2;

Диапазоны индексов можно задать константами, которые описаны в разделе описания констант:

Const

N=5;

M=10;

Var

C: array [1..N,1..M] of integer;

Массив можно описать и с помощью типизированных констант:

Const

Vect:array[1..5] of byte=(1,6,3,8,5);

Matr:array[1..4,1..6] of integer=

((1,6,3,5,2,4),

(7,2,5,4,3,2),

(3,1,6,3,8,5),

(5,2,8,5,5,4));

Элементы массива располагаются в памяти последовательно. Многомерные массивы располагаются таким образом, что самый правый индекс возрастает самым первым. Например, массив A[3,3] будем располагаться следующим образом: A[1,1], A[1,2], A[1,3], A[2,1], A[2,2], A[2,3], A[3,1], A[3,2], A[3,3].

Действия над массивами

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

1. A=B (проверить массивы на равенство).

2. А<>В (проверить массивы на неравенство).

3. А:=В.

Наши рекомендации