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

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

.doc
Скачиваний:
14
Добавлен:
20.06.2014
Размер:
327.68 Кб
Скачать

2

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

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

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

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

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

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

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

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

на тему:

«Разработка функциональных модулей обработки агрегатных данных

файлом»

Студент

Ельшаева Н.А.

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

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

Группа

АС-09

Принял

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

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

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

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

Липецк 2010

  1. Задание

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

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

Вариант 8

(A+BT-k*I)*CT

  1. Краткие теоретические сведения

Массив — Упорядоченный набор данных, для хранения данных одного типа, идентифицируемых с помощью одного или нескольких индексов. В простейшем случае массив имеет постоянную длину и хранит единицы данных одного и того же типа.

Количество используемых индексов массива может быть различным. Массивы с одним индексом называют одномерными, с двумя — двумерными и т. д. Одномерный массив нестрого соответствует вектору в математике, двумерный — матрице. Чаще всего применяются массивы с одним или двумя индексами, реже — с тремя, ещё большее количество индексов встречается крайне редко.

Фу́нкция — в программировании — один из видов подпрограммы. Особенность, отличающая её от другого вида подпрограмм — процедуры, состоит в том, что функция возвращает значение, а её вызов может использоваться в программе как выражение.

С точки зрения теории систем, функция в программировании — отдельная система (подсистема, подпрограмма), на вход которой поступают управляющие воздействия в виде значений аргументов. На выходе системы получаем результат выполнения программы, который может быть как скалярной величиной, так и векторным значением. По ходу выполнения функции могут выполняться также некоторые изменения в управляемой системе, причём как обратимые, так и необратимые.

В некоторых языках программирования (например, в Паскале) функции существуют наряду с процедурами (подпрограммами, не возвращающими значения), в других, например, в C, являются единственным реализованным видом подпрограммы (то есть все подпрограммы являются функциями и могут возвращать значение, для реализации функций, не возвращающих значения, в языке предусмотрен специальный "тип" void).

Побочным эффектом функции называется любое изменение функцией состояния программной среды, кроме возврата результата (изменение значений глобальных переменных, выделение и освобождение памяти, ввод-вывод и так далее). Теоретически наиболее правильным является использование функций, не имеющих побочного эффекта (то есть таких, в результате вызова которых возвращается вычисленное значение, и только), хотя на практике приходится использовать функции с побочным эффектом, хотя бы для обеспечения ввода-вывода и отображения результатов работы программы. Существует специфическая парадигма программирования — функциональное программирование, в которой любая программа представляет собой набор вложенных вызовов функций, не вызывающих побочных эффектов. Наиболее известный язык программирования, реализующий эту парадигму — Лисп. В нём любая операция, любая конструкция языка, любое выражение, кроме константы, являются вызовами функций. Наиболее полно парадигма функционального программирования реализуется в языке Хаскелл.

  1. Блок-схема программы

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

#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();

}

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

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

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

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

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

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

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