Лабораторная работа №2 Вариант 8
.doc
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ЛИПЕЦКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
КАФЕДРА АВТОМАТИЗИРОВАННЫХ СИСТЕМ УПРАВЛЕНИЯ
Лабораторная работа №2
по дисциплине
«Программирование на языке высокого уровня»
на тему:
«Разработка функциональных модулей обработки агрегатных данных
файлом»
|
Студент |
|
|
|
Ельшаева Н.А. |
|
||||||||
|
|
|
подпись, дата |
|
фамилия, инициалы |
|
||||||||
|
Группа |
|
АС-09 |
|
|
|
|
|||||||
|
|
|
|
|
|
|
||||||||
|
Принял |
|
|
|
Фарафонов А.С. |
|
||||||||
|
|
|
|
|
|
|
||||||||
|
ученая степень, звание |
|
подпись, дата |
|
фамилия, инициалы |
|
Липецк 2010
-
Задание
-
Вычислить заданное матричное выражение, в котором размеры матриц и их содержимое определяются пользователем. Для вычисления суммы, произведения матриц и умножения матриц на константу реализовать и использовать пользовательские функции. Контролировать размерность матриц для осуществления матричных операций. В случае, если размерность матриц не позволяет провести операцию, выдавать сообщение об этом.
-
Хранить матрицу в виде одномерного массива
-
Вариант 8
(A+BT-k*I)*CT
-
Краткие теоретические сведения
Массив — Упорядоченный набор данных, для хранения данных одного типа, идентифицируемых с помощью одного или нескольких индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа.
Количество используемых индексов массива может быть различным. Массивы с одним индексом называют одномерными, с двумя — двумерными и т. д. Одномерный массив нестрого соответствует вектору в математике, двумерный — матрице. Чаще всего применяются массивы с одним или двумя индексами, реже — с тремя, ещё большее количество индексов встречается крайне редко.
Фу́нкция — в программировании — один из видов подпрограммы. Особенность, отличающая её от другого вида подпрограмм — процедуры, состоит в том, что функция возвращает значение, а её вызов может использоваться в программе как выражение.
С точки зрения теории систем, функция в программировании — отдельная система (подсистема, подпрограмма), на вход которой поступают управляющие воздействия в виде значений аргументов. На выходе системы получаем результат выполнения программы, который может быть как скалярной величиной, так и векторным значением. По ходу выполнения функции могут выполняться также некоторые изменения в управляемой системе, причём как обратимые, так и необратимые.
В некоторых языках программирования (например, в Паскале) функции существуют наряду с процедурами (подпрограммами, не возвращающими значения), в других, например, в C, являются единственным реализованным видом подпрограммы (то есть все подпрограммы являются функциями и могут возвращать значение, для реализации функций, не возвращающих значения, в языке предусмотрен специальный "тип" void).
Побочным эффектом функции называется любое изменение функцией состояния программной среды, кроме возврата результата (изменение значений глобальных переменных, выделение и освобождение памяти, ввод-вывод и так далее). Теоретически наиболее правильным является использование функций, не имеющих побочного эффекта (то есть таких, в результате вызова которых возвращается вычисленное значение, и только), хотя на практике приходится использовать функции с побочным эффектом, хотя бы для обеспечения ввода-вывода и отображения результатов работы программы. Существует специфическая парадигма программирования — функциональное программирование, в которой любая программа представляет собой набор вложенных вызовов функций, не вызывающих побочных эффектов. Наиболее известный язык программирования, реализующий эту парадигму — Лисп. В нём любая операция, любая конструкция языка, любое выражение, кроме константы, являются вызовами функций. Наиболее полно парадигма функционального программирования реализуется в языке Хаскелл.
-
Блок-схема программы
-
Листинг программы
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <locale.h>
int* vvodA(int *xA, int *yA)
{
int *A,i,j;
printf("\nВведите х и у матрицы A: ");
scanf("%d %d", xA, yA);
A=(int *)malloc(*xA**yA*sizeof(int));
for(i=0;i<*yA;i++)
for(j=0;j<*xA;j++)
{
printf("Введите А[%d][%d]: ",i,j);
scanf("%d", &A[(i*(*xA)+j)]);
}
return A;
}
int* vvodB(int *xB, int *yB)
{
int *B,i,j;
printf("\nВведите х и у матрицы B: ");
scanf("%d %d", xB, yB);
B=(int *)malloc(*xB**yB*sizeof(int));
for(i=0;i<*yB;i++)
for(j=0;j<*xB;j++)
{
printf("Введите B[%d][%d]: ",i,j);
scanf("%d", &B[(i*(*xB)+j)]);
}
return B;
}
int* vvodC(int *xC, int *yC)
{
int *C,i,j;
printf("\nВведите х и у матрицы C: ");
scanf("%d %d", xC, yC);
C=(int *)malloc(*xC**yC*sizeof(int));
for(i=0;i<*yC;i++)
for(j=0;j<*xC;j++)
{
printf("Введите C[%d][%d]: ",i,j);
scanf("%d", &C[(i*(*xC)+j)]);
}
return C;
}
int* vvodI(int *xI, int *yI)
{
int *I,i,j;
printf("\nВведите х и у единичной матрицы I: ");
scanf("%d %d", xI, yI);
I=(int *)malloc(*xI**yI*sizeof(int));
for(i=0;i<*yI;i++)
for(j=0;j<*xI;j++)
{
if(i==j)
I[i**xI+j]=1;
else
I[i**xI+j]=0;
}
return I;
}
int* umnK(int *A,int xA, int yA, int k)
{
int *A_new,i;
A_new=(int *)malloc(xA*yA*sizeof(int));
for(i=0;i<yA*xA;i++)
A_new[i]=A[i]*k;
return A_new;
}
int* trans(int *A,int *xA,int *yA)
{
int *A_new, i,j;
A_new=(int *)malloc(*xA**yA*sizeof(int));
i=*xA;
*xA=*yA;
*yA=i;
for(i=0;i<*yA;i++)
for(j=0;j<*xA;j++)
A_new[i**xA+j]=A[j**yA+i];
return A_new;
}
int* umn(int *A,int *B,int *xB, int *yB)
{
int *A_new,i,j,i1=-1,j1=-*xB,l,k=0,s=0;
A_new=(int *)malloc(*xB**xB*sizeof(int));
for(i=0;i<*xB;i++)
{
for(j=0;j<*xB;j++)
{
i1=i**yB;
j1=j;
for(l=0;l<*yB;l++)
{
s=s+A[i1]*B[j1];
i1++;
j1=j1+*xB;
}
A_new[i**xB+j]=s;
s=0;
}
i1=i1+*yB;
j1=0;
}
*yB=*xB;
return A_new;
}
int* slog(int *A,int *B,int xA,int yA)
{
int *A_new,i;
A_new=(int *)malloc(xA*yA*sizeof(int));
for(i=0;i<xA*yA;i++)
A_new[i]=A[i]+B[i];
return A_new;
}
void main()
{
setlocale(LC_ALL,"RUS");
int *A,*B,*C,*I, xA=0, xB=0, yA=0, yB=0,xC=0,yC=0,xI=0,yI=0, i,j,k;
A=vvodA(&xA, &yA);
B=vvodB(&xB, &yB);
C=vvodC(&xC, &yC);
I=vvodI(&xI, &yI);
printf("Введите коэффициент К: ");
scanf("%d",&k);
B=trans(B, &xB, &yB);
C=trans(C, &xC, &yC);
I=umnK(I,xI,yI, -k);
if((xA==xB)&&(yA==yB))
A=slog(A,B,xA,xB);
if((xA==xI)&&(yA==yI)&&(xA==yA)
A=slog(A,I,xI,xI);
else
{
printf("Неверный ввод данных");
getch();
exit(1);
}
if((xA==xI)&&(yA==yI))
A=slog(A,I,xI,xI);
else
{
printf("Неверный ввод данных");
getch();
exit(1);
}
if((xA==yC)&&(yA==xC))
C=umn(A,C,&xC,&yC);
else
{
printf("Неверный ввод данных");
getch();
exit(1);
}
printf("\nРезультат:\n");
for(i=0;i<yC;i++)
{
for(j=0;j<xC;j++)
printf("%d ",C[i*xC+j]);
printf("\n");
}
getch();
}
-
Контрольный пример
-
Выводы о проделанной работе
При выполнении данной лабораторной работы я научилась работать с матрицами.
-
Список использованной литературы
-
Шилдт Г. Искусство программирования на C++. БХВ.2005
-
Шилдт Г. C++ Руководство для начинающих. Вильямс.2005
-
Страуструп Б. Язык программирования С++. Специальное издание, 3-изд. Бином.2004