Читайте также:
|
|
Задача. Составить блок-схему алгоритма и программу расчета на Object Pascal следующих значений:
Входные данные: -1 £ A £ 8; DA = 3; -1 £ B£ 2; DB = 0,5.
Выходные данные: A, B, X, Y.
Проанализируем вычисляемые значения. Каждая из переменных А и В изменяется в своих пределах со свом шагом. Поэтому организуем два независимых цикла – по А и по В соответственно. Один из них, например, цикл по А сделаем внешним, а другой, цикл по В – внутренним.
Значение Х определено для тех пар А и В, которые удовлетворяют соотношению А+В+1>0. Если это условие не выполняется, то Х и Y не определены. Во внутреннем цикле проверяем это условие. Если оно не выполняется, то выводим соответствующее сообщение, прерываем текущий шаг внутреннего цикла и переходим к следующему шагу, изменив предварительно значение В на DB. В программе на Паскале прерывание текущего шага цикла и переход к следующему выполняет процедура continue. В блок-схеме также обращаемся к этой процедуре. Если значение Х определено и Х³5, то проверяем знаменатель на ноль. Если В=0, то выводим сообщение о неопределенности Y и переходим к следующему шагу цикла по В – аналогично тому, как только что было описано.
Блок-схема алгоритма показана на рисунке 9.1.
Процедура обработки щелчка на кнопке «Вычисление» (кн. Button_calc)
procedure TForm1.Button_CalcClick(Sender: TObject);
var A,An,Ak,hA,B,Bn,Bk,hB,X,Y:real;
begin
// Ввод исходных данных
An: = StrToFloat(Edit_An.Text);
Ak: = StrToFloat(Edit_Ak.Text);
hA: = StrToFloat(Edit_hA.Text);
Bn: = StrToFloat(Edit_Bn.Text);
Bk: = StrToFloat(Edit_Bk.Text);
hB: = StrToFloat(Edit_hB.Text);
A: = An;
while (A< = Ak)do // начало цикла по А
begin
B: = Bn;
while (B< = Bk) do // начало цикла по В
begin
if (A+B+1< = 1E-10) then //проверка условия A+B+1=0
begin
Memo1.lines.Add('A = '+FormatFloat('##0.0',A)+
' B = '+FormatFloat('##0.0',B)+
' X не опред.'+
' Y не опред.');
B: = B+hB;
CONTINUE
end;
X: = 40*LN(A+B+1);
if (X> = 5) then
if (abs(B)< 1E-10) then // проверка В=0
begin
Memo1.lines.Add('A = '+FormatFloat('##0.0',A)+
' B = '+FormatFloat('##0.0',B)+
' X = '+FormatFloat('##0.0',X)+
' Y не опред.');
B: = B+hB;
CONTINUE
end
else Y: = (X-5)/B+sqrt(A*A+X*X)
else Y: = (X-A)/sqrt(X*X+1);
Memo1.lines.Add('A = '+FormatFloat('##0.0',A)+
' B = '+FormatFloat('##0.0',B)+
' X = '+FormatFloat('##0.0',X)+
' Y = '+FormatFloat('##0.0',Y));
B: = B+hB;
end; // конец цикла по B
A: = A+hA;
end; // конец цикла по A
end;
Дата добавления: 2015-07-08; просмотров: 439 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
ТЕМА 5. Сложные циклы | | | А) пиелонефритов хронических |