ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.07.2024
Просмотров: 144
Скачиваний: 0
begin
writeln('Введите элементы массива х'); for i:=1 to n do read(x[i]); writeln('Введите элементы массива у'); for i:=1 to m do read(y[i]);
for i:=1 to n do for j:=1 to m do
begin z[i,j]=cos(x[i]*y[j])/(sqr(x[i])+sqr(y[j]));
writeln('x[',i,]=',x[i],'y[',j,']=',y[j],' z[',i,',',j,']=',z[i,j]) end;
end.
Задача 8.
Составить программу на языке Turbo-Pascal для нахождения максимального элемента матрицы А размера m x n.
Решение:
program maxel (input, output); const n=4, m=3;
var a: array[1..n,1..m] of real; max: real;
i,j: integer; begin
writeln('Введите элементы матрицы А по строкам'); for i:=1 to m do
for j:=1 to n do read(a[i,j]); max:= a[1,1];
for i:=1 to m do for j:=1 to n do
if max < a[i,j] then max:=a[i,j]; writeln('Максимальный элемент матрицы А равен',max) end.
Задача 9.
Составить программу на языке Turbo-Pascal решения системы линейных уравнений методом Гаусса.
Решение:
Для решения образуем расширенную матрицу A размера n x n+1, составленную из коэффици- ентов системы и столбца свободных членов, и соответствующий двумерный массив a[i,j]. Программа метода Гаусса с выбором главного элемента имеет вид:
program gauss (input, output); const n=3; n1=4;
type str=array[1..n1] of real; matr=array[1..n] of str; toll=array[1..n] of real;
var a:matr;
- 54 -
x:toll;
maxabs, v: real; i,j,l,k: integer;
begin
writeln('Введите коэффициенты системы уpавнений по стpокам'); for i:=1 to n do
for j:=1 to n+1 do read(a[i,j]);
for i:=1 to n do begin
maxabs:=abs(a[i,i]); k:=i; for l:=i+1 to n do
if abs(a[l,i])>maxabs then begin
maxabs:=abs(a[l,i]);
k:=l end;
if k<>i then
for j:=i to n+1 do begin
v:=a[i,j]; a[i,j]:=a[k,j]; a[k,j]:=v; end;
v:=a[i,i];
for j:=i to n+1 do a[i,j]:=a[i,j]/v; for l:=i+1 to n do
begin v:=a[l,i];
for j:=i+1 to n+1 do a[l,j]:=a[l,j]-a[i,j]*v
end;
end; x[n]:=a[n,n+1];
for i:=n-1 downto 1 do begin
x[i]:=a[i,n+1]; for j:=i+1 to n do
x[i]:=x[i]-a[i,j]*x[j] end;
writeln('Решение системы линейных уpавнений :'); begin
for i:=1 to n do writeln('x[',i,'] = ',x[i]:10:4)
end; end.
Задача 10.
Составить программу на языке Turbo-Pascal вычисления значения функции, заданной таблич- ным способом, с помощью многочлена Лагранжа.
Решение:
Для решения образуем два одномерных массива x[i], y[i]. - 55 -
program polynom (input,output); const n=10;
var x,y,z : array[1..n] of real; p,xv,yv : real;
i,j : integer; begin
writeln('Введите элементы массива х'); for i:=1 to n do read(x[i]); writeln('Введите элементы массива у'); for i:=1 to n do read(y[j]); writeln('Введите значение xv'); read(xv);
yv:=0; p:=1:
for j:=1 to n do begin
for i:=1 to n do
if i<>j then p:=p*(xv-x[i])/(x[j]-x[i]); z[j]:=p;
yv:=yv+z[j]*y[j] end;
writeln('xv=',xv,' y=',yv) end.
Задача 11.
Составить программу на языке Turbo-Pascal решения нелинейного уравнения f(x) = 0 методом итераций и методом Ньютона с точностью до 0.0001.
f(x) = x - cos x .
Решение:
Для решения задачи методом итераций запишем исходное уравнение в виде x = cos x.
program iter (input,output); const eps=0.0001;
var x,y : real; begin
writeln('Введите нулевое приближение x0'); read (y);
repeat x:=y;
y:= cos(x); until (abs(x-y)>eps)
writeln('Решение уравнения : x=',x) end.
Для решения задачи методом Ньютона вычислим производную функции f(x) :
f'(x) = 1 + sin x .
program newton (input,output); const eps = 0.0001;
var x,y : real; begin
- 56 -
writeln('Введите нулевое приближение х0'); read(y);
repeat x:=y; y:=x-(x-cos(x))/(1+sin(x))
until (abs(x-y)>eps);
writeln ('Решение уравнения : x=',x) end.
Задача 12
Составить программу на языке Turbo-Pascal для вычисления определенного интеграла от функции f(x) на отрезке [a, b] методом Симпсона.
f(x) = x2 ln x, a=2, b=5.
Решение:
Для четного числа разбиений n и равномерной сетки формула Симпсона имеет вид
h
I = 3 (f 0+ 2(f 2 + f 4 + ... + f n-2) +4(f 1 + f3 +...+ f n-1) + f n).
program simpson(input,output); const n=20;
var a,b,h,s : real; m,i : integer;
function f(x:real) : real; begin
f:=sqr(x)*ln(x) end;
begin
writeln('Введите пределы интегрирования а,в'); read(a,b); h:=(b-a)/n; m:= n div 2;
s:=0;
for i:=1 to m-1 do s:=s+2*f(a+2*i*h); for i:=1 to m do
s:=s+4*f(a+(2*i-1)*h); s:=s+f(a)+f(b); s:=s*h/3; writeln('Значение интеграла s =',s)
end.
Задача 13.
Составить программу на языке Turbo-Pascal для решения дифференциального уравнения пер- вого порядка y' = f(x, y) методом Эйлера при начальных условиях: y(a) = b.
f(x, y) = x sin x + y cos x .
Решение:
- 57 -
Для решения задачи следует ввести шаг приращения h, тогда алгоритм вычисления значений искомой функции y(x) определится рекуррентным соотношением
y k+1= yk + h f(xk, yk) , (k = 0, 1, ..., n-1).
Программа имеет вид
program euiler (input, output); const n = 20;
var a,b,h,x,y : real; i : integer;
begin
writeln('Введите значения начальных условий a,b и шаг h'); read(a,b,h);
i:=0; x:=a; y:=b;
repeat writeln('x=',x,' y=',y); y:=y+h*(x*sin(x)+y*cos(x)); x:=x+h;
i:=i+1 until (i>n)
end.
Задача 14.
Составить программу на языке Turbo-Pascal для аппроксимации табличной функции по методу наименьших квадратов. В качестве аппроксимирующих зависимостей рассмотреть:
1) линейную зависимость y = a + bx;
2) степенную зависимость y = axb ;
3) экспоненциальную зависимость y = a exp(bx).
x = {0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5 }, y = {1.5, 1.9, 2.9, 4.5, 5.3, 9.0, 12.8}.
Решение:
Для решения образуем два одномерных массива x[i], y[i] размера n и воспользуемся формула- ми линейной, степенной и экспоненциальной регрессии.
program mnk (input,output); const n = 7;
var x,y : array[1..n] of real; sumx,sumy,sumx2,sumxy,sumlx, sumly,sumxly,sumlx2,sumlxy, a,b : real;
i : integer; k : (1,2,3);
begin
writeln('Введите элементы массива х'); for i:=1 to n do read(x[i]); writeln('Введите элементы массива у'); for i:=1 to n do read(y[i]); sumx:=0;sumy:=0;sumx2:=0;sumxy:=0; sumlx:=0;sumly:=0;sumlx2:=0;sumlxy:=0; for i:=1 to n do
- 58 -
begin
sumx :=sumx+x[i]; sumy :=sumy+y[i];
sumx2 :=sumx2+sqr(x[i]); sumxy :=sumxy+x[i]*y[i]; sumlx :=sumlx+ln(x[i]); sumly :=sumly+ln(y[i]); sumlx2:=sunlx2+sqr(ln(x[i]));
sumlxy:=sumlxy+ln(x[i])*ln(y[i]);
sumxly:=sumxly+x[i]*ln(y[i]) end;
writeln('Выберите нужную Вам зависимость, writeln('нажав на соответствующую клавишу: 1,2 или 3'); writeln('1. Линейная зависимость');
writeln('2. Степенная зависимость'); writeln('3. Экспоненциальная зависимость');
read(k); case k of
1: begin b:=(sumx*sumy-n*sumxy)/(sqr(sumx)-n*sumx2); a:=(sumy-a*sumx)/n;
writeln('Линейная аппроксимация:'); writeln('y=',a,'+',b,'x')
end;
2: begin b:=(sumlx*sumly-n*sumlxy)/(sqr(sumlx)-n*sumlx2); a:=exp((sumly-b*sumlx)/n;
writeln('Степенная аппроксимация:'); writeln('y=',a,'x**',b)
end;
3: begin b:=(sumx*sumly-n*sumxly)/(sqr(sumx)-n*sumx2); a:=exp((sumly-b*sumx)/n); writeln('Экспоненциальная зависимость:'); writeln('y=',a,'exp(',b,'x)')
end.
- 59 -
Задание 3. Задачи для самостоятельного решения
Вариант задания выбирается по предпоследней цифре номера зачетной книжки.
Составить программу на языке Turbo Pascal для решения следующей задачи
Вариант |
Задача |
1 |
Дана матрица вещественных чисел А размерности n×m (n – столбцов, m – |
|
строк). Заменить все элементы главной диагонали матрицы на единицу. |
2 |
Дана матрица вещественных чисел А размерности n×m (n – столбцов, m – |
|
строк). Рассчитать сумму элементов первой и последней строк матрицы. |
|
|
3 |
Дана целочисленная матрица А размерности n×m (n – столбцов, m – |
|
строк). Рассчитать среднее арифметическое значение элементов третьей |
|
строки матрицы. Принять n = 4, m = 5. |
4 |
Дана целочисленная матрица А размерности n×m (n – столбцов, m – |
|
строк). Рассчитать среднее арифметическое значение элементов послед- |
|
него столбца матрицы. Принять n = 4, m = 5. |
5 |
Дана матрица вещественных чисел А размерности n×m (n – столбцов, m – |
|
строк). Получить новую матрицу, заменив все нулевые элементы макси- |
|
мальным элементом матрицы. |
|
|
6 |
Дана целочисленная матрица А размерности n×m (n – столбцов, m – |
|
строк). Посчитать количество элементов матрицы, превосходящих сред- |
|
нее арифметическое значение элементов матрицы. Принять n = 4, m = 5 |
|
|
7 |
Дана матрица вещественных чисел А размерности n×m (n – столбцов, m – |
|
строк). Получить новую матрицу, заменив все элементы главной диаго- |
|
нали исходной матрицы максимальным элементом матрицы. |
|
|
8 |
Дана матрица вещественных чисел А размерности n×m (n – столбцов, m – |
|
строк). Получить новую матрицу, заменив все элементы с нечетной сум- |
|
мой индексов максимальным элементом матрицы, а элементы с четной |
|
суммой индексов – нулем. |
|
|
9 |
Дана матрица вещественных чисел А размерности n×m (n – столбцов, m – |
|
строк). Получить новую матрицу, заменив все элементы побочной диаго- |
|
нали исходной матрицы максимальным элементом матрицы. |
10 |
Дана целочисленная матрица А размерности n×m (n – столбцов, m – |
|
строк). Указать индексы элементов принадлежащих интервалу [a,b]. (n=4, |
|
m=5). |
|
|
- 60 -