Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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




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

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

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

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

x= i j+3/i

2 Часть.

3 Часть. Z =

4 Часть Y= +

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

Наименование переменной Тип переменной Обозначение Возможные значения
В алгоритме В программе
Входные переменные Размерность матрицы   целый   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   любые любые   любые   любые   любые  

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

 
 


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

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

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

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

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <math.h>

//-------------------------------------------------

typedef struct{

unsigned cl:4;

unsigned fon:3;

unsigned bl:1;

} Att;

//-------------------------------------------------

typedef union{

unsigned char cod;

Att att;

} Mix;

//-------------------------------------------------

Mix set_attr(int b,int fon,int col)

{

Mix a1;

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

return a1;

}

//-------------------------------------------------

typedef double (*fun)(double x);

//-------------------------------------------------

double prlog(double x)

{

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

}

//-------------------------------------------------

double log3(double x)

{

return log(x)/log(3);

}

//-------------------------------------------------

double logy(double x)

{

return log(3)/x;

}

//-------------------------------------------------

fun Tab_fun[2][2]={{&log3,&prlog},{&log, &log}};

fun Tab_integ[2][2]={{&log,&logy},{&cos,&sin}};

//-------------------------------------------------

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

{

fun f1;int i;

for(i=0;i<2;i++)

if(Tab_integ[i][0]==ff)

f1=Tab_integ[i][1];

return((*f1)(b)-(*f1)(a));

}

//-------------------------------------------------

double Dif_fun(fun ff, double x)

{

fun f1;int i,j;

for(i=0;i<2;i++)if(Tab_fun[i][0]==ff)

f1=Tab_fun[i][1];

return (*f1)(x);

}

//-------------------------------------------------

void form_matr(double **a, int n){

int i, j;

for (i = 1.0; i <= n; i++){

for (j = 1.0; j <= n; j++)

a[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));

 

}

}

//-------------------------------------------------

void form_vect(double *x, double **a, int n)

{

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

{

x[i]=-10e20;

for(int j=0;j<n;j++)

{

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

{

if(a[j][i]>x[i])

x[i]=a[j][i];

}

}

}

}

//-------------------------------------------------

void print_matr(double **a, int n, FILE *F)

{

int i, j;

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

{

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

{

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

}

fprintf(F, "\n");

}

}

//-------------------------------------------------

void print_vect(double *x, int n, FILE *F)

{

int i;

Mix A1;

A1=set_attr(0,RED,YELLOW);

textattr(A1.cod);

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

{

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

}

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

{

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

}

printf("\n");

}

//-------------------------------------------------

void Transpon(double **At, double **a, int n){

int i, j;

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

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

At[i][j] = a[j][i];

}

}

//-------------------------------------------------

void sqrM(double **a2, double **a, int n){

int i,j,k;

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

{

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

{

a2[i][j] = 0.0;

for (k = 0; k < n; k++)

a2[i][j] += a[i][k] * a[k][j];

}

}

}

//-------------------------------------------------

void razn_matr(double **a1, double **a2, double **razn, int n) {

int i, j;

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

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

razn[i][j] = a1[i][j] - a2[i][j];

}

//-------------------------------------------------

void umnozh_vm(double **a,double *v,double *nv,int n)

{

double s;

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

{ s=0;

for(int j=0;j<n;j++)

s=s+v[j]*a[i][j];

nv[i]=s;

}

}

//-------------------------------------------------

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

{

double c;

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

c=c+str[i]*stl[i];

return c;

}

//-------------------------------------------------

double **GetMemoryMatr(int n)

{

int i;

double **a;

a = (double **)malloc(n*sizeof(double *));

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

a[i] = (double *)malloc(n*sizeof(double));

return a;

}

//-------------------------------------------------

void FreeMemoryMatr(double **a, int n)

{

int i;

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

free(a[i]);

free(a);

}

//-------------------------------------------------

double *GetMemoryVect(int n){

double *v;

v = (double *)malloc(n*sizeof(double));

return v;

}

//-------------------------------------------------

int Fact(int x)

{

int s=1;

for(int i=1;i<=x;i++)

s=s*i;

return s;

}

//-------------------------------------------------

void FreeMemVect(double *v)

{

free(v);

}

//-------------------------------------------------

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

{

double min,p1,p2,c;

int i,k;

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

{

min=10e19;

c=1;

for(k=i+1;k=0;k--)

{

if (a[i][k-1]<0)

c=c*a[i][k-1];

}

if(c==1) c=0;

if(c<min)

min=c;

}

p1=min;

double S=0;

for(k=1;k<n;k+=2)

{

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

}

p2=S;

printf("%f %f",p1,p2);

return p1+p2;

}

//-------------------------------------------------

void Get1X(double *x, double *x1, int n)

{

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

x1[i]=1.0/x[i];

}

//-------------------------------------------------

void GetD(double **a,double *d, int n)

{

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

d[i]=1.0/a[i][i];

}

//-------------------------------------------------

void main()

{

clrscr();

double **a,**razn,*x,*x1,**a2,**At,rmo,*d,*nv;

FILE *fo=fopen("d:/res.txt", "w");;

int n;

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

scanf("%d",&n);

a=GetMemoryMatr(n);razn=GetMemoryMatr(n);

a2=GetMemoryMatr(n);At=GetMemoryMatr(n);

nv=GetMemoryVect(n);x=GetMemoryVect(n);x1=GetMemoryVect(n);

d=GetMemoryVect(n);d=GetMemoryVect(n);

fprintf(fo,"Матрица А:\n\n");

form_matr(a,n);

print_matr(a,n,fo);

//Part II

fprintf(fo,"\nВектор X:\n\n");

form_vect(x,a,n);

print_vect(x,n,fo);

Get1X(x,x1,n);

fprintf(fo,"\n\nВектор1/X:\n\n");

print_vect(x1,n,fo);

GetD(a,d,n);

fprintf(fo,"\n\nСтолбец 1/D:\n\n");

print_vect(d,n,fo);

//Part III

Transpon(At,a,n);

fprintf(fo,"\n\nТранспонированная матрица: A\n");

print_matr(At,n,fo);

razn_matr(At,a,razn,n);

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

print_matr(razn,n,fo);

sqrM(a2,razn,n);

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

print_matr(a2,n,fo);

umnozh_vm(a2,x1,nv,n);

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

print_vect(nv,n,fo);

rmo=umnozh_sst(nv,d,n);

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

double Y=GetY(a,x,n);

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

FreeMemoryMatr(a,n);FreeMemoryMatr(razn,n);

FreeMemoryMatr(a2,n);FreeMemoryMatr(At,n);

FreeMemVect(x);FreeMemVect(x1);

FreeMemVect(nv);FreeMemVect(d);

getchar();getchar();

fcloseall();

}

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

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

 

 

,

 

 

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

Матрица А:

 

0.22756 -0.95023

-1.02825 -1.50060

 

Вектор X:

 

-1.02825 -0.95023

 

Вектор 1/X:

 

-0.97253 -1.05238

 

Вектор 1/D:

 

4.39445 -0.66640

 

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

0.22756 -1.02825

-0.95023 -1.50060

 

 

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

 

0.00000 -0.07802

0.07802 0.00000

 

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

 

-0.00609 0.00000

0.00000 -0.00609

 

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

 

0.00592 0.00641

 

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

 

 

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

 

Y = -0.950225

 

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

 
 


ВЫВОД

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

 





Поделиться с друзьями:


Дата добавления: 2016-11-12; Мы поможем в написании ваших работ!; просмотров: 246 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Победа - это еще не все, все - это постоянное желание побеждать. © Винс Ломбарди
==> читать все изречения...

2280 - | 2114 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.