- •Министерство образования и науки российской федерации
- •Оглавление предисловие
- •Составление структурных схем алгоритмов и программ
- •Пример 1
- •Пример 2
- •Задания
- •Пример 3
- •Задания
- •Пример 4
- •Пример 5
- •Задания
- •Алфавит языка pascal. Типы данных. Раздел описаний. Оператор присваивания. Ввод-вывод. Составление простейших программ
- •Стандартные процедуры
- •Стандартные функции
- •Пример 1
- •Пример 2
- •Задания
- •Пример 3
- •Задания
- •Задания
- •Использование переменных логического типа. Логический оператор присваивания
- •Логический оператор присваивания
- •R операция_сравнения s
- •Пример 1
- •Задания
- •4. Программирование разветвляющихся структур
- •4.1. Использование в программах условного оператора
- •Пример 1
- •Задания
- •4.2. Использование в программах оператора варианта
- •Case выражение-селектор of метка_случая : оператор;
- •Пример 1
- •Задания
- •5. Использование переменных типа char
- •Задания
- •6. Реализация циклических структур
- •6.1. Применение оператора цикла с параметром
- •Шаг изменения параметра цикла:
- •Пример 1
- •Задания
- •Пример 2
- •Пример 3
- •Задания
- •Пример 4
- •Задания
- •Таким образом изображаются циклы в структурных схемах (в лабораторных работах, курсовых работах и т.Д.). Пример 5
- •Задания
- •Задания
- •Пример 6
- •Задания
- •Не смотря на то, что есть еще другие операторы цикла, обычно вводят и выводят массивы с помощью оператора цикла с параметром.
- •6.2. Применение оператора цикла с постусловием
- •Пример 1
- •Задания
- •6.3. Применение оператора цикла с предусловием
- •Основные различия между операторами циклов с постусловием и предусловием
- •Пример 1
- •Задания
- •6.4. Работа с двухмерными массивами.
- •Задания
- •Пример 1
- •Задания
- •7. Поиск и сортировка числовых данных
- •Пример 1
- •Задания
- •8. Решение задач с применением подпрограмм
- •Procedure имя(список параметров);
- •Var идентификаторы:имя типа;...; var идентификаторы: имя типа
- •Var идентификаторы:имя типа;...;var идентификаторы: имя типа;...; идентификаторы:имя типа;...;идентификаторы:имя типа
- •Идентификаторы:имя типа;идентификаторы:имя типа; ...;идентификаторы:имя типа
- •Локальные переменные доступны только внутри процедур, в которых они определены!
- •Пример 1
- •Задания
- •9. Использование переменных перечисляемого типа
- •Ввод и вывод значений переменных перечисляемого типа запрещен.
- •Задания
- •10. Использование переменных ограниченного типа
- •Задания
- •11. Использование переменных множественного типа
- •Var идентификатор : set of порядковый тип;
- •Запрещен.
- •Правила приоритета для множественных операций:
- •Задания
- •12. Использование записей
- •With префикс[,префикс [...]] do оператор
- •Пример 1
- •Задания
- •13. Работа со строками
- •Каждая переменная типа string вводится отдельной процедурой readln
- •Пример 1
- •Задания
- •14. Работа с файлами
- •Пример 1
- •Пример 2
- •Пример 3
- •Задания
- •Библиографический список
Локальные переменные доступны только внутри процедур, в которых они определены!
А вот другой пример.
Рассмотрим следующую программу:
Var
s,t:real;
procedure ava(var z;real);
begin
z:=sqr(s)+sqr(t)
end;
Begin
Read(s,t);
ava(s);
ava(s);
Writeln(s)
End.
В выражении, вычисляемом в процедуре, используются переменные s,t. Эти переменные не входят в список формальных параметров и в процедуре не описаны, т.е. не являются локальными. Эти переменные будут глобальными. Они есть в главной программе и будут доступны подпрограмме (т.е. подпрограмма будет знать значения s и t, введенные в главной программе).
Рассмотрим на примере следующей задачи использование в программах процедур.
Пример 1
С использованием процедур без параметров оформить таблицу для вывода результатов при следующих вычислениях:
Таблица должна иметь следующий вид:
X |
Y |
Z |
_____ |
_____ |
______ |
Решение
Так как в нашей таблице есть одинаковые строки, то вывод их удобно оформить один раз в виде подпрограмм-процедур, а в нужных местах программы поставить обращение к ним. У наc два вида строк повторяется в разных местах таблицы. Отметим на рисунке таблицы повторяющиеся строки разных типов знаками '+' и '~'.
1
- расставили
номера позиций в строке для организации
вывода таблицы
Наша таблица
будет размещаться с левой стороны
экрана с первой позиции.
-------------------------------------- +
! ! ! ! ~
! X ! Y ! Z !
! ! ! ! ~
-------------------------------------- +
! ! ! ! ~
! _____ ! ______ ! ______ !
! ! ! ! ~
-------------------------------------- +
Одна строка повторяется четыре раза, другая - три раза, следовательно, надо описать две процедуры: первая - будет выводить линию (строка отмечена плюсом на рисунке); вторая - будет выводить строку, отмеченную волной и имеющую вид:
! ! ! !
Напишем программу:
{ВЫВОД ТАБЛИЦЫ}
Var
x,y,z:real;
procedure LINIYA; {Рисуем линию}
Var
i:integer; { сама по себе }
begin { процедура не }
for i:=1 to 31 do { выполняется, }
Write('-') { пока к ней }
end; { не обратимся. }
procedure propusk;
begin
Writeln('!','!':10,'!':10,'!':10)
end;
Begin
Read(x);
if x>0 then y:=sqr(x)
else y:=x;
z:=cos(y)+x;
{ Вывод результатов в виде таблицы }
{ Сначала рисуем линию }
{ Она у нас вычерчивается в процедуре LINIYA, значит, чтобы ее начертить, к этой процедуре надо обратиться}
LINIYA;
{ Теперь надо нарисовать строку с пропусками, но т.к. после вычерчивания линии перевода строки не было, сделаем его }
Writeln;
propusk;
Writeln('!','X':5,'!':5,'Y':5,'!':5,'Z':5,'!':5);
propusk;
LINIYA;
Writeln;
propusk;
Writeln('!',X:8,'!':2,Y:8,'!':2,Z:8,'!':2);
propusk;
LINIYA
End.
Теперь давайте внимательно посмотрим на программу. В двух случаях из трех после вычерчивания линии мы ставим WRITELN. Если мы его поставим и в третьем случае, то ничего не изменится (таблица будет иметь такой же вид, только курсор перейдет на новую строку). Поэтому, т.к. оператор WRITELN каждый раз повторяется после вычерчивания линии, давайте, чтобы не писать его несколько раз, внесем этот оператор в процедуру LINIYA. Тогда она будет иметь вид:
procedure LINIYA;
Var
i:integer;
begin
for i:=1 to 31 do
write('-');
writeln
end;
В программе же уберем после вызова LINIYA оператор WRITELN.
В итоге программа будет иметь вид:
Var
x,y,z:real;
procedure LINIYA;
Var
i:integer;
begin
for i:=1 to 31 do
Write('-');
Writeln
end;
procedure propusk;
begin
Writeln('!','!':10,'!':10,'!':10)
end;
Begin
Read(x);
if x>0 then y:=sqr(x)
else y:=x;
z:=cos(y)+x;
LINIYA;
propusk;
Writeln('!','X':5,'!':5,'Y':5,'!':5,'Z':5,'!':5);
propusk;
LINIYA;
propusk;
Writeln('!',X:8,'!':2,Y:8,'!':2,Z:8,'!':2);
propusk;
LINIYA
end.