- •Отладка программ пользователя в turbo pascal.
- •Ваша первая программа на Паскале.
- •Синтаксис выражений.
- •Тестирование программы.
- •Что теперь?
- •Использование программы Turbo Pascal 7.0
- •Проверка на ошибки - "компиляция".
- •Запуск программы - "выполнение".
- •Программирование на Паскале
- •Целые типы
- •Пишем программу
- •Домашнее задание по Паскалю
- •Арифметические процедуры
- •Вопросы - ответы
- •Структура программы
- •Новые типы данных
- •If…then…else - Важная конструкция языка
- •Процедура goto
- •Повторить действие? (y/n):
- •Практика
- •Вопросы - ответы
- •Цикл for
- •Задание №1
- •Задание №2
- •Задание №3 (обширное)
- •2.По теме "строки": напишите программу, присваивающую переменной Char последний символ введенной строки
- •Вопрос 3. Может ли Паскаль считывать данные до нажатия "Ввода" (Например, как в Windows: нажмите Esc для отмены)?
- •Вопрос 4. Можно ли сделать ввод данных скрытым звёздочками (***), например, как при вводе пароля?
- •Вопрос 5. Есть ли в Паскале функция, с помощью которой внутренний динамик может "бипнуть" (Примерно, как при загрузке компьютера)?
- •Звездное небо (аналог экранной заставки Norton Commander)
- •Обработка строк
- •А можно и так:
- •Вопрос 1. Программа подсчитывает дискриминант! в конце запрос: "Вы хотите еще найти дискриминант? y/n" Как сделать чтобы при нажатии на "y" программа начаналась сначала, а при нажатии на "n" выходила?
- •Вопрос 4. У меня вот такой вопрос- как в программе описать массив X, если заранее неизвестна его размерность (т.Е. Кол- во элементов, как я понимаю) ?
- •Вопрос 5. Как можно запустить программу?
- •Вопрос 7. При запуске Паскаля всё время появляется старая программа и приходится закрывать окно с этим текстом и открывать свежее. Как от этого избавится?
- •Вопрос 8. В рассылке n11 Вы рассказывали про форматный вывод .Чтобы реализовать это, мы приписывали к переменной, стоящей в процедуре два числа, разделив их двоеточием: Write('Real: ', a:5:2);
- •Список_переменных: тип
- •Оформление процедуры
- •Write(Add(n1, n2)); - печатаем значение, возвращаемое функцией Add;
- •Из чисел в строки
Процедура goto
Меня часто спрашивают, как же сделать программу по настоящему интерактивной, то есть работающей в зависимости от действий пользователя, не всегда заканчивающей работу после того, как она выполнит какие-нибудь действия. Это возможно, причем просто и мы сейчас этим займемся. А поможет нам в этом процедура goto.
Процедура Goto - осуществляет переход в какое-нибудь место в программе из любой ее точки. То есть с ее помощью можно "прыгать" по программе. Обычно эти прыжки происходят из-за каких либо условий, вот пример:
Вводим два числа;
Складываем их и выводим сумму на экран;
Спрашиваем, повторить ли действие?
Если ответ утвердительный, переходим (прыгаем) на пункт 1 данного алгоритма.
Завершаем программу.
В этом примере программа может выполняться бесконечно, пока ответ пользователя будет утвердительным. Как же это сделать?
Команда goto переходит к определенному месту, которое помечатется так называемой "меткой". Эти метки - особенный тип Паскаля, можно даже сказать и не тип, а часть языка. До того, как их использовать, метки нужно описать - сообщить Паскалю о их наличии. Описание меток поисходит также, как и описание переменных.
Для описания меток имеется специальный раздел, наподобие var (помните, я говорил, что var и begin-end не единственные разделы?) только гораздо проще его. Метки не имеют типа, нужно просто задать им имя. Раздел с метками назвается label и оформляется следующим образом:
|
Program UseGOTO; |
label |
First; |
var |
A,B: Integer; |
begin |
First: |
Write('Введите A: '); |
Readln(A); |
Write('Введите B: '); |
Readln(B); |
If A > B Then goto First; |
Readln; |
end. |
Этот пример хорошо демонстрирует использование процедуры goto. Посмотрите внимательно на программу. Что она делает? Запрашивает два числа и если 1-е больше чем 2-е, то повторяется сначала. Необходимые комментарии:
label
Это и есть раздел описания меток. Служебное слово label озаглавливает этот раздел, после него идут имена меток. Если меток несколько, то они перечисляются через запятую.
First:
Так устанавливается метка в программе. Обратите внимание на синтаксис - после имени метки ставиться двоеточие - ":".
If A > B Then goto First;
А это и есть переход при выполнении условия. Заметьте, в конструкии if...then...else отсутсвует слово else, оно нам не нужно, так как мы не делаем ничего при невыполнении условия.
Вот, собственно и все. А теперь давайте вспомним ту задачу, которую я представил вначале - ввести два числа, сложить и запросить повтор. (см. выше).
Итак, напишем эту программу с учетом пройденного материала:
|
Program UseGOTO; |
label |
Again; |
var |
A,B: Integer; |
S: String; |
Begin |
Again: |
Write('Введите A: '); |
Readln(A); |
Write('Введите B: '); |
Readln(B); |
Writeln('A+B = ',A+B); |
Write('Еще раз? (Y/N): '); |
Readln(S); |
If S = 'Y' Then goto First; |
Readln; |
end. |
Откройте Паскаль и введите эту программу. Запустите ее на выполнение - видите, она уже полностью реагирует на действия пользователя и как бы самостоятельно принимает решение, что делать дальше. Вот это уже полностью интерактивная программа, хотя и простая.
Особых комментариев, думаю, не требуется - все рассказывал ранее. Вот только я использовал одну процедуру, которую мы с вами пока не проходили - думаю, стоит объяснить ее работу.
Процедура Writeln - эта процедура работает точно так же, как и Write, но после того, как выведет строку, она переносит курсор на новую строку. Если вы читали про HTML в прошлых выпусках, то увидите сходство с тэгом <ВR>
Мне часто задавали вопрос, как переносить строки, отделяя таким образом переменные и прочие части вывода. Запомните, для этого и используется эта процедура. Ею можно вообще просто отделять строки - сколько раз вы ее напишите, столько строк будет попущено.
В нашем примере я вывожу с ее помощью строку A+B = (результат), после чего сразу же переноситься курсор и уже обычной процедурой Write выводиться Еще раз? (Y/N). В общем, это очень полезная процедура и невероятно необходимая.
Ну а сейчас мы продолжаем и следующий раздел - типы.
Тип Char
В прошлом выпуске мы с вами изучили новый тип, позволяющий работать со строками символов. Это был тип String, с его помощью можно хранить любые данные в текстовом виде, запрашивать программой строки будь то имя, фамилия или что-нибудь еще. Очень полезная возможность, не так ли? Но вот давайте представим, что мы решили запросить не целую строку, а один символ, например в качестве ответа на такой вопрос: