Logo Studenta

Universidad Complutense de Madrid _ Ingeniería Matemática _ asignatura_ Calculo Científico _Programacion en Fortran y C_ _ Sistema_Op

Esta es una vista previa del archivo. Inicie sesión para ver el archivo original

F2008-Apli-F1.F90! Uso de Excel desde Fortran
PROGRAM aplicaciones
IMPLICIT NONE
INTEGER ifail
CHARACTER(LEN=60) orden
LOGICAL existe
PRINT*, 'Crear en Excel un fichero llamado TablaF.prn y guardarlo como'
PRINT*, '"Texto con formato delimitado por espacios" *.prn'
READ*
! Segun el sistema operativo y aplicaciones instaladas la ruta del
! programa EXCEL.EXE puede ser ligeramente diferente.
! Las dos opciones de invocarla son validas.
orden = '"C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE16\EXCEL.EXE"'
!orden = 'C:\PROGRA~1\MICROS~1\OFFICE16\EXCEL'
CALL EXECUTE_COMMAND_LINE (orden, CMDSTAT=ifail)
READ*
INQUIRE (FILE='TablaF.prn', EXIST=existe)
IF (existe) THEN
 PRINT '(/A/)', 'El contenido del fichero Tabla.prn es:'
 CALL EXECUTE_COMMAND_LINE ('TYPE TablaF.prn', CMDSTAT=ifail)
ELSE
 PRINT*, 'El fichero TablaF.prn no existe'
ENDIF
ENDPROGRAM aplicaciones 
F2008-Apli-F2.F90! Invocacion de aplicaciones
PROGRAM aplicaciones
IMPLICIT NONE
INTEGER ifail
CHARACTER(LEN=60) orden
LOGICAL existe
PRINT*, 'Uso de la calculadora'
orden = 'c:\windows\system32\calc'
CALL EXECUTE_COMMAND_LINE (orden, CMDSTAT=ifail)
READ*
PRINT*, 'Dibujo con PAINT'
orden = 'c:\windows\system32\mspaint'
CALL EXECUTE_COMMAND_LINE (orden, CMDSTAT=ifail)
READ*
PRINT*, 'Crear el fichero DatosF.txt'
orden = 'c:\windows\system32\notepad'
CALL EXECUTE_COMMAND_LINE (orden, CMDSTAT=ifail)
READ*
INQUIRE (FILE='DatosF.txt', EXIST=existe)
IF (existe) THEN
 PRINT '(/A/)', 'El contenido del fichero "DatosF.txt" es:'
 orden = 'TYPE DatosF.txt'
CALL EXECUTE_COMMAND_LINE (orden, CMDSTAT=ifail)
ELSE
 PRINT*, 'No has creado el fichero indicado'
ENDIF
PRINT*
PRINT*, 'Salida al Sistema Operativo'
orden = 'c:\windows\system32\cmd'
CALL EXECUTE_COMMAND_LINE (orden, CMDSTAT=ifail)
READ*
ENDPROGRAM aplicaciones 
F2008-SO-F1.F90! Ejecucion de comandos del sistema operativo
PROGRAM comandos
IMPLICIT NONE
INTEGER ifail
CHARACTER(LEN=60) orden
PRINT*, 'Directorio actual'
CALL EXECUTE_COMMAND_LINE ('dir>ficheros.txt')
READ*
PRINT*, 'Copia de un fichero'
orden = 'copy ficheros.txt *.sal'
CALL EXECUTE_COMMAND_LINE (orden,CMDSTAT=ifail)
PRINT*, 'ifail = ', ifail
READ*
CALL EXECUTE_COMMAND_LINE ('cls')
orden = 'type ficheros.sal'
CALL EXECUTE_COMMAND_LINE (orden)
PRINT*, 'ifail = ', ifail
ENDPROGRAM comandos
F2008-SO-F2.F90! Ejecucion de otros programas Fortran
PROGRAM comandos
IMPLICIT NONE
INTEGER ifail
CHARACTER(LEN=60) orden
PRINT*, 'Calculo del nif. Fichero F-nif.exe'
CALL EXECUTE_COMMAND_LINE ('F-nif',CMDSTAT=ifail)
PRINT*, 'ifail = ', ifail
READ*
PRINT*, 'Criba de Eratostenes. Fichero F-criba.exe'
orden = 'F-criba'
CALL EXECUTE_COMMAND_LINE (orden,CMDSTAT=ifail)
PRINT*, 'ifail = ', ifail
ENDPROGRAM comandos
F2008-SO-F3.F90! Ejecucion de otros programas C
PROGRAM comandos
IMPLICIT NONE
INTEGER ifail
CHARACTER(LEN=60) orden
PRINT*, 'Calculo del nif. Fichero C-nif.exe'
CALL EXECUTE_COMMAND_LINE (CMDSTAT=ifail,COMMAND='C-nif')
PRINT*, 'ifail = ', ifail
READ*
PRINT*, 'Criba de Eratostenes. Fichero C-criba.exe'
orden = 'C-criba'
CALL EXECUTE_COMMAND_LINE (orden,CMDSTAT=ifail)
PRINT*, 'ifail = ', ifail
ENDPROGRAM comandos
F2008-SO-F4.F90! Ejecucion de comandos y programas en C y Fortran
PROGRAM varios
IMPLICIT NONE
INTEGER ifail
CHARACTER(LEN=60) orden
PRINT*, 'Tabla de la funcion gamma en Fortran. Fichero F-tablagamma.exe'
CALL EXECUTE_COMMAND_LINE ('F-tablagamma',CMDSTAT=ifail)
READ*
PRINT*, 'Ajuste lineal a la funcion gamma en C. Fichero C-recta.exe'
orden = 'C-recta'
CALL EXECUTE_COMMAND_LINE (orden,CMDSTAT=ifail)
CALL EXECUTE_COMMAND_LINE ('dir f*.*')
ENDPROGRAM varios
F-criba.F90PROGRAM eratostenes
IMPLICIT NONE
INTEGER, PARAMETER:: n=10**7
INTEGER i, j, k, p(n)
DOUBLE PRECISION t1, t2
OPEN (11, FILE='primos.txt')
CALL CPU_TIME (t1)
p(1:n) = 0 ; k = 2
DO
 IF (2*k > n) EXIT
 p(2*k:n:k) = 1 ! numeros compuestos
 DO j = k+1, n
 IF (p(j) == 0) THEN
 k = j
 EXIT
 ENDIF
 ENDDO
ENDDO
CALL CPU_TIME (t2)
PRINT*, 'tiempo de calculo = ', t2-t1
k = COUNT(p(2:n)==0)
PRINT '(/A,I10,A,I10)', 'Hay', k, ' numeros primos no mayores que', n
WRITE (11,'(I10)') PACK(MERGE((/(i,i=2,n)/),0,p(2:n)==0),p(2:n)==0)
ENDPROGRAM eratostenes
F-nif.F90MODULE datos
 INTEGER dni
 CHARACTER nif
 CHARACTER(LEN=23) linea
ENDMODULE datos
! Programa principal
 
WINAPP
PROGRAM letra_nif
USE datos
INTEGER, EXTERNAL :: calculo, ayuda
i = WINIO@('%ca[Calculo de la letra del NIF]&')
i = WINIO@('%mn[&Terminar]&','EXIT')
i = WINIO@('%mn[&Ayuda[&Explicación]]&',ayuda)
i = WINIO@('%il&',0,99999999)
i = WINIO@('DNI= %rd&',dni)
i = WINIO@('%ta%`^bt[&Nif]&',calculo)
i = WINIO@('%2nl%ob%18st%cb',linea)
ENDPROGRAM letra_nif
! Calculo de la letra del NIF
INTEGER FUNCTION calculo()
USE datos
CHARACTER, DIMENSION(0:22), PARAMETER:: letra = &
 (/ 'T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', &
 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E' /)
nif = letra(MOD(dni,23))
WRITE (linea,'(A,I8,1X,A)') ' El NIF es = ', dni, nif
CALL WINDOW_UPDATE@(linea)
calculo = 1
ENDFUNCTION calculo
! Ayuda del programa
INTEGER FUNCTION ayuda()
INTEGER i
i = WINIO@('%ca[Instrucciones]&')
i = WINIO@('%fn[Times New Roman]%nl&') 
i = WINIO@('El DNI debe estar entre 0 y 99 999 999&')
i = WINIO@('%2nl%cn%5`bt[OK]')
ayuda = 1
ENDFUNCTION ayuda
F-recta.F90PROGRAM recta_de_regresion
IMPLICIT NONE
INTERFACE
 SUBROUTINE recta (x, y, p, q)
 DOUBLE PRECISION, DIMENSION(:), INTENT(IN):: x, y
 DOUBLE PRECISION, INTENT(OUT):: p, q
 ENDSUBROUTINE recta
ENDINTERFACE
DOUBLE PRECISION x(1000), y(1000)
DOUBLE PRECISION:: a, b
INTEGER i
OPEN (11, FILE='C-tablagamma.txt')
READ (11,*) (x(i),y(i),i=1,SIZE(x))
CALL recta (x, y, a, b)
PRINT '(A)', 'Recta de regresion: '
PRINT '(2(A,F8.5))', 'Gamma(x) = ', a, '*x +', b
ENDPROGRAM recta_de_regresion
! ======================================================================
! Calculo de la recta de regresion minimo cuadratica
SUBROUTINE recta (x, y, p, q)
IMPLICIT NONE
! Argumentos
DOUBLE PRECISION, DIMENSION(:), INTENT(IN):: x, y
DOUBLE PRECISION, INTENT(OUT):: p, q
! Variables locales
DOUBLE PRECISION:: xm, ym
! ----------------------------
! Primera sentencia ejecutable
xm = SUM(x) / SIZE(x)
ym = SUM(y) / SIZE(y)
p = SUM((x-xm)*(y-ym)) / SUM((x-xm)**2)
q = ym - p*xm
ENDSUBROUTINE recta
F-tablagamma.F90! Tabla de la funcion gamma
PROGRAM tabla
IMPLICIT NONE
INTEGER i
DOUBLE PRECISION x, g, lgam
OPEN (11, FILE='F-tablagamma.txt')
DO i = 1, 1000
 x = 1.d0 + 1.d-3*i; 
 g = EXP(lgam(x));
 WRITE (11, '(F6.3,2X,F25.15)') x, g
ENDDO
ENDPROGRAM tabla
! ======================================================================
! Adaptacion de gammln, Numerical Recipes Third Edition. Cap 6.1
DOUBLE PRECISION FUNCTION lgam (x) ! ln[Gamma(xx)] para x > 0
DOUBLE PRECISION, INTENT(IN):: x
INTEGER j
DOUBLE PRECISION tmp, y, ser
DOUBLE PRECISION, PARAMETER:: g=5.2421875d0, &
 log2pi=0.91893853320467274d0, s0=0.999999999999997092d0
DOUBLE PRECISION, DIMENSION(14), PARAMETER:: c = (/ &
 57.1562356658629235d0, -59.5979603554754912d0, &
 14.1360979747417471d0, -0.491913816097620199d0, &
 .339946499848118887d-4, .465236289270485756d-4, &
 -.983744753048795646d-4, .158088703224912494d-3, &
 -.210264441724104883d-3, .217439618115212643d-3, &
 -.164318106536763890d-3, .844182239838527433d-4, &
 -.261908384015814087d-4, .368991826595316234d-5 /)
IF (x <= 0) STOP 'Argumento invalido en in lgam'
y = x
tmp = x + g
tmp = (x+0.5d0)*LOG(tmp)
- tmp
ser = s0
DO j = 1, 14
 y = y + 1.d0
 ser = ser + c(j)/y
ENDDO
lgam = tmp + log2pi + LOG(ser/x)
ENDFUNCTION lgam
SO-C1.C
SO-C1.C/* Ejecucion de comandos del sistema operativo */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main () {
  char orden[60];
  printf ("Directorio actual\n");
  system ("dir");
  getchar();
  printf ("Copia de un fichero\n");
  strcpy (orden,"copy SO-C1.C copia.txt");
  system (orden);
  getchar();
  system ("cls");
  strcpy (orden,"type copia.txt");
  system (orden);
}
SO-C2.C
SO-C2.C/* Ejecucion de otros programas C  */
#include <stdio.h>
#include <stdlib.h>
main () {
int codigo;
  printf ("Calculo del NIF. Fichero C-nif.exe\n");
  codigo = system ("C-nif");
  printf ("Codigo = %d", codigo);
  getchar();
  printf ("\nCriba de Eratostenes. Fichero C-criba.exe");
  codigo = system ("C-criba");
  printf ("Codigo = %d", codigo);
  getchar();
  printf ("Copia de ficheros\n");
  codigo = system ("C-copia");
  printf ("codigo tras la copia = %d\n", codigo);
}
SO-C3.C
SO-C3.C/* Ejecucion de otros programas Fortran  */
#include <stdio.h>
#include <stdlib.h>
main () {
  printf ("Calculo del NIF. Fichero F-nif.exe\n");
  system ("F-nif");
  getchar();
  printf ("Criba de Eratostenes. Fichero F-criba.exe\n");
  system ("F-criba");
  getchar();
}
SO-C4.C
SO-C4.C/* Ejecucion de comandos y programas en C y Fortran  */
#include <stdio.h>
#include <stdlib.h>
main () {
  printf ("Tabla de la funcion gamma en C. Fichero C-tablagamma.exe\n");
  system ("C-tablagamma");
  getchar();
  printf ("Ajuste lineal a la funcion gamma en Fortran. Fichero F-recta.exe\n");
  system ("F-recta");
  system ("del *.obj");
  system ("del *.lst");
  system ("del ERRORLOG");
  system ("del SLINKLOG");
  system ("dir/p");
}
SO-C5.C
SO-C5.C/* Codigo devuelto por el sistema operativo */
#include <stdio.h>
#include <stdlib.h>
main () {
  int codigo;
  codigo = system ("cls");
  printf ("codigo tras cls = %d\n", codigo);
  codigo = system ("abcd");
  printf ("codigo tras abcd = %d\n", codigo);
}
Apli-C1.C
Apli-C1.C/* Uso de Excel desde C */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main () {
  int ch;
  char orden[80];
  FILE *f1;
  printf ("Crear con Excel el fichero TablaC.prn y guardarlo como\n");
  printf ("'Texto con formato delimitado por espacios' *.prn\n");
  getchar();
/* Segun el sistema operativo y aplicaciones instaladas la ruta del
   programa EXCEL.EXE puede ser ligeramente diferente.
   Las dos opciones de invocarla son validas. */
  strcpy (orden,"\"C:\\PROGRAM FILES\\MICROSOFT OFFICE\\OFFICE16\\EXCEL\"");
  /* strcpy (orden,"C:\\PROGRA~1\\MICROS~1\\OFFICE16\\EXCEL"); */
  system (orden);
  getchar();
  f1 = fopen ("TablaC.prn", "r");
  if (f1) {
    printf ("El contenido del fichero TablaC.prn es:\n");
    system ("TYPE TablaC.prn");
    fclose (f1); }
  else
    printf ("El fichero TablaC.prn no existe\n");
}
Apli-C2.C
Apli-C2.C/* Invocacion de aplicaciones */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
main () {
  int ch;
  char orden[60]; 
  FILE *f1;
  printf ("Uso de la calculadora\n");
  strcpy (orden, "c:\\windows\\system32\\calc");
  system (orden);
  getchar();
  printf ("Dibujo con PAINT\n");
  strcpy (orden, "c:\\windows\\system32\\mspaint");
  system (orden);
  getchar();
  printf ("Crear el fichero DatosC.txt\n");
  strcpy (orden, "c:\\windows\\system32\\notepad");
  system (orden);
  getchar();
  f1 = fopen ("DatosC.txt", "r");
  if (f1) {
    printf ("El contenido del fichero DatosC.txt es:\n");
    strcpy (orden,"TYPE DatosC.txt");
    system (orden);
    fclose (f1); }
  else
    printf ("No has creado el fichero indicado\n");
  printf ("\nSalida al Sistema Operativo\n");
  strcpy (orden, "c:\\windows\\system32\\cmd");
  system (orden);
  getchar();
}
Arg-C1.C
Arg-C1.C/* Llamada desde C a la subrutina DUVMIF(IMSL). Desde DUVMIF se llama a
   una funcion fimsl escrita en C */
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
extern "C" void DUVMIF (
  double (*) (double *),  /* f */
  double *,               /* xguess */
  double *,               /* step */
  double *,               /* bound */
  double *,               /* xacc */
  int *,                  /* maxfn */
  double *                /* x */
);
extern int ifun;
/* Argumentos en linea de comandos:
   argv[0] = es el nombre del programa ejecutable
   argv[1] = numero de funcion a minimizar
   argv[2] = punto inicial x0                       */
main (int argc, char *argv[]) {
double x0, paso, cota, tol, ximsl, fx;
int maxf;
double fimsl (double *);
extern int ifun;
if (argc != 3) { printf ("Uso incorrecto\n"); exit(1); }
ifun = atoi (argv[1]);  /* numero de funcion */
x0 = atof (argv[2]);    /* x0 inicial */
printf ("Funcion objetivo numero %d", ifun);
printf ("\nValor inicial de x = %f", x0);
tol = 1.e-6 ; cota = 100 ; paso = 1.e-2 ; maxf = 100 ;
DUVMIF (fimsl, &x0, &paso, &cota, &tol, &maxf, &ximsl);
fx = fimsl(&ximsl);
printf ("\nIMSL :\nx = %25.15lf\nf = %25.15lf\n", ximsl, fx);
}
/* ================================================================== */
/* Funcion a minimizar (IMSL) */
double fimsl (double *x) {
  double fx;
  extern int ifun;
  switch (ifun) {
  case 1:
    if (fabs(*x) >= 100) fx = 1.e20;
    else fx = exp(*x) - 5.0*(*x);
    break;
  case 2:
    if (fabs(*x) <= 1.e-5) fx = 1.;
    else if (fabs(*x) >= 5.0) fx = 1.e20;
    else fx = sin(*x)/(*x);
    break;  }
  printf ("\n     x = %20.10lf    fx = %20.10lf", *x, fx);
  return fx;
}
Arg-F1.F90MODULE funcion
 INTEGER ifun
ENDMODULE funcion
! Minimizacion de una funcion de una variable
PROGRAM min1
USE funcion
IMPLICIT NONE
INTEGER maxf
DOUBLE PRECISION cota, fun, fx, paso, x, tol, x0
EXTERNAL fun, duvmif
CHARACTER(LEN=80) linea, argumento(2)
IF (COMMAND_ARGUMENT_COUNT() /= 2) THEN
 CALL GET_COMMAND (linea)
 PRINT*, TRIM(linea)
 STOP 'Uso incorrecto'
ENDIF
CALL GET_COMMAND_ARGUMENT (1, argumento(1))
READ (argumento(1),*) ifun
CALL GET_COMMAND_ARGUMENT (VALUE=argumento(2), NUMBER=2)
READ (argumento(2),*) x0
PRINT '(A,I0)', 'Funcion objetivo numero ', ifun
PRINT '(A,F0.5)', 'Valor inicial ', x0
tol = 1.d-6 ; cota = 1.d2 ; paso = 1.d-2 ; maxf = 100
CALL duvmif (fun, x0, paso, cota, tol, maxf, x)
fx = fun(x)
WRITE (*,'(A,F25.15/A,F25.15)') ' x = ', x, ' f = ', fx 
ENDPROGRAM min1
! Funcion a minimizar
DOUBLE PRECISION FUNCTION fun (x)
USE funcion
DOUBLE PRECISION x
SELECT CASE (ifun)
CASE (1)
 IF (ABS(x) >= 100) THEN
 fun = 1.d-20
 ELSE
 fun = EXP(x) - 5.d0*x
 ENDIF
CASE (2)
 IF (ABS(x) <= 1.d-5) THEN
 fun = 1.d0
 ELSEIF (ABS(x) >= 5.d0) THEN
 fun = 1.d20
 ELSE
 fun = SIN(x) / x
 ENDIF
ENDSELECT
PRINT*, x, fun
ENDFUNCTION fun
C-copia.C
C-copia.C/* Copia un fichero */
#include <stdio.h>
#include <stdlib.h>
int main() {
int ch;
char file1[20], file2[20];
FILE *f1, *f2;
printf ("Fichero original: ") ; scanf ("%s", file1);
f1 = fopen (file1, "r");
if (f1) {
  printf ("Fichero copia: ") ; scanf ("%s", file2);
  f2 = fopen (file2, "w");
  while ((ch = getc(f1)) != EOF) putc (ch,f2);
  fclose (f1);
  fclose (f2);
  exit(0); }
else {
  printf ("El fichero %s no existe\n", file1);
  exit(1); }
}
C-criba.C
C-criba.C/* Criba de Eratostenes */
#include <stdio.h>
#include <time.h>
main () {
const int n=10000000;
int i, j, k, p[n+1];
float t1, t2;
FILE *f1;
f1 = fopen ("c-primos.txt", "w");
t1 = clock();
for (i=2; i<=n; i++) p[i]=0;
k = 2;
for(;;)
  {
  if (2*k > n) break;
  for (j=2*k; j<=n; j+=k) p[j]=1;
  for (j=k+1; j<=n; j++)
    {
    if (p[j]==0) {
      k = j; break;}
    }
  }      
t2 = clock();
for (k=0,j=2; j<=n; j++) 
  if (p[j]==0) {k++;
  fprintf(f1, "%10d\n", j);}
printf ("\nHay %d numeros primos no mayores que %d\n", k, n);
printf ("\ntiempo de calculo = %f\n", t2-t1);
}
C-nif.C
C-nif.C/* Calculo de la letra del NIF */
#include <stdio.h>
int main () {
  int dni, iscan;
  char letra[] = "TRWAGMYFPDXBNJZSQVHLCKE";
char nif;
  printf ("Introduce el dni "); 
  iscan = scanf("%d", &dni);
  if (iscan == 0) return 1;
  nif = letra[dni%23];
  printf ("\nEl NIF es %d%c\n", dni, nif);
  return 0;
}
C-recta.C
C-recta.C/* Recta de regresion */
#include <stdio.h>
#define mmax 1000
main () {
int i, m=mmax;
double x[mmax], y[mmax], a, b;
void regres (double[], double[], int, double*, double*);
FILE *f11;
f11 = fopen ("F-tablagamma.txt", "r");
/* Lectura de la nube de puntos */
for (i=0; i<m; i++) fscanf (f11,"%lf%lf", &x[i], &y[i]);
/* Calculo y escritura de la recta de regresion */
regres (x, y, m, &a, &b);
printf ("Recta de regresion: ");
printf ("%s%8.5f%s%8.5f\n", "Gamma(x) = ", a, "*x +", b);
}
/* ------------------------------------------------------------------ */
/* Funcion que calcula la recta de regresion */
void regres (double x[], double y[], int m, double *p, double *q) {
/* Variables locales */
int i;
double sumx2, sumx, sumxy, sumy, d;
/* Calculo de las sumas sumx2, sumx, sumxy, sumy */
sumx2 = 0;
sumx = 0;
sumxy = 0;
sumy = 0;
for (i=0; i<m; i++) {
  sumx2+= x[i]*x[i];
  sumx+= x[i];
  sumxy+= x[i]*y[i];
  sumy+= y[i]; }
/* Calculo de p, q */
d = m*sumx2 - sumx*sumx;
*p = (m*sumxy - sumx*sumy) / d;
*q = (sumy - *p*sumx) / m;
}
C-tablagamma.C
C-tablagamma.C/* Tabla de la funcion gamma */
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
main () {  
double lgam(double);
int i;
double x, g;
FILE *fsal;
fsal = fopen("C-tablagamma.txt", "w");
for (i=1; i<=1000; i++) {
  x = 1 + 0.001*i; 
  g = exp(lgam(x));
  fprintf (fsal, "%6.3f  %25.15f\n", x, g);}
}
/* =====================================================================
   Adaptacion de gammln, Numerical Recipes Third Edition. Cap 6.1     */
double lgam (double xx) { /* ln[Gamma(xx)] para xx > 0 */
  int j;
  double x, tmp, y, ser;
  register const double g=5.24218750000000000, log2pi=0.91893853320467274,
                      s0=0.999999999999997092;
  register const double c[14] =
  {57.1562356658629235, -59.5979603554754912, 14.1360979747417471,
  -0.491913816097620199, .339946499848118887e-4, .465236289270485756e-4,
  -.983744753048795646e-4, .158088703224912494e-3, -.210264441724104883e-3,
  .217439618115212643e-3, -.164318106536763890e-3, .844182239838527433e-4,
  -.261908384015814087e-4, .368991826595316234e-5};
  if (xx <= 0) {printf("\nArgumento invalido en in lgam\n");exit(1);}
  y = x = xx;
  tmp = x + g;
  tmp = (x+0.5)*log(tmp) - tmp;
  ser = s0;
  for (j=0; j<14; j++) ser += c[j] / ++y;
  return tmp + log2pi + log(ser/x);
}
Indice-SISTEMA-OPERATIVO.pdf
EJEMPLOS SISTEMA OPERATIVO 
 
COMANDOS Y PROGRAMAS LLAMADOS DESDE C 
 
SO-C1.C Ejecución de comandos del sistema operativo desde C (dir, copy, …) 
SO-C2.C Ejecución en C de otros programas en C 
SO-C3.C Ejecución en C de otros programas en Fortran 
SO-C4.C Ejecución en C de comandos y programas en Fortran y C 
SO-C5.C Código devuelto por el sistema operativo 
 
COMANDOS Y PROGRAMAS LLAMADOS DESDE Fortran 
 
F2008-SO-F1.F90 Ejecución de comandos con NAG Fortran, gfortran (dir, copy, …) 
F2008-SO-F2.F90 Ejecución con NAG Fortran, gfortran de otros programas en Fortran 
F2008-SO-F3.F90 Ejecución con NAG Fortran, gfortran de otros programas en C 
F2008-SO-F4.F90 Ejecución con NAG Fortran, gfortran de comandos y programas en 
Fortran y C 
 
ARGUMENTOS EN EJECUCIÓN 
 
Arg-C1.C Argumentos en línea de comando en la ejecución de programas en C 
Arg-F1.F90 Argumentos en línea de comando en la ejecución de programas en Fortran 
 
APLICACIONES 
 
Apli-C1.C Uso de Excel desde C 
F2008-Apli-F1.F90 Uso de Excel desde NAG Fortran, gfortran 
Apli-C2.C Llamada a aplicaciones desde C 
F2008-Apli-F2.F90 Llamada a aplicaciones desde NAG Fortran, gfortran 
 
PROGRAMAS EN C 
 
C-nif.C Calculo de la letra del NIF 
C-criba.C Criba de Eratóstenes 
C-tablagamma.C Tabla de la función gamma 
C-recta.C Recta de regresión 
C-copia.C Copia de un fichero 
 
PROGRAMAS EN Fortran 
 
F-nif.F90 Calculo de la letra del NIF 
F-criba.F90 Criba de Eratóstenes 
F-tablagamma.F90 Tabla de la función gamma 
F-recta.F90 Recta de regresión

Continuar navegando