Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №2 Вариант №1

.doc
Скачиваний:
13
Добавлен:
20.06.2014
Размер:
1.14 Mб
Скачать

2

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ

Лабораторная работа №2

по дисциплине

«Программирование на языке высокого уровня»

на тему:

«Операции над матрицами»

Студент

подпись, дата

фамилия, инициалы

Группа

Принял

Фарафонов А.С.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2010

  1. Задание

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

    1. Хранить матрицу в виде одномерного массива

1

k*A+B*CT

  1. Блок-схема

  1. Листинг программы

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <locale.h>

int* input_matr(int *x, int *y)

{

int *A,i,j;

printf("\nВведите х и у матрицы: ");

scanf("%d %d", x, y);

A=(int *)malloc(*x**y*sizeof(int));

for(i=0;i<*y;i++)

for(j=0;j<*x;j++)

{

printf("Введите А[%d][%d]: ",i,j);

scanf("%d", &A[(i*(*x)+j)]);

}

return A;

}

int* umnogK(int *A,int x, int y)

{

int *A_new,i,k;

printf("Введите коэффициент к: ");

scanf("%d",&k);

A_new=(int *)malloc(x*y*sizeof(int));

for(i=0;i<y*x;i++)

A_new[i]=A[i]*k;

return A_new;

}

int* transponirovanie(int *A,int *x,int *y)

{

int *A_new, i,j;

A_new=(int *)malloc(*x**y*sizeof(int));

i=*x;

*x=*y;

*y=i;

for(i=0;i<*y;i++)

for(j=0;j<*x;j++)

A_new[i**x+j]=A[j**y+i];

return A_new;

}

int* umnogenie(int *A,int *B,int *xA, int *yA, int *xB)

{

int *A_new;

A_new=(int *)malloc(*yA**xB*sizeof(int));

for(int i=0;i<*yA;i++)

for(int j=0;j<*xB;j++)

{

A_new[i**xB+j]=0;

for(int l=0;l<*xA;l++)

A_new[i**xB+j]=A_new[i**xB+j]+A[i**xA+l]*B[l**xB+j];

}

*xA=*xB;

return A_new;

}

int* slogenie(int *A,int x,int y,int *B)

{

int *A_new,i;

A_new=(int *)malloc(x*y*sizeof(int));

for(i=0;i<x*y;i++)

A_new[i]=A[i]+B[i];

return A_new;

}

void main()

{

setlocale(LC_ALL,"RUS");

int *A,*B,*C, x[3],y[3],i,j;

A=input_matr(&x[0], &y[0]);

B=input_matr(&x[1], &y[1]);

C=input_matr(&x[2], &y[2]);

A=umnogK(A,x[0],y[0]);

C=transponirovanie(C,&x[2],&y[2]);

if(x[1]==y[2])

B=umnogenie(B,C,&x[1],&y[1],&x[2]);

else

{

printf("Размерности матриц B и С не позволяют произвести операцию умножения!");

getch();

exit(1);

}

if((x[1]==x[0])&&(y[1]==y[0]))

B=slogenie(B,x[1],y[1],A);

else

{

printf("Размерности матриц А и С не позволяют произвести операцию сложения!");

getch();

exit(1);

}

printf("\nРезультат:\n");

for(i=0;i<y[1];i++)

{

for(j=0;j<x[1];j++)

printf("A[%d][%d]= %d\t",i,j,B[i*x[2]+j]);

printf("\n");

}

getch();

}

  1. Контрольный пример

  1. Выводы о проделанной работе

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

  1. Список использованной литературы

  1. Шилдт Г. Искусство программирования на C++. БХВ.2005

  2. Шилдт Г. C++ Руководство для начинающих. Вильямс.2005

  3. Страуструп Б. Язык программирования С++. Специальное издание, 3-изд. Бином.2004