Информатика / ИНДИВИД ЗАДАНИЕ ЭКОНОМИСТЫ _Методичка
.pdfЗадачи для самостоятельного анализа
Задача 1.
Составить программу на языке Turbo-Pascal для вычисления значения функции y=f(x), при за- данном значении х.
f (x) = 2 + x + ln(x) , x= 1.256 . x 2 + 3x + 2
Решение:
program func1 (input, output); var x,y: real;
begin
writeln('Введите значение х'); read(x); y:= sqrt(2 + x) + ln(x);
y:= y/abs(sqr(x) + 3*x + 2); writeln('x=',x,' y=',y)
end.
Задача 2.
Составить программу на языке Turbo-Pascal для вычисления значения составной функции y=f(x), при заданном значении х.
ì |
1 |
x(x2 + sin x) ,при х < 0 |
|||||
ï |
|
||||||
2 |
|||||||
f (x) = í |
|
2 |
|
- x |
|
||
ï |
2x |
+ 3e |
, при х ³ 0 |
||||
î |
|
|
Решение:
program func2 (input,output); var x,y : real;
begin
writeln('Введите значение х'); read (x);
if x<0 then y:= 0.5*x*(sqr(x) + sin(x)) else y:= 2*sqr(x) + 3*exp(-x);
writeln('x=',x,' y=',y) end.
Задача 3.
Составить программу на языке Turbo-Pascal для вычисления значения составной функции y= f(x), при заданном значении х.
ì |
|
|
|
|
|
при 0 £ x £1 |
|
ïtg x , |
|
|
|
||||
ï |
1 |
|
|
|
|
|
|
f (x) = í |
|
+ sin x, |
при x >1 |
||||
|
|||||||
ïx |
|
-x |
2 |
|
при х < 0 |
||
ï |
1 + e |
, |
|||||
|
|
||||||
î |
|
|
|
||||
|
|
- 51 - |
|
|
Решение:
program func3 (input, output); var x,y: real;
begin
writeln('Введите значение х'); read(x); if x<0 then y := 1 + exp(-sqr(x))
else
if x <= 1 then y:=sin(x)/cos(x) else y:=1/x + sin(x));
writeln('x=',x,' y=',y) end.
Задача 4.
Составить программу на языке Turbo-Pascal для вывода таблицы функции y = f(x) на отрезке
[a, b] c шагом h.
f (x) = x(1 + e - x 2 ) , a = 2, b = 7, h = 0.5 .
Решение:
program tab (input,output); var a,b,x,y,h : real; begin
writeln ('Введите значения a, b, h'); read(a,b,h); x:=a;
repeat y:=x*(1 + exp(-sqr(x))); writeln('x=',x,' y=',y);
x:=x + h until (x <= b) end.
Задача 5.
Составить программу на языке Turbo-Pascal для вычисления значений функции y = f(x) в за- данных точках.
f(x) = esin x, x = {1, 3, 4, 5, 9, 13, 19, 20}
Решение:
Для решения задачи образуем одномерный массив x[i].
program massiv1 (input,output); const n = 8;
var x,y : array[1..n] of real; i : integer;
begin
writeln('Введите элементы массива х'); for i:=1 to n do read (x[i]);
for i:=1 to n do begin
- 52 -
y[i]:=exp(sin(x[i])); writeln('x[',i,']=',x[i],' y[',i,']=',y[i]) end;
end.
Задача 6.
Составить программу на языке Turbo-Pascal для вычисления суммы значений функции y = f(x) в точках х.
f(x) = arctg (ln x), x = {1, 5, 7, 13, 16, 25, 44}.
Решение:
program sum (input,output); const n = 7;
var x,y : array[1..n] of real; i : integer;
s : real; begin
writeln('Введите элементы массива х'); for i:=1 to n do read (x[i]);
s:=0;
for i:=1 to n do begin
y[i]:= arctan(x[i]); s:=s + y[i]
end;
writeln('Суммма значений функции s=',s) end.
Задача 7.
Составить программу на языке Turbo-Pascal для вычисления значения функции двух перемен- ных z = f(x,y) в заданных точках (x,y).
Cos xy |
|
f (x, y) = x 2 + y 2 |
, x = {1, 2, 3, 6, 8, 10, 11, 19}, y = {0, 5, 7, 20, 25, 26}. |
Решение:
Образуем два одномерных массива x[i], y[i] и двумерный массив z[i,j].
program massv2(input,output); const n=8; m=6;
type vectx=array[1..n] of real; vecty=array[1..m] of real; matrz=array[1..n,1..m] of real;
var x:vectx; y:vecty; z:matrz; i,j: integer;
- 53 -
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 -