Решение инженерных задач обработки массивов
Введение
Цель курсовой работы: закрепление знаний и умений по алгоритмизации и программированию на языке Си с использованием функций, процедур и различных сложных типов данных, в том числе динамических массивов, структур и объединений.
Назначение и область применения программы: программа будет использоваться в учебном процессе для решения инженерных задач обработки массивов, путём её включения в программы пользователей.
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 | Пользовательское соглашение
ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ