- •Министерство образования и науки Российской Федерации
- •Саратовский государственный технический университет информатика. Алгоритмизация и программирование
- •Содержание
- •Введение
- •Требования к оформлению курсовой работы
- •Задания по алгоритмизации и программированию
- •2.2. Задание 2
- •3. Примеры алгоритмов и программ
- •3.1. Примеры решения задач
- •3.2. Примеры алгоритмов и программ, выполненных на алгоритмическом языке turbopascal
- •Литература
- •Информатика. Алгоритмизация и программирование
3. Примеры алгоритмов и программ
3.1. Примеры решения задач
В ТАБЛИЧНОМ ПРОЦЕССОРЕ MSEXCEL
Пример 1.
Вычислить определитель матрицы 3-го порядка: .
Ход работы:
Элементы матрицы располагаем в ячейках А6:С8.
Объединяем ячейки А11 и В11.
Записываем в объединенную ячейку тест определитель = .
Вводим = в ячейку С11.
Выбираем Функция… из менюВставка.
Из математической категории, находим функцию МОПРЕД.
В поле вспомогательного окна и указываем при помощи мыши блок, где находятся значения матрицы, т.е. A6:C8.
Выполняем ОК.
Результат - в ячейке С11 (рис.1).
Рис.1.Макет листа MS Excel. Вычисление определителя матрицы
Таким же образом можно вычислить определители и других порядков.
Пример 2.
Вычислить значение функции на интервале [х1,х2] с шагом 0,01. Построить график этойфункции.
Функция y(x) |
х1 |
х2 |
|
-1,009 |
1,083 |
Ход работы:
1. Вводим х в ячейку B12, y(x) - в C12, в ячейку B13 вводим первое значение х, равное -1,009.
2. В ячейку В14 помещаем -0,999. Это значение, полученное при сложении значений -1,009 и 0,01.
3. Выполняем Автозаполне с шагом до 1,083 включительно в столбце В.
4. В ячейку С13 вводим формулу:
=exp(3*В13)+(sin(2*ПИ()*В13))^2.
5. Выполняем автозаполнение введенной формулы для всех значений x (рис.2).
6. При помощи мыши выделяем все значения х и y(x).
7. Обращаемся к мастеру диаграмм из меню Вставка.
8. Строим график, подписываем его (рис.2).
звание ормулуС13чеки до 1,083 включительно. -следующее
Рис.2. Макет листа MS Excel. График функции
3.2. Примеры алгоритмов и программ, выполненных на алгоритмическом языке turbopascal
Пример 3.
Выполнить схему алгоритма и программы (три случая) на алгоритмическом языке вычисления функции дляс шагом, гдеа=0, b=20, h=0.4.
f(x)=
да
нет
да
нет
.
Рис. 3. Схема алгоритма
Далее приведены программы на алгоритмическом языке программирования Turbo Pascal по исполненному алгоритму (рис. 3).
Программа 1.
program mn1;
uses crt;
var x,y:real;
begin
clrscr;
x:=0;
repeat
if x<10 then y:=x*x*x+1
else
if x>10 then y:=(x*x+3*x+2)/(sqrt(2*x*x*x)-1)
else
y:=0;
writeln('f(',x:3:1,')=',y:6:2);
x:=x+0.4;
until x>20;
readln;
end.
Программа 2.
program mn2;
uses crt;
var x,y:real;
begin
clrscr;
x:=0;
while x<=20 do
begin
if x<10 then y:= x*x*x +1
else
if x>10 then y:=(x*x+3*x+2)/(sqrt(2*x*x*x)-1)
else
y:=0;
writeln('f(',x:3:1,')=',y:6:2);
x:=x+0.4;
end;
readln;
end.
Программа 3.
program mn3;
uses crt;
var
x,y,a,b,h: real;
n ,I : integer;
begin
clrscr;
x:=0;
writeln(‘введите а,b,h’);
readln(a,b,h);
n:=(b-a)/h; n:= round(n);
for i:=1 to n do
begin
if x<10 then y:=X*X*X+1
else
if x>10 then y:=(x*x+3*x+2)/(sqrt(2*x*x*x)-1)
else
y:=0;
writeln('f(',x:3:1,')=',y:6:2);
x:=x+0.4;
end;
readln
end.
Первая программа с именемmn1 составлена с использованием цикла с постусловием: repeat - тело цикла - until(условие завершения цикла). Тело цикла выполнятся до тех пор, пока условие, стоящее после слова until, ложно.
Во второй программе с именем mn2 использован цикл с предусловием: while (условие) do begin - тело цикла - end. Тело цикла выполнятся до тех пор, пока условие, стоящее после слова while, истинно.
Третья программа с именем mn3 содержит организацию цикла с фиксированным числом повторений, определенным во время разработки программы. Параметры цикла целого типа (integer).
Пример 4.
Выполнить схему алгоритма и написать программу нахождения корней нелинейного уравнения f(x)=0,5*cos (0.2* x))+0.2 на отрезке [a,b] с точностью 0,00001, используя подпрограмму для вычисления функции. Применить метод деления отрезка пополам на заданном интервале.
Рис.4. Схема алгоритма
Программа 4.
Program mn4;
uses crt;
function f1 (x: real): real;
begin
f1:=0.5*cos (0.2* x)+0.2;
end;
var
x,a,b,e: real; iteraz: integer;
begin
clrscr;
write ('Input a = '); readln (a);
write ('Input b = '); readln (b);
write ('Input e = '); readln (e);
iteraz:=0;
x:=(a+b)/2;
while (f1(x)<>0) and (abs(a-b)>e) do
begin
iteraz:=iteraz+1;
a:=x;
if (f1(a)*f1(x))<0 then b:=x
else
writeln ('n=', iteraz,' x=', x:3:6,' f(x)=', f1(x):3:6);
x:=(a+b)/2;
end;
readln;
end.
Программа 4 выполнена на алгоритмическом языке программирования TurboPascalпо схеме алгоритма для вычисления корней нелинейного уравнения методом деления отрезка пополам (рис.4) с использованием подпрограммы.
Пример 5.
Вычислить значение суммы членов бесконечного ряда с точностьюε для определенного значения х:
.
Величина a = :
a=1,s=a,n=1
a:=a*(-1)*x*x/((2*n+2)*(2*n-1))
s = s + a
n= n + 1
Нет Да
Рис. 5. Схема алгоритма
В алгоритме (рис.5) применяется цикл с постусловием: repeat - тело цикла – until(условие завершения цикла). Тело цикла выполнятся до тех пор, пока условие, стоящее после слова until, ложно. Ниже рассматривается программа с именемmn5, составленная на алгоритмическом языке программирования Turbo Paskal, для расчета суммы бесконечного ряда, когда неизвестно, сколь членов ряда нужно сложить.
Программа 5.
program mn5;
uses crt;
var
a,eps:real;
x,s :real;
n :longint;
begin
clrscr;
writeln('Введите x,eps');
write('x= ');readln(x);
write('eps= ');readln(eps);
a:=1;
S:=a;
n:=0;
repeat
a:=a*(-1)*x*x/((2*n+2)*(2*n-1));
S:=S+a;
writeln('n=',n,' a=',a,' S= ',s);
n:=n+1;
until abs(a)<=eps;
writeln(' Точность достигнута при n= ',n,'. S= ',s);
readln;
end.
В программе идентификатор n используется как счетчик. Переменная n показывает, сколько раз проработал цикл, т.е. сколько элементов ряда было сложено при указанной точности.
Изменение точности вычисления ε при прежнем значении х влечет за собой изменение количества элементов ряда (уменьшение или увеличение).
Пример 6.
Дана квадратная матрица Ai,jразмеромn х n, где 2 <=n <= 10. Найти минимальный элемент матрицы и умножить все элементы матрицы на модуль этого числа.
Bi,j=Min*Ai,j
Рис. 6. Схема алгоритма
На рис. 6 приведена схема алгоритма для решения примера 6. Показано, как оформить ввод квадратной матрицы, как найти минимальный элемент матрицы и вывести элементы полученной матрицы в виде таблицы. Программа, выполненная на алгоритмическом языке Turbo Paskal по данному алгоритму, размещена ниже.
Программа 6.
Program mn6;
var
i, j, m,n: integer;
b, a : array [1..10,1..10] of real;
min : real;
begin
write (`размер строк и столбцов n =`); Readln (n);
for i:=1 to n do
begin
for j:=1 to n do
begin
write(‘a[‘, i,’,’,j, ‘]=’);
readln (a[i,j]);
end;
writeln;
end;
min:=a[1;1];
for i:=1 to n do
for j:=2 to n do
if a[i,j ]< min then min:=a[i, j];
writeln(‘min= ‘,min:6:2)
min:=abs(min);
for i:=1 to n do
begin
for j:=1 to n do
begin
b[i,j]:=min*a[i,j];
write(b[ i,j]:6;2,’ ‘);
end;
writeln;
end;
Readln
End.