Лабораторная работа №2 Вариант №1
.doc
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ
Лабораторная работа №2
по дисциплине
«Программирование на языке высокого уровня»
на тему:
«Операции над матрицами»
|
Студент |
|
|
|
|
|
||||||||
|
|
|
подпись, дата |
|
фамилия, инициалы |
|
||||||||
|
Группа |
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
||||||||
|
Принял |
|
|
|
|
|
||||||||
|
|
|
|
|
Фарафонов А.С. |
|
||||||||
|
ученая степень, звание |
|
подпись, дата |
|
фамилия, инициалы |
|
Липецк 2010
-
Задание
-
Вычислить заданное матричное выражение, в котором размеры матриц и их содержимое определяются пользователем. Для вычисления суммы, произведения матриц и умножения матриц на константу реализовать и использовать пользовательские функции. Контролировать размерность матриц для осуществления матричных операций. В случае, если размерность матриц не позволяет провести операцию, выдавать сообщение об этом.
-
Хранить матрицу в виде одномерного массива
-
1 |
k*A+B*CT |
-
Блок-схема
-
Листинг программы
#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();
}
-
Контрольный пример
-
Выводы о проделанной работе
При выполнении данной лабораторной работы я научился работать с матрицами.
-
Список использованной литературы
-
Шилдт Г. Искусство программирования на C++. БХВ.2005
-
Шилдт Г. C++ Руководство для начинающих. Вильямс.2005
-
Страуструп Б. Язык программирования С++. Специальное издание, 3-изд. Бином.2004