- •Лабораторная работа № 1 Программирование разветвляющихся вычислительных процессов
- •Варианты заданий
- •Пример выполнения
- •Лабораторная работа № 2 Программирование циклических вычислительных процессов
- •Варианты заданий
- •Пример выполнения
- •Описание алгоритма
- •Блок-схема алгоритма решения задачи
- •Программа решения задачи
- •Лабораторная работа № 3 Программирование итерационных циклов
- •Пример выполнения
- •Лабораторная работа № 4 Программирование вложенных циклов
- •Варианты заданий
- •Пример выполнения
- •Лабораторная работа № 5 Обработка одномерных массивов
- •Варианты заданий
- •Пример выполнения
- •Лабораторная работа № 6 Обработка матриц
- •Варианты заданий
Пример выполнения
№ Вар. |
Расчетные формулы |
Исходные данные |
Выводимые значения |
31 |
Определить
(k) – количество
|
|
|
Описание алгоритма
После ввода исходных данных a, b, XН, XК, ΔX для организации цикла по переменной Х нужно параметру цикла присвоить начальное значение Х=XН . Для вычисления значений количества и суммы обнуляем счетчики К и S . Переменной Р, которая будет хранить значение произведения, присваиваем значение 1. Организуем цикл с предусловием, критерием выхода из цикла будет достижение параметром цикла Х своего конечного значения. На каждом шаге этого цикла текущее значение параметра цикла Х выводим на экран монитора.
Для вычисления значения переменной Y проверяем область допустимых значений соответствующей функции. При этом значение знаменателя зависит от значения подкоренного выражения, находящегося в знаменателе. Поэтому сначала проверяем, чтобы подкоренное выражение было неотрицательным. Если это условие выполняется, тогда проверяем, чтобы знаменатель дроби не был равен 0. Кроме того, проверяем, чтобы аргумент логарифма был положительным. Если все условия выполняются, вычисляем значение функции Y. Вычисленное значение переменной Y выводим на экран монитора.
Для подсчета значений количества,
произведения и суммы проверяем
соответствующие условия. Если Y не
положительный (
),
то накапливаем количество таких Y; при
этом если Y отрицательный (
),
то накапливаем произведение таких Y.
В конце каждой итерации увеличиваем значение параметра цикла на шаг и все действия, составляющие тело цикла, повторяются до тех пор, пока параметр цикла не достигнет своего конечного значения. Как только условие работы цикла перестанет выполняться, цикл завершает свою работу и управление передается оператору, следующему за оператором цикла.
На последнем этапе работы алгоритма выполняется вывод значений переменных К, Р и S . Вывод выполняется за циклом, поскольку нас интересует итоговое значение каждой из переменных К, Р и S, а не процесс их накопления.
Блок-схема алгоритма решения задачи приведена на рис.2.
Блок-схема алгоритма решения задачи
Рисунок 1 Блок-схема алгоритма решения задачи
Программа решения задачи
procedure TForm1.Button1Click(Sender: TObject);
Var
a,b,Xn,Xk,dX,X,z,Y,P,S :real;
k,i,N,cod:integer;
Label M1;
begin
Val(Edit1.Text,a,cod);
if cod<>0 then
begin
ShowMessage('Ошибка ввода a');
GoTo M1;
end;
Val(Edit2.Text,b,cod);
if cod<>0 then
begin
ShowMessage('Ошибка ввода b');
GoTo M1;
end;
Val(Edit3.Text,Xn,cod);
if cod<>0 then
begin
ShowMessage('Ошибка ввода Хн');
GoTo M1;
end;
Val(Edit4.Text,Xk,cod);
if cod<>0 then
begin
ShowMessage('Ошибка ввода Xk');
GoTo M1;
end;
Val(Edit5.Text,dX,cod);
if cod<>0 then
begin
ShowMessage('Ошибка ввода dX');
GoTo M1;
end;
N:=trunc((Xk-Xn)/dX)+1;
k:=0;
P:=1;
S:=0;
StringGrid1.Cells[0,0]:='X';
StringGrid1.Cells[1,0]:='Y';
For i:=1 to N do
begin
X:=Xn+(i-1)*dX;
StringGrid1.Cells[0,i]:=FormatFloat('#0.###',X);
if sqr(a)-x>0 then z:=exp(1/3*ln(sqr(a)-x)) else
if sqr(a)-x<0 then z:=-exp(1/3*ln(abs(sqr(a)-x)))
else z:=0;
if (a+b-z>0) and (a+x>=0) then
if x+sqrt(a+x)<>0 then
begin
y:=ln(a+b-z)/(x+sqrt(a+x));
StringGrid1.Cells[1,i]:=FormatFloat('#0.###',Y);
if Y<=0 then
begin
k:=k+1;
if y<0 then P:=P*y;
end
else S:=S+y;
end
else StringGrid1.Cells[1,i]:=' Y no'
else StringGrid1.Cells[1,i]:=' Y no';
end;
Edit6.Text:=IntToStr(K);
Edit7.Text:=FormatFloat('#0.###',P);
Edit8.Text:=FormatFloat('#0.###',S);
M1: end;
