Смекни!
smekni.com

Информатика Алгоритмизация и программирование (стр. 2 из 2)

begin

x:=(a+b)/2;

iteraz:=iteraz+1;

if (f1(a)*f1(x))<0 then b:=x

else a:=x;

writeln ('n=', iteraz,' x=', x:3:6,' f(x)=', f1(x):3:6);

end;

readln;

end.

Решение этой задаче было проведено и в MSExcel. Лист с решением задачи и ответом приведен ниже.

Задача 4.

Вычислить определенный интеграл

методом прямоугольников: или трапеций, на выбор.

,
,
,
, с точностью
.

Формула метода прямоугольников:

Формула метода трапеций:

.
9 -3π 0

РЕШЕНИЕ

Алгоритм метода трапеций заключается в следующем:

1. Отрезок [a,b] разбивается на n равных частей.

2. Интеграл представляет собой площадь криволинейной трапеции, ограниченной осью OX, прямыми x=aи x=bи графиком функции. Очевидно, что интеграл от функции на отрезке равен сумме интегралов от этой же функции на каждом из маленьких отрезков, полученных в результате разбиения. Но на каждом из маленьких отрезков мы приближенно заменяем площадь криволинейной трапеции на площадь прямолинейной трапеции с основанием (высотой), равным длине маленького отрезка, и высотами (основаниями) f(xn) и f(xn+1), где xn – левая граница отрезка, xn+1 – правая граница отрезка. Основание (высота трапеции) равно
(b-a)/n, и таким образом площадь трапеции равна
(f(xn)+f(xn+1))(b-a)/2n. У нас всего n трапеций, причем каждые две соседние трапеции имеют одинаковые высоты (основания). Таким образом, в сумму каждое из f(xn) кроме f(a) и f(b) войдет дважды, и таким образом весь интеграл вычисляется как

, где
.

3. В методе трапеций не определен шаг (количество отрезков разбиения). Очевидно, что чем больше количество отрезков, тем более точным будет результат. Поэтому, задаем начальное значение n (например n=10) и вычисляем интеграл.

4. После этого удваиваем n и снова вычисляем интеграл (п. 2). Сравнивая полученные результаты, делаем вывод, достигнута ли требуемая точность.

5. Если результаты отличаются друг от друга меньше чем на ε, то требуемая точность достигнута. Если нет, то снова удваиваем n и вычисляем интеграл еще раз (возвращаемся к п. 4).

Ниже представлена блок-схема алгоритма и листинг программы.

program pr4;

uses crt;

var

h,a,b,S,dS,P,x,eps:real;

n,i:integer;

function f(x:real) : real;

begin

f:=0,1*sin(0.1*x+0.0025*x*x)/cos(0.1*x+0.0025*x*x);

end;

begin

clrscr;

writeln('input a,b,n,eps, please');

write('a');

readln(a);

write('b');

readln(b);

write('n');

readln(n);

write('eps');

readln(eps);

s:=0;

repeat P:=S;

h:=(b-a)/2;

S:=0;

x:=a;

for i:= 1 to n do

begin

x:=x+h;

S:=S+f(x);

end;

S := S*h;

write('n=',n:3,' h=',h:12:9);

n:=n*2;

until abs(P-S)/(s*100)<eps;

writeln;

writeln('Result S=',S:10:6,' dS=',dS:12:9);

writeln;

writeln('Process ended');

writeln('Press any key to exit');

repeatuntilkeypressed;

end.

Данная задача была решена также в MSExcel. Лист с решением задачи приведен ниже. Требуемая точность была достигнута при n=10.

Программа выполненная на языке Microsoft Visual Basic 6.0

Private Sub Command1_Click()

Dim i As Integer

Dim x(1 To 40) As Double

Dim f(1 To 40) As Double

Dim f1(1 To 40) As Double

Dim s(1 To 40) As Double

a = -3 * 3.14

b = 0

e = 0.1

n = 40

h = (b - a) / n

i = 1

x(i) = a

f(i) = 0.1 * Tan(0.1 * x(i) + 0.025 * x(i) ^ 2)

f1(i) = f(i)

s(i) = h * f(i)

For i = 2 To n

x(i) = x(i - 1) + h

f(i) = 0.1 * Tan(0.1 * x(i) + 0.025 * x(i) ^ 2)

f1(i) = f1(i - 1) + f(i)

s(i) = h * f1(i)

Next

For i = 1 To n

Print " s="; s(i)

Next

If Abs(s(n) - s(n - 1)) < e Then Print "удвойте n"

End Sub

Private Sub Form_Load()

End Sub

Задача 5.

Дана прямоугольная матрица Ci,j,, размером

. Если данная матрица является квадратной, найти сумму элементов главной диагонали, в противном случае найти сумму всех членов матрицы.

РЕШЕНИЕ

Составим схему алгоритма.


Program Lab_5;

uses crt;

var

i,j,m,n:integer;

b,a : array[1..10,1..10] of real;

s : real;

begin

clrscr;

write ('chislo stolbcov n='); Readln(n);

write ('chislo strok m='); readln (m);

begin

if m=n then

s:=0;

for i := 1 to n do

begin

for j := 1 to m do

begin

write('a[',i,',',j,']='); readln(a[i,j]);

end;

writeln;

end;

begin

if i=j then s:=s+a[i,j];

writeln(s:6:3);

end;

if i<>j then

begin

s:=0;

for i := 1 to n do

begin

for j := 1 to m do

begin

s:=s+a[i,j];

end;

writeln(s:6:3);

end;

end;

readln;

end;

end.

Данная задача была решена также в MSExcel. Лист с решением задачи приведен ниже.

Программа выполненная на языке Microsoft Visual Basic 6.0

Private Sub Command1_Click()

Dim i, j, m, n As Integer

Dim s As Double

Dim c(1 To 50, 1 To 50) As Double

m = 3

n = 3

For i = 1 To m

For j = 1 To n

c(i, j) = 7 * i - j

Next

Next

s = 0

For i = 1 To m

For j = 1 To n

If m = n Then s = s + c(i, i) Else s = s + c(i, j)

Next

Next

Print s

End Sub

Private Sub Form_Load()

End Sub

Список литературы

1. Информатика: Базовый курс. / С. В. Симонович и др. СПб.: Питер, 2005

2. Острейковский В. А. Информатика: Учеб. для вузов. – М.: Высш. шк., 2000. – 511 с.: ил.

3. Алексеев Е. В. и др. Вычислительная техника и программирование. Практикум по программированию: Практ. пособие / В. Е. Алексеев, А. С. Ваулин, Г. Б. Петрова; Под ред. А. В. Петрова. – М.: Высш. шк., 1991. – 400 с.: ил

4. Глушаков С. В., Мельников И. В. Персональный компьютер: Учебный курс / Худож. оформитель А. С. Юхтман. – Харьков: Фолио; М.: ООО «Издательство АСТ», 2001. – 520 с. – (Домашняя б-ка).

5. Леонтьев В. Новейшая энциклопедия персонального компьютера. – М.: ОЛМА-ПРЕСС, 1999. – 640 с.

6. Козлов В.В., Можаева Н.А., Зуева Н.Г. Информатика. Алгоритмизация и программирование. Мет. Указания и задания к курсовой работе,2006. -32с