ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 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 -