Post on 03-Apr-2018
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 //////////////////////////