49135 (608949), страница 2

Файл №608949 49135 (Средства языка программирования Паскаль для решения математических задач) 2 страница49135 (608949) страница 22016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

1.4 Описание переменных.

Имя переменной

Тип переменной

Значение

N

integer

Число интервалов разбиения

A

real

Нижний предел интегрирования

B

real

Верхний предел интегрирования

С

real

Параметр функции, определяемый пользователем

H

real

Шаг интегрирования

E

real

Точность вычислений

X

real

Аргумент функции

integral1

real

Значение интеграла при n разбиений

integral2

real

Значение интеграла при 2n разбиений

1.5 Схема алгоритма.

1.6 Текст программы.

PROGRAM KKP2_1_DUB3;

USES CRT;

var

A, B, C, E, ABS_Integral:real;

PROCEDURE ENTER_DATA(VAR PR_1, PR_2, P_PAR,POGR_PRO:REAL);

BEGIN

ClrScr;

Writeln ('Программа для нахождения значения интеграла на определенном промежутке');

Writeln;

writeln('Введите границы интервала [A,B],причем (A

writeln;

REPEAT

BEGIN

writeln('Число C: '); readln(P_PAR);

if not (P_PAR>0) then

writeln ('C должно быть больше 0 !. Повторите ввод.')

ELSE IF NOT (P_PAR<1) THEN

WRITELN('C должно быть меньше 1!. Повторите ввод.');

END;

UNTIL ((P_PAR>0) AND (P_PAR<1));

REPEAT

BEGIN

writeln('Начало интервала A: '); readln(PR_1);

writeln('Конец интервала B: '); readln(PR_2);

if not (PR_1

writeln ('A должно быть меньше B !. Повторите ввод.');

END;

UNTIL (PR_1

REPEAT

BEGIN

writeln('Точность E: '); readln(POGR_PRO);

if not (POGR_PRO>0) then

writeln ('E должно быть больше 0 !. Повторите ввод.');

END;

UNTIL (POGR_PRO>0);

END;

FUNCTION integration(VAR GR_1,GR_2,F_PAR,POGR_FUNC:REAL):real;

VAR

INTEGRAL1, INTEGRAL2, X, H:REAL;

N:INTEGER;

READY:BOOLEAN;

begin

integral1:=0;

integral2:=0;

n:=1;

REPEAT

N:=N*2;

H:=(GR_2-GR_1)/N;

X:=GR_1;

Integral2:=0;

repeat

if x<=(-F_PAR) then

integral2:=integral2+((1/sqr(3))*(ln(F_PAR)-F_PAR))

ELSE IF((-F_PAR

THEN integral2:=integral2+ln(F_PAR)

ELSE if (X>F_PAR) THEN

Integral2:=integral2+LN(X)/LN(10);

X:=X+H;

until not (X<=B);

READY:=abs(integral1-integral2)

INTEGRAL1:=INTEGRAL2;

UNTIL READY;

INTEGRATION:=INTEGRAL2;

END;

BEGIN

ENTER_DATA(A,B,C,E);

ABS_Integral:=INTEGRATION(A,B,C,E);

Writeln;

Writeln( 'Ответ: ');

writeln('Интеграл на промежутке от ',A:0:2,' до ',B:0:2,' равен ');

writeln (ABS_Integral:1:3,' с точностью ',E:1:3);

ReadKey;

END.

1.7 Инструкция пользователю.

Данная программа вычисляет значение интеграла функции заданной графически. Интервал интегрирования, точность вычислений и параметр функции вводятся пользователем. Программа вычислит результат и выдаст его (в числовом виде) на экран монитора.

После запуска программы на экране появится описание программы.

В ответ на приглашение к вводу значений следует ввести требуемые величины. Программа не претендует на универсальность, поэтому не стоит вводить запредельные границы интервала или очень маленькую ( ~0.001) точность вычислений. Поскольку скорость выполнения этой программы напрямую зависит от частоты процессора, то на процессорах, различающихся значительно, время вычислений (и допустимая точность) будут разными. В общем случае это определяется опытным путем.

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

В случае если требуется повторное вычисление значения, следует заново запустить программу.

1.8. Тестовый пример.

Программа для нахождения значения интеграла на определенном промежутке

Введите границы интервала [A,B], причем (A

Число C:

0.9

Число D:

-0.1

Начало интервала A:

5

Конец интервала B:

10

Точность E:

1

Ответ:

Интеграл на промежутке от A до B равен

2.574 с точностью 1.000

Программа для нахождения значения интеграла на определенном промежутке

Введите границы интервала [A,B], причем (A

точность E (E>0):

Число C:

0.9

Число D:

-0.1

Начало интервала A:

-0.9

Конец интервала B:

0.9

Точность E:

1

Ответ:

Интеграл на промежутке от A до B равен

-0.300 с точностью 1.000

2. Составление таблицы значений функции, заданной в виде разложения в ряд

2.1 Вариант задания и постановка задачи.

Задание (вариант №15):

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

При вычислении очередного члена целесообразно воспользоваться рекурентным выражением:

ак+1как; к= 0, 1, 2, ...,

где ак - некоторый к-ый член ряда; ак+1 - следующий к+1-ый член ряда; ск - коэффициент, определяемый номером к.

При составлении программы необходимо по возможности воспользоваться операторами организации циклов WHILE, REPEAT, FOR.

Границы интервала вычислений функций a и b, величина шага изменения аргумента h и точность вычисления функции задаются при вводе. На печать выводятся номер по порядку, значение аргумента, соответствующие ему, значение функции и номер члена ряда, на котором закончилось вычисление значение функции, в форме таблицы:

Х

f (x)

чл.р.

1

2

3

...

Функция:

2.2 Математическая формулировка задачи.

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

2.3 Численный метод решения.

Пусть требуется приближённо вычислить значение функции, заданной в виде разложения в бесконечный ряд. Идея алгоритма вычисления суммы членов ряда состоит в следующем:

Очевидно, что вычисление значения функции нужно производить за конечное число шагов. А значит, необходим некий ограничивающий фактор, в качестве которого в нашей задаче будет выступать погрешность вычислений (>0). Следовательно, вычислив каждый новый член ряда ak, нам необходимо проверить, не будет ли абсолютная величина очередного члена ряда меньше, чем величина погрешности , т.е. |ak| < . Если это неравенство не выполнилось, то следует вычислить новый член ряда, иначе можно заканчивать вычисление и выводить результат работы на экран дисплея.

Кроме того, при вычислении очередного члена целесообразно воспользоваться рекуррентным выражением: ak+1 = ck * ak; k = 0, 1, 2, …, где ak – некоторый k-ый член ряда; ak+1 - следующий k+1-ый член ряда; ck – коэффициент, определяемый номером k.

В данном случае нахождение коэффициента ck можно произвести следующим образом:

ak= ;

ak+1= ;

ck =

Следовательно, зная значение предыдущего члена ряда, порядковый номер следующего и используя полученную формулу, мы значительно упрощаем нахождение нового члена нашего ряда:

ak+1 =ak* ; k = 0, 1, 2, …

2.4 Описание переменных.

Имя переменной

Тип переменной

Значение

K

integer

Номер члена ряда

number

integer

Порядковый номер

A

real

Начало интервала

B

real

Конец интервала

H

Шаг интервала

E

Точность

X

Текущее значение аргумента

у

Значение члена ряда

f

Значение функции для текущего аргумента

2.5 Схема алгоритма.


Программа предназначена для вычисления

таблицы значений функции,



заданной в виде разложения в ряд.




Введите границы интервала [A,B] ( причем (A

точность E (E>0)



и шаг изменения аргумента H (H>0)









ДА

НЕТ

НЕТ



ДА














































нет


да


нет









да

нет

2.5.1 Схема алгоритма процедуры Table_begin






¦Номер¦ X ¦ f(x) ¦ Номер члена ряда ¦





2.5.2 Схема алгоритма процедуры Table_end






2.6 Текст программы.

Program kkr1_2;

procedure Table_begin;

begin

writeln(' ----------------------------------------------------------------------------------');

writeln(' ¦Номер¦ X ¦ f(x) ¦ Номер члена ряда ¦');

writeln(' ----------------------------------------------------------------------------------');

end;

procedure Table_end;

begin

writeln(' ----------------------------------------------------------------------------------');

end;

var

K,number:integer;

A,B,H,E,X,y,f:real;

begin

Writeln ('Программа предназначена для вычисления таблицы значений функции, ');

writeln ('заданной в виде разложения в ряд.');

Writeln;

{------------------------------------------------------------------------}

{Ввод данных}

writeln('Введите границы интервала [A,B] ( причем (A0)');

writeln('и шаг изменения аргумента H (H>0)');

writeln;

repeat

begin

writeln('Начало интервала A: '); readln(A);

writeln('Конец интервала B: '); readln(B);

if not (A

end;

until (A

repeat

begin

writeln('Точность E: '); readln(E);

if not (E>0) then writeln ('E должно быть больше 0 !. Повторите ввод.');

end;

until (E>0);

repeat

begin

writeln('Шаг H: ');readln(H);

if not (H>0) then writeln ('H должно быть больше 0 !. Повторите ввод.');

end;

until (H>0);

{------------------------------------------------------------------------}

writeln('Вы ввели: ');

writeln('A=',A:1:5, ' B=',B:1:5,' H=',H:1:5,' E=',E:1:5);

writeln;

{------------------------------------------------------------------------}

X:=A;

number:=0;

Table_begin;

repeat

k:=0;

y:=(cos(2*x))/3;

f:=0;

inc(number);

repeat

inc(k);

y:=y*cos(2*(k+1)*x)*(2*k-1)/((2*k+3)*cos(2*k*x));

f:=f+y;

until (abs(y)

if (number mod 18)=0 then

begin

Table_end;

Table_begin;

end;

writeln(' ¦',number:5,'¦', X:20:13,' ¦ ',(4/Pi)*(0.5-f):16:13, ' ¦ ' ,k:7,' ¦');

X:=X+H;

until not (X

Table_end;

end.

2.7 Инструкция пользователю.

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

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

2.8. Тестовый пример.

Программа предназначена для вычисления таблицы значений функции,

заданной в виде разложения в ряд.

Введите границы интервала [A,B] ( причем (A0)

и шаг изменения аргумента H (H>0):

Начало интервала A:

0.5

Конец интервала B:

7.6

Точность E:

.001

Шаг H:

1

Вы ввели:

A=0.50000 B=7.60000 H=1.00000 E=0.00100

------------------------------------------------------------------------------------------

¦Номер¦ X ¦ f(x) ¦ Номер члена ряда ¦

------------------------------------------------------------------------------------------

¦ 1 ¦ 0.50000000000 ¦ 0.70477448832 ¦ 7 ¦

¦ 2 ¦ 1.50000000000 ¦ 0.57770993869 ¦ 8 ¦

¦ 3 ¦ 2.50000000000 ¦ 0.71713212380 ¦ 10 ¦

¦ 4 ¦ 3.50000000000 ¦ 0.66752823117 ¦ 10 ¦

¦ 5 ¦ 4.50000000000 ¦ 0.59106729937 ¦ 10 ¦

¦ 6 ¦ 5.50000000000 ¦ 0.72198206866 ¦ 2 ¦

¦ 7 ¦ 6.50000000000 ¦ 0.60541986599 ¦ 9 ¦

¦ 8 ¦ 7.50000000000 ¦ 0.61517755154 ¦ 10 ¦

------------------------------------------------------------------------------------------

3.Работа с матрицами

3.1 Вариант задания и постановка задачи.

Задание (вариант №15):

Вычислить сумму элементов матрицы В(К,К), К 50, расположенных над двумя диагоналями и под ними:

*


*


3.2 Математическая формулировка задачи.


Данная матрица представляет собой квадратную матрицу размерности K.

Чтобы найти сумму элементов, находящихся над диагоналями, надо сначала определить, что понимается под диагоналями и затем, исходя из этого, искать собственно сумму элементов.

3.3 Численный метод решения.


Квадратная матрица, о которой идет речь, это ничто иное, как двумерный массив размерности KxK. Необходимо определить, сумму каких элементов требуется искать. Для этого следует указать, что диагоналями квадратной матрицы являются элементы, обозначаемые как Matrix[i,j], Matrix[i+1,j+1] , ... , Matrix[k,k] для главной диагонали и Matrix[k,j] и элементы Matrix[k-1,j+1] , ... , Matrix[1,j] для побочной диагонали. Зная это следует просто "перебирать" все элементы, находящиеся над и под диагоналями – то есть изменять вертикальную составляющую координаты в зависимости от "текущей" диагонали.

3.4 Описание переменных.

Имя переменной

Тип переменной

Значение

Matrix

array [1..50,1..50] of integer

Матрица, вводимая пользователем

i

byte

Счетчик цикла

(для матрицы)

j

byte

Счетчик цикла

(для матрицы)

K

byte

Размерность матрицы,

определяемая пользователем

sum

integer

Сумма элементов

key

char

"Техническая" переменная, равная ответу пользователя

3.5 Схема алгоритма.




П рограмма ищет сумму элементов матрицы,

находящихся над и под ее диагоналями.






да



нет




нет

да


























нет


да









нет


да












3.6 Текст программы.

Program kkr1_3;

var

Matrix:array [1..50,1..50] of integer;

i,j,K:byte;

sum:integer;

key:char;

begin

Writeln('Программа ищет сумму элементов матрицы, находящихся над и под ее диагоналями.');

Writeln;

{------------------------------------------------------------------------}

{Определение размерности матрицы}

repeat

Writeln('Введите размерность матрицы (K<=50): ');

readln(K);

if ((K50)) then

begin

writeln('Такая размерность невозможна по условию.');

writeln('Повторите ввод.');

end;

until ( (K>1) and (K<=50) );

{------------------------------------------------------------------------}

{Ввод матрицы}

writeln(‘Введите матрицу’);

for i:=1 to K do

for j:=1 to K do

begin

write('Matrix[',i,',',j,']=');

Readln(Matrix[i,j]);

end;

{------------------------------------------------------------------------}

{Вывод матрицы}

Writeln('Вы ввели: ');

for i:=1 to K do

begin

for j:=1 to K do write(Matrix[i,j],' ');

writeln;

end;

{------------------------------------------------------------------------}

{Вычисление суммы элементов. Первый проход}

Writeln;

for j:=1 to k do

begin

if j<=(k/2) then

begin

for i:=(j-1) downto 1 do sum:=sum+Matrix[i,j]

end

else

for i:=(j+1) to k do sum:=sum+Matrix[i,j];

end;

{------------------------------------------------------------------------}

{Вычисление суммы элементов. Второй проход}

for j:=k downto 1 do

begin

if j>(k/2) then

begin

for i:=(k-j) downto 1 do sum:=sum+Matrix[i,j];

end

else for i:=(k-j+2) to k do sum:=sum+Matrix[i,j];

end;

{------------------------------------------------------------------------}

{Вывод результата}

writeln('Cумма элементов над и под диагоналями равна ',sum);

end.

3.7 Инструкция пользователю.

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

1 2 3

4 5 6

7 8 9

Для запуска программы требуется набрать ее имя (kkr1_3.exe) в командной строке и нажать Enter. Программа выведет краткую информацию о собственном предназначении и попросить ввести размерность матрицы, которую пользователь будет вводить.

Размерность матрицы должна быть меньше или равна 50. Здесь есть особый момент. Естественно, размерность не может быть равной нулю или отрицательному числу. Поэтому при указании этих значений программа сообщит об их некорректности и попросит повторить ввод. Можно отказаться от ввода, нажав любую клавишу, или ввести новое значение, нажав Y. Кроме того, если размерность матрицы 1 или 2, то элементов, расположенных над и под диагоналями не существует. Программа логично выдаст результат, что их сумма равна нулю, при этом не сообщая об отсутствии таких элементов.

После указания размерности следует ввести саму матрицу. Матрицу наиболее удобно вводить следующим образом: элементы одной строки разделять пробелами, строки же – клавишей Enter. Если будет введено элементов больше, чем указанно размерностью матрицей, то такие элементы обрабатываться не будет. Чтобы не было недопонимания, пользователю выводится матрица, с которой осуществляются вычисления.

Программа посчитает сумму требуемых элементов и выдаст результат на экран. После этого, она завершится.

3.8. Тестовый пример.

Программа ищет сумму элементов матрицы, находящихся над и под ее диагоналями.

Введите размерность матрицы (K<=50):

3

Введите матрицу

Matrix[1,1]=12

Matrix[1,2]=45

Matrix[1,3]=89

Matrix[2,1]=74

Matrix[2,2]=23

Matrix[2,3]=5

Matrix[3,1]=4

Matrix[3,2]=15

Matrix[3,3]=65

Вы ввели:

12 45 89

74 23 5

4 15 65

Cумма элементов над и под диагоналями равна 60

Вывод.

Компьютер предоставляет удобную возможность использования вычислительных мощностей для решения трудоемких и объемных математических задач. Многие задачи, которые раньше (до изобретения компьютера) либо не имели решения, либо оно было очень долгим, теперь возможно решать в считанные секунды. Задачи, которые нельзя решить аналитически, можно решить с использованием различных численных методов. И здесь язык Паскаль выступает как достаточно удобное и простое средство для перевода алгоритма в компьютерную программу, которую сможет использовать большое количество людей.

Характеристики

Тип файла
Документ
Размер
699,37 Kb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7023
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее