Решение инженерных задач обработки массивов

 

Введение


Цель курсовой работы: закрепление знаний и умений по алгоритмизации и программированию на языке Си с использованием функций, процедур и различных сложных типов данных, в том числе динамических массивов, структур и объединений.

Назначение и область применения программы: программа будет использоваться в учебном процессе для решения инженерных задач обработки массивов, путём её включения в программы пользователей.


1. Задание на курсовую работу


.1 Содержательное описание задачи


Для первой задачи даны три функции , и . Нужно будет найти элементы матрицы A по формуле



где x=f(i,j) - аргумент функции , a,b - пределы интегрирования функции .

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

Функцию f2 следует продифференцировать.

Функция f3 есть подынтегральное выражение, которое является тригонометрическим выражением, вычисление будет производиться по формуле



a, b - нижний и верхний интеграл соответственно

К моменту выполнения второй задачи будет сформирована матрица. Задача состоит в том, чтобы сформировать вектор, состоящий из наибольших среди отрицательных элементов i-го столбца.

При решении первой задачи получим квадратную матрицу, т.е. матрицу. a которой число строк равно числу столбцов.

Третья задача представляет собой набор матричных операций. Необходимо перемножить три операнда, представленных в виде особого вида матрицы или вектора, а также некоторых действий над ними.

Рассмотрим эти операции.

Сначала нужно получить вектор, состоящий из обратных элементов вектора, полученного во второй части.

Вторым операндом будет квадрат разности исходной и транспонированной исходной матриц

Произведением матрицы Am*n = (aij) на матрицу Bn*p = (bjk) называется матрица Cm*p = (cik) такая, что



т.е. элемент i-й строки и k-го столбца матрицы произведения C равен сумме произведений элементов i-й строки матрицы A на соответствующие элементы k-го столбца матрицы B.

В качестве 3 операнда будет 1/D - вектор, составленный из обратных элементов главной диагонали матрицы А.

Матрица, полученная из данной заменой каждой её строки столбцом с тем же номером, называется матрицей транспонированной к данной. Обозначается AT.

В четвёртой задаче надо произвести стандартные арифметические действия над элементами матрицы, сформированной в первой задаче.


1.2 Математическая постановка задачи


Задание состоит из 4-х задач:

.- формирование элементов матрицы A с помощью функций.

. - формирование вектора X из элементов матрицы A,

. -матричные операции: Z =

. - комплексное преобразование массивов

Y= +


1.3 Интерфейс ввода/вывода


Данные будем вводить с клавиатуры, а результаты в файл.


1.4 Технические требования к программе


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


2. ОПИСАНИЕ АЛГОРИТМА


2.1 Расчетные формулы


1 Часть. , b=i+j, a=2,

x= i j+3/i

Часть.

Часть. Z =

Часть Y= +


2.2 Описание переменных


Наименование переменнойТип переменнойОбозначениеВозможные значенияВ алгоритмеВ программеВходные переменные Размерность матрицы целый n n n>0Выходные данные 1. Матрица А 2. Вектор X 3. Компл. преобр. массивов Y 4. Результат матр. операций вещ. массив вещ. массив вещ. вещ. A = {aij} X = {xi} Y Rez a[i][j] x[i] y rmo любые любые любые любыеПромежуточные переменные 1. Номер строки 2. Номер столбца 3. Матрица, возвед. в квадрат 4.Транспонированная матрица 5. 1/X - строка 7. Аргумент функции 8. 1/D - столбец 9.Нижний предел интегриров. 10.Верхний предел интегриров 11. Разность матриц целый целый вещ. массив вещ. массив вещ. массив вещ. вещ. массив. вещ .вещ. вещ. массив i j A2 = {aij} AТ = {aij} nv= {nvij} x D= {Di} a b razn= {raznij} i j a2[i][j] At[i][j] nv[i][j] x d[i] a b razn[i][j] 1,2,...n 1,2,…n любые любые 0 или 1 любые любые любые любые любые

Структура программы






























2.4 Сообщения программы


Программа выведет только одно сообщение Введите размерность.n =

Также программы выведет вектор X цветными буквами.


3. ОПИСАНИЕ ПРОГРАММЫ


#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <math.h>

//-------------------------------------------------struct{cl:4;fon:3;bl:1;

} Att;

//-------------------------------------------------union{char cod;att;

} Mix;

//-------------------------------------------------set_attr(int b,int fon,int col)

{a1;.att.bl=b;a1.att.fon=fon;a1.att.cl=col;a1;

}

//-------------------------------------------------double (*fun)(double x);

//-------------------------------------------------prlog(double x)

{1/(x*log(3));

}

//-------------------------------------------------log3(double x)

{log(x)/log(3);

}

//-------------------------------------------------logy(double x)

{log(3)/x;

}

//-------------------------------------------------Tab_fun[2][2]={{&log3,&prlog},{&log, &log}};Tab_integ[2][2]={{&log,&logy},{&cos,&sin}};

//-------------------------------------------------Integ(fun ff,double a, double b)

{f1;int i;(i=0;i<2;i++)(Tab_integ[i][0]==ff)=Tab_integ[i][1];((*f1)(b)-(*f1)(a));

}

//-------------------------------------------------Dif_fun(fun ff, double x)

{f1;int i,j;(i=0;i<2;i++)if(Tab_fun[i][0]==ff)=Tab_fun[i][1];(*f1)(x);

}

//-------------------------------------------------form_matr(double **a, int n){i, j;(i = 1.0; i <= n; i++){(j = 1.0; j <= n; j++)[i-1][j-1]=tan(M_PI*(8.25+double(i+j)/2.0))*Dif_fun(log3,double(i*j)+3.0/double(i))+Integ(cos,2.0,double(i+j)) ;


}

}

//-------------------------------------------------form_vect(double *x, double **a, int n)

{(int i=0;i<n;i++)

{[i]=-10e20;(int j=0;j<n;j++)

{(a[j][i]<0)

{(a[j][i]>x[i])[i]=a[j][i];

}

}

}

}

//-------------------------------------------------print_matr(double **a, int n, FILE *F)

{i, j;(i = 0; i < n; i++)

{(j = 0; j < n; j++)

{(F, "%10.5f ",a[i][j]);

}(F, "\n");

}

}

//-------------------------------------------------print_vect(double *x, int n, FILE *F)

{i;A1;=set_attr(0,RED,YELLOW);(A1.cod);(i = 0; i < n; i++)

{(F, "%10.5f ", x[i]);

}(i = 0; i < n; i++)

{("%10.5f ", x[i]);

}("\n");

}

//-------------------------------------------------Transpon(double **At, double **a, int n){i, j;(i = 0; i < n; i++){(j = 0; j < n; j++)[i][j] = a[j][i];

}

}

//-------------------------------------------------sqrM(double **a2, double **a, int n){i,j,k;(i = 0; i < n; i++)

{(j = 0; j < n; j++)

{[i][j] = 0.0;(k = 0; k < n; k++)[i][j] += a[i][k] * a[k][j];

}

}

}

//-------------------------------------------------razn_matr(double **a1, double **a2, double **razn, int n) {i, j;(i = 0; i < n; i++)(j = 0; j < n; j++)[i][j] = a1[i][j] - a2[i][j];

}

//-------------------------------------------------umnozh_vm(double **a,double *v,double *nv,int n)

{s;(int i=0;i<n;i++)

{ s=0;(int j=0;j<n;j++)=s+v[j]*a[i][j];[i]=s;

}

}

//-------------------------------------------------umnozh_sst(double *str,double *stl,int n)

{c;(int i=0;i<n;i++)=c+str[i]*stl[i];c;

}

//-------------------------------------------------**GetMemoryMatr(int n)

{i;**a;= (double **)malloc(n*sizeof(double *));(i = 0; i < n; i++)[i] = (double *)malloc(n*sizeof(double));a;

}

//-------------------------------------------------FreeMemoryMatr(double **a, int n)

{i;(i = 0; i < n; i++)(a[i]);(a);

}

//-------------------------------------------------*GetMemoryVect(int n){*v;= (double *)malloc(n*sizeof(double));v;

}

//-------------------------------------------------Fact(int x)

{s=1;(int i=1;i<=x;i++)=s*i;s;

}

//-------------------------------------------------FreeMemVect(double *v)

{(v);

}

//-------------------------------------------------GetY(double **a,double *x,int n)

{min,p1,p2,c;i,k;(i=0;i<n;i++)

{=10e19;=1;(k=i+1;k=0;k--)

{(a[i][k-1]<0)=c*a[i][k-1];

}(c==1) c=0;(c<min)=c;

}=min;S=0;(k=1;k<n;k+=2)

{=S+pow(x[k],Fact(k+1)/(k+1));

}=S;("%f %f",p1,p2);p1+p2;

}

//-------------------------------------------------Get1X(double *x, double *x1, int n)

{(int i=0;i<n;i++)[i]=1.0/x[i];

}

//-------------------------------------------------GetD(double **a,double *d, int n)

{(int i=0;i<n;i++)[i]=1.0/a[i][i];

}

//-------------------------------------------------main()

{();**a,**razn,*x,*x1,**a2,**At,rmo,*d,*nv;*fo=fopen("d:/res.txt", "w");; n;

printf("Введите размерность n=");

scanf("%d",&n);=GetMemoryMatr(n);razn=GetMemoryMatr(n);=GetMemoryMatr(n);At=GetMemoryMatr(n);=GetMemoryVect(n);x=GetMemoryVect(n);x1=GetMemoryVect(n);=GetMemoryVect(n);d=GetMemoryVect(n);(fo,"Матрица А:\n\n");

form_matr(a,n);_matr(a,n,fo);

//Part II(fo,"\nВектор X:\n\n");_vect(x,a,n);_vect(x,n,fo);X(x,x1,n);(fo,"\n\nВектор1/X:\n\n");_vect(x1,n,fo);(a,d,n);(fo,"\n\nСтолбец 1/D:\n\n");_vect(d,n,fo);

//Part III(At,a,n);(fo,"\n\nТранспонированная матрица: A\n");

print_matr(At,n,fo);_matr(At,a,razn,n);(fo,"\n\nРазность транспон. и исходной матрицы:\n\n");

print_matr(razn,n,fo);(a2,razn,n);

fprintf(fo,"\nПолученная разность в квадрате:\n\n");

print_matr(a2,n,fo);_vm(a2,x1,nv,n);(fo,"\nУмножение вектора 1/X на разность в квадрате2:\n\n");

print_vect(nv,n,fo);=umnozh_sst(nv,d,n);(fo,"\n\nРезультат матричных операций (константа): %f\n\n", rmo);

double Y=GetY(a,x,n);(fo,"\n\nРезультат комплексных преобразований:\n\nY = %f",Y);

FreeMemoryMatr(a,n);FreeMemoryMatr(razn,n);(a2,n);FreeMemoryMatr(At,n);(x);FreeMemVect(x1);(nv);FreeMemVect(d);();getchar();

fcloseall();

}


4. КОНТРОЛЬНЫЙ ПРИМЕР


Все расчеты проведем в MathCadе.


,


То, что вывела программа в файл при размерности n=2:

Матрица А:

.22756 -0.95023

.02825 -1.50060

Вектор X:

.02825 -0.95023

Вектор 1/X:

.97253 -1.05238

Вектор 1/D:

.39445 -0.66640

Транспонированная матрица: A

.22756 -1.02825

.95023 -1.50060

Разность транспон. и исходной матрицы:

.00000 -0.07802

.07802 0.00000

Полученная разность в квадрате:

.00609 0.00000

.00000 -0.00609

Умножение вектора 1/X на разность в квадрате2:

.00592 0.00641

Результат матричных операций (константа): 0.021746

Результат комплексных преобразований:= -0.950225

Как видно, программа все шаги выполнила верно, это подтверждено ручным расчетом.


ВЫВОД


В результате проделанной курсовой работы можно сделать следующие вывод: разработана корректно работающая программа, способная решать некоторые инженерные задачи.


Введение Цель курсовой работы: закрепление знаний и умений по алгоритмизации и программированию на языке Си с использованием функций, процедур и различны

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ