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.  

 

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

73944. ТИПОЛОГИЯ ЛИТЕРАТУРНОГО СУБЪЕКТА 77 KB
  В эпосе герой еще всецело находится в зависимости от божества: он не может действовать самостоятельно он по словам Б. Герой обладает теми же качествами что и боги но он жертва тех свойств носителем которых является. Тематическая близость обнаруживается между Бедными людьми и повестью Белые ночи герой которой дает себе уничижительную характеристику: Мечтатель не человек а знаете какоето существо среднего рода.
73945. ШКОЛЫ И МЕТОДЫ СОВРЕМЕННОГО ЛИТЕРАТУРОВЕДЕНИЯ 148.5 KB
  Гадамер утверждает что смысловые потенции текста далеко выходят за пределы того что имел в виду его создатель. Суть интерпретации для Хирша как и деконструктивистов состоит в том чтобы из знаковой системы текста создать нечто большее чем его физическое бытие создать его значение. В повседневной практике интерпретации Хирш видит подтверждение онтологического равенства всех возможных значений интерпретируемого текста.
73946. Финансы, конспект лекций 2.73 MB
  Исследование системы финансовых экономических отношений возникающих по поводу образования и использования фондов денежных средств сложный процесс. Finnci1 в переводе означают наличность доход ; в широком смысле денежные средства денежные обороты . Главное назначение финансов состоит в том чтобы путем создания денежных доходов и фондов обеспечить не только потребности государства и предприятий в денежных средствах но и контроль за расходованием финансовых ресурсов. Национальный доход страны равен валовому общественному продукту...
73947. Разрывные нарушения. Трещиноватость, кливаж 41.5 KB
  Понятия о согласном и несогласном залегании осадочных пород. Они выражаются в нарушении сплошности горных пород т.Разрывы со смещением горных пород. Часто сместитель может представлять целую зону раздробленных пород; иметь выпуклую или вогнутую форму быть волнистыми.
73949. Основы работы с базами данных: создание псевдонима, создание таблицы, изменение структуры таблицы 308 KB
  База данных (БД) - это структурированный набор постоянно хранимых данных. Постоянность означает, что данные не уничтожаются по завершении программы или пользовательского сеанса, в котором они были созданы.
73950. Геодезические работы при проектировании изысканий сооружений линейного типа (нивелирование трасс линейных сооружений) 1.69 MB
  На стадии предварительных изысканий трассирование подводящих сетей выполняют камеральным путем пользуясь имеющимися картами с целью получения плана и профиля трассы в масштабе карты. Для составления рабочего проекта производят окончательные изыскания трассы с закреплением ее на местности с необходимой детализацией элементов. Цель этой стадии изысканий получить план профиль трассы в требуемом масштабе; установить геометрические параметры трассы для строительства. Трассирование – комплект геодезических работ по проложению разбивке и...
73951. Геодезические наблюдения за деформациями зданий и сооружений 890 KB
  Определение крена вертикальной оси. Определение крена вертикальной оси Геометрическая сущность измерения крена сводится к определению взаимного положения двух точек сооружения которые по техническим условиям проекта должны лежать на одной отвесной линии. Определение крена с помощью измерения линейной величины. Определение крена по вертикальной нити теодолита.
73952. Геодезические работы при вертикальной планировке строительной площадки 1.43 MB
  В результате проектирования находят отметки проектной поверхности определяют рабочие отметки показывают высоту насыпи или глубину выемки в каждой точке проекта по формуле В завершении вычисляют объем земляных работ и составляют картограмму перемещения земляных масс. Проектирование горизонтальной площадки с соблюдением баланса земляных работ метод вертикальной планировки по квадратам Последовательность геодезических работ на строительной площадке: Построение на строительной площадке сетки квадратов Создание развитие высотного съемочного...