- •Составление и отладка программ с разветвляющейся структурой
- •Организация ветвлений в программах
- •Пример выполнения задания
- •Основы работы в интегрированной среде системы программирования Turbo Pascal 7.0
- •Меню File
- •Меню Edit
- •3. Меню Run
- •Меню Compile
- •Меню Debug
- •Меню Window
- •Методика отладки программ
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Библиографический список
- •Варианты заданий
- •Организация программ с циклами
- •Методика отладки программ с циклами
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Библиографический список
- •Варианты заданий
- •Организация программ с функциями и процедурами
- •Методика отладки программ с подпрограммами
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Библиографический список
- •Структура модулей
- •Компиляция модулей
- •Порядок выполнения работы
- •Содержание отчета
- •Контрольные вопросы
- •Библиографический список
- •Приложение
- •Основные операции тр 7.0
- •Типы целых и вещественных чисел
- •Основные стандартные математические функции tp 7.0:
- •Ввод-вывод данных
Организация программ с циклами
Для программирования многократно повторяющихся одинаковых действий в Turbo Pascal (TP) применяются три вида операторов цикла (повторения):
-
Оператор цикла For, имеющий два варианта записи:
а) инкрементный (с возрастанием переменной цикла)
For i := m1 to m2 do s ;
б) декрементный (с убыванием переменной цикла)
For i := m1 downto m2 do s ;
где i - параметр цикла - переменная порядкового типа (integer и т.п.);
s - тело цикла (любой оператор, включая оператор цикла);
m1, m2 - начальное и конечное значения переменной цикла; при этом для инкрементной формы m1<m2 и шаг изменения счетчика цикла равен +1, а для декрементного варианта оператора m1>m2 и шаг цикла равен -1.
Пример: Составить программу для вычисления произведения
при n = 10, x1 = 2,1 (начальное значение х), xn = 3 (конечное значение х).
Program Example_1;
Uses Printer;
Var P,x,h,x1,xn:real; n,i:integer;
BEGIN
writeln('Введите переменные:');
write('n='); readln(n);
write('x1='); readln(x1);
write('xn='); readln(xn);
h:=(xn-x1)/(n-1); {вычисление. шага изменения x}
P:=1; x:=x1; {задание нач. значений переменным}
for i:=1 to n do
begin
P:=P*(2*x+i)/(sqr(2*i)+1);
x:=x+h;
end;
writeln(Lst,'P=',P:12,' при x1=',x1:4:1,',
xn=',xn:4:1);
END.
-
Оператор цикла While:
While b do s ;
где b - выражение логического типа (условие); s - тело цикла.
В этом операторе сначала проверяется условие b. Если оно имеет значение true, то выполняется s, иначе управление передается оператору, следующему за оператором while.
-
Оператор цикла Repeat:
Repeat s Until b ;
где b - логическое условие; s - тело цикла (не требует заключения в операторные скобки begin .. end).
В отличие от while здесь сначала выполняется s, а затем проверяется условие b. Если оно примет значение true, то цикл завершается.
Блок-схемы выше рассмотренных операторов повторения представлены в табл. 2.
Для более гибкого управления циклическим вычислительным процессом в состав ТР 7.0 включены две процедуры, которые практически исключают необходимость использования оператора goto:
Break - реализует немедленный выход из цикла; при этом управление передается оператору, следующему за циклом.
Continue - обеспечивает досрочное завершение очередного прохода цикла.
Они обычно включаются в тело цикла через дополнительно введенный условный оператор.
В операторах While и Repeat возможно зацикливание, если условие завершения цикла в операторе While постоянно сохраняет значение true, а в операторе Repeat - значение false. Для исключения этой ситуации необходимо предусмотреть дополнительную проверку на достижение заданного предельного числа повторений цикла с выходом из цикла, в частности, с помощью оператора break.
Таблица 2
Блок-схемы операторов цикла
Инкрементный оператор цикла For |
Декрементный оператор цикла For |
true |
Оператор Repeat |
Использование операторов цикла во многих случаях обусловлено необходимостью применения в программах переменных с индексами (массивов). Их описание осуществляется двумя эквивалентными способами:
-
с определением типа массива
Type
<имя типа> = array [<список диапазонов индексов>]
of <тип элементов>;
Var
<имя массива> : <имя типа> ;
-
без определения типа массива
Var
<имя массива> : array [<список диапазонов индексов>]
of <тип элементов>;
Здесь <имя типа>, <имя массива> - идентификаторы;
<список диапазонов индексов> - в общем случае список выражений порядкового типа, кроме Longint, в частном случае - список диапазонов индексов;
<тип элементов> - тип элементов массива (real, integer и т.д.).
Первый способ обладает большей общностью. Однако чаще используется второй, т.к. он проще.
Примеры определения массивов:
Type m = array [1..5] of byte;
Var n : m;
sales : array [1989..1999] of integer;
a,b,c : array [1..10,1..10] of real;
Доступ к каждому элементу массива осуществляется с помощью индекса. Он не должен выходить за пределы указанного диапазона. Например,
for i:=1 to 10 do
for j:=1 to 10 do
begin c[i,j]:=0;
for k:=1 to 10 do c[i,j]:=c[i,j]+a[i,k]*b[k,j]
end;
В ТР одним оператором присваивания все элементы одного массива можно передать другому массиву того же типа, например:
Var p,q : array [-5..5] of single;
begin .. p : = q; .. end.
Однако, необходимо учитывать, что массивы можно сравнивать только поэлементно.
Примером применения операторов циклов с массивами служит программа Tab_1.
Составить таблицу значений функции:
,
где x и y заданы в виде одномерных массивов: x = 0.1, 0.3, 0.5;
y = 1, 2, 3, 4.
Program Tab_1;
Uses Printer;
Const m=3;n=4;
Var x,y:array[1..10]of real; f:array[1..10,1..10]of real;
i,j:integer; a,b:real;
BEGIN
writeln('Введите элементы массивов x и y:');
for i:=1 to m do {Ввод элементов массива x}
begin
write('x[',i,']='); readln(x[i]);
end;
for j:=1 to n do {Ввод элементов массива y}
begin
write('y[',j,']='); readln(y[j]);
end;
for i:=1 to m do
for j:=1 to n do
begin
a:=exp(x[i]*y[j])/(x[i]*y[j]);
b:=y[j]*exp(4*ln(x[i]))/4;
f[i,j]:=a+b;
writeln(Lst,'f=',f[i,j]:10,' при x=',
x[i]:4:1,' и y=',y[j]:4:1);
end;
END.
Файл с текстом программы содержится в каталоге MYFILE.