Блок-схема алгоритма решения задачи

Лабораторная работа № 1 Программирование разветвляющихся вычислительных процессов

 

Цель работы: Научиться работать с операторами ветвления и создавать дружественный интерфейс к своим программам.

Задание: Разработать алгоритм и составить программу решения задачи на одном из алгоритмических языков. Тесты для проверки работоспособности программы подобрать таким образом, чтобы проверялась работа всех ветвей алгоритма. Разработать документацию к программе, в которой необходимо указать назначение программы, требования к вводимым данным, формат выводимой информации и дать описание алгоритма решения задачи . Документация должна отражать все решения , принятые в процессе разработки и реализации программы.

 

Варианты заданий

№ варианта Расчетные формулы Исходные данные Выводимые значения
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.

 

 

Пример выполнения

№ варианта Расчетные формулы Исходные данные Выводимые значения
31.

 

 

Лабораторная работа № 2 Программирование циклических вычислительных процессов

 

Цель работы: Научиться разрабатывать алгоритмы, использующие различные типы циклов.

Задание: Разработать алгоритмы и составить программы решения задачи с использованием двух типов циклических процессов (с предусловием и постусловием). Разработать документацию к программе, в которой необходимо указать назначение программы, требования к вводимым данным, формат выводимой информации и дать описание алгоритма решения задачи. Документация должна отражать все решения, принятые в процессе разработки и реализации программы.

 

Варианты заданий

№ Вар. Расчетные формулы Исходные данные Выводимые значения
1. Определить (k) – количество y < 0,
2. Определить (k) – количество z < 0,5
3. Определить (k) – количество t < 0
4. Определить
5. Определить (k) – количество вычисленных z ,
6. Определить (k) – количество
7. Определить (k) – количество вычисленных ,
8. Определить (k) – количество
9. Определить (k) – количество
10. Определить (k) – количество
11. Определить (k) – количество
12. Определить (k) – количество
13. Определить (k) – количество вычисленных

 

14. Определить (k) – количество
15. Определить (k) – количество вычисленных
16. Определить (k) – количество
17. Определить (k) – количество вычисленных
18. Определить (k) – количество
19. Определить (k) – количество

 

20. Определить (k) – количество вычисленных
21. Определить
22. Определить
23. Определить (k) – количество
24. Определить (k) – количество
25. Определить (k) – количество
26. Определить (k) – количество

 

27. Определить (k) – количество
28. Определить
29. Определить ; Где N – кол-во вычисленных Z
30. Определить

 

Пример выполнения

№ Вар. Расчетные формулы Исходные данные Выводимые значения

 

Определить (k) – количество

 

 

Описание алгоритма

После ввода исходных данных a, b, XН, XК, ΔX для организации цикла по переменной Х нужно параметру цикла присвоить начальное значение Х=XН . Для вычисления значений количества и суммы обнуляем счетчики К и S . Переменной Р, которая будет хранить значение произведения, присваиваем значение 1. Организуем цикл с предусловием, критерием выхода из цикла будет достижение параметром цикла Х своего конечного значения. На каждом шаге этого цикла текущее значение параметра цикла Х выводим на экран монитора.

Для вычисления значения переменной Y проверяем область допустимых значений соответствующей функции. При этом значение знаменателя зависит от значения подкоренного выражения, находящегося в знаменателе. Поэтому сначала проверяем, чтобы подкоренное выражение было неотрицательным. Если это условие выполняется, тогда проверяем, чтобы знаменатель дроби не был равен 0. Кроме того, проверяем, чтобы аргумент логарифма был положительным. Если все условия выполняются, вычисляем значение функции Y. Вычисленное значение переменной Y выводим на экран монитора.

Для подсчета значений количества, произведения и суммы проверяем соответствующие условия. Если Y не положительный ( ), то накапливаем количество таких Y; при этом если Y отрицательный ( ), то накапливаем произведение таких Y.

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

На последнем этапе работы алгоритма выполняется вывод значений переменных К, Р и S . Вывод выполняется за циклом, поскольку нас интересует итоговое значение каждой из переменных К, Р и S, а не процесс их накопления.

Блок-схема алгоритма решения задачи приведена на рис.2.

 


Блок-схема алгоритма решения задачи

 

+
Начало
Ввод a, b, XН, XК, ΔX
K=0 P=1 S=0
i=1, N
Вывод X
+
+
Вывод Y
Вывод K, P, S
Конец
+
Y не определен
Y не определен

 

Рисунок 2 Блок-схема алгоритма решения задачи


Программа решения задачи

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;