Файл: ИНДИВИД ЗАДАНИЕ ЭКОНОМИСТЫ _Методичка.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.07.2024

Просмотров: 143

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Пример 10. Дана матрица n×n. Найти сумму элементов первой и последней строки этой матрицы.

Решение.

Для решения задачи образуем из элементов матрицы двумерный массив. Решение будем проводить по следующей схеме:

Необходимо ввести реальную размерность массива;

Необходимо поэлементно ввести элементы матрицы (массива);

Зануляем суммы элементов первой и последней строк матрицы;

Перебираем поэлементно матрицу, суммируя элементы первой и последней строк;

Замечание. В данной задаче для набора сумм элементов первой и последней строк матрицы нет необходимости использовать вложенные циклы по двум параметрам i и j, как это реализуется для стандартной обработки двумерного массива. Поскольку доступ к элементам массива можно получить, указав его индексы, можно обойтись одним единственным оператором цикла по одному параметру. Так как в общем случае индекс может быть выражением или константой, необходимо составить такое выражение или подобрать такую константу которые обеспечат автоматический пересчет нужных нам индексов. Все элементы первой строки имеют один и тот же первый индекс – единицу, поскольку первый индекс нумерует строки матрицы. Второй индекс у элементов первой строки изменяется от 1 до n. У элементов последней строки матрицы также одинаковый первый индекс – он равен n, а вторые индексы также изменяются от 1 до n. Для набора сумм элементов соответствующих строк, в операторе цикла обеспечим автоматический пересчет вторых индексов, а первые укажем при помощи констант – единицы для первой строки, и n – для последней. Поскольку число элементов в строках одинаково, можно воспользоваться одним единственным оператором цикла с параметром. В этом случае конструкция для перебора элементов матрицы и накопления соответствующих сумм будет выглядеть следующим образом:

for j:=1 to n do begin

S1 := S1+ x[1,j];

S2 := S2+ x[n,j]; end;

Операторные скобки необходимы, поскольку оператор цикла с параметром организует выполнение только одного оператора языка Паскаль, а нам необходимо выполнить два действия по накоплению сумм соответствующих строк.

Выводим результат на экран и завершаем работу программы.

Блок схема для решения задачи выглядит следующим образом:

- 48 -


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

Во-первых, все переменные должны быть описаны. В разделе описаний констант опишем кон- станту t, имеющую смысл размерности нашего массива (числа элементов последовательности), приняв ее значение равным 100. Поскольку регулярный тип массив не относится к стандартным типам данных, в разделе описания типов вводим тип с именем matr, определив его как двумер- ный массив размерности t на t элементов. Затем в разделе описаний переменных введем пере- менную x типа matr в качестве массива компонент исходной матрицы, i и j целого типа, в качестве вспомогательных переменных, параметров цикла обеспечивающих возможность поэле- ментного перебора элементов матрицы, а так же переменную. Перемененную n целого типа, имеющую смысл реального значения размерности массива (числа строк и столбцов матрицы). А так же переменные S1и S2 вещественного типа для накопления сумм элементов первой и по- следней строк матрицы соответственно.

Во-вторых, поскольку число шагов, которые необходимо будет сделать для перебора всех эле- ментов массива и в процессе ввода и в процессе его обработки заранее известно, воспользуемся оператором цикла с параметром. Для ввода элементов массива используем переменную i в каче- стве параметра внешнего цикла (обеспечивая перебор элементов матрицы по строкам) и пере- менную j в качестве параметра внутреннего цикла (обеспечивая перебор элементов матрицы по столбцам). Однако еще раз заметим, что конечным значением параметров цикла будет не значе- ние t (вспомогательное значение, используемое при описании массива), а значение n (реальная размерность массива, где n – число строк и столбцов в матрице);

В-третьих, при вводе элементов массива организуем «диалог» с помощью сочетания операто- ров вывода и ввода, применяя операторные скобки, поскольку в операторе цикла с параметром может быть использован только один оператор языка Паскаль.

В-четвертых, для накопления сумм первой и последней строк матрицы воспользуемся рассмот- ренной выше конструкцией.

В-пятых, до начала цикла по накоплению сумм элементов первой и последней строк матрицы необходимо определить начальные значения переменных S1и S2, приняв их равными нулю.

-49 -


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

program PR6 (input, output); uses crt;

const t=100;

type matr= array[1..t,1..t] of real; var x: matr;

i,j,n: integer; S1,S2: real;

begin

clrscr;

writeln(‘Введи размерность матрицы, n=‘); readln(n); writeln(‘Введи массив по строкам’);

for i:=1 to n do begin for j:=1 to n do begin

write (‘х[‘,i,’,’,j,’]= ‘);readln(х[i,j]); end; writeln; end; S1:=0; S2:=0;

for j:=1 to n do begin

S1 := S1+ x[1,j];

S2 := S2+ x[n,j]; end;

writeln(‘Сумма элементов первой строки матрицы - ’,S1:6;3); writeln(‘Сумма элементов последней строки матрицы - ’,S2:6;3); repeat until keypressed;

end.

{Заголовок программы} {Подключение модуля} {Описание константы} {Описание типа массив}

{Описание переменных}

{Начало программы} {Процедура очистки экрана} {Ввод размерности массива} {Вывод пояснений к программе} {Заголовок внешнего цикла} {Заголовок внутреннего цикла} {Ввод элементов массива}

{Установка начальных значений} {Заголовок цикла} {Открывающая операторная скобка}

{Расчет суммы элементов первой строки} {Расчет суммы элементов последней строки} {Закрывающая операторная скобка}

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

{Процедура «задержки» экрана } {Конец программы}

- 50 -


Задачи для самостоятельного анализа

Задача 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 -