Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Второй семестр / Курсовая работа.odt
Скачиваний:
3
Добавлен:
28.05.2022
Размер:
1.56 Mб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра математического обеспечения и применения ЭВМ

Курсовая работа

по дисциплине «Информационные модели и системы»

Тема: «Массивы и операции над ними»

Студент гр. 8802

Попов А.П.

Преподаватель

Сидоров Ю.Н.

Санкт-Петербург

2019

СОДЕРЖАНИЕ

Содержательная постановка задачи...........................................................................3

Формальная постановка задачи..................................................................................3

Алгоритмизация...........................................................................................................4

Типы структур данных................................................................................................5

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

Пример исполнения программы................................................................................8

Содержательная постановка задачи

Требуется написать программу, которая

а) формирует матрицу C(m*m), полученную путем перемножения матрицы B(m*n) на матрицу A(n*m)

б) находит в матрице C сумму элементов строк и столбцов, на пересечении которых лежат отрицательные элементы

Формальная постановка задачи.

Дано: Натуральные числа m,n ∈ N, обозначающие размерность матрицы. Матрица B(m*n), матрица A(n*m). Элементы матриц A и B - целые числа

Найти:

а) Матрицу C = B * A, где C – квадратная матрица порядка m; элемент c(i,k) матрицы C равен

б) Для матрицы C построить матрицу D, имеющую (p*4) строк и 1 столбец, где p – количество отрицательных элементов матрицы C.

Элементы матрицы D:

d(1,1+t*4) – отрицательный элемент в матрице C

d(1,2+t*4) – номер строки, на которой расположен отрицательный элемент

d(1,3+t*4) – номер столбца, на котором расположен отрицательный элемент

d(1,4+t*4) – сумма элементов строки и столбца, на которых находится отрицательный элемент.

t – принимает значения от 1 до p.

Если p = 0, то такой матрицы не существует.

Алгоритмизация

Сообщения, выводимые на экран, сокращены.

Типы и структуры данных

m - количество строк массива B и столбцов массива A

n - количество столбцов массива A и столбцов массива B, а также количество строк и столбцов массива C.

B – исходный динамический массив целого типа из m*n элементов, заполняется случайными числами с масштабированием

Aисходный динамический массив целого типа из n*m элементов, заполняется случайными числами с масштабированием

С - итоговый динамический массив целого типа из n*n элементов. Заполняется по правилу перемножения матриц C = A * B.

i, k, j – переменные короткого беззнакового целого типа, счетчики.

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

cell - переменная целого типа. В ней суммируется значение элемента матрицы C

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

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

program course;

const Size=10; //Size - размер массивов

var

A: array [1..Size,1..Size] of integer; //Массив A

B: array [1..Size,1..Size] of integer; //Массив B

C: array [1..Size,1..Size] of integer; //Массив C

D: array [1..Size*Size*4] of integer; // Массив D

sum, cell : integer; //sum - сумма элементов строк и столбцов, на пересечении которых находятся отрицательные элементы. cell - итоговое значение ячейки массива C, которое вычисляется по правилу умножения матриц

i, k , j ,m , n : byte; //i, k - счетчики для строк и столбцов массивов. m, n - количество строк и столбцов в массиве B, а также количество столбцов и строк в массиве A. j - счетчик для перемножения матриц и суммирования элементов.

p : word; //p - счетчик числа отрицательных элементов в матрице C

begin

randomize;

//Ввод размеров для массивов A и B

m:=1;

while ((m<1) or (n<1)) do

begin

write ('Введите размер массивов A(n*m) и B(m*n) Введите n->'); readln(n);

write ('Введите m -> '); readln (m);

if ((m<1) or (n<1) or (m>10) or (n>10)) then writeln ('Не допустимый размер массивов, введите заново');

end;

//Заполнение массива A и вывод его значений на экран

writeln ('Массив A:');

for i:=1 to n do

begin

for k:=1 to m do

begin

A[i][k]:=10-random(20);

write (A[i][k],#9);

end;

writeln(' ');

end;

//Заполнение массива B и вывод его значений на экран

writeln('');

writeln('Массив B:');

for i:=1 to m do

begin

for k:=1 to n do

begin

B[i][k]:=10-random(20);

write (B[i][k],#9);

end;

writeln(' ');

end;

//Вычисление значений массива C, часть задачи a)

cell:=0;

for i:=1 to n do

begin

for k:=1 to n do

begin

for j:=1 to m do cell := cell + (A[i][j]*B[j][k]);

C[i][k] := cell;

cell:=0;

end;

end;

//Вывод массива C на экран

writeln('');

writeln('Массив C:');

for i:=1 to n do

begin

for k:=1 to n do write (C[i][k],#9);

writeln(' ');

end;

//Поиск отрицательных элементов и подсчет суммы элементов строк и столбцов, на пересечении которых находятся отрицательные элементы. Часть задачи б)

p:=0; sum:=0;

for i:=1 to n do

begin

for k:=1 to n do

begin

if (C[i][k]<0) then

begin

for j:=1 to n do sum := sum + C[i][j] + C[j][k];

D[1+p*4] := C[i][k];

D[2+p*4] := i;

D[3+p*4] := k;

D[4+p*4] := sum - C[i][k];

p := p + 1;

sum:=0;

end;

end;

end;

//Вывод информации о найденных элементах

if (p=0) then writeln ('Отрицательных элементов не найдено') else

begin

writeln ('Найдено ',p, ' элементов.');

for i:=0 to p-1 do writeln ('Элемент матрицы C = ',D[1+i*4], '[',D[2+i*4],'][',D[3+i*4],']. Сумма строк и столбцов на пересечении которых находится элемент = ', D[4+i*4]);

end;

end.

Соседние файлы в папке Второй семестр