Методичні вказівки до завдання 2
При програми використовувати два незалежних цикли, вкладених один в одного. Передбачити можливість виходу з циклу з видачею відповідного повідомлення, якщо значення, що обчислюється, не визначено.
Приклад 2. Скласти програму розрахунку на Object Pascal наступних значень: Проаналізуємо значення, що обчислюються. Кожна з змінних А и В змінюється у своїх межах зі своїм кроком. Тому організуємо два незалежних цикли – по А и по В відповідно. Один з них, наприклад, цикл по А зробимо зовнішнім, а інший, цикл по В– внутрішнім. Значення Х є визначеним для тих пар А и В, що задовольняють співвідношенню А+В+1>0. Якщо ця умова не виконується, то Х і Y є невизначеними. В внутрішньому циклі перевіряємо цю умову. Якщо вона не виконується, то виводимо відповідне повідомлення, перериваємо поточний крок внутрішнього циклу і переходимо до наступного кроку, змінивши попереднє значення В на ∆В. У програмі на Паскалі переривання поточного кроку циклу і перехід до наступного виконує процедура continue. Якщо значення Х визначене і Х≥5, то перевіряємо знаменник на нуль. Якщо В=0, то виводимо повідомлення про невизначеність Y і переходимо до наступного кроку циклу по В– аналогічно тому, як тільки що було описано. Зразок форми Процедура обробки клацання на кнопці«Обчислення» procedure TForm1.Button_CalcClick(Sender: TObject); var A, An, Ak, h, B, Bn, Bk, h, 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+hВ; end; // кінець циклу по B A:=A+hА; end; // кінець циклу по A end;
|