Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОАиП_1 / ПАСКАЛЬ.doc
Скачиваний:
41
Добавлен:
25.02.2016
Размер:
2.11 Mб
Скачать

IV Решение типичных задач

Задание 1

Вычислить значение Rez по формуле:

Решение:

Program Exep2_1;

Var

X,Y,Z:Real;

Rez,Max,Min:Real;

Begin

Write(‘Enter X, Y, Z ‘);

ReadLn(X,Y,Z);

If (X>Y) AND (X>Z)

Then Max:=X;

If (Y>X) AND (Y>Z)

Then Max:=Y;

If (Z>Y) AND (Z>X)

Then Max:=Z;

If (X<Y) AND (X<Z)

Then Min:=X;

If (Y<X) AND (Y<Z)

Then Min:=Y;

If (Z<Y) AND (Z<X)

Then Min:=Z;

Rez:=(Max-X*Y*Z)/(Min+(X+Y)/Z);

WriteLn(‘Rez = ‘,Rez:7:3);

End.

2 Ход работы

Задание 1. Изучите теоретический материал, используя также дополнительные источники информации и ответьте письменно на контрольные вопросы.

Задание 2. Решите следующие задания и результаты выполнения запишите в отчет.

1. Решите рассмотренный пример другим способом.

2. С клавиатуры вводится день года. Определить название месяца, на который приходится этот день года. При разработке программы учесть, что в феврале 28-дней, а всего в году 365 дней. Если номер дня не принадлежит ни одному из месяцев, то на экран выдать сообщение.

Занятие 5 Разработка и отладка циклических программ с использованием оператора повтора for, while, repeat

ЦЕЛЬ РАБОТЫ - сформировать представления об операторах повтора языка Turbo Pascal 7.0. Научить применять знания по составлению разветвляющих программ, с использованием операторов повтора.

1 Теоретические ОСНОВЫ

Операторы цикла

Для многократного повтора одних и тех же действий в Turbo Pascal предусмотрены три оператора цикла (повтора). Если число повторений цикла заранее неизвестно, но известно условие завершения цикла, в таких случаях применяются операторы Repeat и While. Если число повторов известно, то применяется оператор For.

Оператор повтора For – оператор цикла с параметром.

Формат оператора FOR:

For <ПЕРЕМЕННАЯ> := <НАЧ_ЗНАЧ> to <КОН_ЗНАЧ> do

ОПЕРАТОР;

При выполнении этого оператораFor сначала вычисляется некоторое начальное значение НАЧ_ЗНАЧ, которое присваивается ПЕРЕМЕННОЙ, называемой параметром цикла. Затем вычисляется конечное значение КОН_ЗНАЧ и проверяется, выполняется ли равенство (ПЕРЕМЕННАЯ = КОН_ЗНАЧ). Если равенство ЛОЖНО, выполняется ОПЕРАТОР, который может быть составным, а затем ПЕРЕМЕННАЯ увеличивается на единицу.

Проверка условия (ПЕРЕМЕННАЯ = КОН_ЗНАЧ) выполнения ОПЕРАТОРА и увеличение ПЕРЕМЕННОЙ на единицу выполняются циклически до тех пор, пока не наступит равенство (ПЕРЕМЕННАЯ = КОН_ЗНАЧ). Параметр цикла, а также начальное и конечное значения могут принадлежать любому порядковому типу (Byte, Integer, Char), но при этом они должны быть одного типа. Если начальное значение превышает конечное значение с самого начала, ОПЕРАТОР не выполняется ни разу. Зарезервированные слова FOR, TO и DO имеют смысл от, до и выполнить соответственно.

Оператор цикла FOR имеет особенности:

в теле цикла запрещается явно изменять значение пераметра цикла (с помощью оператора присваивания);

по завершению работы оператора цикла FOR, значение параметра равно конечному значению цикла.

Второй вариант оператора FOR:

For <ПЕРЕМЕННАЯ> := <НАЧ_ЗНАЧ> downto <КОН_ЗНАЧ> do

ОПЕРАТОР;

Во втором варианте оператора цикла FOR, чтобы выполнялся оператор, начальное значение НАЧ_ЗНАЧ должно превышать конечное значение КОН_ЗНАЧ. При этом параметр переменнАЯ с каждым циклом уменьшается на единицу, пока не становится равна конечному значению КОН_ЗНАЧ.

Вложенные циклы. В программах на Turbo Pascal возможно использования вложенных циклов. Это подразумевает, что существует внешний цикл и один или несколько внутренних циклов. Каждое повторение внешнего цикла означает завершение внутренних циклов; при этом всем выражениям, которые управляют внутренними циклами, вновь присваиваются начальные значения. Рассмотрим программу со вложенным циклом.

Оператор цикла While – оператор цикла с пред условием.

Формат оператора While:

While <условие> do

оператор;

При выполнении оператора While сначала вычисляется логическое выражение УСЛОВИЕ, принадлежащее типу Boolean, в случае истинности которого выполняется ОПЕРАТОР (являющийся, как правило, составным оператором). Вычисление УСЛОВИЯ, его проверка и выполнение ОПЕРАТОРА повторяются до тех пор, пока УСЛОВИЕ не становится равным FALSE. Затем управление передается следующему (после While) оператору в программе. Ключевые слова While и do имеют смысл пока и выполнять соответственно. Если УСЛОВИЕ равно FALSE с самого начала, ОПЕРАТОР, который называется телом цикла, не выполнится ни разу. Если УСЛОВИЕ тождественно TRUE (While true do), цикл будет бесконечным. Для того чтобы тело цикла выполнилось несколько раз (чтобы количество циклов было больше нуля, но меньше бесконечности), УСЛОВИЕ должно каждый раз преобразовываться в теле цикла, тоесть должно происходить наращивание переменных, используемых в УСЛОВИИ.

Оператор цикла Repeat – оператор цикла с постусловием.

Формат оператора Repeat:

Repeat

Оператор1;

Оператор2;

. . .

Until <условие>;

При выполнении оператора Repeat сначала выполняется тело цикла (ОПЕРАТОР1, ОПЕРАТОР2), затем вычисляется некоторое логическое выражение УСЛОВИЕ, принадлежащее типу Boolean, в случае ложности которого вновь выполняется тело цикла. Выполнение тела цикла, вычисление УСЛОВИЯ и его проверка повторяются до тех пор, пока выражение УСЛОВИЕ не становится равным TRUE. После этого управление передается следующему (за Repeat) оператору в программе. Зарезервированные слова Repeat и Until имеют смысл повторять и до тех пор соответственно.

Отличие оператор цикла Repeat отличается от оператора While:

УСЛОВИЕ проверяется после выполнения тела цикла (гарантируется хотя бы однократное выполнение цикла);

– оператор Repeat выполняется до тех пор, пока условие равно False и управление передается следующему (за Repeat) оператору, когда условие становится равным True (для оператора While возникает зависимость).

Даже если УСЛОВИЕ равно True с самого начала, тело цикла выполнится хотя бы раз. Если УСЛОВИЕ тождественно False (Repeat … until False), цикл будет бесконечным.

Задание:

Разработать программу для нахождения и выдачи на экран значения суммы. Значение переменной n ввести с клавиатуры.

Решение:

Program Exep3_5;

Var

i,n,j,Fj:Byte;

S:Real;

Begin

Write(‘Enter n – ’);

ReadLn(n);

S:=0;

For i:=1 to n do

Begin

Fj:=1;

For j:=1 to 2*i do

Fg:=Fg*j;

If Odd(i)

Then S:=S-Sin(1/Fj)

Else S:=S+Sin(1/Fj);

End;

WriteLn(‘S = ’,S:7:3);

End.

Решение типичных задач

Рассматривается решение типичные задач, на циклические алгоритмы. Для каждой задачи составляется блок-схема программы.

Задание 1

Рассчитать значение многочлена y=a0xn + a1xn-1 + a2xn-2 + … + an-1x + an по схеме Горнера:

y=((…(a0x+a1)*x+a2)*x+…+an-1)*x+an. Значения коэффициентов и переменной х ввести с клавиатуры.

Решение:

Program Exep3_1;

Var

a0,a,x,y:Real;

i,n:Byte;

Begin

Write('Введите a0, x, n : ');

ReadLn(a0,x,n);

y:=a0;

For i:=1 to n do

Begin

Write('Введите ai : ');

ReadLn(a);

y:=y*x+a;

End;

WriteLn('Y =',y:7:3);

End.

Задание 2

Под углом А к горизонту и с начальной скоростью В м/сек брошен камень. Определить и выдать на экран на каком расстоянии от места бросания будет камень иметь максимальную высоту. Значение переменных A, B ввести с клавиатуры.

Program Exep4_1;

Var

A,B,X,Y,Max,S,t:Real;

Begin

Write('Enter A, B');

ReadLn(A,B);

t:=0;

Max:=0;

S:=0;

Repeat

t:=t+0.5;

X:=A*Cos(B*Pi/180)*t;

Y:=A*Sin(B*Pi/180)*t-9.81*Sqr(t)/2;

If Max<Y

Then

Begin

Max:=Y;

S:=X;

End;

Until Y<=0;

WriteLn('Max = ',Max:7:3,'S = ',S:7:3);

End.

Соседние файлы в папке ОАиП_1