2 Практическая часть
Задача 1. Даны x,y,z. Вычислить a, b если
Постановка задачи.
Входные данные –значения x, y, z, а также функции а и b
Выходные данные – значение функции a и bдля различных значений аргумента х,y,z
Цель реализации алгоритма: нахождение значений a и b при заданных значениях x, y, z.
Исходя из анализа этапа постановки задачи и математического метода решения из условия, мы приходим к выводу, что решение этой задачи будем производить с помощью линейного метода.
Словесное описание алгоритма.
Начало
1. Ввести x, y, z;
2. a:=y+(x/(y*y+(x*x/(y+(x*x*x/3)))));
3. b:=(1+sqr(sin(z/2)/cos(z/2)));
4. Вывод (a, b).
Конец
Текст программы приведен ниже
Program zadacha1;
Var
x, y, z:real;
a, b:real;
begin
writeln(‘vvedite x,y,z’);
readln(x,y,z);
a:=y+(x/(y*y+(x*x/(y+(x*x*x/3)))));
b:=(1+sqr(sin(z/2)/cos(z/2)));
writeln(‘a=’,a:7:3,’b=’,b:7:3);
end.
Задача 2. Даны действительные числа x, y. Определить принадлежит ли точка с координатами х и у заштрихованной части плоскости.
У 1-1
Постановка задачи.
Входные данные –значения x, y.
Выходные данные – нужно определить принадлежит ли точка с координатами х и у заштрихованной плоскости.
Цель реализации алгоритма: ввести значения х и у, и определить принадлежит ли точка плоскости. Для этого мы будем использовать функцию программиста.
Исходя из анализа этапа постановки задачи и математического метода решения из условия, мы приходим к выводу, что решение этой задачи будем производить с помощью циклического алгоритма.
Словесное описание алгоритма.
Начало
1. Читаем с экрана x и y
2. Определяем положение заданной точки относительно первого отрезка (1,0;0,1)
Положение определяем, считая произведение векторов проходящих через:
1-й вектор начальная – конечная точка отрезка,
2-й вектор начальная точка отрезка – заданная точка.
Произведение > 0 => точка лежит слева от отрезка,
Произведение < 0 => справа,
Произведение = 0 =>лежит на отрезке.
3. Аналогично считаем для оставшихся отрезков.
4. Если для все отрезков точка находится слева, значит она внутри области,
Если хоть для одного справа, значит вне области , ну и если лежит на отрезке, то на границе области.
5. Выводим ответ.
Конец
(Направление отрезков против часовой стрелки)
Текст программы приведен ниже
programzadacha2;
var
x,y,z: real;
function location(xlin1,ylin1,xlin2,ylin2: real): integer;
var
tmp: real;
begin
tmp := (xlin2-xlin1)*(y-ylin1) - (ylin2-ylin1)*(x-xlin1);
if tmp < 0 then location:= -1
else if tmp > 0 then location:= 1
else location:= 0;
end;
begin
repeat
write('x = ');
Readln(x);
write('y = ');
Readln(y);
if ((location(1,0,0,1)> 0) and (location(0,1,-1,0)>0) and (location(-1,0,0,-1)> 0) and (location(0,-1,1,0)>0))
then writeln('tochka prinadlegit oblasti')
else if ((location(1,0,0,1)< 0) or (location(0,1,-1,0)<0) or (location(-1,0,0,-1)< 0) or (location(0,-1,1,0)<0))
then writeln('tochka ne prinadlegit oblasti')
else writeln('tochka na granice oblasti');
Writeln;
until false;
end.
Задача 3.Дано действительное число а. Вычислить f(a), если
Постановка задачи.
Входные данные – значение а, а так же функция f(x).
Выходные данные – значение функции f(a).
Цель реализации алгоритма: ввести значение а, вычислить значение f(a), при известной функции f(x).
Исходя из анализа этапа постановки задачи и математического метода решения из условия, мы приходим к выводу, что решение этой задачи будем производить с помощью ветвящегося алгоритма т. к. в решении данной задачи есть одно условие соответствующее ветвящемуся алгоритмическому процессу.
Словесное описание алгоритма:
Начало
1. Читаем а
2. Проверяем условие -2<=a<=2
3. Если верно, то f(a) = 2*a^2 иначе f(a) = 4
Выводим f
Конец
Текст программы приведен ниже
program zadacha3;
var
a,f: double;
begin
repeat
write('a = ');
readln(a);
if ( (a>= -2) and (a<= 2) ) then
f:= 2*sqr(a)
else f:= 4;
write('f(a) = ');
writeln(f:0:3);
writeln;
writeln;
until false;
end.
Задача 4. Даны натуральное число n, действительная матрица размером n*9. Найти среднее арифметическое каждой из строк.
Постановка задачи.
Входные данные – натурально число n, матрица размером n*9
Выходные данные – в зависимости от n, получаем определенное количество строк и выводим среднее арифметическое каждой из строк.
Цель реализации алгоритма: ввести значение n, создать матрицу размера n*9,вычислить среднее арифметическое каждой из строк.
Исходя из анализа этапа постановки задачи и математического метода решения из условия, мы приходим к выводу, что решение этой задачи будем производить с помощью циклического алгоритма.
Словесное описание алгоритма:
Начало
1. Читаем n
2. Создаем динамический массив размерностью nx9
3. В цикле поочередно считываем с экрана его элементы
4. В цикле считаем сумму элементов в строке и делим ее на 9
5. Выводим полученный ответ на экран
Конец
Текстпрограммы
program Project4;
var
A: array of array of double;
n, i, j: integer;
tmp: double;
begin
write('n = ');
readln(n);
SetLength(A,n);
for i:=0 to n-1 do
SetLength(A[i],9);
for i:=0 to n-1 do
for j:=0 to 8 do
begin
write('A[',i,',',j,'] = ');
readln(A[i,j]);
end;
for i:=0 to n-1 do
begin
tmp:= 0;
for j:= 0 to 8 do
begin
tmp:= tmp + A[i,j];
end;
writeln('str',i+1,' ',tmp/9:0:3);
end;
readln;
end.
Задача 5. Получить единичную квадратную матрицу порядка n.
Постановка задачи.
Входные данные – n-число строк и столбцов
Выходные данные – матрица размером n*n.
Цель реализации алгоритма: ввести значение n, создать единичную матрицу размера n*n, для этого будем использовать массив.
Исходя из анализа этапа постановки задачи и математического метода решения из условия, мы приходим к выводу, что решение этой задачи будем производить с помощью циклического алгоритма.
Словесное описание алгоритма:
Начало
1. Читаем n
2. Создаем динамический массив размерностью nxn
3. В цикле заполняем значениями его элементы:
Если номер строки и номер столбца совпадают, то 1
Иначе 0.
4. Выводим массив на экран.
Конец
Текстпрограммы
program Project5;
var
A: array of array of byte;
n,i,j: integer;
begin
write('n = ');
readln(n);
SetLength(A,n);
for i:= 0 to n-1 do
SetLength(A[i],n);
for i:= 0 to n-1 do
for j:= 0 to n-1 do
if (i = j) then A[i,j]:= 1
else A[i,j]:= 0;
for i:= 0 to n-1 do
begin
writeln;
for j:= 0 to n-1 do
write(A[i,j],' ');
end;
writeln;
readln;
end.
Задача 6. Вычислить значения z, соответствующие каждому значению х (хn<=x<=xk шаг изменения х равен dx) по формуле
.Вычислить
, сумму значений z, произведение отрицательных значений z, количество вычислительных z. Контрольный расчет провести при а=2.62, хn=-3, xk=3, dx=0.6.Постановка задачи.
Входные данные - Xn, Xk, dx, a.
Выходные данне – Z и F.
Цель реализации алгоритма: ввести значение Xn, Xk, dx, a, и при этих значениях вычислить по приведенным фомулам Z и F.
Исходя из анализа этапа постановки задачи и математического метода решения из условия, мы приходим к выводу, что решение этой задачи будем производить с помощью ветвящегося алгоритма.
Словесное описание алгоритма:
Начало
1. Читаем Xn, Xk, dx, a
2. x = Xn
3. Пока x <= Xk делаем:
1) Вычисляем z
2) Если z >=0 то добавляем его в сумму положительных z
Иначе в произведение отрицательных
3) Добавляем z в общую сумму
4) Увеличиваем на 1 количество посчитанных z
5) x = x + dx
4. F = произведение отрицательных z + сумма положительных z
5. Выводим полученные значения на экран
Конец
Текст программы
program Project6;
var
Xn, Xk, x, dx, a, tmp,
summa,
proizveden,
F,
allsumma : double;
Count: integer;
first: boolean;
function z(x: double): double;
begin
z:= (sqr(a*x)*exp(1/3*ln(1/sqr(a+x))) )/( a*ln(a + sqr(x)) ) ;
end;
begin
write('Xn = ' );
readln(Xn);
write('Xk = ');
readln(Xk);
write('dx = ');
readln(dx);
write('a = ');
readln(a);
if (Xk < Xn) then
begin
tmp:= Xk;
Xk:= Xn;
Xn:= tmp;
end;
x:= Xn;
proizveden:= 0;
summa:= 0;
count:= 0;
allsumma:= 0;
first:= true;
while (x<=Xk) do
begin
tmp:= z(x);
if (tmp < 0) then if first then
begin
proizveden:= tmp;
first:= false;
end
else
proizveden:= proizveden * tmp
else summa:= summa + tmp;
allsumma:= allsumma + tmp;
Count:= Count + 1;
x:= x + dx;
end;
F:= proizveden + summa;
writeln;
writeln('F = ', F:0:5);
writeln('summa znachenij z = ', allsumma:0:5);
writeln('proizvedenie otricatelnih z = ', proizveden:0:5);
writeln('kolichestvo vicheslitelnih z = ', Count);
readln;
end.
Задача 7. Дано: а=5 da=-0.5. Z вычислять по формуле:
, где q=a2-a. Считать до тех пор, пока q>0. Определить k-количество вычисленных Z. Вывести на экран a, q, Z, k.Постановка задачи
Входные данные - а=5 da=-0.5.
Выходные данне – a, q, Z, k.
Цель реализации алгоритма: ввести значение а=5 da=-0.5-константы и при этих значениях вычислить по приведенным фомулам Zи вывести на экран a, q, Z, k.
Исходя из анализа этапа постановки задачи и математического метода решения из условия, мы приходим к выводу, что решение этой задачи будем производить с помощью линейного алгоритма.
Словесное описание алгоритма:
Начало
1. A = 5, da = -0.5
2. q = a^2 – a
3. пока q > 0 делать
1) z = q + 1/(q+1)
2) увеличиваем К (кол-во вычислений) на 1
3) a = a + da