4616

Разработка программ, использующих массивы, множества и записи

Контрольная

Информатика, кибернетика и программирование

Тип в программировании – это множество, для которого оговорен некоторый набор операций над элементами. Сами элементы множества называются объектами или значениями данного типа. Типы realиinteger – это числовые множеств...

Русский

2012-11-23

386.5 KB

8 чел.

Введение

Тип в программировании – это множество, для которого оговорен некоторый набор операций над элементами. Сами элементы множества называются объектами или значениями данного типа.

Типы real и integer – это числовые множества. Вместе с ними рассматривают соответствующие арифметические операции и операции сравнения. Тип char – это множество символов. Вместе с ними рассматривают операции сравнения.

Эти три типа считаются стандарными типами языка Delphi. Вместе с тем, в языке имеются средства, позволяющие определять, исходя из этих базовых типов, новые нестандартные типы. К ним относятся массивы, множества, строки и записи.


І. ЦЕЛЬ И СОДЕРЖАНИЕ РАБОТЫ

  •  приобретение практических навыков в разработке программ, включающих данные статической структуры;
  •  знакомство с методами решения вычислительных задач, включающих работу с массивами, множествами, записями и строками.

Содержание работы:

  1.  Программирование задач работы с одномерными массивами.
  2.  Программирование задач работы с матрицами.

Требования к отчету:

Отчет по работе должен содержать:

  •  название лабораторного занятия, цель работы, порядок выполнения каждого пункта задания, выводы по каждому пункту задания;
  •  указанные в заданиях файлы, сохраненные в личной папке на жестком диске.

ІІ. МЕТОДИКА ВЫПОЛНЕНИЯ РАБОТЫ

1. Программирование задач работы с одномерными массивами

Краткая теория

В математике, технике и других науках часто рассматривают множества упорядоченных элементов, называемых массивами и представляющих собой набор каких либо объектов (чисел, символов и т.п.) одного типа. Каждый объект массива помимо своего значения характеризуется местоположением, называемым индексом (номером).

Способ индексации, тип элементов, длина массива фиксируются в описании того типа, которому принадлежит массив.

Описание одномерного массива имеет, например, такой вид:

const

 n=-10; m=20;

type 

 Tvector_r = array [n..m] of real; //Массив вещественных чисел

 Tvector_i = array [0..99] of integer; //Массив целых чисел

 Tvector_c = array [‘A’..‘Z’] of char; //Массив символов

var

 A,B: Tvector_r;  // Переменные типа массив вещественных чисел

 C,D: Tvector_i;  // Переменные типа массив целых чисел

 E,F: Tvector_c;  // Переменные типа массив символов

 G,H: array [-5..5] of integer;  // Явное объявление массивов

Для обращения к элементам массива используется имя переменной, объявленной как массив, и индекс, заключенный в квадратные скобки, например,

A[-5]:=sin(-5*x); C[i+1]:=C[i]+D[50];

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

Рассмотрим несколько примеров.

Пример 1.1. Пусть а[1], ..., а[20] — количество осадков в миллиметрах, выпадавшее в Киеве в течение последних 20 лет. Надо вычислить среднее количество осадков и отклонение от среднего для каждого года. Программа может выглядеть так:

program osadki;

const n=20;

type

 t = array [1..n] of real;

var

 a: t;

 i: integer;

 s: real;

begin

 s:=0;

 for i:=1 to n do

   begin

     read(a[i]);

     s:=s+a[i]

   end;

 s:=s/n;

 writeln(s);

 for i:=1 to n do 

   writeln(s—a[i]);

 readln

end.

В определении типа t указан диапазон изменения индекса от 1 до n, где n = 20 определено выше как константа. Можно было бы взять и диапазон от 0 до n-1. Вообще, можно было в качестве границ взять любые целые числа, разность между которыми равна 19. Например, естественным был бы диапазон от 1901 до 1920 —описание типа t выглядело бы тогда так:

type

 t = array [1901..1920] of real

Соответствующие изменения потребовалось бы внести и в операторы цикла:

for i:=1901 to 1920 do ...

Пример 1.2. Дана последовательность символов (объектов типа char) s1, s2, ..., s30. Требуется определить, совпадает ли начальная часть s1, ..., s15 последовательности с ее концевой частью s16, ..., s30.

Программа может выглядеть так:

program dubl;

label 

 M;

type

 t = array[1..15] of char;

var

 x: t;

 y: char;

 r: integer;

begin

 for i:=1 to 15 do 

   read(x[i]);

 for i:=1 to 15 do 

   begin 

     read(y);

     if x[i]<>y then 

       begin 

         write('не ');

         goto M

       end 

   end;

M: write('совпадают');

 readln;

end.

Программа не требует одновременного удерживания в памяти обеих частей данной последовательности символов.

Задание № 1. Программирование задачи с использованием одномерного массива

Для конкретного варианта, представленного в табл. 1.1, составить программу решения поставленной задачи.

Пример составления программы

  1.  Постановка задачи: сформировать одномерный массив А, n (n = 20) элементов которого являются случайными вещественными числами в диапазоне от 0 до 1. Найти среди них минимальный и максимальный элементы, среднее значение и разность между максимальным и минимальным элементами. Полученные результаты вывести на экран.
  2.  Решение:
  •  Для формирования элементов массива используется цикл for, в котором каждому элементу присваивается значение функции

A[i]:=random;

  •  Для нахождения минимального элемента необходимо ввести переменную min, а для определения его местоположения – переменную imin. Первоначально предполагается, что минимальным элементом является A[1]:

min:=A[1]; imin:=1;

  •  При просмотре массива сравниваем очередной элемент A[i] c минимальным. Если A[i]<min, то он становится минимальным и в переменную imin запоминается соответствующее ему значения i. Если минимальных элементов несколько, то определяем первый из них.
  •  Для нахождения максимального элемента введем переменные max, imax. Поиск максимального элемента осуществляется аналогично, только при сравнении используется неравенство A[i]>max.
  •  Для нахождения среднего значения введем переменную sr, в которой накопим сумму всех элементов, которую затем разделим на количество элементов.
  1.  Листинг программы:

Program Vector1;

{$APPTYPE CONSOLE}

uses

 SysUtils;

Const

 n=20;       // Максимальный размер 20

Type

 TVector = array[1..n] of real;

Var

 A: TVector;

 max,min,sr,d: real;

 i,imax,imin: integer;

function Rus(mes: string): string;

var

 i: integer;

begin

 for i:=1 to length(mes) do

   case mes[i] of

     'A'..'п': mes[i]:=Chr(Ord(mes[i])-64);

     'р'..'я': mes[i]:=Chr(Ord(mes[i])-16);

   end;

 Rus:=mes;

end;

Begin

 Randomize;

 // Формирование элементов матрицы

 for i:=1 to n do

   A[i]:=random; //Элементы массива - случайные числа от 0 до 1

 sr:=0;          //Обнуление суммы элементов

 max:=A[1];      //Вначале предполагается, что максимальный и

 imax:=1;   // минимальный элементы находятся в начале массива

 min:=A[1];

 imin:=1;

 for i:=1 to n do

   begin

     if A[i]>max then

       begin

         max:=A[i];

         imax:=i;

       end;

     if A[i]<min then

       begin

         min:=A[i];

         imin:=i;

       end;

     sr:=sr+A[i]

   end;

 sr:=sr/n;

 d:=max-min;

 // Вывод результатов

 Writeln(Rus('Массив А'));

 for i:=1 to n do

   Write(A[i]:4:2,' ');

 Writeln;

 Writeln(Rus('Максимальный элемент ='),max:4:2,' i=',imax:4);

 Writeln(Rus('Минимальный элемент  ='),min:4:2,' i=',imin:4);

 Writeln(Rus('Среднее значение     ='),sr:4:2);

 Writeln(Rus('Размах выборки       ='),d:4:2);

 Readln;

End.

  1.  Результаты работы программы приведены на рис. 1.1.

Технология работы

  1.  Выбирете вариант задания из табл. 1.1. Номер варианта соответствует порядковому номеру студента в журнале.

Таблица 1.1.

№ варианта

Задача

Условия

1

Рассчитать дисперсию случайных чисел xi по формуле

,

где  - выборочное среднее.

n = 50;

случайные числа вещественные и распределены в диапазоне от -1 до +1.

2

Рассчитать выборочный центральный момент 3-го порядка:  где  - выборочное среднее.

Вычислить несмещенную оценку

n = 100;

случайные числа вещественные и распределены в диапазоне от -5 до +5.

3

Рассчитать среднее геометрическое:

n = 100;

случайные числа положительные вещественные и распределены в диапазоне от 1 до 10.

4

Рассчитать среднее гармоническое

n = 50;

случайные числа положительные вещественные и распределены в диапазоне от 1 до 2.

5

Рассчитать квадратичное среднее:

n = 100;

случайные числа вещественные и распределены в диапазоне от -2 до 2.

6

Рассчитать квадратичное отклонение

n = 50; с=5;

случайные числа вещественные и распределены в диапазоне от 0 до 7.

7

Даны действительные a1, ..., a15, b1,..., b15. Вычислить .

Элементы массивов А и В -  случайные вещественные в диапазоне от 0 до 1.

8

Система 10 материальных точек на плоскости задана с помощью действительных чисел x1, y1, m1, …, x10, y10, m10, где xi, yi — координаты i-й точки, а mi — ее масса,  i = 1, ..., 10.

Получить координаты центра масс (центра тяжести) системы, а также расстояния от центра масс до каждой из точек системы. Координаты центра масс могут быть вычислены по формулам

Элементы массивов Х, Y и М -  случайные вещественные в диапазоне от 1 до 100.

9

Даны действительные a1, ..., a16. Получить:

а) max(a1 + a16, a2 + a15, …, a8 + a9);

б) min(a1a9, a2a10, …, a8a16).

Элементы массива А - случайные вещественные в диапазоне от 1 до 10.

10

Даны действительные a0, a1, ..., an. Вычислить

n=20.

Элементы массива А - случайные вещественные в диапазоне от -10 до 10.

11

Дано: натуральное n, действительные а1, ..., аn. Получить:

,

n=50.

Элементы массива А - случайные вещественные в диапазоне от -5 до 10.

12

Дано: натуральное n, действительные у1, ..., yn. Найти:

, где

n=50.

Элементы массива Y - случайные вещественные в диапазоне от -10 до 10.

13

Дано: натуральное n, действительные а1, ..., аn. Вычислить: . При возведении в степень используется формула

n=100.

Элементы массива А - случайные вещественные в диапазоне от 0 до 1.

14

Дано: натуральное n, действительные а1, ..., аn. Вычислить: . При возведении в степень используется формула

n=50.

Элементы массива А - случайные вещественные в диапазоне от 0 до 10.

15

Даны действительные a1, ..., an. Требуется найти b, равное среднему арифметическому чисел a1, ..., an, и наибольшее отклонение от среднего, т.е. max(| a1b |, | a2b |, …, | anb |).

n=100.

Элементы массива А - случайные вещественные в диапазоне от 0 до 10.

16

Дано: натуральное n, действительные у1, ..., yn. Найти:

, где

n=100.

Элементы массива Y - случайные вещественные в диапазоне от 0 до 100.

17

Рассчитать дисперсию случайных чисел xi по формуле

,

где  - выборочное среднее.

n = 50;

случайные числа вещественные и распределены в диапазоне от -1 до +1.

18

Рассчитать выборочный центральный момент 3-го порядка:  где  - выборочное среднее.

Вычислить несмещенную оценку

n = 100;

случайные числа вещественные и распределены в диапазоне от -5 до +5.

19

Рассчитать среднее геометрическое:

n = 100;

случайные числа положительные вещественные и распределены в диапазоне от 1 до 10.

20

Рассчитать среднее гармоническое

n = 50;

случайные числа положительные вещественные и распределены в диапазоне от 1 до 2.

21

Рассчитать квадратичное среднее:

n = 100;

случайные числа вещественные и распределены в диапазоне от -2 до 2.

22

Рассчитать квадратичное отклонение

n = 50; с=5;

случайные числа вещественные и распределены в диапазоне от 0 до 7.

23

Даны действительные a1, ..., a15, b1,..., b15. Вычислить .

Элементы массивов А и В -  случайные вещественные в диапазоне от 0 до 1.

24

Система 10 материальных точек на плоскости задана с помощью действительных чисел x1, y1, m1, …, x10, y10, m10, где xi, yi — координаты i-й точки, а mi — ее масса,  i = 1, ..., 10.

Получить координаты центра масс (центра тяжести) системы, а также расстояния от центра масс до каждой из точек системы. Координаты центра масс могут быть вычислены по формулам

Элементы массивов Х, Y и М -  случайные вещественные в диапазоне от 1 до 100.

25

Даны действительные a1, ..., a16. Получить:

а) max(a1 + a16, a2 + a15, …, a8 + a9);

б) min(a1a9, a2a10, …, a8a16).

Элементы массива А - случайные вещественные в диапазоне от 1 до 10.

26

Даны действительные a0, a1, ..., an. Вычислить

n=20.

Элементы массива А - случайные вещественные в диапазоне от -10 до 10.

27

Дано: натуральное n, действительные а1, ..., аn. Получить:

,

n=50.

Элементы массива А - случайные вещественные в диапазоне от -5 до 10.

28

Дано: натуральное n, действительные у1, ..., yn. Найти:

, где

n=50.

Элементы массива Y - случайные вещественные в диапазоне от -10 до 10.

29

Дано: натуральное n, действительные а1, ..., аn. Вычислить: . При возведении в степень используется формула

n=100.

Элементы массива А - случайные вещественные в диапазоне от 0 до 1.

30

Дано: натуральное n, действительные а1, ..., аn. Вычислить: . При возведении в степень используется формула

n=50.

Элементы массива А - случайные вещественные в диапазоне от 0 до 10.

  1.  Составьте и отладьте программу, выполните вычисления для заданной матрицы и проанализируйте полученные результаты.
  2.  Отлаженный проект программы сохраните в папке \Мои документы\ЛЗ-04\Задание1 под именем Vatiant_№, где № - номер варианта.

2. Программирование задач работы с матрицами

Краткая теория

Матрица представляет собой прямоугольную таблицу однотипных объектов (чисел, символов, строк и т.п.), расположенных строками и столбцами. Она записывается следующим образом:

Такая таблица называется (mn)- матрицей, так как она имеет m - строк и n - столбцов.

Матрица представляет двухмерную таблицу, поэтому для обозначения каждого из ее элементов необходимо использовать двойные индексы: aij, где i – первый индекс, обозначающий номер строки (i = 1, 2, …, m); j – второй индекс – номер столбца (j = 1, 2, …, n).

Матрица, имеющая одинаковое число строк и столбцов, равное n, называется квадратной матрицей n-го порядка.

Частным случаем матрицы является вектор A – упорядоченная совокупность n объектов, записанных либо строкой , либо столбцом:

где ai, i=1, ... , n – компоненты вектора A.

Операции над матрицами – это операции над таблицами чисел. К ним относятся:

1. Равенство. Две матрицы А и B называются равными (обозначают A = B), если они идентичны, другими словами, если равны их соответствующие компоненты, т.е. aij = bij для каждых i, j.

2. Умножение на скаляр. Пусть дана матрица А и скаляр .. Произведением А является матрица

,

т.е. каждый элемент матрицы А умножен на скаляр .

3. Сложение. Суммой матрицы А, имеющей m строк и n столбцов и матрицы B, имеющей m строк и n столбцов, называется матрица С, элементы которой равны

cij = aij + bij (для всех i, j).

Это можно записать так:

C = A + B.

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

4. Вычитание. Определяется через уже рассмотренные действия:

A – B = A + (1)B

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

5. Умножение. Произведением матрицы А размерами mn и матрицы B размерами nr- (записывается AB) называется матрица C, элементы которой получаются из элементов матрицы А и В по следующей формуле:

.

Матрица А допускает умножение на матрицу В и дает произведение AB в том и только том случае, когда число столбцов в матрице А совпадает с числом строк в матрице В. Произведение С = AB имеет одинаковое число строк с матрицей А и одинаковое число столбцов с матрицей В.

6. Транспонирование. Матрицей, транспонированной к матрице А, является матрица, образованная из матрицы А заменой i-й строки матрицы А ее i-м столбцом.

Транспонирование обозначается через АТ, т.е.

АТ = [ aji ], когда А = [ aij ].

Если А является (mn)- матрицей, то АТ является (nm)-матрицей.

7. Степень матрицы. Квадратная матрица Аn равна произведению

Возведение в степень n сводится к n операциям умножения.

Специальные виды матриц:

1. Диагональная матрица. Диагональной называется квадратная матрица, все элементы которой равны 0, кроме тех, что расположены на главной диагонали:

2. Единичная матрица – это диагональная квадратная матрица, все элементы главной диагонали которой равны 1, а остальніе – 0.

3. Нулевая матрица матрица, все элементы которой равны 0.

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

.

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

Пример описания матрицы:

const

 m=10; n=20;

Type

 Tmatrix=array[1..m,1..n] of real;

Var

 A, B: Tmatrix;

Можно объявить матрицы и так:

Var

 A, B: array[1..10,1..20] of real;

но такое объявление является менее предпочтительным.

Индексы элементов и соответственно границы, указываемые в объявлениях, могут быть отрицательными и нулевыми, но обязательно порядкового типа (например, целыми), т.е. допустимы объявления:

const

 m=10; n=20;

Type

 Tmatrix=array[-m..m-1,-n..n-1] of real;

Var

 A, B: Tmatrix;

 C, D: array[0..5,-5..10] of integer;

 E, F: array['a'.. 'z', '0'.. '9'] of char;

Характерные особенности:

1. Каждая компонента массива может быть явно обозначена и к ней имеется прямой доступ.

2. Число компонент массива определяется при его описании и в дальнейшем не меняется.

В Паскале число элементов массива должно быть задано заранее. Если необходимо использовать массивы переменной размерности, то приходится описывать массивы с максимально возможным в данной задаче числом элементов, а затем использовать только часть из этих элементов.

Каждый элемент массива имеет свой порядковый номер, называемый индексом элемента в массиве. Индексы массива могут быть любого порядкового типа, чаще - целочисленного. Для матрицы элементы массива задаются двумя индексами: A[i,j] или A[i][j].

При работе с матрицами можно выделить два класса задач:

1) задачи с использованием одной матрицы;

2) задачи, в которых осуществляются матричные операции над несколькими матрицами.

Задание № 2. Программирование задачи с использованием одной матрицы

Для конкретного варианта, представленного в табл. 2.1, составить программу решения поставленной задачи.

С клавиатуры вводятся значения элементов заданной матрицы по строкам.

Пример составления программы

  1.  Постановка задачи: сформировать квадратную матрицу А порядка n, элементы которой являются целыми случайными числами в диапазоне от 0 до 100. Найти минимальный элемент, максимальный элемент и след матрицы. Полученные результаты вывести на экран.
  2.  Решение:
    •  Для формирования элементов матрицы используются два вложенных цикла for, в которых каждому элементу матрицы присваивается значение функции

A[i,j]:=random(100);

  •  Для нахождения минимального элемента необходимо ввести переменную min, а для определения строки и столбца, в которой этот элемент находится, введем переменные imin и jmin. Первоначально предполагается, что минимальным элементом является a11:

min:=A[1,1]; imin:=1; jmin:=1;

  •  При просмотре матрицы (два вложенных цикла for) сравниваем очередной элемент A[i,j] c минимальным. Если A[i,j]<min, то он становится минимальным и в переменных imin и jmin запоминаются соответствующие ему значения i и j. Если минимальных элементов несколько, то определяем первый из них.
    •  Для нахождения максимального элемента введем переменные max, imax и jmax. Поиск максимального элемента осуществляется аналогично, только при сравнении используется неравенство A[i,j]>max.
    •  Для нахождения следа матрицы введем переменную tr, в которой накопим сумму всех элементов, находящихся на главной диагонали.
    •  Для выдачи на печать матрицы используются два вложенных цикла for.
    •  Матрицу печатаем в привычном виде (1 строка матрицы - 1 строка экрана).
  1.  Листинг программы:

Program Matrix1;

{$APPTYPE CONSOLE}

uses

 SysUtils;

Const

 m=100;       // Максимальный размер матрицы 100х100

Type

 TMatrix = array[1..m,1..m] of integer;

Var

             A: TMatrix;

         n,i,j: integer;

 max,imax,jmax: integer;

 min,imin,jmin: integer;

            tr: integer;

function Rus(mes: string): string;

var

 i: integer;

begin

 for i:=1 to length(mes) do

   case mes[i] of

     'A'..'п': mes[i]:=Chr(Ord(mes[i])-64);

     'р'..'я': mes[i]:=Chr(Ord(mes[i])-16);

   end;

 Rus:=mes;

end;

Begin

 Randomize;

 Writeln(Rus('Введите порядок матрицы'),' n<=10');

 Readln(n);

 // Формирование элементов матрицы

 for i:=1 to n do

   for j:=1 to n do

     A[i,j]:=random(m); {Элементы матрицы - случайные числа от 0 до 100}

 tr:=0;       //Обнуление сумматора, накапливающего след матрицы

 max:=A[1,1]; //Вначале предполагается, что максимальный и

 imax:=1;     // минимальный элементы находятся в начале матрицы

 jmax:=1;

 min:=A[1,1];

 imin:=1;

 jmin:=1;

 for i:=1 to n do

   for j:=1 to n do

     begin

       if A[i,j]>max then

         begin

           max:=A[i,j];

           imax:=i;

           jmax:=j;

         end;

       if A[i,j]<min then

         begin

           min:=A[i,j];

           imin:=i;

           jmin:=j;

         end;

     end;

 for i:=1 to n do

   tr:=tr+A[i,i];

 // Вывод полученой матрицы

 Writeln(Rus('Матрица А'));

 for i:=1 to n do

   begin

     for j:=1 to n do

       Write(A[i,j]:4,' ');

     Writeln;

   end;

 Writeln(Rus('Максимальный элемент ='),max:4,' i=',imax:2,' j=',jmax:2);

 Writeln(Rus('Минимальный элемент ='),min:4,'  i=',imin:2,' j=',jmin:2);

 Writeln(Rus('След матрицы ='),tr:6);

 Readln;

End.

  1.  Результаты работы программы приведены на рис. 2.1.

Технология работы

  1.  Выбирете вариант задания из табл. 2.1. Номер варианта соответствует порядковому номеру студента в журнале.

Таблица 2.1.

№ варианта

Задача

Исходная матрица

1

Найти суммы чисел в первом и последнем столбцах и сравнить их. Полученный массив напечатать.

2

Найти максимальный элемент среди элементов, сумма индексов которых нечетна. Результат вывести на печать.

3

Упорядочить массив по убыванию элементов в каждом столбце. Результат напечатать.

4

Упорядочить массив по возрастанию элементов в каждой строке. Результат напечатать.

5

Найти сумму элементов в первой строке, а затем в последней, и сравнить их. Результаты напечатать с соответствующими заголовками.

6

Найти количество чисел, входящих в массив только один раз. Результат напечатать.

7

Найти сумму максимального и минимального элементов. Полученное значение увеличить на 10. Результат напечатать.

8

В каждой строке  найти наибольший элемент, затем получить их сумму. Результат напечатать.

9

В каждом столбце найти наибольший элемент, затем найти их произведение. Результат напечатать.

10

Найти произведение последних элементов строк. Результат напечатать.

11

Найти сумму элементов, расположенных ниже главной диагонали, и сумму элементов, расположенных выше главной диагонали. Результаты сравнить и напечатать.

12

Найти сумму элементов, расположенных на главной диагонали в строках, начинающихся с нуля. Результат напечатать.

13

Транспонировать матрицу и найти ее след. Преобразованный массив напечатать.

14

Найти строку, содержащую минимальный элемент, и упорядочить ее по убыванию элементов. Результат напечатать.

15

Найти количество элементов, равных заданному значению (4), и указать их позиции. Результат напечатать.

16

Найти сумму элементов, находящихся в нечетных столбцах, и произведение элементов, находящихся в четных строках. Результат напечатать.

17

Найти суммы чисел в первом и последнем столбцах и сравнить их. Полученный массив напечатать.

18

Найти максимальный элемент среди элементов, сумма индексов которых нечетна. Результат вывести на печать.

19

Упорядочить массив по убыванию элементов в каждом столбце. Результат напечатать.

20

Упорядочить массив по возрастанию элементов в каждой строке. Результат напечатать.

21

Найти сумму элементов в первой строке, а затем в последней, и сравнить их. Результаты напечатать с соответствующими заголовками.

22

Найти количество чисел, входящих в массив только один раз. Результат напечатать.

23

Найти сумму максимального и минимального элементов. Полученное значение увеличить на 10. Результат напечатать.

24

В каждой строке  найти наибольший элемент, затем получить их сумму. Результат напечатать.

25

В каждом столбце найти наибольший элемент, затем найти их произведение. Результат напечатать.

26

Найти произведение последних элементов строк. Результат напечатать.

27

Найти сумму элементов, расположенных ниже главной диагонали, и сумму элементов, расположенных выше главной диагонали. Результаты сравнить и напечатать.

28

Найти сумму элементов, расположенных на главной диагонали в строках, начинающихся с нуля. Результат напечатать.

29

Транспонировать матрицу и найти ее след. Преобразованный массив напечатать.

30

Найти строку, содержащую минимальный элемент, и упорядочить ее по убыванию элементов. Результат напечатать.

  1.  Составьте и отладьте программу, выполните вычисления для заданной матрицы и проанализируйте полученные результаты.
  2.  Отлаженный проект программы сохраните в папке \Мои документы\ЛЗ-04\Задание2 под именем Vatiant_, где - номер варианта.

Задание № 3. Программирование задачи с использованием нескольких матриц

При решении задач с несколькими матрицами важно отметить, что одни и те же операции производятся с несколькими матрицами, поэтому типовые операции с матрицами лучше оформить в виде процедур и использовать эти процедуры при решении задачи.

Определим типовые процедуры для работы с матрицами:

  •  ввод матрицы,
  •  печать матрицы,
  •  умножение матрицы на скаляр,
  •  транспонирование матрицы,
  •  сложение матриц,
  •  умножение матриц.

Операцию вычитания матриц (А – В) сведем к двум операциям: операция умножение матрицы В на скаляр   (-1) и операция сложения двух матриц: А – В = А + (-1)В.

Возведение в степень n сводится к n операциям умножения матрицы А.

Задача 3.1. Ввести значения элементов квадратной матрицы А порядка n и полученную матрицу вывести в привычном виде (1 строка матрицы - 1 строка экрана).

Ввод и вывод матрицы оформить в виде процедуры.

Решение. Процедуры ввода и вывода матрицы должны содержать в качестве параметров: порядок матрицы, идентификатор, которой выдается при вводе или выводе и имя матрицы. Перед вводом элемента на экран выводится поясняющий текст, в котором кроме индексов очередного элемента матрицы выдается имя матрицы (ее идентификатор). При выводе перед каждым элементом выводится имя матрицы, индексы элемента, а затем значение элемента. Максимальный порядок матрицы, с которой можно работать, задается с помощью константы NN. Если матрица используется в качестве параметра процедуры, то для нее надо дать явное определение типа:

Type TMatrix = array[1..NN,1..NN] of real;

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

Текст программы:

Program Z3_1;   // Программа ввода и вывода элементов матрицы

{$APPTYPE CONSOLE}

uses

 SysUtils;

Const

 NN=100;       // Максимальная размерность матрицы

Type

 TMatr=array[1..NN,1..NN] of real ;

Var

  n: integer;       // Порядок матрицы

  A: TMatr;         // Матрица

 ch: char;          // Идентификатор для ввода и вывода матрицы

function Rus(mes: string): string;

var

 i: integer;

begin

 for i:=1 to length(mes) do

   case mes[i] of

     'A'..'п': mes[i]:=Chr(Ord(mes[i])-64);

     'р'..'я': mes[i]:=Chr(Ord(mes[i])-16);

   end;

 Rus:=mes;

end;

// Процедура ввода элементов матрицы

Procedure Mvvod(n: integer; ch: char; var A: TMatr);

Var

 i,j: integer;

begin

 for i:=1 to n do

   begin

     for j:=1 to n do

       begin

         Write(ch,'[',i:2,',',j:2,']=');

         Readln(A[i,j]);

       end;

   end;

end;

// Процедура вывода (печати) элементов матрицы

Procedure Mvivod(n: integer; ch: char; A: TMatr);

Var

 i,j: integer;

begin

 for i:=1 to n do

   begin

     for j:=1 to n do

       Write(ch,'[',i:2,',',j:2,']=',A[i,j]:4:1);

       Writeln;

   end;

end;

// Основная программа

begin

 Writeln(Rus('Введите порядок матрицы'), ' n <= 10 ');

 Readln(n);

 ch:='A';         // Идентификатор массива

// Ввод матрицы

 Mvvod(n,ch,A);

// Вывод матрицы

 Mvivod(n,'A',A); {Идентификатор можно задать как параметр-значение}

 Readln;

end.

Задача 3.2. Из квадратной матрицы А порядка n получить матрицу С = 3AТ. Исходную и полученную матрицу распечатать.

Решение. Для ввода и вывода результатов можно использовать рассмотренные в задаче 3.1 процедуры Mvvod и Mvivod. В данной задаче надо выполнить транспонирование матрицы и умножение матрицы на скаляр – число 3.

Транспонирование матрицы заключается в замене строк на столбцы. Процедура Mtran, осуществляющая транспонирование матрицы, в качестве параметров содержит: порядок матрицы, имя исходной матрицы и имя матрицы, в которую помещается результат транспонирования. В качестве параметров процедуры умножения матрицы на скаляр Mscaliar, кроме перечисленных в процедуре Mtran параметров, необходимо ввести дополнительный параметр – скаляр, на который надо умножить матрицу.

Текст программы:

Program Z3_2; // Транспонирование матрицы и умножение на скаляр

{$APPTYPE CONSOLE}

uses

 SysUtils;

Const NN=10;    // Максимальная размерность матрицы

Type TMatr = array[1..NN,1..NN] of real;

Var

   n: integer; // Порядок матрицы

 A,C: TMatr;   // Исходная матрица и матрица результата

  sc: real;    // Скаляр, на который умножается матрица

  ch: char;    // Идентификатор для ввода и вывода матрицы

function Rus(mes: string): string;

var

 i: integer;

begin

 for i:=1 to length(mes) do

   case mes[i] of

     'A'..'п': mes[i]:=Chr(Ord(mes[i])-64);

     'р'..'я': mes[i]:=Chr(Ord(mes[i])-16);

   end;

 Rus:=mes;

end;

// Процедура ввода элементов матрицы

Procedure Mvvod(n: integer; ch: char; var A: TMatr);

Var

 i,j: integer;

begin

 for i:=1 to n do

   begin

     for j:=1 to n do

       begin

         Write(ch,'[',i:2,',',j:2,']=');

         Readln(A[i,j]);

       end;

   end;

end;

// Процедура вывода (печати) элементов матрицы

Procedure Mvivod(n: integer; ch: char; A: TMatr);

Var

 i,j: integer;

begin

 for i:=1 to n do

   begin

     for j:=1 to n do

       Write(ch,'[',i:2,',',j:2,']=',A[i,j]:4:1);

       Writeln;

   end;

end;

// Процедура умножения матрицы на скаляр

Procedure Mscaliar(n: integer; sc: real; A: TMatr; var C: TMatr);

Var

 i,j: integer;

begin

 for i:=1 to n do

   for j:=1 to n do

     C[i,j]:=sc*A[i,j];    // Умножение очередного элемента на скаляр

end;

// Процедура транспонирования матрицы

Procedure Mtran(n: integer; A: TMatr; var AT: TMatr);

Var

 i,j: integer;

begin

 for i:=1 to n do

   begin

     for j:=1 to n do

       AT[j,i]:=A[i,j] // Строки матрицы преобразуются в столбцы

   end

end;

// Основная программа

begin

 Writeln(Rus('Введите порядок матрицы'),' n<=10');

 Readln(n);

 Writeln(Rus('Введите значение скаляра'),' sc = ');

 Readln(sc);

 Mvvod(n,'A',A);      // Ввод матрицы А

 Writeln(Rus('Матрица А - исходная'));

 Mvivod(n,'A',A);     // Вывод матрицы А

 Mtran(n,A,C);        // Транспонирование матрицы А

 Writeln(Rus('Транспонированная матрица'));

 Mvivod(n,'T',C);     // Вывод транспонированной матрицы

 Writeln(Rus('Матрица С - результат умножения на скаляр'));

 Mscaliar(n,sc,C,C);  // Умножение матрицы на скаляр

 Mvivod(n,'C',C); // Вывод транспонированной матрицы,

                  //умноженной на скаляр

 Readln;

end.

Задача 3.3. Получить С =А + В , где А, В и С - квадратные матрицы порядка n. Исходные матрицы и результат распечатать.

Решение. Для ввода и вывода результатов можно использовать рассмотренные в задаче 3.1 процедуры Mvvod и Mvivod. Две матрицы суммируются сложением соответствующих элементов. Параметрами процедуры сложения двух матриц Msumma являются: порядок матриц, матрицы, которые надо сложить и матрица, являющаяся результатом сложения.

Текст программы:

Program Z3_3;    // Сложение матриц

{$APPTYPE CONSOLE}

uses

 SysUtils;

Const NN=10;    // Максимальная размерность матрицы

Type TMatr = array[1..NN,1..NN] of real;

Var

     n: integer;    // Порядок матрицы

 A,B,C: TMatr; // Исходные матрицы А, В и матрица результата С

    ch: char;  // Идентификатор для ввода и вывода матрицы

function Rus(mes: string): string;

var

 i: integer;

begin

 for i:=1 to length(mes) do

   case mes[i] of

     'A'..'п': mes[i]:=Chr(Ord(mes[i])-64);

     'р'..'я': mes[i]:=Chr(Ord(mes[i])-16);

   end;

 Rus:=mes;

end;

// Процедура ввода элементов матрицы

Procedure Mvvod(n: integer; ch: char; var A: TMatr);

Var

 i,j: integer;

begin

 for i:=1 to n do

   begin

     for j:=1 to n do

       begin

         Write(ch,'[',i:2,',',j:2,']=');

         Readln(A[i,j]);

       end;

   end;

end;

// Процедура вывода (печати) элементов матрицы

Procedure Mvivod(n: integer; ch: char; A: TMatr);

Var

 i,j: integer;

begin

 for i:=1 to n do

   begin

     for j:=1 to n do

       Write(ch,'[',i:2,',',j:2,']=',A[i,j]:4:1);

       Writeln;

   end;

end;

// Процедура сложения двух матриц

Procedure Msumma(n: integer; A,B: TMatr; var C: TMatr);

Var

 i,j: integer;

begin

 for i:=1 to n do

   for j:=1 to n do

     C[i,j]:=A[i,j]+B[i,j];

end;

// Основная программа

begin

 Writeln(Rus('Введите порядок матрицы'),' n<=10');

 Readln(n);

 Mvvod(n,'A',A);      // Ввод матрицы А

 Mvvod(n,'B',B);      // Ввод матрицы B

 Writeln(Rus('Матрица А - исходная'));

 Mvivod(n,'A',A);     // Вывод матрицы А

 Writeln(Rus('Матрица В - исходная'));

 Mvivod(n,'B',B);     // Вывод матрицы B

 Msumma(n,A,B,C);     // Сложение матриц А и В

 Writeln(Rus('Матрица С - результат '),'A+B');

 Mvivod(n,'C',C);     // Вывод результата

 Readln;

end.

Задача 3.4. Получить С =АВ , где А, В и С – квадратные матрицы порядка n. Исходные матрицы и результат распечатать.

Решение. Для ввода и вывода результатов можно использовать рассмотренные в задаче 3.1 процедуры Mvvod и Mvivod. Формула для умножения двух матриц приведена выше. Параметры процедуры умножения двух матриц Mumn аналогичны параметрам процедуры сложения двух матриц Msumma, рассмотренной в предыдущей задаче 3.3.

Текст программы:

Program Z3_4;        // Умножение квадратных матриц

{$APPTYPE CONSOLE}

uses

 SysUtils;

Const NN=10;         // Максимальная размерность матрицы

Type TMatr = array[1..NN,1..NN] of real;

Var

     n: integer;  // Порядок матрицы

 A,B,C: TMatr;    // Исходные матрицы А, В и матрица результата С

    ch: char;     // Идентификатор для ввода и вывода матрицы

function Rus(mes: string): string;

var

 i: integer;

begin

 for i:=1 to length(mes) do

   case mes[i] of

     'A'..'п': mes[i]:=Chr(Ord(mes[i])-64);

     'р'..'я': mes[i]:=Chr(Ord(mes[i])-16);

   end;

 Rus:=mes;

end;

// Процедура ввода элементов матрицы

Procedure Mvvod(n: integer; ch: char; var A: TMatr);

Var

 i,j: integer;

begin

 for i:=1 to n do

   begin

     for j:=1 to n do

       begin

         Write(ch,'[',i:2,',',j:2,']=');

         Readln(A[i,j]);

       end;

   end;

end;

// Процедура вывода (печати) элементов матрицы

Procedure Mvivod(n: integer; ch: char; A: TMatr);

Var

 i,j: integer;

begin

 for i:=1 to n do

   begin

     for j:=1 to n do

       Write(ch,'[',i:2,',',j:2,']=',A[i,j]:4:1);

       Writeln;

   end;

end;

// Процедура умножения двух квадратных матриц

Procedure Mumn(n: integer; A,B: TMatr; var C: TMatr);

Var

 i,j,k: integer;

     s: real;        // Сумма произведений A[k,i]*B[i,j]

begin

 for k:=1 to n do

   begin

     for j:=1 to n do

       begin

         s:=0;

           for i:=1 to n do

             s:=s+A[k,i]*B[i,j];

         C[k,j]:=s;

       end;

   end;

end;

// Основная программа

begin

 Writeln(Rus('Введите порядок матрицы'),' n<=10');

 Readln(n);

 Mvvod(n,'A',A);      // Ввод матрицы А

 Mvvod(n,'B',B);      // Ввод матрицы B

 Writeln(Rus('Матрица А - исходная'));

 Mvivod(n,'A',A);     // Вывод матрицы А

 Writeln(Rus('Матрица В - исходная'));

 Mvivod(n,'B',B);     // Вывод матрицы B

 Mumn(n,A,B,C);       // Умножение матриц А и В

 Writeln(Rus('Матрица С - результат '),'A*B');

 Mvivod(n,'C',C);     // Вывод результата

 Readln;

end.

Технология работы

  1.  Используя рассмотренные в задачах процедуры ввода (Mvvod), вывода (Mvivod), умножения на скаляр (Mscaliar), транспонирования (Mtran), сложения (Msumma) и умножения (Mumn) матриц, составьте программу вычисления матрицы в соответствии с вариантом, приведенном в табл. 2.2. Номер варианта соответствует порядковому номеру студента в журнале.

А, В и С – квадратные матрицы порядка n. Исходные матрицы и результат распечатать.

Таблица 2.2.

№ варианта

Задача

Матрица А

Матрица В

1

C = А+BТ-2A*B

2

C = -АТ+B-3A*BТ

3

C = 0.5А+B-4AТ*BТ

4

C = 2.7(А+B-5AТ*B)

5

C = АТ-3.2B+1.5A*B

6

C = АТ/4-BТ+2.7A*B

7

C = -3.5А-BТ-AТ*B

8

C = АТ+(B*АТ-A)

9

C = (А/2+BТ)*(2A)

10

C = -8А+2.5AТ*B+BТ

11

C = (АТ-2B*A)+BТ

12

C = АТ+2.8BТ-A*B

13

C = BТ*А-4(A+B)

14

C = 10АТ+3(BТ-2A*B)

15

C = 4.8(А+BТ)-6.2AТ*B

16

C = 6.2А*BТ-4AТ+B

17

C = А+BТ-2A*B

18

C = -АТ+B-3A*BТ

19

C = 0.5А+B-4AТ*BТ

20

C = 2.7(А+B-5AТ*B)

21

C = АТ-3.2B+1.5A*B

22

C = АТ/4-BТ+2.7A*B

23

C = -3.5А-BТ-AТ*B

24

C = АТ+(B*АТ-A)

25

C = (А/2+BТ)*(2A)

26

C = -8А+2.5AТ*B+BТ

27

C = (АТ-2B*A)+BТ

28

C = АТ+2.8BТ-A*B

29

C = BТ*А-4(A+B)

30

C = 10АТ+3(BТ-2A*B)

  1.  Составьте и отладьте программу, выполните вычисления для заданных матриц и проанализируйте полученные результаты.
  2.  Отлаженный проект программы сохраните в папке \Мои документы\ЛЗ-04\Задание3 под именем Vatiant_, где № - номер варианта.

ВЫВОДЫ

  1.  Массив представляет собой набор каких либо объектов (чисел, символов и т.п.) одного типа. Каждый объект массива помимо своего значения характеризуется местоположением, называемым индексом (номером). Способ индексации, тип элементов, длина массива фиксируются в описании того типа, которому принадлежит массив. Операции над объектами типа массив – это доступ к отдельным элементам массива с помощью индексов и изменения отдельных элементов массива с помощью допустимых для данного типа операций.
  2.  Матрица представляет собой прямоугольную таблицу однотипных объектов (чисел, символов, строк и т.п.), расположенных строками и столбцами. Операции над матрицами – это операции над таблицами чисел: равенство матриц, умножение матрицы на скаляр, сложение и вычитание матриц, перемножение матриц, транспонирование матрицы, возведение матрицы в заданную степень.

Контрольные вопросы

  1.  Как определяется одномерный массив в программе?
  2.  Как можно сформировать одномерный массив целых случайных чисел?
  3.  Как в одномерном массиве ищется минимальный (максимальный) элемент?
  4.  Как ввести элементы массива с клавиатуры?
  5.  Как вывести элементы массива на экран монитора?
  6.  Что собой представляют матрицы и как они определяются в программе?
  7.  Какие операции можно выполнять с матрицами в программе?
  8.  В чем состоят особенности поиска масимальных (минимальных) элементов в матрице?


Рис. 1.1.
 Результаты работы программы нахождения минимального и максимального элементов одномерного массива и среднего значения

Рис. 2.1. Результаты работы программы нахождения минимального и максимального элементов матрицы, а также ее следа

  1.  

 

А также другие работы, которые могут Вас заинтересовать

49036. СИСТЕМА АВТОМАТИЧЕСКОГО РЕГУЛИРОВАНИЯ ЧАСТОТЫ ВРАЩЕНИЯ ДВИГАТЕЛЯ ПОСТОЯННОГО ТОКА 2 MB
  Анализ действующих на систему возмущающих воздействия и их влияние на статические характеристики САР Принцип работы системы Классификация САР Позвенное аналитическое описание процессов в САУ. Получим дифференциальные уравнения и передаточные функции звеньев САУ Разработка структурной схемы САР Уравнения динамики замкнутой САР Анализ на структурную устойчивость САР Расчёт требуемого коэффициента усиления в разомкнутом состоянии...
49037. Экономическая теория. Особенности экономических процессов 957.34 KB
  Экономика – одна из древнейших наук, которая всегда привлекала внимание ученых и образованных людей. Объясняется это тем, что изучение экономической теории – это реализация объективной необходимости познания мотивов, действий людей в хозяйственной деятельности, законов хозяйствования во все времена.
49038. ПРАВА ГРОМАДЯН У СФЕРІ ВИКОНАВЧОЇ ВЛАДИ: АДМІНІСТРАТИВНО-ПРАВОВЕ ЗАБЕЗПЕЧЕННЯ РЕАЛІЗАЦІЇ ТА ЗАХИСТУ 798.5 KB
  Досліджуються актуальні проблеми адміністративно-правового забезпечення реалізації та захисту прав громадян у сфері виконавчої влади. Ґрунтовно розглядаються політико-правові аспекти взаємодії людини, держави і управління, розвиток демократичних засад державного управління у світлі сучасного європейського досвіду...
49039. Выполнение действия в виде функций с динамическим распределением памяти программным способом 365.5 KB
  Вывести результат сглаживания заданной вещественной матрицы размером 10 на 10. Соседями элемента Аij в матрице назовем элементы. Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент которой получается как среднее арифметическое имеющихся соседей соответствующего элемента исходной матрицы.
49040. Решение дифференциального уравнение с заданными начальными значениями 451 KB
  Данное уравнение необходимо решить методом Эйлера и Эйлера модифицированного а также сравнить результаты и сделать вывод об эффективности методов построить их графики.Метод Эйлера Данный метод одношаговый. Обобщим формулу для решения дифференциальных уравнений методом Эйлера: 3.Эйлер модифицированный Для уменьшения погрешности вычислений часто используется модифицированный метод Эйлера.
49041. WEB – СЕРВИС 1.21 MB
  Приходится разбираться с многочисленными параметрами конфигурации pche PHP и MySQL. Денвер это те же самые дистрибутивы pche PHP MySQL. Денвер создавался для того чтобы упростить настройку и установку свободно распространяемых программ pche PHP MySQL и т. Базовый пакет содержит большинство необходимых Webпрограммисту программ и утилит: pche с поддержкой SSI mod_rewrite mod_php.
49043. Расчёт и моделирование частотно-избирательного усилителя 712.5 KB
  Еще один буферный каскад должен согласовывать последний УК с входным сопротивлением RCфильтра и еще один – на полевом транзисторе – с высоким выходным сопротивлением датчика. Итого схема будет состоять из датчика трех буферных каскадов двух усилительных RCфильтра и нагрузки. Схема будет состоять из датчика 4х каскадов усиления одного буферного каскада для согласования с RCфильтром RCфильтра.
49044. Основные жизненные процессы 439.5 KB
  В организованной структуре ее элементы осуществляют только такую активность, которая не нарушает существования и функционирования органического целого. Поэтому повышение (или усложнение) организации означает уменьшение степени свободы частей целого. Жестко организованные объекты имеют нулевую степень свободы частей