программирование на языке бейсик

 

УРОК 6. Сохранение и отладка программ

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

Если файл находится в той же директории, что и программа Qbasic, то введите имя файла по Вашему усмотрению в поле File Name. Имя должно содержать не более 8 символов, набранных на латинице. После нажатия на клавишу Enter, автоматически добавится расширение (.bas) и файл сохранится на диске.

Если файл находится в другой директории, то нужно вначале установить ее, а потом ввести имя программы, как это было указано. Для того, чтобы перейти на другое логическое устройство, например, «D:», следует щелкнуть по его названию в окошечке ниже. О понятиях директория и логическое устройство, можно прочитать в начале книги. Затем, установив нужное логическое устройство, следует перейти в требуемую директорию. Для того, чтобы перейти на директорию уровнем выше, нужно щелкнуть по верхней части данного окошка, где находятся две точки. Чтобы перейти в подчиненную директорию, нужно щелкнуть по имени этой директории. Иногда может потребоваться несколько перемещений, если директория находится далеко от корневой. Наконец, введите имя программы и нажмите клавишу Enter или на кнопку ОК.

Кнопки снизу окна обозначают: ОК - сохранить программу, Cancel - выйти из режима без сохранения, Help - вызов справочной системы.

Если при сохранении файл с таким именем уже существовал, то на экране появится окно, показанное на рисунке слева, в котором имеется надпись «File already exist. Overwrite?» (Файл уже существует. Переписать?). При нажатии на кнопку: Yes - файл будет заменен, No - появится окно, в котором нужно указать новое имя файла, Cancel - прекращение работы режима без записи текста программы в файл, Help - вызов справочной системы.

Все перечисленные действия указаны при работе с мышкой, то есть понятие «нажать на название» обозначает, что нужно подвести курсор мыши, который может быть либо в виде стрелочки (при работе в системе Windows) или в виде квадрата (в системе ДОС), после чего щелкнуть левой кнопкой мыши.

Вышеперечисленные действия можно выполнить и при помощи клавиатуры. Для того, чтобы войти в панно режимов, следует нажать на клавиши Alt+F - для входа в группу режимов File, ALT+E - для входа в группу режимов Edit и так далее, то есть используя клавишу Alt и клавишу с первым символом названия режима. Далее, для выбора режима в появившемся панно нужно использовать клавиши со стрелками вверх и вниз, а после выбора нажать на клавишу Enter.

Для перемещения по полям и кнопкам появившегося окна используйте клавишу Tab в прямом направлении или Shift+Tab в обратном. Для перемещения в поле окна следует использовать клавиши со стрелками вверх или вниз, а после выбора нужного названия, нажмите клавишу Enter. То же самое и после ввода имени файла, когда установлена нужная директория, нажмите на клавишу Enter.

Для того, чтобы открыть ранее записанный файл, нужно воспользоваться режимом FileOpen, в результате на экране появится окно, показанное 3. В нем имеется несколько полей. Если файл расположен в той же директории, что и программа, то в нижнем левом поле находится список имен файлов, из которых нужно выбрать нужный и щелкнуть по нему левой кнопкой мыши. Если файл находится на другом логическом устройстве (в другой директории), то требуется войти в нее, как это было указано выше, после чего выбрать имя файла, которое необходимо. Если щелкнуть по имени файла, то оно появится в поле File Name, также это имя можно ввести с клавиатуры. После выбора имени щелкните по кнопке ОК или нажмите на клавишу Enter, после чего текст программы загрузится в основное окно компилятора.

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


CLS

FOR i1% = 1 TO 100

i2% = RND * 25 + 1

LO(CATE i2%, i2% * 3

CO LOR 1 + RND * 15, 1 + RND * 7

PRINT "текст"

FоR i3 = 1 TO 300

i4 = SIN(i3 / 100)

NEXT i3

i2% = RND * 22 + 1

LOCATE i2%, i2 * 3

COLOR 0, 0

PRINT "текст"

NEXT i1%

COLOR 7, 0


 

После набора строчек программы, и нажатия на клавишу Enter произойдет проверка синтаксиса. Если синтаксис не верен, то на экране появится об этом сообщение. При вводе четвертой строки текста программы («LO(CATE i2%, i2% * 3») на экране возникнет сообщение: «Expected: )», то есть ожидается закрывающая круглая скобка. Так как в строке имеется открывающаяся круглая скобка, то программа ожидает и закрывающуюся скобку в той же строчке. Нажав на «ОК», и убрав открывающуюся скобку, переместим курсор на конец строки. После нажатия на Enter программа воспримет строчку как правильную и можно продолжать набор следующих строк.

Следующая строчка, на которой будет выведено сообщение об ошибке, является оператор: «CO LOR 1 + RND * 15, 1 + RND * 7», в котором находится пробел между символами: «CO» и «LOR». На экране появится сообщение: «Expected: end-of-statement» (Ожидается: конец утверждения). При этом курсор будет находиться на ключевом слове RND, что свидетельствует о том, что до данного слова имеется ошибка, которую нужно исправить. После этого продолжим набирать текст. Этот вид ошибок называется ошибками синтаксиса.

В операторе «FоR i3 = 1 TO 300» ключевое слово написано и большими и маленькими символами, что не является ошибкой. После набора текста и нажатия на клавишу Enter, строка примет вид: «FОR i3 = 1 TO 300». Текст программы станет:


CLS

FOR i1% = 1 TO 100

i2% = RND * 25 + 1

LOCATE i2%, i2% * 3

COLOR 1 + RND * 15, 1 + RND * 7

PRINT "текст"

FOR i3 = 1 TO 300

i4 = SIN(i3 / 100)

NEXT i3

i2% = RND * 22 + 1

LOCATE i2%, i2 * 3

COLOR 0, 0

PRINT "текст"

NEXT i1%

COLOR 7, 0


 

Далее запустим программу на выполнение, нажав на клавиши Shift+F5. Программа, немного поработав, прекратит свое выполнение. На экране появится следующее сообщение: Illegal function call (неверный вызов функции). При этом строка, на которой произошла ошибка, будет выделена более светлым цветом, а нажав на кнопку «ОК», курсор окажется на этой строчке. При таком виде ошибки нужно прежде всего проверить значения аргументов функции. Ошибки могут быть двух видов: во-первых, неверный тип переменной, например, вместо целочисленной переменной присутствует вещественная переменная одинарной или двойной точности. Во-вторых, переменная может принимать значение, которое недопустимо для функции, например, аргумент функции арксинуса может быть только в пределах от -1 до 1.

В нашем случае ошибка выпала на строку: «LOCATE i2%, i2 * 3», в которой явно видно, что второй аргумент вещественное число, а не целое. Поэтому изменим текст оператора на «LOCATE i2%, i2% * 3», после чего снова запустим программу на выполнение.

Далее, время от времени, строчки на экране будут переходить на позиции строчки выше, то есть текст будет находиться строчкой выше, потом еще выше так, что текст постепенно перемещается вверх. Это происходит потому, что всего на экране имеется 25 строк, а так как операторы PRINT не имеют на конце запятой, поэтому автоматически после вывода текста на экран дисплея переводят строчку на одну выше. После заполнения 25 строки 26ой не существует, поэтому все строчки переводятся на одну выше и нижняя освобождается. В результате вторая часть программы не сможет убрать выведенный текст из-за перемещения текста вправо.

Для того, чтобы не было сдвижки строчек, напишем программу следующим образом:


CLS

FOR i1% = 1 TO 100

i2% = RND * 23 + 1

LOCATE i2%, i2% * 3

COLOR 1 + RND * 15, 1 + RND * 7

PRINT "текст";

FOR i3 = 1 TO 300

i4 = SIN(i3 / 100)

NEXT i3

i2% = RND * 23 + 1

LOCATE i2%, i2% * 3

COLOR 0, 0

PRINT "текст";

NEXT i1%

COLOR 7, 0


 

В тексте программы переменная i2% станет принимать значения в диапазоне от 1 до 24, а в операторе PRINT после символов стоит знак «;», который позволяет выводить больше информации на экран и не переводит положение курсора на следующую строчку.

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

i1 = (90 / 180) * 3.14159

PRINT "- "; SIN(i1%)

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

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

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

После набора текста программы, вместо нажатия на клавиши Shift+F5, нажмем на клавишу F8 или воспользуемся режимом DebugStep. При этом программа подготовится к работе и на экране появится первый оператор (CLS). После второго нажатия на клавишу F8 выполнится оператор CLS и будет показан следующий оператор «FOR i1% = 1 TO 100» и так далее. Для того, чтобы просмотреть, что находится в настоящий момент на экране, нажмите на клавишу F4. Для того, чтобы теперь увидеть текст программы, снова нажмите на клавишу F4.

Довольно часто программы выполняют большое количество операций, например, в нашей программе имеется цикл из 100 шагов и внутри него находится цикл из 300 итераций (или действий). Для того, чтобы просмотреть, как работает нижняя часть программы, необходимо выполнить большое количество пошаговых итераций. Чтобы узнать работу программы после цикла задержки, установим курсор на строке «i2% = RND * 23 + 1» и нажмем на клавишу F9, при этом строчка станет красного цвета. В данном месте программы мы установили контрольную точку, и когда начнем выполнять программу, она будет работать до тех пор, пока не встретит контрольную точку, после чего программа временно остановится. Можно просмотреть содержимое экрана, а можно продолжить выполнение программы, нажав на клавишу F5. Программа продолжит работу до тех пор, пока не встретится новая контрольная точка. В нашем примере программа выполнит цикл по переменной i1% и начнет новый цикл с i1%=2 до тех пор, пока не встретит контрольную точку, и так далее.

Для того, чтобы убрать контрольную точку, установите курсор на ней и нажмите снова клавишу F9. Для того, чтобы убрать все контрольные точки, воспользуйтесь режимом DebugClear all breakpoint.

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

Задачи.

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

2. Наберите текст любой программы, установите контрольную точку и начните выполнение программы.

(переход на следующую страницу)

 

О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О↙О↘О











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

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


 
 
 
Яндекс.Метрика


Каталог@MAIL.RU - каталог ресурсов интернет