Задание на производственную практику
12
В ходе прохождения производственной практики, была поставлена задача переписать различные программные коды с языка Fortran на С. Результаты этой работы представлены в Приложении А (язык Fortran) и Приложении В (язык С). Основы работы в FORTRAN и C в среде Microsoft Visual Studio 2010. В процессе выполнения была использована основная концепция данных Фортран, а также правила написания программного кода. Наиболее часто используемые конструкции: циклы с заданным числом повторений, условные операторы, операторы ввода вывода. Пример ввода данных с клавиатуры:
print' (1x,''введите X,Y'') '*, X, Y Пример цикла нахождения четных целых чисел от 1 до N: ISUM = 0i = 0, N, 2= ISUM + i
Пример условного оператора:
if (a. gt.0.) print*,'Положительное'(a. lt.0.) print*,'Отрицательное'(a. eq.0.) print*,'Ноль'
Условный оператор IF позволяет выполнить действие (например печать или присваивание) только при соблюдении заданного условия. Обрамляющие круглые скобки для условия обязательны. С результатами выполнения поставленной задачи на языке Фортран можно ознакомиться в Приложении А. C в среде Microsoft Visual Studio 2010 В настоящее время язык С является негласным стандартом системного программирования в следствии этого он был выбран в качестве основного языка. Конструкции используемые в языке очень удобны и эффективны. Наиболее часто использовали циклы с известным числом повторений, условные операторы, операторы ввода вывода, а также указатели. Пример ввода данных с клавиатуры: str [80];i; /* читается строка и целое значение */("%s%d", str, &i);
Пример цикла нахождения четных целых чисел от 1 до N:
int ISUM, i,N;=0;(i = 0; i < N; i=+2) {= ISUM + i; } Пример условного оператора: if (a >0) { printf ("Положительное"); }(a <0) { printf ("Отрицательное"); }(a==0) { printf ("Ноль"); } Пример использования указателей в массивах:DSIMQLL (double *X) {I;(i = 1; i <= 3; i++) {[i-1] = i*2; // заполнение массива } }*X;= (double *) calloc ( (3),sizeof (double)); // выделяем динамическую память("\n Решение\n");(X);(i = 1; i <= 3; i++) { printf (" %10.4f", X [i-1]); }
С результатами выполнения поставленной задачи на языке C можно ознакомиться в Приложении B. фортран си язык программирование Заключение
В результате работы были приобретены навыки работы со средой программирования Intel Fortran и Microsoft Visual Studio 2010 и построения сложного программного кода на различных языках программирования. Алгоритмы, реализованные в Приложении A и Приложении В нашли широкое применение при решении навигационных задач. Список использованной литературы
1. Керниган Б., Ритчи Д. Язык программирования Си. Пер. с англ., 3-е изд., испр. - СПб.: "Невский Диалект", 2001. - 352 с 2. Страуструп Б. Язык программирования С++. - М.: ДМК Пресс, . 2010. - 1034с. . Коричнев Л.П., Чистякова В.И. Фортран. - М.: Высшая школа, . 1989. - 160 с. 6. iXBT.com - оперативные новости, обзоры и тестирования компьютеров, видеокарт, процессоров, материнских плат, памяти и принтеров, цифровых фотоаппаратов и видеокамер, смартфонов и планшетов, мониторов и проекторов. [Электронный ресурс]. URL: <http://www.ixbt.com/> - Режим доступа: свободный. . Хабрахаб. [Электронный ресурс]. URL: <http://habrahabr.ru/>. - Режим доступа: свободный. . Firststeps.ru-новости в сфере программирования, мастер классы от ведущих специалистов в области программирования, учебники по языкам программирования. [Электронный ресурс]. URL: <http://www.firststeps.ru/> - Режим доступа: свободный.
Приложения
Приложение А
Метод "Золотого сечения" на FORTRAN Отладка и тестирование программы для поиска минимума функции методом "Золотого сечения" на языке FORTRAN Исходный код Real*8 FUNCTION F (X) Real*8 X=X*X+6*exp (X) RETURN END FUNCTION F Subroutine FMIN (AX, BX, F, TOL, XM, FM) Real*8 AX, BX, F, TOL, XM, FM External F Real*8 A, B, C, D, E, EPS, XH, P, Q, R, TOLM, U, V, W Real*8 FU, FV, FW, FX, X= 0.5D0* (3. D0-DSQRT (5. D0))= 1. D0 Continue= EPS/2. D0= 1. D0+EPS IF (TOLM. GT.1. D0) GOTO 10= SQRT (EPS)= AX= BX= A+C* (B-A)= V= V= 0.0= F (X)= FX= FX Continue= 0.50* (B - A)= A + R= EPS*ABS (X) +TOL/3.0 IF (ABS (X-XH). LE. (2.0*TOLM-R)) GoTo 90 IF (ABS (E). LE. TOLM) GoTo 40= X - V= (X - W) * (FX - FV)= P* (FX - FW)= P*Q - (X - W) *R= 2.0* (Q - R) IF (Q. GT.0. D0) P =-P= Abs (Q)= E= D Continue IF (Abs (P). GE. Abs (0.50*Q*R)) GoTo 40 IF (P. LE. Q* (A - X)) GoTo 40 IF (P. GE. Q* (B - X)) GoTo 40= P/Q= X + D IF ( (U - A). LT. TOLM) D = Sign (TOLM,XH-X) IF ( (B - U). LT. TOLM) D = Sign (TOLM,XH-X) GoTo 50 Continue IF (X. GE. XH) E = A - X IF (X. LT. XH) E = B - X= C*E Continue= Abs (D) IF (FU. LT. TOLM) U = X + Sign (TOLM,D) IF (FU. GE. TOLM) U = X + D= F (U) IF (FU. GT. FX) GoTo 60 IF (U. GE. X) A = X IF (U. LT. X) B = X= W= FW= X= FX= U= FU GoTo 20 Continue IF (U. LT. X) A = U IF (U. GE. X) B = U IF (FU. LE. FW) GoTo 70 IF (W. EQ. X) GoTo 70 IF (FU. LE. FV) GoTo 80 IF (V. EQ. X) GoTo 80 IF (V. EQ. W) GoTo 80 GoTo 20 Continue= W= FW= U= FU GoTo 20 Continue= U= FU GoTo 20 Continue= X= FX RETURN END Subroutine FMIN program Console3 Real*8 AX, BX, F, TOL, XM, FM External F=-1=0=0.005 CALL FMIN (AX, BX, F, TOL, XM, FM) write (*,*) 'MINIMUM NAIDEN NA ' write (*,*) ' X ',XM write (*,*) ' Y ',FM end program Console3 Результат выполнения программы:
Метод "Гаусса" для решений системы линейных алгебраических уравнений на FORTRAN Отладка и тестирование на языке FORTRAN Исходный код SUBROUTINE DSIMQLL (A,B,N,TOL, IER) DIMENSION A (1),B (1) INTEGER N, IER,JJ, IQS,NY,J,JY, IT, I, IMAX, IXJ, IXJX DOUBLE PRECISION TOL,SAVE,A,B,BIGA IF (TOL. LT.0. D0) GOTO 100 IF (N. LE.0) GOTO 100=0=-N=JJ=N+1 DO 50 J=1,N=J+1=JJ+NY=0. D0=JJ-J DO 10 I=J,N=IT+I IF (DABS (BIGA). GE. DABS (A (IXJ))) GOTO 10=A (IXJ)=I CONTINUE IF (DABS (BIGA). LT. TOL) GOTO 95=JJ-N=IMAX-J DO 20 I=J,N=IXJ+N=IXJ+IT SAVE=A (IXJ)(IXJ) =A (IXJX)(IXJX) =SAVE(IXJ) =A (IXJ) /BIGA CONTINUE SAVE=B (IMAX)(IMAX) =B (J)(J) =SAVE/BIGA IF (J. EQ. N) GOTO 60=IQS+N DO 40 IXJ=JY,N=IQS+IXJ SAVE=A (IXJX)=J-IXJ DO 30 I=JY,N=IXJX+N(IXJX) =A (IXJX) - SAVE*A (IXJX+IT) CONTINUE(IXJ) =B (IXJ) - (B (J) *SAVE) CONTINUE CONTINUE NY=N-1=N*N=0 IF (J. EQ. NY) GOTO 90=J+1=IT-J=N=IXJ-J DO 80 I=1,J(JY) =B (JY) - A (IXJX) *B (IXJ)=IXJX-N=IXJ-1 CONTINUE GOTO 70 CONTINUE RETURN CONTINUE=1 GOTO 90 CONTINUE=2 GOTO 90 END SUBROUTINE DSIMQLL program DSIMQLT Implicit none DOUBLE PRECISION A (3,3),B (3),TOL INTEGER N, IER,J, I=3(1,1) =-2(1,2) =3(1,3) =4(2,1) =1(2,2) =5(2,3) =7(3,1) =4(3,2) =2(3,3) =1(1) =21(2) =-3(3) =-5 write (*,*) 'Matrix ' DO 1 I=1,3 DO 2 J=1,3 write (*,*) '',A (I,J) CONTINUE CONTINUE DO 4 J=1,3 write (*,*) ' ',B (J) CONTINUE CALL DSIMQLL (A,B,N,TOL, IER) write (*,*) 'Reshenie ' DO 3 J=1,3 write (*,*) ' ',B (J) CONTINUE end program DSIMQLT
Результат: Приложение B
Метод "Золотого сечения" на С Отладка и тестирование программы для поиска минимума функции методом "Золотого сечения" на языке С Исходный код #include <stdio. h> #include <conio. h> #include <math. h>F (double x) {x*x+6*exp (x); }FMIN (double *AX, double *BX, double *TOL, double *XM,double *FM) { /*----------------------------------------------------------------------Одномерная оптимизация МЕТОДОМ "ЗОЛОТОГО СЕЧЕНИЯ"с апроксимацей C квадратичной парболой----------------------------------------------------------------------Обращение:Call FMIN (AX, BX, F, TOL, XM, FM)AX - нижняя граница аргумента;BX - верхняя граница аргумента;F - имя FUNCTION для расчета целевой функции;TOL - точность выбора аргумента целевой функции;XM - выходное значение аргумента (минимум целевой функции);FM - выходное значение целевой функции;---------------------------------------------------------------------- */A, B, C, D, E, EPS, XH, P, Q, R, TOLM, U, V, W,FU, FV, FW, FX, X,ZN,Mn;=0.5* (3.0-sqrt (5.0));= 1.0;:= EPS/2.0;= 1+EPS;(TOLM>1) goto a;= sqrt (EPS);=*AX;=*BX;=A+C* (B-A);=V;= V;= 0.0;= F (X);= FX;= FX;:= 0.50* (B - A);= A + R;= EPS*fabs (X) +*TOL/3.0;(fabs (X-XH) <= (2.0*TOLM-R)) goto k;(fabs (E) <=TOLM) goto d;= X - V;= (X - W) * (FX - FV);= P* (FX - FW);= P*Q - (X - W) *R;= 2.0* (Q - R);(Q>0) P =-P;= fabs (Q);= E;= D;:(fabs (P) >=fabs (0.50*Q*R)) goto d;(P<=Q* (A - X)) goto d;(P>=Q* (B - X)) goto d;= P/Q;= X + D;=XH-X;(ZN<0) {Mn=-1; } else {Mn=1; }( (U - A) <TOLM) D = fabs (TOLM) *Mn;( (B - U) <TOLM) D = fabs (TOLM) *Mn;e;:(X>=XH) E = A - X;(X<XH) E = B - X;= C*E;:= fabs (D);(D<0) {Mn=-1; } else {Mn=1; }(FU<TOLM) U = X +fabs (TOLM) *Mn;(FU>=TOLM) U = X + D;= F (U);(FU>FX) goto f;(U>=X) A = X;(U<X) B = X;= W;= FW;= X;= FX;= U;= FU;b;:(U<X) A = U;(U>=X) B = U;(FU<=FW) goto g;(W==X) goto g;(FU<=FV) goto j;(V==X) goto j;(V==W) goto j;b;:= W;= FW;= U;= FU;b;:= U;= FU;b;: *XM=X; *FM=FX; }main (void) {AX, BX, F, TOL, XM, FM;=-1;=0;=0.005;(&AX, &BX, &TOL, &XM, &FM);("Minimum naiden na x = %.3lf,y=%.3lf", XM, FM); _getch ();0; }
Результат: Метод "Гаусса" для решений системы линейных алгебраических уравнений на С Отладка и тестирование на языке С Исходный код #include <stdio. h> #include <conio. h> #include <math. h> #include <stdlib. h> #define siz 3double T;freee (T **a, size_t m) {_t Row,j;(j=0; j<m; j++) {(a [j]); }(a); }Release (T **a, size_t m) {_t Row,Col;(Row = m - 1; 0 < Row; Row--) {(a [Row]! =NULL)(a [Row]); }( (void *) a); }** fun (size_t m, size_t n, T**a) {_t i, j,ff;(a! = NULL) {=0;(i = 1; i <= m; ++i) { printf ("\n");(j = 1; j <= n; ++j) {++;[i-1] [j-1] =i+j;( (i==3) && (j==3)) a [i-1] [j-1] =9;(" %3.2f", a [i-1] [j-1]); } } }a; }**Allocate (size_t m, size_t n) {_t Row;Success=1;**a = (T**) calloc (m,sizeof (T *));(a! =NULL) {(Row = 0; Row < m && Success == 1; Row++) {[Row] = (T *) calloc (n,sizeof (T));(NULL==a [Row]) {= 0;(a,m); } } }(Success! = 1)= NULL;a; }DSIMQLL (T**A,double *X,unsigned int *N) { /***SIMQL**************************************************S** DSIMQL - BEPCИЯ C ДBOЙHOЙ TOЧHOCTЬЮ ** ПPOГPAMMA - SIMQL - PEШAET CИCTEMY ЛИHEЙHЫX AЛГEБPAИЧECKИX ** YPABHEHИЙ METOДOM ГAYCCA ** A - BXOДHAЯ MATPИЦA KOЭФФИЦИEHTOB (N*N),HE COXPAHЯETCЯ ** X - РЕЗУЛЬТИРУЮЩИЙ МАССИВ ** N - РАЗМЕРНОСТЬ ********************************************************F* */i,j,u,k,m,n;buf;=*N;=-1;:=u+1; k=u;:(A [k] [u] ==0) {=k+1;(k<=n-1) goto b;("Sistema ne opredelena"); return; }(k! =u) {(m=u; m<=n; m++) {=A [u] [m];[u] [m] =A [k] [m];[k] [m] =buf; } }(j=n; j>=u; j--) {[u] [j] =A [u] [j] /A [u] [u]; }=n;(k+1<n) {(i=k+1; i<=n-1; i++)(j=u+1; j<=m; j++)[i] [j] =A [i] [j] - A [i] [u] *A [u] [j]; }(u! =n-1) goto a;(i=n-1; i>=0; i--) {[i] =A [i] [m];(i! =0)(k=i-1; k>=0; k--) A [k] [m] =A [k] [m] - A [k] [i] *X [i]; } }main (void) {int i,j,N,M;**A;*X;D;int size;=siz;=size;=size+1;=Allocate (N,M);= (double *) calloc ( (N),sizeof (double));[0] [0] =-2.0;[0] [1] =3.0;[0] [2] =4.0;[0] [3] =21.0;[1] [0] =1.0;[1] [1] =5.0;[1] [2] =7.0;[1] [3] =-3.0;[2] [0] =4.0;[2] [1] =2.0;[2] [2] =1.0;[2] [3] =-5.0;("\n Matrix\n");(i = 1; i <= N; ++i) { printf ("\n");(j = 1; j <= M; ++j) {(" %10.4f", A [i-1] [j-1]); } }("\n Reshenie\n");(A,X,&N);(j = 1; j <= N; ++j) {(" %10.4f\n",X [j-1]); } _getch ();0; }
Результат:
12
Популярное: Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Почему люди поддаются рекламе?: Только не надо искать ответы в качестве или количестве рекламы... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (142)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |