Programacion Cientifica Scientific Programming

download Programacion Cientifica Scientific Programming

of 168

Transcript of Programacion Cientifica Scientific Programming

  • 7/28/2019 Programacion Cientifica Scientific Programming

    1/168

    P

    C

    Efran Soto Apolinar

  • 7/28/2019 Programacion Cientifica Scientific Programming

    2/168

  • 7/28/2019 Programacion Cientifica Scientific Programming

    3/168

    Programacion

    Cientfica

    Estas son las tareas de

    Efran Soto Apolinar

    PISIS

    Monterrey, N.L., Mexico. 2008

  • 7/28/2019 Programacion Cientifica Scientific Programming

    4/168

  • 7/28/2019 Programacion Cientifica Scientific Programming

    5/168

    Indice

    1 Introduccion 3

    1.1 Criterios de calificacion . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    2 Tareas en C 5

    2.1 Tarea 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

    2.2 Tarea 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    2.3 Tarea 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

    2.4 Tarea 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    2.5 Tarea 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

    2.6 Tarea 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

    2.7 Tarea 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    2.8 Tarea 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

    2.9 Tarea 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

    2.10 Tarea 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    2.11 Tarea 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    6/168

    vi

    3 Conceptos de C 35

    3.1 Conceptos de C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

    3.1.1 I/O File manipulation . . . . . . . . . . . . . . . . . . . . . . . . 36

    4 Tareas en Java 39

    4.1 Tarea 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40

    4.2 Tarea 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

    4.3 Tarea 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45

    4.4 Tarea 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

    4.5 Tarea 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

    4.6 Tarea 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50

    5 Conceptos de Java 53

    5.1 Conceptos de Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

    5.1.1 Funciones Matematicas . . . . . . . . . . . . . . . . . . . . . . 54

    6 Proyecto final 55

    6.1 Definicion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    6.2 Implementacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

    6.3 Ejemplos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

    6.3.1 funiforme(total, archivo) . . . . . . . . . . . . . . . . . . . . . . . 88

    6.3.2 funiforme(total, archivo, A, B) . . . . . . . . . . . . . . . . . . . 89

    6.3.3 fnormal(total, archivo) . . . . . . . . . . . . . . . . . . . . . . . . 91

    6.3.4 fnormal(total, archivo, media, SD) . . . . . . . . . . . . . . . . 92

    6.3.5 fexponencial(total, lambda, archivo) . . . . . . . . . . . . . . . 93

    6.3.6 fgeometrica(total, p, archivo) . . . . . . . . . . . . . . . . . . . . 946.3.7 fpoisson(total, alpha, archivo) . . . . . . . . . . . . . . . . . . . 94

    6.3.8 fweibull(total, archivo, c, k) . . . . . . . . . . . . . . . . . . . . . 95

    6.3.9 frayleigh(total, archivo, media) . . . . . . . . . . . . . . . . . . 96

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    7/168

    6.3.10 histograma(archivo, intervalos) . . . . . . . . . . . . . . . . . . 97

    6.3.11 PchiUniforme(archivo, No Int) . . . . . . . . . . . . . . . . . . . 103

    6.3.12 PchiNormal(archivo, No Int) . . . . . . . . . . . . . . . . . . . . 105

    6.3.13 PchiExponencial(archivo, Num Int, lambda) . . . . . . . . . . 106

    6.3.14 PchiWeibull(Archivo, Num Int, C, K) . . . . . . . . . . . . . . . 108

    6.3.15 PchiRayleigh(archivo, Num Int, media) . . . . . . . . . . . . . 110

    6.3.16 RL(archivo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

    6.3.17 RC(archivo) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112

    6.4 Otras funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

    6.4.1 uniforme() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114

    6.4.2 uniforme(a,b) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115

    6.4.3 weibull(c,k) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116

    6.4.4 rayleigh(media) . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

    6.4.5 normal() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118

    6.4.6 normal(media, desviacionStd) . . . . . . . . . . . . . . . . . . . 119

    6.4.7 exponencial(lambda) . . . . . . . . . . . . . . . . . . . . . . . . 120

    6.4.8 geometrica(p) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

    6.4.9 poisson(alpha) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

    6.4.10 media(archivo), desviacionStd(archivo) . . . . . . . . . . . . . 123

    7 Procesos Estocasticos 125

    7.1 Simulacion de la distribucion binomia l . . . . . . . . . . . . . . . . . . 126

    7.2 Dinamica de poblaciones . . . . . . . . . . . . . . . . . . . . . . . . . . 129

    7.3 Caminata aleatoria sobre un grafo . . . . . . . . . . . . . . . . . . . . 134

    7.4 Matriz de transicion de un grafo . . . . . . . . . . . . . . . . . . . . . . 143

    8 End matter 157

    8.1 Terminos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159

    8.2 Creditos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160

  • 7/28/2019 Programacion Cientifica Scientific Programming

    8/168

    2

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    9/168

    1Introduccion

    The longest trip begins with one step, but in the right direction.

    Budha and Me

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    10/168

    4 Introduccion

    . C

    El curso consiste de tareas y un proyecto individual. No hay examen. El estu-diante tiene que cuidar que la suma de sus puntos de las tareas y del proyectoexcedan 80, que es el lmite mnimo de aprobacion.

    Tareas 70%

    Hay un conjunto de tareas de programacion. El alumno mismo elige entre lastareas las que mejor corresponden a su nivel actual segun las recomendacionesde la profesora. Los puntos maximos por tarea dependen de la dificultad de latarea.

    No se tolera ningun tipo de plagio, ni de otros estudiantes, ni libros, ni paginas

    web o sea, no esta permitido copiar nada de codigo de ninguna parte. Al copiarcodigo, el estudiante inmediatamente reprueba el curso.

    Proyecto individual 30%

    El estudiante mismo propone el tema de su proyecto individual a la profesora encuanto quiere empezar su elaboracion. El puntaje mnimo aceptable del proyectoes 10 puntos (menores de diez se considera reprobados) y el maximo es 30 puntos.

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    11/168

    2Tareas en C

    There is no programming language, no matter how structured, thatwill prevent programmers from writing bad programs.

    L. Flon

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    12/168

    6 Tareas en C

    . T

    La serie de Fibonacci se define por la ecuacion recursiva siguiente:

    F() = F( 1) + F( 2)

    Los primeros elementos son F(0) = 0 y F(1) = 1, por lo cual la serie comienzacon:

    0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946...Objetivo Escribir un programa en ANSI-C1 al cual el usuario define el ndice y el programa imprime en la pantalla el valor de F().

    Calificacion La tarea vale por maximo cinco (5) puntos. Es importante entregarcodigo que por lo menos compile, aun si no ejecuta. Si el programa no calculabien el resultado, el maximo posible es 2 puntos.

    Retos para los avanzados

    Verificar que la entrada sea valida. Insistir por otra entrada hasta que sea valida. Permitir que el usuario pida por varios valores de . Intentar a generar elementos con valores de grandes. Implementarlo de dos maneras: con recursion y con iteracion y despues

    experimentar con el tiempo de ejecucion de las dos implementaciones.

    Tarea 1. Serie de Fibonacci. Este programa permite que el usuario de variosvalores de .

    1 /*2 Tarea Numero 1.

    3 Serie de Fibonacci

    4

    5 Descripcion:

    6 La serie de Fibonacci se define por la ecuacion

    7 recursiva siguiente:

    8

    9 F ( n ) = F ( n - 1 ) + F ( n - 2 )

    10

    11 Los primeros elementos son F(0) = 0 y F(1) = 1,

    12 por lo cual la serie comienza con:

    13 0 1 1 2 3 5 8 1 3 2 1 3 4 5 5 8 9 1 4 4 2 3 3 3 7 7 6 1 0 9 8 7 14 1597 2584 4181 6765 10946...

    15

    16 Objetivo:

    17 Escribir un programa en ANSI-C al cual el usuario

    18 define el ndice n y el programa imprime en la

    1Este codigo compila y funciona correctamente en C++.

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    13/168

    2.1 Tarea 1 7

    19 pantalla el valor de F(n).

    20

    21 Autor: Efrain Soto Apolinar

    22 fecha de ultima modificacion: 01 de febrero de 2008

    23 */

    24

    25 #include // para usar printf, scanf

    26 #include

    27

    28 int main(int argc, char** args) {

    29 int n,r;

    30 int b4, bb4, now,i;

    31 bb4 = 0;

    32 b 4 = 1 ;

    33 printf("\nEste programa calcula el valor iterativo");

    34 printf("\nde la serie de Fibonacci \n");

    35

    36 n = atoi(args[1]);

    37 //scanf("Inserta el valor de n: %d", &n);

    38 //if ((n==1) || (n == 2)){

    39 // printf("El valor de F(%d) es: %d",n,bb4);

    40 //} else {

    41

    42 for (i=1;i

  • 7/28/2019 Programacion Cientifica Scientific Programming

    14/168

    8 Tareas en C

    . T

    Detector de numeros primos

    Objetivo:

    Escribir un programa en ANSI-C2 al cual el usuario define un numero enteropositivo y el programa determina si es o no primo.

    Por ejemplo,1876953 = 3 13 17 19 149

    donde todos los factores son primos.

    Calificacion:

    La tarea vale por maximo cinco (5) puntos. Es importante entregar codigo que porlo menos compile, aun si no ejecuta. Si el programa no calcula bien el resultado,el maximo posible es 2 puntos.

    Retos para los avanzados

    Verificar que la entrada sea valida.

    Insistir por otra entrada hasta que sea valida. Permitir que el usuario pida por varios valores de .

    Ampliar el rango de entradas por cambiar tipos de datos.

    Imprimir todos los factores de si no es primo, o sea, como un productode numeros primos.

    Hacer la factorizacion recursivamente. Optimizar el algoritmo de solucion por eliminar operaciones redundantes.

    Estudiar las matematicas de los numeros primos para implementar metodosmas avanzados.

    Para esta tarea considero la siguiente definicion:

    Definicion 2.2.1.

    N PEs un numero natural que tiene exactamente dos divisores naturales.

    2Estos codigos compilan y funcionan correctamente en C++ .

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    15/168

    2.2 Tarea 2 9

    Esto significa que el numero 1 NO es primo, dado que tiene solamente un divisor.

    No se requiere, pero para no dejar a un lado:

    Definicion 2.2.2.

    N CEs un numero natural que tiene mas de dos divisores naturales.

    De nuevo, el numero 1 NO es compuesto, pues NO tiene mas de dos divisoresnaturales.

    Verificar si un numero es primo. o1 /*2 Tarea Numero 2. Detector de numeros primos

    3 Nombre de la Tarea.

    4

    5 Descripcion:

    6 Detector de numeros primos

    7

    8 Objetivo

    9

    10 Escribir un programa en ANSI-C al cual el usuario

    11 define un numero entero positivo n y el programa

    12 determina si o no es primo.

    13

    14 Por ejemplo, 1876953 = 3 * 13 * 17 * 19 * 149,

    15 donde todos los (cinco) factores son primos.

    16

    17 Autor: Efrain Soto Apolinar.

    18 fecha de ultima modificacion: 01 de febrero de 2008

    19

    */

    20

    21 #include // para usar printf, scanf

    22

    23 int main(int argc, char** args)

    24 {

    25

    26 int n,N,i,j,divisor,prime;

    27 int factor[20];

    28

    29 printf("\nEste programa calcula indica si un");

    30 printf("\nnumero dado es primo o no...\n");

    31

    32 n = atoi(args[1]);

    33 N = n; // Nueva variable para modificarla...

    34

    35

    36 // verifico que el numero ingresado sea positivo...

    37 if (n

  • 7/28/2019 Programacion Cientifica Scientific Programming

    16/168

    10 Tareas en C

    47 printf("...pero tampoco es compuesto...");

    48 return 0;

    49 }

    50

    51

    52 prime = 0; // Supongo que el numero NO es primo...

    53 i = 0; //Inicio el indice del arreglo

    54

    55 // Reinicio el arreglo factor[20]

    56 for (j=0;j=divisor){70 while (N%divisor==0){

    71 factor[i]=divisor;

    72 i++;

    73 prime = 1;

    74 N = N/divisor;

    75 }

    76 divisor = divisor + 2;

    77 if (divisor%3==0) divisor = divisor + 2;

    78 }

    79

    80 // Ahora imprimo los factores...

    81 if (i>=2){

    82 printf("\n\n\nEl numero %d no es primo...\n\n\n",n);

    83 // reinicio el indice i

    84 j = 0 ;

    85 printf("\n\n\n%d = ",n);

    86 for (j=0;j

  • 7/28/2019 Programacion Cientifica Scientific Programming

    17/168

    2.3 Tarea 3 11

    . T

    Piedra, papel y tijera

    Objetivo:

    Escribir un programa en ANSI-C que juega interactivamente piedra-papel-tijeracon el usuario.

    Calificacion:

    La tarea vale por maximo cinco (5) puntos. Es importante entregar codigo que porlo menos compile, aun si no ejecuta. Si el programa no funciona bien, el m aximoposible es 2 puntos.

    Retos para los avanzados:

    Verificar que la entrada sea valida. Insistir por otra entrada hasta que sea valida. Hacer observaciones de como distribuyen los puntos por ganar en tiempo

    al repetir el juego.

    Desarrollar inteligencia artificial, o sea, hacer que el programa sepa jugary no simplemente elija al azar.

    Juego Piedra papel tijera. o

    1 /*2 Tarea Numero 3.

    3 Piedra-Papel-Tijera

    4

    5 Descripcion:

    6 Escribir un programa en ANSI-C que juega interactivamente

    7 piedra-papel-tijera con el usuario.

    8

    9 Autor: Efrain Soto Apolinar.

    10 fecha de ultima modificacion: 07 de febrero de 2008

    11 */

    12

    13

    14 #include // para usar printf, scanf

    15 #include // para rand()

    16

    17 //int main(int argc, char** args)

    18 int main(void){

    19 int usuario,compu;

    20 //

    21 printf("\n\n\nEste programa juega interactivamente");

    22 printf("\n\n\nPiedra - Papel o tijera");

    23 printf("\ncon el usuario...");

    24

    25 for (;;){ // for infinito

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    18/168

    12 Tareas en C

    26 printf("\n\n1 representa piedra...");

    27 printf("\n2 representa papel...");

    28 printf("\n3 representa tijera...");

    29 printf("\nPresiona 0 para salir...");

    30 printf("\n\nIntroduce tu jugada...");

    31 scanf("%d",&usuario);

    32

    33 if (usuario == 0){ // hay que salir...

    34 printf("\n\nPresionaste ...");

    35 printf("\n\nAdios...\n\n");

    36 break;

    37 }

    38 //

    39 //compu = (rand() % 3) + 1;

    40 //

    41 if ((usuario == 1)){

    42 printf("\n\nyo elijo papel....");

    43 printf("\n\nYo gano!!!\n");

    44 continue;

    45 }

    46

    47 if (usuario == 2){

    48 printf("\n\nyo elijo tijera....");49 printf("\n\nYo gano!!!\n");

    50 continue;

    51 }

    52

    53 if (usuario == 3){

    54 printf("\n\nyo elijo piedra....");

    55 printf("\n\nYo gano!!!\n");

    56 continue;

    57 }

    58

    59 printf("\nError en Argumento...\n");

    60 printf("\nPor favor, intenta de nuevo...\n\n\n");

    61 } // termina el for...

    62

    63 return 1;

    64 }

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    19/168

    2.4 Tarea 4 13

    . T

    Aproximacion de

    /*Tarea 4: Aproximacion de pi con la formula

    Bailey-Borwein-Plouffe (BBP)

    Objetivo:

    Escribir un programa en ANSI-C

    para calcular una aproximacion de pi

    utilizando la formula BBP:

    PI = \sum\limits_{n=0}{\infty}

    {\frac{4}{8n+1} - \frac{2}{8n+4} - \frac{1}{8n+5} -

    \frac{1}{8n+6}} \cdot \left(\frac{1}{16}\right)n

    Autor: Efrain Soto Apolinar.

    fecha de ultima modificacion: 07 de febrero de 2008

    */

    #include // para usar printf, scanf

    #include // para usar pow(double,double)

    int main(int argc, void* args){

    double approx = 0;

    int i,n;

    //

    printf("\nEste programa calcula una aproximacion");

    printf("\ndel valor de PI usando la formula de");

    printf("\nBailey - Borwein - Plouffe...");

    printf("\nIntroduce el valor de n: ");

    scanf("%d",&n);

    //

    for (i = 0 ; i

  • 7/28/2019 Programacion Cientifica Scientific Programming

    20/168

    14 Tareas en C

    . T

    Factoriales y aproximacion del numero e

    Objetivo: Escribir en ANSI-C un programa que calcula una aproximacion de eutilizando su expansion Taylor ecuacion

    1 + 1 +1

    2!+

    1

    3!+

    1

    4!+

    as que el usuario controle de alguna manera la exactitud de la aproximacion.

    1 Tarea Numero 5.

    2 Nombre de la Tarea

    3 Tarea 5: Aproximacion del numero e con factoriales

    4

    5 Objetivo:

    6 Escribir un programa en ANSI-C para calcular

    7 una aproximacion del numero e con la formula iterativa:

    8

    9 PI = \sum\limits_{n=0} {\infty}

    10 {\frac{4}{8n+1} - \frac{2}{8n+4} - \frac{1}{8n+5}

    11 - \frac{1}{8n+6}} \cdot \left(\frac{1}{16}\right)n

    12

    13 Autor: Efrain Soto Apolinar.

    14 fecha de ultima modificacion: 07 de febrero de 2008

    15 */

    16

    17 #include // para usar printf, scanf

    18 #include // para usar pow(double,double)

    19

    20 int main(int argc, void* args){

    21 double e = 0;

    22 int i, j, n;

    23 double factorial;24 //

    25 printf("\nEste programa calcula una aproximacion");

    26 printf("\ndel valor de la base neperiana");

    27 printf("\nusando la serie de MacLaurin...");

    28 printf("\nIntroduce el numero de iteraciones: ");

    29 scanf("%d",&n);

    30 //

    31 for (i = 0 ; i

  • 7/28/2019 Programacion Cientifica Scientific Programming

    21/168

    2.6 Tarea 6 15

    . T

    Palindromos

    Objetivo: Escribir un programa en ANSI-C que examina si una palabra dada porel usuario es un palndromo, o sea, si se lee igual al derecho y al reves.

    1 /*2 Tarea Numero Seis.

    3 Nombre de la Tarea: Palindromos

    4

    5 Objetivo:

    6 Escribir un programa en ANSI-C que examina

    7 si una palabra dada por el usuario es un

    8 palndromo, o sea, si se lee igual al reves.

    9

    10 Autor: Efrain Soto Apolinar.

    11 fecha de ultima modificacion: 13 de febrero de 200812 */

    13

    14

    15 #include // para usar printf, scanf

    16 #include

    17

    18 int main(int argc, char** args)

    19 {

    20 char frase[81]; // la frase que va a dar el usuario

    21 int i,j,k; // contadores...

    22 int palindromo = 1; // supongo que es palindromo...

    23

    24 for(;;){

    25 printf("\n\nEste programa detecta Palindromos...");

    26 printf("\nIntroduce una frase,

    27 \npero sin escribir espacios en blanco: ");

    28 scanf("%s",frase);

    29 if (strlen(frase) < 81){

    30 break;31 }

    32 printf("\n\nLo siento...");

    33 printf("\nLa frase debe contener a lo mas 80

    34 caracteres...");

    35 printf("\n\nIntenta de nuevo...\n\n");

    36 }

    37 k = strlen(frase)-1;

    38

    39 for (i = 0 ; i

  • 7/28/2019 Programacion Cientifica Scientific Programming

    22/168

    16 Tareas en C

    . T

    Coeficientes binomiales y el triangulo de Pascal

    Objetivo: Escribir un programa en ANSI-C que produce, segun la eleccion delusuario, o el coeficiente binomial C(n, k), definido como:

    =

    !

    ! ( )!

    con valores de y definidos por el usuario, (por ejemplo C(31 5) = 169 911)o las primeras lneas del triangulo de Pascal: el elemento numero la lneanumero del triangulo es exactamente C( ).

    1 /*2 Tarea Numero Ocho.

    3 Coeficientes binomiales y el triangulo de Pascal

    4

    5 Descripcion:

    6 Escribir un programa en ANSI-C que produce,

    7 segun la eleccion del usuario, o el coeficiente

    8 binomial C(n, k), definido como

    9

    10 C(n,k) = \frac{n!}{(n-k)! k!}

    11

    12 con valores de n y k definidos por el usuario,

    13 (por ejemplo C(31, 5) = 169911) o las primeras n

    14 lneas del triangulo de Pascal: el elemento numero

    15 k e l l a lnea numero n del triangulo es

    16 exactamente C(n, k). Por ejemplo, las primeras

    17 ocho lneas son las siguientes:

    18

    19 1

    20 1 1

    21 1 2 1

    22 1 3 3 1

    23 1 4 6 4 1

    24 1 5 10 10 5 1

    25 1 6 15 20 15 6 1

    26 1 7 21 35 35 21 7 1

    27 1 8 28 56 70 56 28 8 1

    28

    29

    30 Autor: Efrain Soto Apolinar.

    31 fecha de ultima modificacion: 11 de febrero de 2008

    32 */

    33

    34

    35 #include // para usar printf, scanf

    36 #include

    37

    38 int main(int argc, char** args)

    39 {

    40 int i,j,n; // contadores

    41 long now[100]; // arreglo con los coeficientes actuales

    42 long b4[100]; // arreglo con los coeficientes anteriores

    43

    44 printf("\n\nEste programa imprime los renglones del");

    45 printf("\ntriangulo de Pascal...");

    46

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    23/168

    2.7 Tarea 8 17

    47 for(;;){

    48 printf("\n\nIndique el numero de renglones a imprimir: ");

    49 scanf("%d",&n);

    50 if (n > 99){

    51 printf("\n\nEl valor de n no debe ser mayor a 99...");

    52 printf("\nIntente de nuevo...");

    53 }

    54 else{

    55 break;

    56 }

    57 } // endfor...

    58 // reinicio los arreglos

    59 f o r ( i = 0 ; i < 1 0 0 ; i + + ) {

    60 now[i] = 0;

    61 b4[i] = 0;

    62 }

    63

    64 // inicio con los coeficientes binomiales...

    65 printf("\t1\n\n");

    66 // printf("\t1\t1\n\n");

    67 for (j = 1 ; j < n ; j++){ // Renglones...

    68 // reinicio los valores de los arreglos...

    69 now[0] = 1;70 b4[0] = 1;

    71 b4[1] = j-1;

    72

    73 printf("\t1"); // Imprimo el primer valor del renglon

    74

    75 for (i = 1 ; b4[i+1] != 0 ; i++){ // Coeficientes

    76 now[i] = b4[i] + b4[i-1];

    77

    78 if (now[i]

  • 7/28/2019 Programacion Cientifica Scientific Programming

    24/168

    18 Tareas en C

    . T

    Verificador del uso correcto de los parentesis

    Objetivo: Escribir un programa en ANSI-C que examina una expresion guardadaen un archivo y determina si los parentesis estan correctamente cerradas, o sea,para cada ( que abre, viene un ), para cada [, un ] y para cada un . Porejemplo, la expresion

    (3 + [4 8

    5] 42 23)es correcta mientras que

    3 + [4 8

    5] (42 23)

    no lo es.

    1 /*2 Tarea Numero Nueve.

    3 Verificador del uso correcto de los parentesis

    4

    5 Objetivo:

    6 Escribir un programa en ANSI-C que examina una

    7 expresion guardada en un archivo y determina

    8 si los parentesis estan correctamente cerradas,

    9 o sea, para cada "(" que abre, viene un ")",

    10 para cada "[", un "]" y para cada "{" un "}".

    11 Por ejemplo, la expresion:

    12

    13 (3+[4 - 8 * sqrt(5)] - {4.2 - 23})

    14

    15 es correcta mientras:

    16

    17 {3+[4 - 8*

    sqrt(5)] - (4.2 - 23})

    18

    19 no lo es.

    20

    21 Autor: Efrain Soto Apolinar.

    22 fecha de ultima modificacion: 13 de febrero de 2008

    23 */

    24

    25 #include // para usar printf, scanf

    26 #include

    27

    28 int main(int argc, char** args)

    29 {

    30 char expresion[51];

    31 int i,j;

    32 // Los signos de agrupacion son 3 x 2

    33 // Parentesis ()

    34 // Corchetes []

    35 // llaves {}

    36 int parentesis = 0;

    37 int corchetes = 0;

    38 int llaves = 0;

    39 i n t u p = 0 , u l = 0 , u c = 0 ;

    40 int nivel = 0; // anidacion de los agrupadores...

    41 int correcto = 1; // Supongo que se escribio bien...

    42

    43 printf("\n\nEste programa verifica el uso de

    44 los signos de agrupacion...");

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    25/168

    2.8 Tarea 9 19

    45 printf("\nIntroduce una expresion matematica: ");

    46 scanf("%s",expresion);

    47 i = 0 ;

    48 while (expresion[i] != \0){ // Pedir expresion...

    49 // cuento los signos...

    50 if (expresion[i] == (){// abre un parentesis...

    51 parentesis++;

    52 nivel ++;

    53 up = nivel; // el ultimo parentesis se abrio

    54 // en este nivel...

    55 }

    56 if (expresion[i] == )){// cierra un parentesis...

    57 parentesis--;

    58 if (nivel != up){

    59 correcto = 0;

    60 printf("\n\nError, escribiste un parentesis de mas en");

    61 printf("\nel caracter %d de tu expresion...",i+1);

    62 }

    63 nivel --;

    64 }

    65 if (expresion[i] == [){// abre un corchete...

    66 corchetes++;

    67 nivel++;68 uc = nivel; // el ultimo corchete se abrio

    69 // en este nivel...

    70 }

    71 if (expresion[i] == ]){// cierra un corchete...

    72 corchetes--;

    73 if (nivel != uc){

    74 correcto = 0;

    75 printf("\n\nError, escribiste un corchete de mas en");

    76 printf("\nel caracter %d de tu expresion...",i+1);

    77 }

    78 nivel--;

    79 }

    80 if (expresion[i] == {){// abre una llave...

    81 llaves++;

    82 nivel++;

    83 ul = nivel; // la ultima llave se abrio

    84 // en este nivel...

    85 }

    86 if (expresion[i] == }){// cierra una llave...87 llaves--;

    88 if(nivel != ul){

    89 correcto = 0;

    90 printf("\n\nError, escribiste una llave de mas en");

    91 printf("\nel caracter %d de tu expresion...",i+1);

    92 }

    93 nivel--;

    94 }

    95 i++;

    96 } // Termina de leer la expresion

    97 // Ahora envio el mensaje final...

    98

    99 printf("\n\n\nNivel: %d",nivel); // Un poco de espacio

    100

    101 if ((correcto == 1) && (nivel == 0)){

    102 printf("\n\nFelicidades!!!");

    103 printf("\nLa expresion fue escrita

    104 correctamente...\n\n\n");

    105 }106 else{

    107 printf("\n\nUps!");

    108 printf("\nFalto algun signo agrupador...");

    109 printf("\nPor favor verifica tu expresion...\n\n");

    110 }

    111 return 0;

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    26/168

    20 Tareas en C

    112 }

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    27/168

    2.9 Tarea 10 21

    . T

    Numeros aleatorios uniformes y exponenciales con histogramas

    Objetivo: Escribir un programa en ANSI-C que genera numeros aleatorios uni-formes y exponenciales y sabe dibujar histogramas de los numeros generados.La salida se guarda en un archivo.

    1 /*******************************2 Tarea 10. Numeros aleatorios uniformes y

    3 exponenciales con histogramas

    4 Nombre del archivo: diez.c

    5 Escribir un programa en ANSI-C que genera n umeros

    6 aleatorios uniformes y exponenciales y sabe

    7 "dibujar" histogramas de los numeros generados.

    8 La salida se guarda en un archivo.9 ********************************/

    10

    11 #include

    12 #include

    13 #include

    14 #include

    15 const double PI = 3.141592653;

    16

    17 int semilla; // semilla = 1 ---> se debe reiniciar la semilla.

    18 int sel; // seleccion de distribucion...

    19

    20 // funcion para generar numeros

    21 // pseudoaleatorios con distribucion uniforme.

    22 double uniforme(void);

    23 void duniforme(void);

    24

    25 // Funcion para generar numeros

    26 // pseudoaleatorios con distribucion exponencial

    27 double exponencial(float lambda);

    28 void dexponencial(void);

    29

    30 // Funcion para generar numeros

    31 // pseudoaleatorios con distribucion normal

    32 double normal(double media, double sigma);

    33 void dnormal(void);

    34

    35 int main(int argc, char *argv[]){

    36 char respuesta, distribucion;

    37 double lambda; // promedio de la exponencial

    38 int i, j;

    39 for(;;){ // for infinito...

    40 printf("\n\nEste programa genera numeros aleatorios");

    41 printf("\ncon las siguientes distribuciones:");

    42 printf("\n U ---> Uniforme,");

    43 printf("\n E ---> Exponencial, y");

    44 printf("\n N ---> Normal.");

    45 printf("\n\nElija una distribucion...");

    46 scanf("%s", &distribucion);

    47 switch (distribucion){

    48 case U:

    49 sel = 1;

    50 duniforme();

    51 break;

    52 case u:

    53 sel = 1;

    54 duniforme();

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    28/168

    22 Tareas en C

    55 break;

    56 case E:

    57 sel = 2;

    58 dexponencial();

    59 break;

    60 case e:

    61 sel = 2;

    62 dexponencial();

    63 break;

    64 case N:

    65 sel = 3;

    66 dnormal();

    67 break;

    68 case n:

    69 sel = 3;

    70 dnormal();

    71 break;

    72 default:

    73 printf("\n\nError en argumento...");

    74 printf("\nIntente de nuevo...");

    75 printf("\n\n\n");

    76 continue;

    77 }78 // pregunto si desea salir...

    79 scanf("%c", &respuesta);

    80 printf("\n\n\nPresione < S > para salir... ");

    81 scanf("%c", &respuesta);

    82 if ((respuesta == S)||(respuesta == s)){

    83 break; // Salir del ciclo for inicial...

    84 }

    85 printf("\n\n\n");

    86 } // end for infinito...

    87 // system("PAUSE");

    88 return 0;

    89 }

    90

    91 /**************************************92 Declaro la funcion UNIFORME...

    93 ***************************************/

    94 double uniforme(void){

    95 // Esta funcion genera un numero pseudoaleatorio

    96 // en el intervalo (0,1) con distribucion uniforme.97 return ((double)(rand())/(double)(RAND_MAX));

    98 }

    99

    100 /**************************************101 Declaro la funcion EXPONENCIAL...

    102 ***************************************/

    103 double exponencial(float lambda){

    104 // Esta funcion genera numeros pseudoaleatorios

    105 // con distribucion exponencial

    106 double x1, x2;

    107 x1 = - log(1 - uniforme());

    108 x 2 = x 1 * pow(lambda,-1);

    109 return x2;

    110 }

    111

    112 /**************************************113 Declaro la funcion NORMAL...

    114 ***************************************/

    115 double normal(double media, double sigma){116 /*117 Esta funcion genera numeros pseudoaleatorios

    118 con distribucion uniforme a partir de su media

    119 y su desviacion estandar.

    120 */

    121 double u, x, y, z;

    122 u = uniforme();

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    29/168

    2.9 Tarea 10 23

    123 y = uniforme();

    124 x = sqrt(-2 * log(u)) * cos(2 * PI * y);

    125 if (u >= 0.5){

    126 z = media + sigma * x;

    127 }

    128 else{

    129 z = media - sigma * x;

    130 }

    131 return z;

    132 }

    133

    134 /**************************************135 Declaro la funcion DUNIFORME..

    136 ***************************************/

    137 void duniforme(void){

    138 /*139 Para generar los numeros

    140 con distribucion uniforme...

    141 */

    142 int I[10]; // los intervalos...

    143 int errores = 0, max =0, min = 1000000;

    144 int imax, imin;

    145 int total; // cuantos vamos a generar...146 int i, j; // contadores

    147 double x; // el numero generado...

    148 double escala; // para hacer la grafica...

    149 int factor; // para hacer la grafica...

    150 // Para el manejo de archivos...

    151 FILE* f = fopen("uniforme.txt", "w+");

    152 assert(f != NULL);

    153 for(;;){ // hasta que ingrese un numero entero positivo

    154 printf("\nIndique cuantos numeros desea generar: ");

    155 scanf("%d", &total);

    156 if (total

  • 7/28/2019 Programacion Cientifica Scientific Programming

    30/168

    24 Tareas en C

    191 // Ahora imprimo los resultados...

    192 FILE* r = fopen("uniforme.txt", "a+"); // a

    193 f o r ( i = 0 ; i < = 9 ; i + + ) {

    194 printf("\n Intervalo %.1f -- %.1f ", (1.0 * i / 10),(1.0 * (i+1) / 10));

    195 fprintf(r, "\n# Intervalo %.1f -- %.1f ", (1.0 * i / 10),(1.0 * (i+1) / 10));

    196 escala = 35.0 * I[i] / max;

    197 factor = (int)(escala + 0.5); // redondeo

    198 // Imprime la barra del intervalo (i-1)

    199 for (j = 0 ; j

  • 7/28/2019 Programacion Cientifica Scientific Programming

    31/168

    2.9 Tarea 10 25

    259 }

    260 // limpio la memoria del array...

    261 f o r ( i = 0 ; i < = 9 ; i + + ) {

    262 I[i] = 0;

    263 }

    264 for (i = 1; i 0.1 * j * lambda) && (x max){

    279 max = I[i];

    280 imax = i;

    281 }282 if (I[i] < min){

    283 min = I[i];

    284 imin = i;

    285 }

    286 }

    287

    288 // Ahora imprimo los resultados...

    289 FILE* r = fopen("exponencial.txt", "a+");

    290 fprintf(r, "\n\n\n"); // espacio

    291 printf("\n\nlos intervalos esta n e n terminos del");

    292 printf("\nparametro lambda...\n");

    293 f o r ( i = 0 ; i < = 9 ; i + + ) {

    294 printf("\n Intervalo %.1f --%.1f ", (1.0 * (i) / 10),(1.0 * (i+1) / 10));

    295 fprintf(r, "\n# Intervalo %.1f --%.1f ", (1.0 * (i) / 10),(1.0 * (i+1) / 10));

    296 escala = 35.0 * I[i] / max;

    297 factor = (int)(escala + 0.5); // redondeo

    298 // Imprime la barra del intervalo (i-1)

    299 for (j = 0 ; j

  • 7/28/2019 Programacion Cientifica Scientific Programming

    32/168

    26 Tareas en C

    327 con distribucion normal...

    328 */

    329 int I[10]; // los intervalos...

    330 int errores = 0, max =0, min = 1000000;

    331 int total; // cuantos vamos a generar...

    332 int i, j; // contadores

    333 double x; // el numero generado...

    334 double escala; // para hacer la grafica...

    335 int factor; // para hacer la grafica...

    336 double media = 0.0, sigma = 1.0; // parametros

    337 FILE* f = fopen("normal.txt", "w+");

    338 for(;;){ // hasta que ingrese un numero entero positivo

    339 printf("\nIndique cuantos numeros desea generar: ");

    340 scanf("%d", &total);

    341 if (total max){

    371 max = I[i];

    372 }

    373 if (I[i] < min){

    374 min = I[i];

    375 }

    376 }

    377 // Ahora imprimo los resultados...

    378 FILE* r = fopen("normal.txt", "a+");

    379 fprintf(r, "\n\n\n"); // espacio

    380 f o r ( i = 0 ; i < = 9 ; i + + ) {

    381 printf("\nIntervalo %i -- %i ", (i-5), (i-4));

    382 fprintf(r, "\n# Intervalo %i -- %i ", (i-5), (i-4));

    383 escala = 35.0 * I[i] / max;

    384 factor = (int)(escala + 0.5); // redondeo

    385 // Imprime la barra del intervalo (i-1)

    386 for (j = 0 ; j

  • 7/28/2019 Programacion Cientifica Scientific Programming

    33/168

    2.9 Tarea 10 27

    395 if (I[i] == min){

    396 printf(" (%i) [Min]\n", I[i]);

    397 fprintf(r, " (%i) [Min]\n", I[i]);

    398 continue;

    399 }

    400 printf(" (%i) \n", I[i]);

    401 fprintf(r, " (%i) \n", I[i]);

    402 }

    403 return;

    404 fclose(r);

    405 } // Fin de la funcion DNORMAL

    Fuente Bilbiografica La teora respecto a los procedimientos para generar losnumeros pseudoaleatorios para las distintas distribuciones se obtuvo del siguien-te libro:

    Autor: Jerry Banks, John S. Carson II, Barry L. Nelson.

    Ttulo: D-

    Editorial: Ed. Prentice Hall.

    Edicion: 2da. edicion. 1996.

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    34/168

    28 Tareas en C

    . T

    Promedio, varianza y deviacion estandar

    Objetivo: Escribir un programa en ANSI-C que lee un archivo de datos y calculasu promedio, varianza y deviacion estandar, sin saber de antemano cuantos datosseran.

    1 /*2 Name: once.c

    3 Author: Efrain Soto A.

    4 Date: 24/03/08 16:39

    5 Description: Tarea 11.

    6 Escribir un programa en ANSI-C que lee

    7 un archivo de datos y calcula su promedio,

    8 varianza y deviacion estandar, sin saber

    9 de antemano cuantos datos seran.10

    11 mean = (\sum x_i) / n

    12 variance = 1/(n-1) [\sum(x_i 2) - 1/n (\sum (x))2]

    13 standar deviation = sqrt(variance)

    14 */

    15 #include

    16 #include

    17 #include

    18 #include

    19 #include

    20 #include

    21

    22 int main(int argc, char *argv[]){

    23 char respuesta, letra = ;

    24 char filename[15];// = "data.txt"; // nombre de archivo

    25 double datum;

    26 double x, Sx, Sx2;

    27 double varianza, sd, media;

    28 int n = 0, j = 1, i = 0; // contadores...

    29 char dato[15];

    30 char B4; // letra leida antes...

    31 FILE *stream_datum; // stream_uniforme

    32 //FILE* f = fopen("datos.txt", "r");

    33 //assert(f != NULL);

    34

    35 for (;;){

    36 Sx = 0, Sx2 = 0; // reinicio los contadores

    37 printf("\n\nEste programa lee datos numericos");

    38 printf("\nde un archivo y calcula la media,");

    39 printf("\nla varianza y la desviacion estandar.");

    40 printf("\n\nIntroduzcael nombre del archivo");

    41 printf("\ndel cual se leeran los datos...");

    42 scanf("%s", &filename);

    43 stream_datum = fopen(filename, "r+"); // abrir para lectura

    44 if (stream_datum == NULL){

    45 printf ("\nNo se puede abrir el archivo %s\n", filename);

    46 printf("\nPor favor, verifique el archivo...");

    47 printf("\nReinicie el programa entonces...\n");

    48 system("PAUSE");

    49 return 0; // salir sin avisar...

    50 }

    51 // Ahora leemos los datos...

    52 do{

    53 //dato[i] = 0; // opcional

    54 letra = fgetc(stream_datum); // leer un char

    55 if (letra == feof(stream_datum)){

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    35/168

    2.10 Tarea 11 29

    56 break; // Salir del ciclo...

    57 }

    58 switch(letra){

    59 case \n: // llego a un nuevo renglon

    60 if (i > 1){

    61 dato[i] = \0; // fin del arreglo de caracteres

    62 x = atof(dato); // convierto el arreglo a un float

    63 printf("\nDato leido: %f", x); // opcional

    64 S x + = x ; / / S um a d e x

    65 Sx2 += x * x; // Suma de x2

    66 i = 0 ;

    67 n++;

    68 }

    69 break;

    70 case \t: // para el caso de varias columnas...

    71 //if (i > 0){

    72 dato[i] = \0; // fin del arreglo de caracteres

    73 x = atof(dato); // convierto el arreglo a un float

    74 printf("\nDato leido: %f", x); // opcional

    75 S x + = x ; / / S um a d e x

    76 Sx2 += x * x; // Suma de x2

    77 i = 0 ;

    78 n++;79 //}

    80 break;

    81 case : // espacio en blanco...

    82 if (i > 1){

    83 dato[i] = \0; // fin del arreglo de caracteres

    84 x = atof(dato); // convierto el arreglo a un float

    85 printf("\nDato leido: %f", x); // opcional

    86 S x + = x ; / / S um a d e x

    87 Sx2 += x * x; // Suma de x2

    88 i = 0 ;

    89 n++;

    90 break;

    91 }

    92 case #: // comentario...

    93 //if (i > 1){

    94 do{ // leer todos los alfanumericos

    95 letra = fgetc(stream_datum);

    96 if (letra == feof(stream_datum)){

    97 break;98 }

    99 } while (letra!=\n);

    100 i = 1 ;

    101 dato[0] = letra;

    102 //}

    103 break;

    104 default:

    105 dato[i] = letra;

    106 i++;

    107 }

    108 } while(!feof(stream_datum));

    109 fclose(stream_datum); // cerrar archivo...

    110

    111 printf("\n\nResultados: ");

    112 printf("\nSx = %f", Sx);

    113 printf("\nSx2 = %f", Sx2);

    114 printf("\nn = %i\n\n", n);

    115 system("PAUSE");

    116 varianza = (Sx2 - Sx * Sx / (1.0 * n)) / (n - 1.0);117 sd = sqrt(varianza);

    118 media = Sx / (1.0 * n);

    119 printf("\n\nMedia: %f", media);

    120 printf("\nVarianza: %f", varianza);

    121 printf("\nDesviacion estandar: %f", sd);

    122 //

    123 scanf("%c", &respuesta);

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    36/168

    30 Tareas en C

    124 for (;;){

    125 printf("\n\n\nPresione < S > para salir... ");

    126 scanf("%c", &respuesta);

    127 if ((respuesta == S)||(respuesta == s)){

    128 return 0; // Salir del ciclo for inicial...

    129 }

    130 if (respuesta == \n){

    131 continue; // Salir del ciclo for inicial...

    132 }

    133 else{

    134 break;

    135 }

    136 } // end for infinito...

    137 printf("\n\n\n");

    138 } // end for infinito...

    139 return 0;

    140 }

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    37/168

    2.11 Tarea 12 31

    . T

    Ruina del jugador

    Objetivo:

    Escribir un programa en ANSI-C para simular un juego: un jugador apuesta pesos. Con probabilidad 0 < < 1, gana > pesos. Si no gana, pierde suapuesta. El jugador empieza con > pesos y quiere jugar hasta que tengaen total > pesos. Al momento que el jugador ya no tiene ni pesos, haperdido. Depende de los parametros y con que probabilidad pierdelo que tiene y con que probabilidad gana sus pesos.

    1 /*2 Name: doce.c

    3 Author: Efrain Soto A.

    4 Date: 24/03/08 16:39

    5 Description: Tarea 12.

    6 Escribir un programa en ANSI-C para simular

    7 un juego: un jugador apuesta b pesos. Con

    8 probabilidad 0 < p < 1, gana g > b pesos.

    9 Si no gana, pierde su apuesto. El jugador

    10 empieza con k > b pesos y quiere jugar hasta

    11 que tenga en total n > k pesos. Al momento que

    12 el jugador ya no tiene ni b pesos, ha perdido.

    13 Depende de los parametros b, p, g, k y n con

    14 que probabilidad pierde lo que tiene y con que

    15 probabilidad gana sus n pesos.

    16 */

    17 #include

    18 #include

    19 #include

    20

    21 double uniforme(void);

    22

    23 int main(int argc, char *argv[]){

    24 float p_Exito; // probabilidad de que gane...

    25 float Monto_Inicial; // Monto inicial del jugador (k)

    26 float Goal = 10000; // meta del jugador...

    27 float Ruina = 0; // Ruina del jugador...

    28 float Lim = 100; // lmite mn para empezar a jugar...

    29 float Apuesta;// = 25; // Monto a apostar...

    30 float Monto_Actual; // que posee el jugador en la apuesta actual

    31 i n t i = 0 ; / / N umero de apuesta

    32 int gana = 0, pierde = 0;

    33 char ch;

    34 printf("\n\nEste programa simula la ruina del jugador.");

    35 printf("\nIntroduzca los siguientes datos:");

    36 for(;;){

    37 printf("\n\nProbabilidad de ganar del jugador: ");

    38 scanf("%f", &p_Exito);

    39 if (p_Exito < 0 || p_Exito > 1){

    40 printf("\n\nError en argumento...");

    41 printf("\nEl valor debe estar entre cero y uno...");

    42 continue;

    43 }

    44 break;

    45 }

    46 for(;;){

    47 printf("\n\nMonto inicial del jugador: ");

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    38/168

    32 Tareas en C

    48 scanf("%f", &Monto_Actual);

    49 if (Monto_Actual < 0){

    50 printf("\n\nError en argumento...");

    51 printf("\nEl valor debe ser positivo...");

    52 continue;

    53 }

    54 break;

    55 }

    56 Monto_Inicial = Monto_Actual;

    57 printf("Monto Actual = %f\n\n", Monto_Actual);

    58 for(;;){

    59 printf("\nValor de cada apuesta: ");

    60 scanf("%f", &Apuesta);

    61 if (Apuesta Monto_Actual){

    62 printf("\n\nError en argumento...");

    63 printf("\nEl valor debe ser un numero positivo");

    64 printf("\nmenor que el monto actual del jugador...");

    65 continue;

    66 }

    67 break;

    68 }

    69 for(;;){

    70 printf("\n\nIndique cuanto desea ganar el jugador: ");71 scanf("%f", &Goal);

    72 if (Goal < Monto_Actual || Goal = Apuesta));

    98 //

    99 if (gana > pierde){

    100 printf("\n\nEl jugador termino con %f despues de %i apuestas...",

    101 Monto_Actual, i);

    102 printf("\n\nEn total gano: %f pesos.",

    103 Monto_Actual - Monto_Inicial);

    104 printf("\n\nFelicidades, esta vez tuviste suerte...\n\n\n");

    105 }

    106 else{

    107 printf("\nEl jugador termino con %f despues de %i apuestas...",

    108 Monto_Actual, i);109 printf("\n\nEn total perdio: %f pesos.",

    110 Monto_Actual - Monto_Inicial);

    111 printf("\nLo siento, esta vez la casa gana...\n\n\n");

    112 }

    113

    114 //

    115 printf("\n\n\n");

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    39/168

    2.11 Tarea 12 33

    116 printf("El jugador gano un total de %i apuestas,", gana);

    117 printf("\nEs decir, un %.2f%% de las apuestas.\n", (100.0 * gana / i));

    118 printf("\ny perdio un total de %i apuestas,", pierde);

    119 printf("\nEs decir, un %.2f%% de las apuestas.", (100.0 * pierde / i));

    120 printf("\n\n\n");

    121 //system("PAUSE");

    122 printf("Presione una tecla y despues ...");

    123 scanf("%c", &ch);

    124 scanf("%c", &ch);

    125 /*scanf("%c", &ch);*/

    126 return 0;

    127 }

    128 /**************************************129 Declaro la funcion UNIFORME...

    130 ***************************************/

    131 double uniforme(void){

    132 // Esta funcion genera un numero pseudoaleatorio

    133 // en el intervalo (0,1) con distribucion uniforme.

    134 return (1.0 * rand()/RAND_MAX);

    135 }

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    40/168

    34 Tareas en C

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    41/168

    3Conceptos de C

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    42/168

    36 Conceptos de C

    . C C

    3.1.1 I/O File manipulation

    FILE es el tipo de dato usado para representar objetos del tipo stream.Este tipo de dato esta definido en el archivo stdio.h

    Las funciones feof (end of file) ferror (error de lectura y/o escritura)pueden verificarse con el tipo de dato FILE.

    Para redireccionar la salida a un archivo podemos escribir las siguientesinstrucciones:

    FILE * fopen(const char *filename, const char *opentype);

    /*La funcion ||fopen|| abre una stream para I/O al

    ||filename|| y regresa un apuntador al stream.

    El ||opentype|| es una cadena de caracteres que

    controla como se va a abrir el archivo...

    */

    Las cadenas de caracteres que acepta opentype son:

    r Abre un archivo existente (solo lectura). w Abre un archivo existente (solo escritura). Si el archivo existe, se

    borra su contenido. De otra forma, se crea uno nuevo.

    a Abre un archivo existente para agregar informacion al final (ap-pend). Si el archivo no existe, se crea.

    r+ Abre un archivo existente para lectura y escritura. El contenidodel archivo no se modifica. La posicion inicial es el inicio del archivo.

    w+ Abre un archivo existente para lectura y escritura. Si el archivoexiste, se borra su contenido. De otra forma, uno nuevo se crea.

    a+ Abre un archivo existente para lectura y appending (agregarinformacion al final del archivo). Si no existe otro nueo arhcivo escreado. La posicion inicial es al inicio del archivo, pero la informacionque se agregue, siempre se agrega al final del mismo.

    Ejemplo:

    #include

    #include

    #include

    int main(){

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    43/168

    3.1 Conceptos de C 37

    float f1, f2;

    int i1, i2;

    FILE *my_stream;char my_filename[] = "jazz.txt";

    my_stream = fopen(my_filename, "w");

    fprintf(my_stream, "%f %f %#d %#d", 23.5, -12e6, 100, 5);

    /* cerrar stream... No verifico errores por brevedad...*/

    fclose(my_stream);

    fscanf(my_stream, "%f, %f, %i, %i",f1, f2, i1, i2);

    fclose(my_stream);

    printf("\n\nFloat 1: %f\n", f1);printf("Float 2: %f\n", f2);

    printf("Int 1: %i\n", i1);

    printf("Int 2: %i\n", i2);

    system ("PAUSE");

    return 0;

    }

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    44/168

    38 Conceptos de C

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    45/168

    4Tareas en Java

    There is no programming language, no matter how structured, thatwill prevent programmers from writing bad programs.

    L. Flon

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    46/168

    40 Tareas en Java

    . T

    La serie de Fibonacci se define por la ecuacion recursiva siguiente:

    F() = F( 1) + F( 2)

    Los primeros elementos son F(0) = 0 y F(1) = 1, por lo cual la serie comienzacon:

    0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946...Objetivo Escribir un programa en ANSI-C1 al cual el usuario define el ndice y el programa imprime en la pantalla el valor de F().

    Calificacion La tarea vale por maximo cinco (5) puntos. Es importante entregarcodigo que por lo menos compile, aun si no ejecuta. Si el programa no calculabien el resultado, el maximo posible es 2 puntos.

    Retos para los avanzados

    Verificar que la entrada sea valida. Insistir por otra entrada hasta que sea valida. Permitir que el usuario pida por varios valores de . Intentar a generar elementos con valores de grandes. Implementarlo de dos maneras: con recursion y con iteracion y despues

    experimentar con el tiempo de ejecucion de las dos implementaciones.

    Tarea 1. Serie de Fibonacci. Este programa permite que el usuario de variosvalores de .

    Enseguida se muestra en codigo en el lenguaje Java.

    1 /*2 *Programa Fibonacci

    3 *4 * Este programa genera la sucesion de

    5 * Fibonacci

    6 *7 * Fecha: 26 de marzo de 2008

    8 *9 */

    10

    11 import java.util.Scanner;

    12

    13 class Fibonacci {

    14 static Scanner input = new Scanner(System.in);

    15 //

    1Este codigo compila y funciona correctamente en C++.

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    47/168

    4.1 Tarea 1 41

    16 // Genera los numeros de Fibonacci

    17 public static void main(String[] args) {

    18 i nt b4 = 0 ;

    19 int now = 1;

    20 int i;

    21 int n;

    22 System.out.println("\n\nCuantos terminos de la sucesion");

    23 System.out.print("de Fibonacci desea que se impriman? ");

    24 for (;;){ // hasta que introduca un numero positivo...

    25 n = input.nextInt();

    26 if (n

  • 7/28/2019 Programacion Cientifica Scientific Programming

    48/168

    42 Tareas en Java

    . T

    Detector de numeros primos

    Objetivo:

    Escribir un programa en ANSI-C2 al cual el usuario define un numero enteropositivo y el programa determina si es o no primo.

    Por ejemplo,1876953 = 3 13 17 19 149

    donde todos los factores son primos.

    Calificacion:

    La tarea vale por maximo cinco (5) puntos. Es importante entregar codigo que porlo menos compile, aun si no ejecuta. Si el programa no calcula bien el resultado,el maximo posible es 2 puntos.

    Retos para los avanzados

    Verificar que la entrada sea valida.

    Insistir por otra entrada hasta que sea valida. Permitir que el usuario pida por varios valores de .

    Ampliar el rango de entradas por cambiar tipos de datos.

    Imprimir todos los factores de si no es primo, o sea, como un productode numeros primos.

    Hacer la factorizacion recursivamente. Optimizar el algoritmo de solucion por eliminar operaciones redundantes.

    Estudiar las matematicas de los numeros primos para implementar metodosmas avanzados.

    Para esta tarea considero la siguiente definicion:

    Definicion 4.2.3.

    N PEs un numero natural que tiene exactamente dos divisores naturales.

    2Este codigo compila y funciona correctamente en el JCreator Ver. 4.50.010con JDK 6.

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    49/168

    4.2 Tarea 2 43

    Esto significa que el numero 1 NO es primo, dado que tiene solamente un divisor.

    No se requiere, pero para no dejar a un lado:

    Definicion 4.2.4.

    N CEs un numero natural que tiene mas de dos divisores naturales.

    De nuevo, el numero 1 NO es compuesto, pues NO tiene mas de dos divisoresnaturales.

    Verificar si un numero es primo. oEnseguida se muestra el programa en el lenguaje Java.

    1 /**2 * @(#)primos.java

    3 *4 *5 * @author: Efran Soto Apolinar

    6 * @version 1.00

    7 * Fecha: 26 de marzo de 2008.

    8 */

    9 import java.util.Scanner;

    10

    11 public class primos {

    12 static Scanner input = new Scanner(System.in);

    13 /**14 * Creates a new instance of primos.

    15 */

    16 public primos() {

    17 }

    18

    19 /**20 * @param args the command line arguments

    21 */

    22 public static void main(String[] args) {

    23 // TODO code application logic here

    24 int n, N, i, j, divisor, prime;

    25 int[] factor = new int[20];

    26 System.out.print("\nEste programa calcula indica si");

    27 System.out.print("\nun numero dado es primo o no...\n");

    28 for(;;){ // Hasta que ingrese un entero positivo

    29 System.out.print("\n\nIngresa un entero positivo: ");

    30 n = input.nextInt();

    31 if (n

  • 7/28/2019 Programacion Cientifica Scientific Programming

    50/168

    44 Tareas en Java

    44 System.out.print("\nError en argumento...");

    45 System.out.print("\nPor favor, introduce un numero

    46 entero positivo...");

    47 return;

    48 }

    49 if (n==1){

    50 System.out.print("\nEl numero 1 No es primo...");

    51 System.out.print("...pero tampoco es compuesto...");

    52 return;

    53 }

    54

    55

    56 prime = 0; // Supongo que el numero NO es primo...

    57 i = 0; //Inicio el indice del arreglo

    58

    59 // Reinicio el arreglo factor[20]

    60 for (j=0;j= divisor){

    75 while (N%divisor == 0){

    76 factor[i]=divisor;

    77 i++;

    78 prime = 1;

    79 N = N / divisor;

    80 }

    81 divisor = divisor + 2;

    82 if (divisor%3 == 0) divisor = divisor + 2;

    83 }

    84

    85 // Ahora imprimo los factores...86 if (i>=2){

    87 System.out.print("\n\n\nEl numero " + n + "

    88 no es primo...\n\n\n");

    89 // reinicio el indice i

    90 j = 0 ;

    91 System.out.print("\n\n\n" + n + " = ");

    92 for (j=0;j

  • 7/28/2019 Programacion Cientifica Scientific Programming

    51/168

    4.3 Tarea 3 45

    . T

    Piedra, papel y tijera

    Objetivo:

    Escribir un programa en ANSI-C que juega interactivamente piedra-papel-tijeracon el usuario.

    Calificacion:

    La tarea vale por maximo cinco (5) puntos. Es importante entregar codigo que porlo menos compile, aun si no ejecuta. Si el programa no funciona bien, el m aximoposible es 2 puntos.

    Retos para los avanzados:

    Verificar que la entrada sea valida. Insistir por otra entrada hasta que sea valida. Hacer observaciones de como distribuyen los puntos por ganar en tiempo

    al repetir el juego.

    Desarrollar inteligencia artificial, o sea, hacer que el programa sepa jugary no simplemente elija al azar.

    Juego Piedra papel tijera. oEnseguida se muestra el codigo de este programa en el lenguaje Java:

    1 /**2 * @(#)tres.java

    3 *4 *5 * @author: Efran Soto Apolinar.

    6 * @date: 27 de marzo de 2008.

    7 */

    8 import java.util.Scanner;

    9

    10 public class tres {

    11 static Scanner input = new Scanner(System.in);

    12 /**13 * Creates a new instance of tres.

    14 */

    15 public tres() {

    16 }

    17

    18 /**19 * @param args the command line arguments

    20 */

    21 public static void main(String[] args) {

    22 // TODO code application logic here

    23 int usuario,compu;

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    52/168

    46 Tareas en Java

    24 //

    25 System.out.print("\n\n\nEste programa juega interactivamente");

    26 System.out.print("\n\n\nPiedra - Papel o tijera");

    27 System.out.print("\ncon el usuario...");

    28

    29 for (;;){ // for infinito

    30 System.out.print("\n\n1 representa piedra...");

    31 System.out.print("\n2 representa papel...");

    32 System.out.print("\n3 representa tijera...");

    33 System.out.print("\nPresiona 0 para salir...");

    34 System.out.print("\n\nIntroduce tu jugada...");

    35 usuario = input.nextInt();

    36

    37 if (usuario == 0){ // hay que salir...

    38 System.out.print("\n\nPresionaste ...");

    39 System.out.print("\n\nAdios...\n\n");

    40 break;

    41 }

    42 //

    43 //compu = (rand() % 3) + 1;

    44 //

    45 if ((usuario == 1)){

    46 System.out.print("\n\nyo elijo papel....");47 System.out.print("\n\nYo gano!!!\n");

    48 continue;

    49 }

    50

    51 if (usuario == 2){

    52 System.out.print("\n\nyo elijo tijera....");

    53 System.out.print("\n\nYo gano!!!\n");

    54 continue;

    55 }

    56

    57 if (usuario == 3){

    58 System.out.print("\n\nyo elijo piedra....");

    59 System.out.print("\n\nYo gano!!!\n");

    60 continue;

    61 }

    62

    63 System.out.print("\nError en Argumento...\n");

    64 System.out.print("\nPor favor, intenta de nuevo...\n\n\n");

    65

    66 } // termina el for...

    67

    68 }

    69 }

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    53/168

    4.4 Tarea 4 47

    . T

    Aproximacion de

    Enseguida se muestra el codigo de este programa en el lenguaje Java:

    1 /**2 * @(#)cuatro.java

    3 *4 *5 * @author: Efran Soto Apolinar

    6 * @date: 27 de marzo de 2008.

    7 */

    8 import java.util.Scanner;

    9

    10 public class cuatro {

    11 static Scanner input = new Scanner(System.in);

    12 /**13 * Creates a new instance of cuatro.

    14 */

    15 public cuatro() {

    16 }

    17

    18 /**19 * @param args the command line arguments

    20 */

    21 public static void main(String[] args) {

    22 // TODO code application logic here

    23

    24 double approx = 0, a;

    25 int i,n;

    26 //

    27 System.out.print("\nEste programa calcula una aproximacion");

    28 System.out.print("\ndel valor de PI usando la formula de");

    29 System.out.print("\nBailey - Borwein - Plouffe...");

    30 System.out.print("\nIntroduce el valor de n: ");

    31 n = input.nextInt();32 //

    33 f o r ( i = 0 ; i < n ; i + + ) {

    34 a = approx;

    35 approx=approx+(4.0/(8.0 * i + 1.0)-2.0/(8.0 * i + 4.0)

    36 - 1.0/(8.0 * i + 5.0) - 1.0/(8.0 * i + 6.0)) *37 Math.pow(1.0/16.0,i);

    38 System.out.print("\nIteracion " + (i+1) + " = " + approx);

    39 if (a == approx){

    40 System.out.print("\n\nSolamente se realizaron "

    41 + i + " iteraciones\n");

    42 System.out.print("porque el valor de la

    43 aproximacion no cambia.\n");

    44 break;

    45 }

    46 }// Termina el for...

    47 System.out.print("\n\n\nEl valor aproximado es: " + approx);

    48 }

    49 }

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    54/168

    48 Tareas en Java

    . T

    Factoriales y aproximacion del numero e

    Objetivo: Escribir en ANSI-C un programa que calcula una aproximacion de eutilizando su expansion Taylor ecuacion:

    1 + 1 +1

    2!+

    1

    3!+

    1

    4!+

    as que el usuario controle de alguna manera la exactitud de la aproximacion.

    Enseguida se muestra el codigo de este programa en el lenguaje Java:

    1 /**2 * @(#)cinco.java

    3 *4 *5 * @author: Efran Soto Apolinar.

    6 * @date: 27 de marzo de 2008

    7 */

    8 import java.util.Scanner;

    9

    10 public class cinco {

    11 static Scanner input = new Scanner(System.in);

    12 /**13 * Creates a new instance of cinco.

    14 */

    15 public cinco() {

    16 }

    17

    18 /**19 * @param args the command line arguments

    20

    */

    21 public static void main(String[] args) {

    22 // TODO code application logic here

    23 double e = 0, approx;

    24 int i, j, n;

    25 double factorial;

    26 //

    27 System.out.print("\nEste programa calcula una aproximacion");

    28 System.out.print("\ndel valor de la base neperiana");

    29 System.out.print("\nusando la serie de MacLaurin...");

    30 System.out.print("\nIntroduce el numero de iteraciones: ");

    31 //

    32 n = input.nextInt();

    33 //

    34 for (i = 0 ; i

  • 7/28/2019 Programacion Cientifica Scientific Programming

    55/168

    4.5 Tarea 5 49

    48 }

    49 System.out.print("\nIteracion " + (i+1) + " ---> " + e);

    50

    51 }// Termina el for...

    52 System.out.print("\n\n\nEl valor aproximado es: "

    53 + e + "\n\n\n");

    54 }

    55 }

    56

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    56/168

    50 Tareas en Java

    . T

    Coeficientes binomiales y el triangulo de Pascal

    Objetivo: Escribir un programa en ANSI-C que produce, segun la eleccion delusuario, o el coeficiente binomial C(n, k), definido como:

    =

    !

    ! ( )!con valores de y definidos por el usuario, (por ejemplo C(31 5) = 169 911)o las primeras lneas del triangulo de Pascal: el elemento numero la lneanumero del triangulo es exactamente C( ).

    Enseguida se muestra el codigo de este programa en el lenguaje Java:

    1 /**2 * @(#)ocho.java

    3 *4 *5 * @author: Efran Soto A.

    6 * @date: 27 de marzo de 2008

    7 */

    8 import java.util.Scanner;

    9

    10 public class ocho {

    11 static Scanner input = new Scanner(System.in);

    12 /**13 * Creates a new instance of ocho.

    14 */

    15 public ocho() {

    16 }

    17

    18 /**19 * @param args the command line arguments

    20 */

    21 public static void main(String[] args) {

    22 int i,j,n; // contadores

    23 long[] now = new long[100]; // coeficientes actuales

    24 long[] b4 = new long[100]; // coeficientes anteriores

    25 //

    26 System.out.print("\n\nEste programa imprime los renglones del");

    27 System.out.print("\ntriangulo de Pascal...");

    28

    29 for(;;){

    30 System.out.print("\n\nIndique el numero de renglones a

    31 imprimir: ");

    32 n = input.nextInt();

    33 if (n > 99){

    34 System.out.print("\n\nEl valor de n no debe ser mayor

    35 a 99...");

    36 System.out.print("\nIntente de nuevo...");

    37 }

    38 else{

    39 break;

    40 }

    41 } // endfor...

    42 // reinicio los arreglos

    43 f o r ( i = 0 ; i < 1 0 0 ; i + + ) {

    44 now[i] = 0;

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    57/168

    4.6 Tarea 8 51

    45 b4[i] = 0;

    46 }

    47

    48 // inicio con los coeficientes binomiales...

    49 System.out.print("\t1\n\n");

    50 for (j = 1 ; j < n ; j++){ // Renglones...

    51 // reinicio los valores de los arreglos...

    52 now[0] = 1;

    53 b4[0] = 1;

    54 b 4[ 1] = j - 1 ;

    55 System.out.print("\t1"); // primer valor del renglon

    56

    57 for (i = 1 ; b4[i+1] != 0 ; i++){ // Coeficientes

    58 now[i] = b4[i] + b4[i-1];

    59

    60 if (now[i]

  • 7/28/2019 Programacion Cientifica Scientific Programming

    58/168

    52 Tareas en Java

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    59/168

    5Conceptos de Java

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    60/168

    54 Conceptos de Java

    . C Java

    5.1.1 Funciones Matematicas

    Estas funciones estan definidas en la clase Math.

    !Funcion Devuelve:

    abs(arg) el valor absoluto de arg siendo un int, float, double.cbrt(arg) la raz cubica de arg, siendo arg un double.exp(arg) exp(arg), donde arg es un double.hypot(arg1, arg2) la hipotenusa de un t. rect. con catetos arg1, arg2.

    log(arg) ln(), siendo arg un double.log10(arg) log10(), siendo arg un double.

    max(arg1, arg2) el maximo de arg1 y arg2. (int, float, double)min(arg1, arg2) el mnimo de arg1 y arg2. (int, float, double)

    pow(arg1,arg2) argarg21 , siendo arg1, arg2 doubles.

    random() un aleatorio en (0.0, 1.0) con dist. uniforme (double).signum(arg) el signo de arg, pudiendo ser un float o double.sqrt(arg) la raz cuadrada de arg (double).ceil(arg) el menor double que es entero arg.floor(arg) el mayor double que es entero arg.rint(arg) el double que es entero mas cercano a arg.round(arg) redondea arg.

    Funciones matematicas en Java

    En el caso de la funcion round(arg), si arg es un double, regresa un long. Siarg es un float, devuelve un int.

    Ejemplo de uso

    // Ejemplos dl uso de las funciones matematicas en Java

    Math.cbrt(m); // raz cubica de m

    Math.exp(x); // devuelve ex

    Math.log(1+x); devuelve ln (1+x)

    Math.max(10,100); // devuelve 100

    Math.min(a,b); // devuelve el minimo entre a y b

    Math.pow(x.0,5); // devuelve x5

    Math.random(); // genera un pseudoaleatorio en (0,1)

    Math.sqrt(36); // devuelve 6.000000

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    61/168

    6Proyecto final

    Once your goals are achieved, then what? If you have gotten into

    the habit of accomplishments, you will have no desire to a dead stop.Your new goals would have seemed impossible of achievement previ-ously; now, you will work toward them with a likelihood of success.

    Edwin B. Feldman, P.E.

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    62/168

    56 Proyecto final

    . D

    Librera de Estadstica Crear una librera con funciones estadsticas basicas parautilizar durante los siguientes semestres de la maestra.

    Media / Desviacion estandar / Varianza Moda (intervalo de mayor frecuencia) Graficar el histograma de frecuencias Ajuste de una recta de regresion Ajuste de una parabola de regresion

    Generadores de numeros pseudoalestorios con las siguientes distribuciones: Uniforme en el intervalo (0,1),

    Uniforme en el intervalo ( ), definido por el usuario,

    Normal con media 00 y desviacion estandar 10,

    Normal con media y desviacion estandar , definidas por el usuario,

    Exponencial con parametro , definido por el usuario,

    Weibull con parametros de forma y de escala , definidos por elusuario,

    Rayleigh con media , definida por el usuario.

    La librera se codificara de manera que se pueda utilizar en el lenguaje C++ , conposibilidad de adaptarla al lenguaje ANSI-C.

    . I

    Puede accesar al archivoPuede accesar al archivoPuede accesar al archivoPuede accesar al archivoPuede accesar al archivoPuede accesar al archivoPuede accesar al archivoPuede accesar al archivoPuede accesar al archivoPuede accesar al archivoPuede accesar al archivoPuede accesar al archivoPuede accesar al archivoPuede accesar al archivoPuede accesar al archivoPuede accesar al archivoPuede accesar al archivo estadistica.h con un click derechocon un click derechocon un click derechocon un click derechocon un click derechocon un click derechocon un click derechocon un click derechocon un click derechocon un click derechocon un click derechocon un click derechocon un click derechocon un click derechocon un click derechocon un click derechocon un click derecho y elijay elijay elijay elijay elijay elijay elijay elijay elijay elijay elijay elijay elijay elijay elijay elijay elija Open File

    en el siguiente conoen el siguiente conoen el siguiente conoen el siguiente conoen el siguiente conoen el siguiente conoen el siguiente conoen el siguiente conoen el siguiente conoen el siguiente conoen el siguiente conoen el siguiente conoen el siguiente conoen el siguiente conoen el siguiente conoen el siguiente conoen el siguiente cono :

    1 /*2 Nombre del archivo: "estadistica.h"

    3 Descripcion:

    4 Este archivo contiene funciones y clases

    5 para trabajar con cuestiones de probabilidad.

    6

    7 Las funciones se detallan con comentarios

    8 e n e l codigo.

    9

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    63/168

    6.2 Implementacion 57

    10

    11 Fecha de ultima Modificacion: 02 de junio de 2008.

    12

    13 BIBLIOGRAFIA CONSULTADA:

    14 -----------------------------------------

    15 CUESTIONES DE ESTADISTICA...

    16 -----------------------------------------

    17 [1] Jerry Banks, John S. Carson II, Barry L. Nelson.

    18 Discrete-Event System Simulation.

    19 Ed. Prentice Hall.

    20 2nd Edition.

    21 1996. U.S.A.

    22

    23 [2] John E. Freund

    24 Mathematical Statistics

    25 Ed. Prentice Hall

    26 5th Edition.

    27 1992. U.S.A.

    28

    29 -----------------------------------------

    30 CUESTIONES DE PROGRAMACION...

    31 -----------------------------------------

    32 [1] Walter Savitch33 Problem Solving with C++: The Object of Programming

    34 Ed. Addison Wesley Longmann Inc.

    35 U.S.A. 1999.

    36

    37 [2] Edward Scheinerman

    38 C++ for Mathematicians

    39 An Introduction for Students and Professionals

    40 Ed. Chapman & Hall/CRC

    41 2006. U.S.A.

    42

    43 [3] Herbert Schildt

    44 C++: The Complete Reference

    45 Third Edition

    46 Ed. McGraw-Hill

    47 1998. U.S.A.

    48

    49 -----------------------------------------

    50 Sitios de Internet Consultados...

    51 -----------------------------------------52 - Algoritmo para generar numeros

    53 pseudoaleatorios con distribucion Rayleigh:

    54 http://www.brighton-webs.co.uk/distributions/rayleigh.asp

    55

    56 */

    57

    58 #ifndef PROBABILITY_H

    59 #define PROBABILITY_H

    60

    61 #include

    62 #include

    63 #include

    64 #include

    65 #include

    66 #include

    67 #include

    68

    69

    70 const double PI = 3.141592654;71 const long PROBABILITY_RAND_MAX = 2147483647;// = 231 - 1;

    72

    73 // Declaro las funciones...

    74 void suniforme(unsigned seed);

    75 double uniforme(void);

    76 double uniforme(float a, float b);

    77 void funiforme(int N, char filename[]);

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    64/168

    58 Proyecto final

    78 void funiforme(int N, float a, float b, char filename[]);

    79 double lpuniforme(void);

    80

    81 //double triangular(double media);

    82 double normal(void);

    83 double normal(double media, double desviacionStd);

    84 void fnormal(int N, char filename[]);

    85 void fnormal(int N, char filename[], double media,

    86 double desvStd);

    87 void errorDNormal(void);

    88

    89 double weibull(double c, double k);

    90 void fweibull(int N, double C, double K, char filename[]);

    91

    92 float exponencial(float lambda);

    93 void fexponencial(int N, float Lambda, char filename[]);

    94

    95 int geometrica(float p);

    96 void fgeometrica(int N, float p, char filename[]);

    97 int poisson(float alpha);

    98 void fpoisson(int N, float a, char filename[]);

    99

    100 double rayleigh(float media);101 void frayleigh(int N, char filename[], float M);

    102 void ftriangular(int N, char filename[], float media);

    103

    104 double media(char filename[]);

    105 double desviacionStd(char filename[]);

    106

    107 double media(char filename[]);

    108 double desviacionStd(char filename[]);

    109

    110 void histograma(char filename[]);

    111 void histograma(char filename[], int No_Int);

    112 //hist Phistograma(char filename[], int No_Int);

    113

    114 void PchiUniforme(char filename[], int Num_Int, float alpha);

    115

    116 /***************************************************117 double uniforme(void)

    118 Descripcion:

    119 Esta funcion genera un numero pseudo-aleatorio120 con distribucion uniforme en el intervalo (0,1).

    121 BUGS:

    122 Ninguno conocido...

    123 ****************************************************/

    124 double uniforme(void){/*** [tested] ***/

    125 double u;

    126 u = (double)(rand()) / (double)(RAND_MAX);

    127 return u;

    128 }

    129

    130

    131

    132 /***************************************************133 double uniforme(float a, float b)

    134 Descripcion:

    135 Esta funcion genera un numero pseudo-aleatorio

    136 con distribucion uniforme en el intervalo (a,b).

    137 /////////////////////////////////////////////////////

    138 BUGS:139 Ninguno conocido...

    140 ****************************************************/

    141 double uniforme(float a, float b){/*** [tested] ***/

    142 double x;

    143 x = (double)(a) + uniforme() * (double)(b - a);

    144 return x;

    145 }

    Efran Soto A.Estudiante del PISIS

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    ProgramacionCientfica

  • 7/28/2019 Programacion Cientifica Scientific Programming

    65/168

    6.2 Implementacion 59

    146

    147 /***************************************************148 void funiforme(int N, char filename[15])

    149 Descripcion:

    150 Esta funcion guarda N numeros pseudoaleatorios

    151 con distribucion uniforme en el intervalo (0,1)

    152 en el archivo con nombre .

    153 /////////////////////////////////////////////////////

    154 BUGS:

    155 Ninguno conocido.

    156 ****************************************************/

    157 void funiforme(int N, char filename[15]){/*** [tested] ***/

    158 float x;

    159 FILE *stream_unif; //

    160 stream_unif = fopen(filename, "w"); // abrir archivo

    161 if (stream_unif == NULL){

    162 printf ("\nNo se puede abrir el archivo %s\n",

    163 filename);

    164 printf("\nPor favor, verifique el nombre archivo");

    165 return;

    166 }

    167 fprintf(stream_unif, "# Este archivo contiene %i

    168 numeros\n", N);169 fprintf(stream_unif, "# pseudoaletorios con distribucion

    170 uniforme\n");

    171 fprintf(stream_unif, "# en el intervalo [0.0, 1.0]\n");

    172 // Aqu v a e l codigo para grabar...

    173 f or (i nt i = 1 ; i < = N ; i ++) {

    174 x = uniforme(); // generamos un numero

    175 fprintf(stream_unif, "%f\n", x); // grabamos...

    176 }

    177 fclose(stream_unif); // cerrar archivo...

    178 }

    179

    180 /***************************************************181 void funiforme(int N, char filename[], float a, float b)

    182 Descripcion:

    183 Esta funcion guarda N numeros pseudoaleatorios

    184 con distribucion uniforme en el intervalo (a,b)

    185 en el archivo con nombre .

    186 /////////////////////////////////////////////////////

    187 BUGS:188 Ninguno conocido.

    189 ****************************************************/

    190 void funiforme(int N, char filename[], float a, float b){

    191 /*** [tested] ***/

    192 float x;

    193 FILE *stream_unif; //

    194 stream_unif = fopen(filename, "w"); // abrir archivo

    195 if (stream_unif == NULL){

    196 printf ("\nNo se puede abrir el archivo %s\n",

    197 filename);

    198 printf("\nPor favor, verifique el nombre archivo");

    199 return;

    200 }

    201 fprintf(stream_unif, "# Este archivo contiene %i

    202 numeros\n", N);

    203 fprintf(stream_unif, "# pseudoaletorios con distribucion

    204 uniforme\n");

    205 fprintf(stream_unif, "# en el intervalo [%.3f,%.3f]\n",

    206 a, b);207 // Aqu v a e l codigo para grabar...

    208 f or (i nt i = 1 ; i < = N ; i ++) {

    209 x = uniforme(a, b); // generamos un numero

    210 fprintf(stream_unif, "%f\n", x); // grabamos...

    211 }

    212 fclose(stream_unif); // cerrar archivo...

    213 }

    ProgramacionCientfica

    Este material NO esta listo para su publicacion.Requiere de revision tecnica.

    Efran Soto A.Estudiante del PISIS

  • 7/28/2019 Programacion Cientifica Scientific Programming

    66/168

    60 Proyecto final

    214

    215

    216 /***************************************************217 double lpuniforme(void)

    218 Descripcion:

    219 Esta funcion genera numeros pseudoaleatorios

    220 con distribucion normal con media 0.0

    221 y desviacion estandar 1.0.

    222 /////////////////////////////////////////////////////

    223 BUGS:

    224 * Este generador de numeros seudoaleatorios

    225 solamente ha sido probado dibujando histogramas

    226 y parece presentar distribucion uniforme.

    227 NO se ha sometido a ninguna prueba estadstica

    228 formal.

    229 * Se sugiere utilizar para requerimientos de

    230 grandes cantidades de numeros pseudoaleatorios.

    231 * Cuando se utiliza para generar numeros

    232 pseudoaleatorios con distribucion normal

    233 el histograma aparece con sesgo negativo

    234 (corrido hacia la derecha). [Instancia de

    235 10,000 numeros generados]

    236 ****************************************************/237 double lpuniforme(void){

    238 double u;

    239 int primo1 = 8191; // = 213 - 1; Numero primo

    240 int primo2 = 524287; // = 219 - 1; Otro numero primo

    241 static int semilla = 1001; // es primo...

    242 static bool first = true;

    243 if (first){

    244 first = false;

    245 return ((double)(semilla)/((double)

    246 (PROBABILITY_RAND_MAX)));

    247 }

    248 unsigned modular = semilla;

    249 //

    250 modular = (primo1 * modular + primo2) %

    251 PROBABILITY_RAND_MAX;

    252 semilla = modular; // cambio el valor de la semilla...

    253 // calculo el valor que me va a devolver...

    254 u = (double)(modular) / ((double)

    255 (PROBABILITY_RAND_MAX));256 return (u);

    257 }

    258

    259 /***************************************************260 double normal(void)

    261 Descripcion:

    262 Esta funcion genera numeros pseudoaleatorios

    263 con distribucion normal con media 0.0

    264 y desviacion estandar 1.0.

    265 //////////////////////////