- •Технологии программирования
- •Содержание
- •Линейные алгоритмы
- •1.1. Примеры решения заданий
- •1.2. Задания для самостоятельного решения
- •1.3. Задания для контрольной работы
- •Алгоритмы с разветвлениями
- •2.1. Примеры решения заданий
- •2.2. Задания для самостоятельного решения
- •2.3. Задания для контрольной работы
- •Алгоритмы с циклами
- •3.1. Примеры решения заданий
- •3.2. Задания для самостоятельного решения
- •3.3. Задания для контрольной работы
- •Одномерные массивы
- •4.1. Примеры решения заданий
- •4.2. Задания для самостоятельного решения
- •4.3. Задания для контрольной работы
- •Двумерные массивы
- •5.1. Примеры решения заданий
- •5.2. Задания для самостоятельного решения
- •5.3. Задания для контрольной работы
- •6.1. Примеры решения заданий
- •6.2. Задания для самостоятельного решения
- •6.3. Задания для контрольной работы
- •7.1. Примеры решения заданий
- •7.2. Задания для самостоятельного решения
- •7.3. Задания для контрольной работы
- •8.1. Примеры решения заданий
- •8.2. Задания для самостоятельного решения
- •8.3. Задания для контрольной работы
- •Контрольная работа
- •Список использованных источников
Двумерные массивы
5.1. Примеры решения заданий
Задача 1.
Даны действительные числа а1,
... ,аn,
действительная квадратная матрица
порядка n
(n
> 6). Получить действительную матрицу
размера
,
вставив в исходную матрицу между пятым
и шестым столбцами новый столбец с
элементами а1,
... ,аn.
Решение: Фрагмент алгоритма решения задачи представлен на рис. 5.1.
Рис. 5.13. Фрагмент блок-схемы алгоритма решения задачи 1
Программа в Turbo Pascal будет иметь следующий вид:
Program ins_matrix;
Uses Crt;
Const n=10;
a: Array [l..n] of Real = _ (1,2,3,4,5,6,7,8,9,10);
Var x: Array [1..n, 1..n+1] of Real;
i:l..n; j:1..n+1;
Begin
For i:=l to n do
For j:=l to n do x [i,j]:=i/j;
For i:=1 to n do
Begin
For j:=n downto 6 do
x[i,j+1] :=x[i,j];
x[i,6]:=a[i];
End;
ClrScr;
For i:=l to n do
For j:=1 to n+1 do
Begin
If j=6
then TextColor(15)
Else TextColor(7);
GoToXY(j*6,i*2);
Write(x[i,j]:0:2)
End;
ReadLn;
End.
Задача 2. Создать алгоритм и написать программу для упорядочивания строк прямоугольной целочисленной матрицы размером 5х7 по возрастанию сумм их элементов.
Решение: Произведем упорядочивание методом прямого выбора. Алгоритм решения задачи представлен на рис. 5.2.
Рис. 5.14. Блок-схема алгоритма решения задачи 2
Программа в Turbo Pascal будет иметь следующий вид:
Program sort_matrix;
Uses crt;
Const
nrow = 5; ncol = 7;
Type
matr = array [1..nrow,1..ncol] of _ integer;
Var
a: matr;
sum: array [1..nrow] of longint;
i,j: integer; {номер минимального элемента}
nmin: integer;
{буфер для обмена значений строк матрицы}
b: integer;
{буфер для обмена значений массива сумм}
s: longint;
Begin
ClrScr; Randomize;
For i:=l to nrow do
For j:=1 to ncol do
Begin
a[i,j]:=Random(100);
GoToXY(j*4,i); Write(a[i,j])
End;
For i:=1 to nrow do
begin
sum[i]:=0;
For j:=1 to ncol do
sum[i]:=sum[i] + a[i,j];
End;
{ упорядочивание методом выбора }
For i:=1 to nrow-1 do
begin
nmin:=i;
For j:=i+1 to nrow do
If sum[j]<sum[nmin] then nmin:=j;
{обмен значений двух элементов массива сумм }
s:=sum[i];
sum[i]:=sum[nmin];
sum[nmin]:=s;
{ обмен значений двух строк матрицы }
For j:=1 to ncol do
begin
b:=a[i,j];
a[i,j]:=a[nmin,j];
a[nmin,j]:=b;
End;
End;
{ вывод упорядоченной матрицы }
For i:=l to nrow do
For j:=1 to ncol do
Begin
GoToXY(j*4,i);
Write(a[i,j])
End;
Задача 3. Дана действительная квадратная матрица порядка 9. Вычислить сумму тех ее элементов, расположенных на главной диагонали и выше нее, которые превосходят по величине все элементы, расположенные ниже главной диагонали.
Решение: Среди элементов матрицы, расположенных ниже главной диагонали, найдём наибольший. Тогда элементы, расположенные на главной диагонали и выше неё и превосходящие по величине найденный элемент, обладают указанным свойством. Они суммируются в отдельных циклах. Фрагмент алгоритма решения задачи представлен на рис. 5.3.
Программа в Turbo Pascal будет иметь следующий вид:
Program max_diag;
Uses Crt;
Var a: Array [1..9,1..9] of Real;
max,sum: Real;
i,j: 1..9;
Begin
ClrScr; Randomize;
For i:=l to 9 do
For j:=1 to 9 do
begin
a[i,j]:=Random*100;
If j<i
then TextColor(11)
Else TextColor(15);
GotoXY(j*7,i*2);
Write(a[i,j]:2:2);
End;
max:=a[2,1];
For i:=3 to 9 do
For j:=l to i-1 do
If a[i,j]>max
then max:=a[i,j];
sum:=0;
For i:=l to 9 do
For j:=i to 9 do
If a[i,j]>max
then sum:=sum+a[i,j]; If sum=0
then
Write('Указанных элементов нет':220)
Else
Write('Искомая сумма равна':210,sum);
ReadLn;
End.
Рис. 5.15. Блок-схема алгоритма решения задачи 3
