
- •Использование программы 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;
- •Из чисел в строки
Вопрос 7. При запуске Паскаля всё время появляется старая программа и приходится закрывать окно с этим текстом и открывать свежее. Как от этого избавится?
После того, как вы открыли "свежее", сделайти следующие действия: F10-Options-Save. Теперь каждый раз при запуске у вас бедет открываться новое окно.
Вопрос 8. В рассылке n11 Вы рассказывали про форматный вывод .Чтобы реализовать это, мы приписывали к переменной, стоящей в процедуре два числа, разделив их двоеточием: Write('Real: ', a:5:2);
После запятой цифры реагируют на команду, а вот до запятой совершенно не реагирует.
А теперь попробуйте:
|
var |
a:array[1..10]of real; |
................ |
begin |
............... |
for i:=1 to 10 do write(a[i]); |
writeln; |
for i:=1 to 10 do write(a[i]:10:4); |
writeln; |
for i:=1 to 10 do write(a[i]:5:4); |
............................... |
end. |
И почуствуйте разницу.
Вы давно знакомы с понятием процедуры и функции языка Паскаль, а также разницей между ними. Однако до сегодняшнего дня я не рассказывал о том, как можно создавать собственные процедуры и фукнции. Зачем они нужны? Давайте зададимся этим вопросом и на примерах постараемся в нем разобраться.
Для начала попробуем поставить себе задачу. Пусть необходимо написать программу, в которой будет определенная, часто повторяющаяся, последовательность действий. К примеру, сложение двух чисел.
Давайте теперь сформулируем задачу следующим образом: написать программу, которая будет складывать два числа. Далее спрашивает, стоит ли повторить. Если ответ утвердительный, то повторяет сначала. Обратите внимание, складывать числа мы будем не один раз, возможно два-три раза или больше. Здесь было бы очень удобно оформить тот кусок программы, который отвечает за сложение и вызывать его каждый раз при необходимости - то есть не писать его все время заново. Здесь мы и подходим к определению процедуры (подпрограммы) языка Паскаль.
Что же такое подпрограмма? Подпрограмма (процедура, функция) - это оформленная обособленно часть программы, к которой потом можно обратиться из любого места основной программы (вызвать ее). Написать и использовать подпрограмму очень просто. При этом она будет обладать следующими свойствами:
Подпрограмма - это фактически отдельная программа. Она может иметь свои переменные, метки, константы, равно как и вложенные подпрограммы.
Она может использовать переменные, общие для всей программы (глобальные переменные), с учетом того, что они были описаны в основной программе до самой подпрограммы.
Если подпрограмма - функция, она может использоваться внутри стандартных конструкций, в качестве параметра для процедур, присваиваться переменным и т.д., то есть обладает всеми возможностями функций.
Это основное, что касается использования данных в подпрограммах. Теперь давайте посмотрим, как они описываются в программе. Начнем с процедур.
Создание своих процедур
Создаваемая процедура в Паскале имеет следующие элементы:
Служебное слово Procedure;
Собственное имя, по которому она будет использоваться в программе. Оно идет после служебного слова Procedure
Параметры, передаваемые программе (необязательно).
Свои разделы var, const, label (необязательно).
Собственный раздел begin - end, причем end - это конец подпрограммы. После него всегда ставиться точка с запятой: ";"
Внутри этой конструкции - любые элементы языка: циклы, сравнения, дополнительные блоки begin - end.
Примера ради давайте напишем указанную выше программу (сложение двух чисел). Действовать будет по следующему принципу:
До основной программы составим процедуру, в качестве параметров которой будет передаваться два числа. В этой процедуре будет:
Числа, переданные как параметры складываются друг с другом;
Получившееся значение выводиться на экран;
Сделаем цикл repeat - until. Внутри след. действия:
Запрашиваем 1-е число;
Запрашиваем 2-е число;
Вызываем нашу процедуру, передав ей в качестве параметров эти два числа;
Спрашиваем - повторить?
Цикл повторяется, пока ответ "ДА".
Вот такая вот простая программка. Исходный код:
|
Program P1; |
uses Crt; |
|
Procedure Add(a, b: Integer); |
var |
C: Integer; |
|
begin |
C := A + B; |
Write(C); |
end; |
|
var |
N1, N2: Integer; |
C: Char; |
|
begin |
repeat |
{ Очищаем экран } |
ClrScr; |
|
{ Читаем переменные } |
Write('Введите число N1: '); |
Readln(N1); |
Write('Введите число N2: '); |
Readln(N2); |
Writeln; |
|
{ Вызываем нашу процедуру } |
Add(N1, N2); |
|
{ Спрашиваем - Выйти? } |
Writeln; |
Write('Выйти? (Y/N): '); |
Readln(C); |
until UpCase(C) = 'Y'; |
end. |
Теперь давайте разберемся, как создается процедура.
В первую очередь, посморите на служебное слово Procedure. Это и есть подпрограмма, являющаяся в нашем случае процедурой (помните, есть еще функции). Дальше идет имя процедуры - Add, по этому имени мы обращаемся к ней в программе.
Следующий шаг - определение параметров, передаваемых процедуре. Они указываются в скобках сразу после имени, причем в следующем формате: