- •Использование программы 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;
- •Из чисел в строки
Вопросы - ответы
Можно ли программу, напечатанную в текстовом файле скопировать в Turbo Pascal? Если можно то как?
|
|
|
Можно только сохранить текстовый файл с расшрирением PAS и открыть в Паскале. Скопировать же через буфер (как в WINDOWS) нельзя, программы DOS не держат буфер друг между другом. |
Итак, как всегда возвращаемся к Паскалю. В прошлом уроке мы начали изучение конструкций языка, освоили одну из них - if...then...else, которая дала нам возможность выбирать условия прямо в программе и влиять на ее выполнение.
Вроде бы по этой конструкции все, но нет - так быстро во всех тонкостях не разобраться. В ней существуют некоторые сложности, или просто нюансы - на которые нужно обратить внимание. Также надо двигаться дальше - пора заняться новыми типами и процедурами.
Хочу сказать, что нам осталось не так уж много теории, после чего начнется одна практика - мы будем стараться писать много программ, чтобы закреплять все пройденное и развивать алгоритмическое мышление, так необходимое программисту.
IF…THEN…ELSE
Сейчас нам нужно освоить один прием, который является очень важным и, возмножно, вы уже сами сталкивались с необходимостью его применения.
Это вложенность, или, если забыть про стандартные определения, просто ситуация, когда нужно после проверки условия выполнять не одно, а несколько действий если условие верно, после чего также выпонять несколько действий, если условие не верно.
Здесь нам не обойтись без примера, который я сейчас приведу.
Давайте напишем программу, которая будет:
Читать два числа A, B с клавиатуры;
Складывать их и если сумма больше 50, то:
Читать A еще раз;
Опять складывать A и B;
Выводить ответ на экран (уже ничего не проверяя).
Если сумма меньше 50, то:
Читать B еще раз;
Вычесть A и B;
Выводить ответ на экран (уже ничего не проверяя).
Конец программы.
Как мы здесь будет поступать? Заметили, нам нужно выполнять несколько действий, в ходе проверки.
Все это, в принципе могло бы выглядеть так (только алгоритм):
|
|
|
If A+B > 50 Then |
|
Readln(A); |
|
A := A + B; |
|
Write(A); |
|
else |
|
Readln(B); |
|
A := A - B; |
|
Write(A); |
Выглядит, вроде, без ошибок. Но попробуйте, напишите так программу. Ничего не выйдет, в конструкции if...then...else должно быть только по одному действию. Как же поступить?
Здесь нам на помощь приходит возможность вложенности. Как же это реализовать? На самом деле очень просто. Необходимо заключить все действия в отдельные служебные слова begin и end; - то есть сделать как бы маленькую программку в основной программе или сделать ее вложенной - отсюда и название "вложенность". Только запомните, после слова end, если вы его используете для обособленности оператора в конструкциях, ставиться точка с запятой - ";", а не точка! Точка ставиться только в конце программы. Без исключений.
Итак, модифицированный вариант нашей программы, уже полностью:
|
|
|
Program Primer; |
|
var |
|
A,B: Integer; |
|
begin |
|
Write('Введите A: '); |
|
Readln(A); |
|
Write('Введите B: '); |
|
Readln(B); |
|
If A+B > 50 Then |
|
begin |
|
Readln(A); |
|
A := A + B; |
|
Write(A); |
|
end; |
|
else |
|
begin |
|
Readln(B); |
|
A := A - B; |
|
Write(A); |
|
end; |
|
Readln; |
|
end. |
Вот, собственно и все. Этот метод применяется везде и повсеместно. Уверяю вас, скоро вы забудете про него и это уже будет получаться автоматически. А пока запомните это и вспоминайте при необходимости.
Теперь новая процедура, часто используемая в совокупности с конструкций if...then...else. Это процедура goto, о которой рассказываю подробно.
