Tutorial de c++

202
C ´ odigos de Programas en el lenguaje C++ Efra´ ın Soto Apolinar

Transcript of Tutorial de c++

  • Codigos de Programas

    en el lenguaje C++

    Efran Soto Apolinar

  • Codigos de Programas

    en el lenguaje C++

    Compilados por

    Efran Soto Apolinar

    PISIS

    Monterrey, N.L., Mexico. 2007

  • Indice

    1 Introduccion 7

    1.1 Conceptos basicos . . . . . . . . . . . . . . . . . . . . . . . . . . 8

    1.1.1 Conceptos de programacion . . . . . . . . . . . . . . . . . 8

    1.1.2 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

    1.2 Sintaxis del lenguaje C++ . . . . . . . . . . . . . . . . . . . . . . 11

    1.2.1 Palabras reservadas . . . . . . . . . . . . . . . . . . . . . 11

    1.2.2 Tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . 11

    1.2.3 Tipos de constantes . . . . . . . . . . . . . . . . . . . . . 12

    1.2.4 Caracteres especiales . . . . . . . . . . . . . . . . . . . . . 12

    1.2.5 Declaracion de variables . . . . . . . . . . . . . . . . . . . 12

    1.2.6 Asignacion . . . . . . . . . . . . . . . . . . . . . . . . . . 13

    1.2.7 Operaciones matematicas . . . . . . . . . . . . . . . . . . 14

    1.2.8 Comparaciones . . . . . . . . . . . . . . . . . . . . . . . . 15

    1.2.9 Ciclos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16

    1.2.10 Ejemplos de control de flujo . . . . . . . . . . . . . . . . . 17

    Codigosen C++

    Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 41.2.11 Operaciones logicas . . . . . . . . . . . . . . . . . . . . . . 21

    1.3 Funciones en C++ . . . . . . . . . . . . . . . . . . . . . . . . . . 22

    1.3.1 Funciones predefinidas . . . . . . . . . . . . . . . . . . . . 22

    1.3.2 Funciones definidas por el usuario . . . . . . . . . . . . . 23

    1.4 Clases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

    2 Codigos 31

    2.1 Mis primeros programas . . . . . . . . . . . . . . . . . . . . . . . 32

    2.2 Programas con funciones . . . . . . . . . . . . . . . . . . . . . . . 38

    2.3 Funciones cin, cout . . . . . . . . . . . . . . . . . . . . . . . . . . 39

    2.4 if, for, while and the like... . . . . . . . . . . . . . . . . . . . . . . 46

    2.5 Mis tareas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

    2.5.1 Simulacion 1 . . . . . . . . . . . . . . . . . . . . . . . . . 60

    2.5.2 Calculo analtico . . . . . . . . . . . . . . . . . . . . . . . 64

    2.5.3 Simulacion 2 . . . . . . . . . . . . . . . . . . . . . . . . . 65

    2.5.4 Simulacion 3 . . . . . . . . . . . . . . . . . . . . . . . . . 68

    2.5.5 Simulacion 4 . . . . . . . . . . . . . . . . . . . . . . . . . 70

    2.5.6 Simulacion 5 . . . . . . . . . . . . . . . . . . . . . . . . . 72

    2.5.7 Simulacion 6 . . . . . . . . . . . . . . . . . . . . . . . . . 74

    2.5.8 Simulacion 7 . . . . . . . . . . . . . . . . . . . . . . . . . 78

    2.5.9 Simulacion 8 . . . . . . . . . . . . . . . . . . . . . . . . . 80

    2.5.10 Simulacion de la distribucion binomial . . . . . . . . . . . 84

    2.5.11 Introduccion a la dinamica de poblaciones . . . . . . . . . 87

    2.6 Proyectos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

    2.6.1 Regresion lineal . . . . . . . . . . . . . . . . . . . . . . . . 89

    2.6.2 Regresion cuadratica . . . . . . . . . . . . . . . . . . . . . 91

    2.7 Librera Estadstica . . . . . . . . . . . . . . . . . . . . . . . . . . 96

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

  • 52.8 Implementacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

    2.8.1 Ejemplos de uso . . . . . . . . . . . . . . . . . . . . . . . 139

    2.8.1.1 funiforme(total, archivo) . . . . . . . . . . . . . 139

    2.8.1.2 funiforme(total, archivo, A, B) . . . . . . . . . . 140

    2.8.1.3 fnormal(total, archivo) . . . . . . . . . . . . . . 142

    2.8.1.4 fnormal(total, archivo, media, SD) . . . . . . . . 143

    2.8.1.5 fexponencial(total, lambda, archivo) . . . . . . . 144

    2.8.1.6 fgeometrica(total, p, archivo) . . . . . . . . . . . 145

    2.8.1.7 fpoisson(total, alpha, archivo) . . . . . . . . . . 145

    2.8.1.8 fweibull(total, archivo, c, k) . . . . . . . . . . . . 146

    2.8.1.9 frayleigh(total, archivo, media) . . . . . . . . . . 147

    2.8.1.10 histograma(archivo, intervalos) . . . . . . . . . . 148

    2.8.1.11 PchiUniforme(archivo, No Int) . . . . . . . . . . 154

    2.8.1.12 PchiNormal(archivo, No Int) . . . . . . . . . . . 156

    2.8.1.13 PchiExponencial(archivo, Num Int, lambda) . . 157

    2.8.1.14 PchiWeibull(Archivo, Num Int, C, K) . . . . . . 159

    2.8.1.15 PchiRayleigh(archivo, Num Int, media) . . . . . 161

    2.8.1.16 RL(archivo) . . . . . . . . . . . . . . . . . . . . 162

    2.8.1.17 RC(archivo) . . . . . . . . . . . . . . . . . . . . 163

    2.8.2 Otras funciones . . . . . . . . . . . . . . . . . . . . . . . . 165

    2.8.2.1 uniforme() . . . . . . . . . . . . . . . . . . . . . 165

    2.8.2.2 uniforme(a,b) . . . . . . . . . . . . . . . . . . . . 166

    2.8.2.3 weibull(c,k) . . . . . . . . . . . . . . . . . . . . . 167

    2.8.2.4 rayleigh(media) . . . . . . . . . . . . . . . . . . 168

    2.8.2.5 normal() . . . . . . . . . . . . . . . . . . . . . . 169

    2.8.2.6 normal(media, desviacionStd) . . . . . . . . . . 170

    2.8.2.7 exponencial(lambda) . . . . . . . . . . . . . . . . 171

    Codigosen C++

    Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 2.8.2.8 geometrica(p) . . . . . . . . . . . . . . . . . . . 172

    2.8.2.9 poisson(alpha) . . . . . . . . . . . . . . . . . . . 173

    2.8.2.10 media(archivo), desviacionStd(archivo) . . . . . 174

    2.8.3 Simulacion del recurso eolico . . . . . . . . . . . . . . . . 176

    2.8.3.1 Energa extraida del viento . . . . . . . . . . . . 176

    2.8.4 Distribucion del viento . . . . . . . . . . . . . . . . . . . . 178

    2.8.4.1 Distribucion Weibull . . . . . . . . . . . . . . . . 178

    2.8.4.2 Distribucion Rayleigh . . . . . . . . . . . . . . . 179

    2.8.4.3 Distribucion de energa . . . . . . . . . . . . . . 180

    2.8.4.4 Anemometros digitales . . . . . . . . . . . . . . 180

    2.8.4.5 Prediccion del recurso eolico . . . . . . . . . . . 180

    2.8.5 Un caso especfico . . . . . . . . . . . . . . . . . . . . . . 181

    2.8.6 Implementacion . . . . . . . . . . . . . . . . . . . . . . . . 181

    2.8.7 Resultados de la simulacion . . . . . . . . . . . . . . . . . 186

    2.9 Esqueletos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

    2.10 Lecciones aprendidas . . . . . . . . . . . . . . . . . . . . . . . . . 193

    3 End matter 195

    3.1 Fuentes bibliograficas . . . . . . . . . . . . . . . . . . . . . . . . . 196

    3.2 Terminos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

    3.3 Creditos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199

    3.4 Simbologa utilizada . . . . . . . . . . . . . . . . . . . . . . . . . 200

  • 1Introduccion

    Codigosen C++

    Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 8 Introduccion

    1.1 Conceptos basicos

    En este apartado se dan algunos conceptos que necesitas conocer para poderaprovechar la lectura de este material.

    Se presentan diversas secciones con contenidos igual de importantes. Los primerostienen que ver con las bases de programacion y despues se incluyen los queconciernen al lenguaje C++ .

    1.1.1 Conceptos de programacion

    Los conceptos que debes entender para iniciarte en el arte de la programacionson:

    Definicion 1.1.1.

    AlgoritmoUna sucesion ordenada de instrucciones para resolver un problema o una tarea.Puedes pensar en un algoritmo como si se tratara de una receta. Es el procedi-miento que se debe realizar para resolver un problema especfico.

    Definicion 1.1.2.

    CompiladorEs el programa de computadora que traduce las instrucciones que nosotros ledamos en un lenguaje especfico.

    Definicion 1.1.3.

    Programa fuenteEs el codigo que tu vas a escribir. En este texto encontraras el programa fuentepara resolver muchos problemas. El programa fuente tambien se conoce comocodigo fuente.

    Definicion 1.1.4.

    CodigoEs un conjunto de instrucciones en algun lenguaje de alto nivel. En este materialsolamente encontraras codigo en C++ .El codigo no necesariamente es un programa completo, puede tratarse solamentede una parte del programa.

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

  • 1.1 Conceptos basicos 9

    Definicion 1.1.5.

    SintaxisSon las reglas de acuerdo a las cuales debes escribir el programa fuente. Cadalenguaje de programacion tiene su sintaxis. Puedes imaginar que la sintaxis sonlas reglas de gramatica de ese lenguaje.

    Definicion 1.1.6.

    CompilarIndicar a la computadora que verifique que el programa fuente no contengaerrores. Esta tarea siempre la realizara un software (el compilador).

    Definicion 1.1.7.

    Correr (un programa)Ordenar a la computadora que ejecute las instrucciones indicadas por el codigode un programa. Evidementemente, un programa en C++ debe correrse en uncompilador de ese lenguaje. (Yo utilizo el Dev-C++ , que es gratuito.)

    Nota 1.1.1. Algunas veces el compilador no encontrara errores, pero existe laposibilidad de que s existan. Por ejemplo, en el caso de que tu hayas cometidoel error de escribir un + en lugar de un *, el compilador no se da cuenta,porque no sabe realmente que debe hacer el programa. En otras palabras, lascomputadoras todava no pueden leer tu mente.

    Definicion 1.1.8.

    Mensaje de errorEs un mensaje que el compilador te dara cuando encuentre errores en el pro-grama fuente. Estos mensajes te ayudan a corregir el codigo.

    Definicion 1.1.9.

    Error de sintaxisOcurre cuando el codigo no esta completamente escrito de acuerdo a las reglas desintaxis del mismo. Por ejemplo, si escribes, Go To en lugar de GOTO, cometisteun error de sintaxis (de acuerdo a la sintaxis del lenguaje GWBasic).

    Codigosen C++

    Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 10 Introduccion

    Definicion 1.1.10.

    Errores logicosLos que comete el programador cuando traduce el algoritmo al lenguaje C++ .El programa realmente no hace lo que el algoritmo indica. Tal vez no tengaerrores de sintaxis... simplemente no realiza la tarea que debe realizar. Cuidadocon esto.

    1.1.2 Variables

    Definicion 1.1.11.

    IdentificadorEs el nombre que el programador asigna a un valor dentro de un programa. EnC++ , un identificador debe empezar con una letra o el smbolo: y los demascaracteres deben ser letras, dgitos o el smbolo .

    Definicion 1.1.12.

    VariableEs una herramienta de programacion utilizada para asignar valores (no nece-sariamente numericos) a letras o cadenas de letras. Las variables se clasificande acuerdo al tipo de valor que almacenan.

    Definicion 1.1.13.

    ConstanteEs un valor que no cambia durante la ejecucion del programa. Una constantepuede ser de cualquiera de los tipos de datos definidos en C++ .

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

  • 1.2 Sintaxis del lenguaje C++ 11

    1.2 Sintaxis del lenguaje C++

    1.2.1 Palabras reservadas

    En C++ , las siguientes son consideradas reservadas: !asm

    auto

    bool

    break

    case

    char

    catch

    class

    const

    const cast

    continue

    default

    delete

    do

    double

    dynamic cast

    else

    enum

    explicit

    extern

    false

    float

    for

    friend

    goto

    if

    inline

    int

    log

    long

    mutable

    namespace

    new

    operator

    private

    protected

    public

    register

    reinterpret cast

    return

    short

    signed

    sizeof

    static

    static cast

    struct

    switch

    template

    this

    throw

    true

    try

    typedef

    typeid

    typename

    union

    unsigned

    using

    virtual

    void

    volatile

    while

    esto significa que no se permite utilizar alguna de las palabras que se enlistaronantes como un identificador. !1.2.2 Tipos de datos

    En C++ hay varios tipos de datos que podemos definir para las variables yconstantes que utilicemos en nuestros programas.

    !Variable Rango Precision Ejemplo

    short 32 767 a 32 767 No Aplica 23int 2 147 483 647 a 2 147 483 647 No Aplica 4

    unsigned int 2 147 483 647 a 2 147 483 647 No Aplica 4float 1038 a 1038 7 dgitos 3.1416

    double 10308 a 10308 15 dgitos 3.141592654long double 104932 a 104932 19 dgitos 2.718281828

    char No aplica No aplica astring No aplica No aplica Hola Amigo.bool False/True No aplica False

    Tipos de datos.

    Codigosen C++

    Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 12 Introduccion

    Decidir como definir una variable depende del uso que se le va a dar. Cuandovayas a definir una variable trata de pensar en que le va a pasar durante laejecucion del programa.

    1.2.3 Tipos de constantes

    Una variable, por definicion, puede cambiar de valor durante la ejecucion deun programa. Por el contrario una constante no cambia de valor durante laejecucion del programa.

    Bueno, muchos se preguntan, si nunca cambia de valor, para que utilizar unidentificador y utilizar mas memoria... Ok. Acepto el argumento. Sin embargo,algunas veces un valor constante aparece en muchas partes del codigo de unprograma, por ejemplo, la tasa de cambio.

    Si cambia de un da para otro este valor, es una buena idea definirlo comoconstante, y cambiar su valor... porque si nos decidimos cambiar todos loslugares donde aparezca esta constante, existe la posibilidad de que omitamos unoo varios cambios. Ademas, existe tambien la posibilidad de que otra constantetenga el mismo valor y eso pueda ocasionar mas errores todava.

    Cuando una variable del tipo bool toma el valor true, este resultado no esuna cadena de caracteres, es decir, no es una variable del tipo string. Deimanera que si quieres enganar al compilador o a la computadora asignando a unaconstante del tipo bool la cadena true, al compilar te dara el correspondientemensaje de error.

    1.2.4 Caracteres especiales

    En C++ se definen los siguientes caracteres especiales.!Caracter especial Constante

    Salto de lnea \nTabulacion \t

    Nulo \0Diagonal inversa \\

    Caracteres especiales.

    1.2.5 Declaracion de variables

    En C++ , estas obligado a declarar cualquier variable antes de poder utilizarla.La sintaxis para declarar una variable es la siguiente:

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

  • 1.2 Sintaxis del lenguaje C++ 13

    Tipo_de_variable variable1;

    Tambien puedes declarar dos o mas variables al mismo tiempo separandolas porcomas:

    Tipo_de_variable variable1, variable2, variable3;

    Igual, podemos declarar una constante, anteponiendo la palabra const a ladeclaracion.

    Ejemplos: oint contador, dia, mes, edad; // Variables tipo int (entero)double promedio, precio, masa, volumen; // con punto decimalchar nombre[15], apellido_m[15], apellido_p[15]; // Cadenasconst double e = 2.718281828; // Constante tipo double

    1.2.6 Asignacion

    En C++ , para hacer una asignacion de un valor al identificador de una varia-ble, necesariamente debemos escribir primero (i.e., a la izquierda) el valor delidentificador que almacenara el valor y a la derecha el valor o una expresionmatematica correctamente codificada en C++ . Como es costumbre, en mediodebemos escribir el smbolo =.

    La sintaxis es la siguiente:

    variable = expresion;

    Ejemplos: ototal = total + incremento;edad = year_actual - year_de_nac;area = 3.1416 * radio * radio;importe = precio_unitario * no_articulos;aceleracion = (v_f - v_i) / t;

    Codigosen C++

    Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 14 Introduccion

    Tambien podemos asignar un valor a un identificador a la hora de declarar lavariable. Hay dos formas igualmente aceptables para hacer esto. La sintaxis esla siguiente:

    Tipo\_de\_variable variable1 = valor\_1, variable2 = valor\_2, var3 = valor\_3;\\Tipo\_de\_variable variable4 (valor\_4), variable5 (valor\_5), var6 (valor\_6);

    Ejemplos:oint contador= 1, factor_de_conversion = 12;double alpha(0.32), delta_Cu(375.23);char respuesta = c;

    1.2.7 Operaciones matematicas

    En C++ estan definidas las operaciones aritmeticas basicas: +,,,.Para la suma y la resta usamos los signos + y , respectivamente. Para lamultiplicacion usamos el smbolo * y para la division, el smbolo: /.

    Es importante utilizar signos de agrupacion para definir correctamente las opera-ciones.

    Por ejemplo, supongamos que tenemos que realizar el siguiente calculo:

    x1 =b+b2 4 ac

    2 a

    En C++ esta misma expresion se codifica como sigue:ox_1 = (- b + sqrt(b * b - 4 * a * c))/(2 * a);

    La funcion sqrt() esta definida en una librera de C++ (math.h)1.

    En el caso de la formula:

    yf =12a t2 + v0 t+ yi

    se codifica como:o1Mas sobre funciones y libreras en los siguientes temas.

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

  • 1.2 Sintaxis del lenguaje C++ 15

    y_f = a * t * t / 2 + v_0 * t + y_i;

    En la programacion es muy comun utilizar la operacion incremento. Es decir,incrementamos el valor de una variable en 1, digamos un contador.

    Debido a esto, en C++ hay varias operaciones matematicas unitarias, en el sen-tido que se realizan con solamente una variable, no dos, en cuyo caso seranbinarias. o

    Ejemplo: Equivalente a:contador++; contador = contador + 1;reg ; reg = reg 1decenas += 10; decenas = decenas + 10;p Neto = desc; p Neto = p Neto desc;factor *= celcuis; factor = factor * celcius;residuo %= divisor; residuo = residuo % divisor;mejor *= calif1 + calif2; mejor = mejor * (calif1 + calif2);

    Operaciones unitarias

    1.2.8 Comparaciones

    En la mayoria de los programas se requiere hacer comparaciones para controlarel flujo del procedimiento.

    En seguida se muestra la tabla que contiene los tipos de comparaciones. !Smbolo En En Ejemplo Equivalente

    Matematico Espanol C++ Practico a= Igual a == x == 0 x = 06= Distinto a != x != 0 x 6= 1< Menor a < x < 0 x < 0 Menor o igual a x > 0 x > 0 Mayor o igual a >= x >= 0 x 0

    Operadores de Comparacion

    Las instrucciones que nos ayudan a realizar operaciones de comparacion (booleanas)son las siguientes:

    If then else

    if (Expresion Booleana){// Aqu van las instrucciones que

    Codigosen C++

    Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 16 Introduccion

    // debe realizar en caso de que la// expresion Booleana sea verdadera

    }else{// Aqu van las instrucciones que// debe realizar en caso de que la// expresion Booleana sea falsa

    }

    1.2.9 Ciclos

    While

    while (Expresion Booleana){// Algo debe ocurrir aqu// Varias veces para que el ciclo// cumpla con su funcion...

    } // Este ciclo no requiere punto y coma al final...

    do...while

    do{// Algo debe ocurrir aqu// Varias veces para que el ciclo// cumpla con su funcion...

    } while (Expresion Booleana);// Nota el punto y coma al final...

    for

    for (incializacion ; Expresion booleana ; Incremento){// Algo debe ocurrir aqu// Varias veces para que el ciclo// cumpla con su funcion...

    }// Este ciclo tampoco requiere punto y coma al final...

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

  • 1.2 Sintaxis del lenguaje C++ 17

    1.2.10 Ejemplos de control de flujo

    if...then...else 1 #include 2 #include 3

    4 using namespace std;5 int main(void){6 char respuesta;7 cout > respuesta;9 if (respuesta == S){

    10 // dice que s...11 cout

  • 18 Introduccion

    1 #include 2 #include 3

    4 using namespace std;5 int main(void){6 int total = 0, i = 0, cuadrado;7 cout > total;9 while (i

  • 1.2 Sintaxis del lenguaje C++ 19

    6 int calificacion;7 cout calificacion;

    10 switch (calificacion){11 case 0:12 cout

  • 20 Introduccion

    1 #include 2 #include 3

    4 using namespace std;5 int main(void){6 int i, j, k;7 // Empiezan las tablas de multiplicar...8 for (i = 1; i

  • 1.2 Sintaxis del lenguaje C++ 21

    21 // Empiezan las tablas de multiplicar...22 for (i = 1; i

  • 22 Introduccion

    1.3 Funciones en C++

    1.3.1 Funciones predefinidas

    En C++ el truco de programar consiste en desmenuzar cada problema com-plejo en sus partes mas elementales idependientes una de la otra. Es como si unser pluricelular lo separaras en sus celulas y trabajaras con cada una de ellas.Cuando las juntes, todas van a trabajar como si fueran un ser completo, cadauna realizando su tarea, sin preocuparse de las otras partes.

    En seguida se muestra una lista de las funciones predefinidas en C++ .

    Nombre Descripcion Argumento Retorno Librerasqrt raz cuadrada double double math.hpow potencia double double math.habs valor absoluto int int math.hlabs valor absoluto long long stdlib.hfabs valor absoluto doule double math.hceil cielo doule double math.hfloor piso doule double math.hexp exp(x) doule double math.hlog ln(x) doule double math.hlog10 log10(x) doule double math.h

    Funciones predefinidas en C++

    Las funciones trigonometricas e hiperbolicas estan definidas en la librera math.h.

    Nombre Descripcion Argumento Retornoacos arco coseno double doubleasin arco seno double doubleatan arco tangente double doublecos coseno double doublecosh coseno hiperbolico double doublesin seno double doublesinh seno hiperbolico double doubletan tangente double doubletanh tangente hiperbolico double double

    Funciones trigonometricas en C++

    Las funciones se invocan escribiendo primero el nombre de la funcion y despues,entre parentesis, los argumentos que requiera la misma.

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

  • 1.3 Funciones en C++ 23

    La sintaxis es la siguiente.

    Funcion (Argumento 1,Argumento 2, ,Argumento n);

    Ejemplo:

    pi = 3.1416;

    radio = sqrt(area /pi);

    edad = abs(year de nac - year actual);

    base = 5;

    exponente = 3;

    potencia = pow(base,exponente);

    1.3.2 Funciones definidas por el usuario

    El programador de C++ puede crear sus propias funciones.

    Primero indicamos que tipo de valor nos devolvera. Despues indicamos el nom-bre de la funcion. Inmediatamente despues se encierra entre parentesis los ar-gumentos de la funcion, los cuales deben ir precedidos del tipo de dato que lecorresponde a cada uno.

    Finalmente, entre corchetes debemos incluir las instrucciones que debe realizarla funcion sobre la informacion que se le entregue.

    Recuerda que debes definir la funcion como si se tratara de otra variable. Esdecir, debes definirla antes de hacer uso de ella en el cuerpo del programa.

    La sintaxis es la siguiente:

    Tipo devuelto Nombre funcion(Tipo 1 Arg 1,Tipo 2 Arg 2, ,Tipo n Arg n){// Aqu se incluyen las instrucciones de lo que debe// realizar la funcion sobre los argumentos...

    }

    Ejemplo:

    Codigosen C++

    Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 24 Introduccion

    // Esta funcion calcula el p porciento de una cantidad C.

    double porcentaje(double porciento,double cantidad)

    {double resultado; // defino una variable para almacenar ah el resultado...

    resultado = porciento * cantidad / 100;

    return resultado;

    // la instruccion return devuelve el valor a la funcion que lo llamo...

    // generalmente, a la funcion main()

    }

    La misma funcion anterior pudo definirse de la siguiente manera:

    // Esta funcion calcula el p porciento de una cantidad C.

    double porcentaje(double porciento,double cantidad)

    {return (porciento * cantidad / 100);

    }

    Funciones que he necesitado...1 /* Nombre del archivo: prueba.cpp2 Descripcion:3 Este programa ayuda en la revision de funciones4 definidas por el usuario...5 ----------------------------------------------------6 ----------------------------------------------------7 Autor: Efran Soto Apolinar8 Email: [email protected] Fecha de ultima Modificacion: 24 de enero de 200810 Lenguaje de Programacion: C++11 Compilador: Dev - C++ Version 4.9.9.2.12 ----------------------------------------------------13 ----------------------------------------------------14 */15 #include // Funciones basicas para input/output16 #include // para usar la funcion rand()17 #include // funciones matematicas (sin (double))18 #include // para usar: getche, getch19 #include // double difftime(time_t time2, time_t time1);20

    21 int errores; // variable global22 int factorial(int n);23 int permuta(int n, int k);24 int potencia(int e);25

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

  • 1.3 Funciones en C++ 25

    26 using namespace std;27 int main(void)28 {29 char respuesta;30 int n,total;31 int i,j,k; // contadores32 double pBin, pBer; // probabilidades33 clock_t tiempo1,tiempo2;34

    35 cout

  • 26 Introduccion

    76 cout

  • 1.3 Funciones en C++ 27

    126 }127 /**************************************128 Declaro la funcion potencia...129 ***************************************/130 int potencia(int e)131 {// para calcular la potencia 2e132 int i,potencia; // contador y resultado133 potencia = 1;134 for (i=1; i

  • 28 Introduccion

    1.4 Clases

    Yo me imagino las clases como tipos de datos que defino por comodidad.

    Por ejemplo, si necesito trabajar con numeros complejos, mejor defino un nuevotipo de variable con una clase. as, podre definir numeros complejos como si setratara de un tipo de variable que ya estuviera definido en C++ .

    La idea es que ademas de declarar tipos de datos tambien podre definir funcionesy realizar operaciones con ellos, por ejemplo, sumarlos, multiplicarlos, etc.

    1 /*2 Este programa crea una clase3 que se llama numero complejo4 */5 #include // Funciones para input/output6 #include //7

    8 using namespace std;9 class complejo{10 public:11 double real; // parte real del numero complejo.12 double imaginary; // parte imaginaria del # complejo13 };14 int main(void){15 // defino una instancia de mi clase16 // se trata de un numero complejo17 complejo z1;18 z1.real = 3.14159; // parte real19 z1.imaginary = 2.717281828; // parte imaginaria20 cout

  • 1.4 Clases 29

    4 Se muestra ademas el uso de funciones5 definidas para las clases.6 */7 #include // Funciones para input/output8 #include //9 using namespace std;

    10 class complejo{11 public:12 // para asignar la parte real13 void DefinirReal(double r);14 // para asignar la parte imaginaria15 void DefinirImaginario(double i);16 // para leer la parte real17 double LeerReal(void);18 // para leer la parte imaginaria19 double LeerImaginario(void);20 private:21 double real; // parte real22 double imaginary; // parte imaginaria23 };24 int main(void){25 // defino una instancia de mi clase26 complejo z1;27 z1.DefinirReal(3.14159);28 z1.DefinirImaginario(2.717281828);29 cout

  • 30 Introduccion

    54 double complejo::LeerReal(void){55 return(real);56 }57

    58 // para leer la parte imaginaria59 double complejo::LeerImaginario(void){60 return(imaginary);61 }

    Debes notar que en el primer codigo se han definido las variables real e imaginarycomo variables publicas, pero en el segundo ejemplo se han definido como vari-ables privadas. De esta forma, no se puede tener acceso a ellas, salvo a travesde las funciones que se definen en la clase.

    En este ejemplo se trata de las funciones: LeerImaginario(), LeerReal(),DefinirImaginario(double i), y DefinirReal(double r).

    Observa tambien que las funciones de clase se definen con el siguiente codigo:

    1 tipod clase::nombreFuncion(tipoa argumento){2 // Instrucciones de la funcion...3 .4 .5 .6 }

    tipod indica el tipo de valor que devolvera la funcion. clase es el nombre de la clase a la que pertenece la funcion. nombreFuncion es el nombre de la funcion. tipoa es el tipo de variable que tendra el argumento. argumento es el identificador de la variable que sera el argumento de la

    funcion.

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

  • 2Codigos

    Codigosen C++

    Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 32 Codigos

    2.1 Mis primeros programas

    En este apartado se muestra el codigo de algunos programas basicos.

    Estructura basica del programa.0

    /* Nombre del archivo: ProgramTemplate1

    Template - Esta es una estructura de base2

    para escribir programas en C++3

    ----------------------------------4

    ----------------------------------5

    Nombre del Archivo: ProgramTemplate6

    Autor: Tu Nombre va aqu...7

    Email: [email protected]

    Descripcion: Estructura para programa9

    Fecha de ultima Modificacion: 17 de Noviembre del 200710

    ----------------------------------11

    ----------------------------------12

    /13#include // Funciones basicas para input/output14

    #include // funciones matematicas15

    using namespace std;16

    int main(int nNumberofArgs, char* pszArgs[])17

    {18// El codigo del programa C++ debe estar encerrado entre llaves {}19// despues del la instruccion "main"20

    // (Bueno, en realidad se trata de una funcion...)21

    // La siguiente instruccion: system("PAUSE");22

    // permite que el usuario haya ledo la informacion23

    // que se obtuvo como resultado de la ejecucion del programa...24

    system("PAUSE");25

    return 0;26

    }27

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

  • 2.1 Mis primeros programas 33

    Las reglas basicas del lenguaje C++ .

    #include int main(){printf("\n Los parentesis siempre aparecen en pares!");printf("\n Los comentarios en una lnea se indican con //");printf("\n O bien, se inician don /*");printf("\n y se terminan con */");printf("\n cuando abarcan varias lneas...");printf("\n Las instrucciones terminan con un punto y coma (;)");printf("\n Los espacios son opcionales");printf("\n Puedes dejar lneas en blanco entre el codigo");printf("\n para hacerlo mas legible");printf("\n Debe contener la funcion main()");printf("\n C++ usa mayormente minusculas.");printf("\n En C++ las letras mayusculas y las minusculas");printf("\n no dan los mismos resultados en las instrucciones...");return(0);}

    Calcula el area de un triangulo.0

    #include 1

    using namespace std;2

    int main(void)3

    {4double area, base, altura;5

    string unidad;6

    cout > unidad;8

    cout

  • 34 Codigos

    Una tonelada metrica equivale a 35,273.92 onzas. Escribe un programaque lea el peso de un paquete de cereal en onzas y la salida sea el peso entoneladas metricas as como el numero de cajas que se requieren para que pesenuna tonelada metrica. El programa debe permitir al usuario realizar el calculotantas veces como lo desee.1

    0

    /*1

    Nombre del Archivo: proyecto1.cpp2

    Descripcion: En el encabezado...3

    Fecha de ultima Modificacion: 18 de Noviembre del 2007 */4

    #include 5

    using namespace std;6

    int main(void)7

    {8double pesoOnzas, pesoTon, n;9

    double coef=35273.92;10

    char respuesta = c;11

    for (;;)12

    {13cout > pesoOnzas;15

    pesoTon = pesoOnzas / coef;16

    n = coef / pesoTon;17

    cout

  • 2.1 Mis primeros programas 35

    Un laboratorio de investigacion ha concluido que el azucar X, un endulzanteartificial dietetico, causara la muerte de ratones de laboratorio. Un pacientedesea conocer cuanto refresco de cola endulzado con el azucar X puede tomarsin morir. Escribe un programa para encontrar la respuesta. La entrada es lacantidad (en gramos) de azucar X requerida para matar a un raton, el peso delraton y el peso del paciente. Para asegurar la integridad del paciente, indica elpeso a cual el paciente dejara de controlar su dieta, en lugar de su peso actual.Suponga que el refresco de cola contiene un decimo de porciento de azucar X.El programa debe repetirse tantas veces como el usuario requiera.

    0

    /* Nombre del Archivo: proyecto2.cpp1

    Fecha de ultima Modificacion: 18 de Noviembre del 2007 */2

    #include 3

    using namespace std;4

    int main(void)5

    {6double pesoPac, pesoRat, dosisRat, dosisPac;7

    double ratio=0.001;8

    char respuesta = c;9

    for (;;) {10cout > pesoRat;12

    cout > dosisRat;14

    cout > pesoPac;16

    // Calculos...17

    dosisPac= 1000*dosisRat * pesoPac / pesoRat; // dosis de pura azucar X18

    dosisPac = dosisPac / ratio; // dosis de refresco...19

    cout

  • 36 Codigos

    Los trabajadores de una compana en particular han ganado un 7.6% deincremento retroactivo a seis meses. Escribe un programa que toma el salariopromedio anual como entrada y da como salida el pago retroactivo al empleado,el nuevo salario anual y el nuevo salario mensual. Usa la declaracion de variablecon el modificador const para expresar el aumento en el salario. El programadebe permitir realizar el calculo tantas veces como se requiera.

    0

    /* Nombre del Archivo: proyecto3.cpp1

    Descripcion: Ver el encabezado...2

    Fecha de ultima Modificacion: 20 de Noviembre del 2007 */3

    #include 4

    using namespace std;5

    int main(void)6

    {7double salarioInicial, salarioFinal, salarioMensual, retro;8

    double aumento=0.076;9

    int meses;10

    char respuesta = c;11

    for (;;)12

    { cout > salarioInicial;14

    cout > meses;16

    retro = meses * aumento * salarioInicial;17

    salarioFinal = salarioInicial * (1 + aumento);18

    salarioMensual = salarioFinal/12;19

    cout

  • 2.1 Mis primeros programas 37

    Elaborar un programa que calcule el factorial de un numero entero positivo.0

    /* Nombre del Archivo: factorial.cpp1

    Autor: Efran Soto Apolinar.2

    Email: [email protected]

    Descripcion: Ver el encabezado...4

    Fecha de ultima Modificacion: 22 de Noviembre del 2007 */5

    #include 6

    using namespace std;7

    int main(void)8

    {9int i,n,factorial;10

    char respuesta = c;11

    for ( ; ; ){12cout

  • 38 Codigos

    2.2 Programas con funciones

    En los siguientes ejemplos, los codigos incluyen programas que hacen llamadasa funciones que se definen en los mismos.

    Generar un programa donde se defina una funcion que calcule el factorial deun numero natural dado.

    0

    /* Nombre del archivo: proyecto4.cpp1

    Nombre del Archivo: proyecto4.cpp2

    Descripcion: Ver el encabezado...3

    Fecha de ultima Modificacion: 01 de Diciembre del 2007 */4

    #include 5using namespace std;6

    int main(void)7

    { int f,n,i;8int factorial(int n); // Declaro la funcion antes de usarla...9

    char respuesta = c;10

    for ( ; ;)11

    { cout n;14f = factorial(n); // Aqu llamo la funcion factorial...15

    cout

  • 2.3 Funciones cin, cout 39

    2.3 Funciones cin, cout

    En esta seccion se enumeran programas sencillos que serviran de ejemplo paraotros ejercicios.

    Calcular el promedio. o1 /* Nombre del archivo: UnoUno.cpp2 Descripcion:3 Escribir un programa que calcule la media real de 34 numeros enteros dados por el usuario.5 Fecha de ultima Modificacion: 03 de enero del 20086 ----------------------------------7 ----------------------------------8 */9 #include // Funciones basicas para input/output

    10 using namespace std;11 int main(void){12 int a,b,c;13 double promedio;14 cout > a;16 cout > b;18 cout > c;20 promedio = double(a + b + c)/3.0;21 cout

  • 40 Codigos

    12 int a,b;13 cout > a;15 cout > b;17 cout b;17 cout

  • 2.3 Funciones cin, cout 41

    11 int main(void){12 double a,b,temp;13 cout > a;15 cout > b;17 temp = a;18 a = b;19 b = temp;20 cout

  • 42 Codigos

    3 Escribir un programa que acepte el valor de un angulo4 medido en grados sexagesimales e imprima su valor en5 radianes.6 Nota: Utiliza Pi = 3.1415926547 Fecha de ultima Modificacion: 03 de enero del 20088 ----------------------------------9 ----------------------------------10 */11 #include // Funciones basicas para input/output12 using namespace std;13 int main(void){14 const double pi = 3.141592654;15 double grados, rad;16 cout > grados;19 rad = grados * pi / 180;20 cout

  • 2.3 Funciones cin, cout 43

    24 }

    Calcular area del crculo y permetro de circunferencia. o1 /* Nombre del archivo: UnoOcho.cpp2 Descripcion:3 El area de un crculo es :4 A = Pi * r25 La longitud de la circunferencia es:6 P = 2 * Pi * r7 Escribir un programa que solicite el radio de un8 crculo e imprima en pantalla su permetro y su area.9

    10 Fecha de ultima Modificacion: 03 de enero del 200811 ----------------------------------12 ----------------------------------13 */14 #include // Funciones basicas para input/output15 using namespace std;16 int main(void){17 double r, perimetro, area;18 const double pi = 3.141592654;19 cout > r;21 perimetro = 2 * pi * r;22 area = pi * r * r;23 cout

  • 44 Codigos

    12

    13 Fecha de ultima Modificacion: 03 de enero del 200814 ----------------------------------15 ----------------------------------16 */17 #include // Funciones basicas para input/output18 using namespace std;19 int main(void){20 int KmR, Hrs, Min;21 double PrecioGas, ImporteGas, Tiempo, VelKmH, VelMS;22 double ConsumoGasPC, ConsumoGasP, ConsumoGasLC, ConsumoGasL;23 cout > KmR;25 cout > PrecioGas;27 cout > ImporteGas;29 cout Min;36 // Aquu van los calculos...37 Tiempo = Hrs + Min / 60; // Tiempo en formato double...38 VelKmH = KmR / Tiempo;39 VelMS = VelKmH * 1000 / 3600;40 ConsumoGasL = ImporteGas / PrecioGas;41 ConsumoGasP = ConsumoGasL * PrecioGas;42 ConsumoGasLC =ConsumoGasL * 100;43 ConsumoGasPC =ConsumoGasP * 100;44 cout

  • 2.3 Funciones cin, cout 45

    Calcular pendiente y ecuacion de una recta. o1 /* Nombre del archivo: UnoDiez.cpp2 Descripcion:3 Escribir un programa que encuentre la ecuacion de4 la recta que pasa por los dos puntos dados por el5 usuario A(x_a, y_a), y B(x_b, y_b).6 Indicar ademas sus intersecciones con los ejes7 coordenados.8

    9 Fecha de ultima Modificacion: 03 de enero del 200810 ----------------------------------11 ----------------------------------12 */13 #include // Funciones basicas para input/output14 using namespace std;15 int main(void){16 int x_a, x_b, y_a, y_b, Dx, Dy, b;17 double m;18 cout x_b;29 cout > y_b;31 // Calculos...32 Dx = x_b - x_a;33 Dy = y_b - y_a;34 m = Dy / Dx;35 b = Dx * y_a - Dy * x_a;36 cout

  • 46 Codigos

    2.4 if, for, while and the like...

    Las operaciones booleanas (comparaciones) y los ciclos nos permiten controlarel flujo del programa.

    Decidir si el usuario es mayor de edad.o1 /*2 Nombre del archivo: DosUno.cpp3 Descripcion:4 Escribir un programa que solicite la edad del usuario5 y decida si es o no mayor de edad.6 Considera a una persona mayor de edad si tiene al menos7 18 anos cumplidos.8

    9 Fecha de ultima Modificacion: 04 de enero del 200810 ----------------------------------11 ----------------------------------12 */13 #include // Funciones basicas input/output14 using namespace std;15 int main(void){16 int edad;17 cout 17) {23 cout

  • 2.4 if, for, while and the like... 47

    7 Fecha de ultima Modificacion: 04 de enero del 20088 ----------------------------------9 ----------------------------------

    10 */11 #include // Funciones basicas input/output12 using namespace std;13 int main(void){14 int mes;15 cout

  • 48 Codigos

    57 if ((mes > 12) || (mes < 1)){58 cout

  • 2.4 if, for, while and the like... 49

    38 break;39 case 7:40 cout

  • 50 Codigos

    19 cin >> exponente;20 potencia = 1;21 if (exponente == 0){22 potencia = 1;23 }24 if (exponente > 0){25 for (i=1 ; i=exponente ; i--){31 potencia /= double(base);32 // la instruccion double(var)33 // convierte un entero a tipo double...34 }35 }36 cout

  • 2.4 if, for, while and the like... 51

    23 for (;;){24 cout > suma;26 if (suma == (a+b)){27 cout > respuesta;37 if ((respuesta == S)||(respuesta == s)){38 break; // Salir del ciclo...39 }40 cout

  • 52 Codigos

    24 cin >> operacion;25 if (operacion == +){26 resultado = a + b;27 }28 if (operacion == -){29 resultado = a - b;30 }31 if (operacion == *){32 resultado = a * b;33 }34 if (operacion == /){35 resultado = a / b;36 }37 cout

  • 2.4 if, for, while and the like... 53

    28 }29 cout

  • 54 Codigos

    38 // por ejemplo, si ingreso:39 // primer lado = 100, segundo lado = 1, tercer lado = 140 cout y_0;28 d = fabs(A*x_0 + B*y_0 + C)/sqrt(A*A + B*B);29 cout

  • 2.4 if, for, while and the like... 55

    Decidir si un numero entero positivo dado es par o impar. o1 /* Nombre del archivo: DosNueve.cpp2 Descripcion:3 Escribir un programa que determine si el numero4 positivo introducido por el usuario es par o impar.5

    6 Fecha de ultima Modificacion: 05 de enero de 20087 ----------------------------------8 ----------------------------------9 */

    10 #include // Funciones basicas input/output11 using namespace std;12 int main(void){13 int ent,residuo;14 char respuesta;15 cout

  • 56 Codigos

    1 /* Nombre del archivo: DosDiez.cpp2 Descripcion:3 Escribir un programa que convierta una temperatura4 dada por el usuario en grados Farenheit a grados5 Celsius.6 El usuario debe poder realizar el calculo tantas7 veces como lo desee.8

    9 Fecha de ultima Modificacion: 05 enero de 200810 ----------------------------------11 ----------------------------------12 */13 #include // Funciones basicas input/output14 using namespace std;15 int main(void){16 double C, F;17 char respuesta;18 cout

  • 2.4 if, for, while and the like... 57

    10 #include 11 using namespace std;12 int main(void){13 int a,b,c,max;14 char respuesta;15 cout b;23 cout > c;25 if (a > b){26 max = a;27 }28 else{29 max = b;30 }31 if (c > max){32 max = c;33 }34 cout

  • 58 Codigos

    11 using namespace std;12 int main(void){13 int a,b,c,min,max;14 char respuesta;15 cout c;26 if (a > b){27 max = a;28 min = b;29 }30 else{31 max = b;32 min = a;33 }34 if (c > max){35 max = c;36 }37 if (c < min){38 min = c;39 }40 cout

  • 2.4 if, for, while and the like... 59

    5 mnimo. La lista finalizara cuando se introduzca el6 numero cero (0).7

    8 Fecha de ultima Modificacion: 05 enero de 20089 ----------------------------------

    10 ----------------------------------11 */12 #include 13 using namespace std;14 int main(void){15 double inicial, actual, max, min;16 char respuesta;17 cout

  • 60 Codigos

    2.5 Mis tareas

    En esta seccion encontraras el codigo de las tareas que voy entregando en misclases de Simulacion de Sistemas.

    2.5.1 Simulacion 1

    Se lanza un alfiler de longitud L a una mesa que tiene dibujadas lneas paralelasequidistantes separadas a L unidades una de la otra. Calcular la probabilidadde que el alfiler toque lnea.

    Consideraciones

    Se realizaron las siguientes suposiciones:

    1. La longitud del alfiler es 1.

    2. El alfiler siempre cae dentro de la mesa.

    3. La distancia (medida verticalmente) de una recta a la cabeza del alfiler esuna variable aleatoria que presenta distribucion uniforme.

    4. El angulo que forma el alfiler con las rectas dibujadas sobre la mesa es unavariable aleatoria que presenta distribucion uniforme.

    Con base en estas suposiciones, podemos definir como x la distancia (medidaverticalmente) de una recta a la cabeza del alfiler, y como el angulo que formauna de las rectas dibujadas sobre la mesa y el alfiler.

    `i

    `i+1

    1

    0

    x

    Ahora definimos y como la posicion de la punta del alfiler (el extremo opuestoa la cabeza del alfiler).

    Dado que el alfiler mide 1, la coordenada y puede calcularse con:

    y = x+ sin (2pi )

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

  • 2.5 Mis tareas 61

    donde pi = 3.141592654 , es la constante geometrica3, y es el angulo comose definio anteriormente.

    El alfiler tocara lnea siempre y cuando se cumpla alguna de las siguientes condi-ciones:

    i. y > 1, o

    ii. y < 0

    Geometricamente, de la figura podemos ver que en estos casos, la punta delalfiler estara fuera del area encerrada por las lneas paralelas `i y `i+1.

    Simulacion por computadora

    En seguida se muestra el codigo del programa que simula este experimento.

    /* Nombre del archivo: simulacion01.cppDescripcion:Este programa simula el siguiente experimento:Se lanza un alfiler de longitud L a una mesaque tiene dibujadas lneas paralelas equidistantesseparadas a L unidades una de la otra.El usuario debe ingresar el numero total deexperimentos (entero) que se deben realizar,entendiendo por experimento la simulacion de unlanzamiento del alfiler sobre la mesa.El resultado indica la probabilidad de que elalfiler toque una de las lneas dibujadas sobre lamesa.--------------------------------------------------------------------------------------------------------Autor: Efran Soto ApolinarEmail: [email protected] de ultima Modificacion: 24 de enero de 2008Lenguaje de Programacion: C++Compilador: Dev - C++ Version 4.9.9.2.--------------------------------------------------------------------------------------------------------

    */#include // Funciones basicas para input/output#include // para usar la funcion rand()#include // funciones matematicas (sin (double))#include // para usar: getche, getchusing namespace std;int main(void)

    3Al multiplicar por 2pi convertimos la variable aleatoria , cuyos valores van desde 0hasta 1 a radianes. Se trata de un simple mapeo uno a uno.

    Codigosen C++

    Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 62 Codigos

    {char respuesta;int si, no, i, j, total;double p, x, y, a;const double pi = 3.141592654;/*x --> representa la distancia de una rectaparalela de referenciaal punto donde cayo la cabeza del alfiler.

    y = x + sin (2 * pi * a)a --> es el angulo que forma el alfiler con

    las rectas paralelas dibujadas sobrela mesa

    si --> es el numero de veces que el alfilertoca lnea

    no --> es el numero de veces que el alfilerNO toca lnea

    p --> es la probabilidad de que toque...total --> es el numero de experimentos que

    realizara el programa...

    */cout

  • 2.5 Mis tareas 63

    //cout

  • 64 Codigos

    2.5.2 Calculo analtico

    Para hacer el calculo analtico podemos definir las siguientes coordenadas: Sead la distancia del centro del alfiler a la recta mas cercana.

    Sea ` esta recta, y sea como el menor angulo formado entre ` y el alfiler. Deaqu se deduce que:

    0 d 12, y 0 pi

    2

    Tambien es claro que el alfiler tocara la recta ` si la hipotenusa del triangulo esmenor a 0.5, es decir:

    d

    sin= x) {

    break;}kBin++;

    }//// Muestro los resultados...cout

  • 68 Codigos

    subfactorial = 1; // reinicio el subfactorialwhile (i

  • 2.5 Mis tareas 69

    #include // funciones matematicas (pow (double))#include // para usar: getche, getch#include // clock_t = clock();

    int errores; // variable global...int factorial(int n);int permuta(int n, int k);//using namespace std;int main(void){char respuesta;int i, k;double p, prob, x, lambda;//cout 1)) {cout

  • 70 Codigos

    //// Muestro los resultados...cout

  • 2.5 Mis tareas 71

    Descripcion:Este programa simula el lanzamiento de dos dados...--------------------------------------------------------------------------------------------------------Autor: Efran Soto ApolinarEmail: [email protected]

    [email protected]: http://yalma.fime.uanl.mx/efrain/Fecha de ultima Modificacion: 08 de febrero de 2008Lenguaje de Programacion: C++Compilador: Dev - C++ Version 4.9.9.2.--------------------------------------------------------------------------------------------------------

    */#include // Funciones basicas para input/output#include // para usar la funcion rand()#include // para usar: getche, getch#include // clock_t = clock();

    using namespace std;int main(void){char respuesta,resp;int i, x, y, n; // variables aleatorias...int suma;double promedio;//cout resp;srand(unsigned(time(0)));// Semilla para el aleatorio...suma = 0; // reinicio la suma de resultados...if ((resp == S)||(resp == s)){

    cout

  • 72 Codigos

    suma += x+y;if ((resp == S)||(resp == s)){

    // Muestro los resultados...cout

  • 2.5 Mis tareas 73

    */#include // Funciones basicas input/output#include // para la funcion rand()#include // funciones matematicas#include // para usar getche, getch#include // clock();

    int errores; // variable global...int factorial(int n); // funcion...

    using namespace std;int main(void){char respuesta;int i, ipe, ip;double prob, probe, u, lambda, x;//for (;;){cout

  • 74 Codigos

    return 0;}/**************************************Declaro la funcion factorial...

    ***************************************/int factorial(int n){

    long fi,i;fi = i = 1;while (i

  • 2.5 Mis tareas 75

    #include // Funciones basicas input/output#include // para usar rand()#include // funciones matematicas#include // para usar getche, getch#include // clock();

    int errores; // variable global...double rfactorial(int n); // funcion...double normal(double x); // funcion...double intnormal(double x);const double pi = 3.141592653589; // global

    using namespace std;int main(void){char respuesta;double x, xa, u, approx, approxa;double step, error, errorx;int j, total, cont, z;char signo;// para los dgitos...cout.setf(ios::fixed);cout.setf(ios::showpoint);cout.precision(8);//for (;;){cout

  • 76 Codigos

    approx = normal(x);

    // Decido si incremento o decremento xwhile (approx < u){

    x += step;approx = normal(x);z++;

    }step /= 1.5;while (approx > u){

    x -= step;approx = normal(x);z++;

    }step /= 1.5;if (approx < 0.0001 && fabs(x) > 3.999){

    x = u / 2;approx = normal(u);

    }

    // calculo el error relativo para xif (fabs(xa - x) < 0.0001){// Criterio para salir del ciclo...

    cout

  • 2.5 Mis tareas 77

    if (x > 4){return 1;

    }for (i = 0 ; i < 40 ; i++){

    ua = u;u += pow(-0.5 * x * x,i) * rfactorial(i) / (2*i+1);un = u;

    } // endfor

    if (x < 0 ){u = 0.5 - u * x / sqrt(2*pi);

    }else{

    u = 0.5 + u * x / sqrt(2*pi);}

    return u;}

    /**************************************Declaro la funcion normal...

    ***************************************/double intnormal(double x){

    double u = 0;double ua, up, ac;double xi, step;// xi es la iteracion actual// step es el tamano del paso...int i;step = 0.00000001; // El paso es 1 / 107xi = 0; // empieza a integrar desde cero...while (xi

  • 78 Codigos

    j = 1;//while (j

  • 2.5 Mis tareas 79

    const double c = 1.315489247;//

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

  • 80 Codigos

    }

    2.5.9 Simulacion 8

    Elaborar un programa para simular un movimiento browniano

    Puede encontrar un PDF con una animacion de los resultados generados poreste programa en: http://yalma.fime.uanl.mx/~efrain/project.html

    /* Nombre del archivo: simulacion08.cppEste programa simula un movimiento browniano.--------------------------------------------------------------------Autor: Efran Soto ApolinarEmail: [email protected]

    [email protected] de ultima Modificacion: 01 de marzo de 2008--------------------------------------------------------------------

    */#include //#include //#include // Funciones basicas input/output#include // funciones matematicas#include // para usar getche, getch#include // para grabar los datos generados...//const double PI = 3.141592653;double step;

    // funcion para generar los numeros pseudoaleatorios// con distribucion normal...double dnormal(double media, double sigma);double dnormal(void);

    // Funcion para generar un numero pseudoaleatorio// con distribucion uniforme en el intervalo (0,1)double uniforme(void);

    using namespace std;int main(void){

    char respuesta, semilla;double t, tiempo; // escala de tiempo.double xn, x = 0; // posicion de la partcula.double media, sigma; // parametros de dist. Normal.

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

  • 2.5 Mis tareas 81

    int i = 0;//

    for (;;){ // for infinito...cout > step;if (step

  • 82 Codigos

    ofstream out_stream; // creo canal p/escritura de datos...out_stream.open("brown.txt"); // creo y abro el archivo...if (out_stream.fail()){ // si no puede abrir el archivo...

    cout

  • 2.5 Mis tareas 83

    x = sqrt(-2 * log(u)) * cos(2 * PI * y);if (u >= 0.5){z = media + sigma * step * x;}else{z = media - sigma * step * x;}return z;

    // step se utiliza porque el problema define// que la varianza es proporcional al intervalo de tiempo.}

    /**************************************Declaro la funcion DNORMAL...

    ***************************************/double dnormal(void){/*Esta funcion genera numeros pseudoaleatorioscon distribucion uniforme.

    */double u, x, y, z;// Defino la media y desviacion estandar...double media = 0, sigma = 1;u = uniforme();y = uniforme();x = sqrt(-2 * log(u)) * cos(2 * PI * y);if (u >= 0.5){z = media + sigma * step * x;}else{z = media - sigma * step * x;}return z;

    // step se utiliza porque el problema define// que la varianza es proporcional al intervalo de tiempo.}

    /**************************************Declaro la funcion UNIFORME...

    ***************************************/double uniforme(void){// Esta funcion genera un numero pseudoaleatorio// con distribucion uniforme en el intervalo (0,1).return (double(rand())/double(RAND_MAX));}

    Codigosen C++

    Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 84 Codigos

    2.5.10 Simulacion de la distribucion binomial

    Utilizando ANSI-C y las funciones de generacion de numeros pseudoaleatorios,escribe un programa que por simulacion y la ley de grandes numeros aproximala distribucion binomial con n y p para todos los valores de k = 0, 1, 2, , n.Incluye en tu respuesta el codigo que escribiste junto con un dibujo preparadocon gnuplot de la distribucion Bin(n, p) con los valores definidos para n y p.

    1 /*2 Tarea 3.3 Nombre del archivo: tres.c4 Utilizando ANSI-C y las funciones de generacion5 de numeros pseudoaleatorios, escribe un programa6 que por simulacion y la ley de numeros grandes7 aproxima la distribucion binomial con n y p para8 todos los valores de k = 0, 1, 2, . . . , n.9 Incluye en tu respuesta el codigo que escribiste10 junto con un dibujo preparado con gnuplot de la11 distribucion Bin(n, p) con los valores definidos12 para n y p.13 Autor: Efrain Soto Apolinar.14 fecha de ultima modificacion: 15 de agosto de 200815 */16 #include 17 #include 18 #include 19 int combinaciones(int m, int k);20 float binomial(double p, int N, int k);21 void bernoulli(int n, double p, int N);22 float uniforme(void);23 int main(int argc, char** args) {24 char letra;25 int n, k, N = 15;26 int i, j; // contadores27 double p = 0.4;28 float resp;29 printf("\nEste programa simula un proceso");30 printf("\nbinomial por la ley de los grandes numeros");31 printf("\n\nparametro p = 0.4");32 printf("\n\nparametro N = 15");33 printf("\nIntroduce el numero de simulaciones:");34 scanf("%i", &n);35 // La simulacion es:36 bernoulli(n, p, N);37 printf("\n\nValores teoricos:\n");38 for(i = 0 ; i < 16 ; i++){39 printf("\nk = %i, p = %f,", i, binomial(p,N,i));

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

  • 2.5 Mis tareas 85

    40 }41 printf("\n\n");42 printf("\nPresiona una tecla...");43 scanf("%c", &letra);44 return 0;45 }46 /*-----------------------------------------------47 Funcion para calcular las combinaciones48 -------------------------------------------------*/49 int combinaciones(int m, int k){50 int i; // contador51 long int num = 1;52 long int den = 1;53 int r = 1; // resultado54 for(i = 0 ; i < k ; i++){55 num = num * (m - i);56 den = den * (i + 1);57 // simplifico para que no crezca rapido...58 while(num % 2 == 0 && den % 2 == 0){59 num /= 2;60 den /= 2;61 }62 while(num % 3 == 0 && den % 3 == 0){63 num /= 3;64 den /= 3;65 }66 while(num % 5 == 0 && den % 5 == 0){67 num /= 5;68 den /= 5;69 }70 }71 r = num / den;72 return r;73 }74

    75 /*-----------------------------------------------76 Funcion para calcular la probabilidad binomial77 -------------------------------------------------*/78 float binomial(double p, int N, int k){79 int i; // contador80 float r; // respuesta81 r = (int)(combinaciones(N,k)) * pow(p,k) * pow(1-p,N-k);82 return r;83 }84

    85 /*-----------------------------------------------86 Funcion para el proceso de Bernoulli...87 Voy a realizar n exprimentos de Bernoulli88 p = probabilidad de exito89 N = numero de ensayos por experimento

    Codigosen C++

    Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 86 Codigos

    90 n = numero de experimentos91 -------------------------------------------------*/92 void bernoulli(int n, double p, int N){93 int arreglo[16]; // cuenta94 int i, j, c; // contadores95 int tote; // total de exitos96 float u;97 // reinicio el arreglo98 for(c = 0 ; c < 16 ; c++){99 arreglo[c] = 0;

    100 }101 // Vienen los n ensayos de Bernoulli102 for(i = 1 ; i

  • 2.5 Mis tareas 87

    2.5.11 Introduccion a la dinamica de poblaciones

    1. Definir estado inicial N (poblacion inicial)

    2. Probabilidad de un nacimiento sin muerte p (homogenea)

    3. Probabilida de una muerte sin nacimiento q (homogenea)

    4. Probabilidad de mantener el mismo estado 1 p q

    3 Observar el desarrollo del tamano de la poblacion sobre varias repeti-ciones del proceso.

    3 Variar los valores de p y q.

    1 /*2 Simulacion de la dinamica de poblaciones3 Fecha: 19 de agosto de 20084

    5 Caso discreto.6 Definir estado inicial N (poblacion inicial)7 Probabilidad de un nacimiento sin muerte p (homogenea)8 Probabilida de una muerte sin nacimiento q (homogenea)9 Probabilidad de mantener el mismo estado 1 - p - q

    10

    11 Observar el desarrollo del tamano de la poblacion12 sobre varias repeticiones del proceso13 */14 #include 15 #include 16 #include 17

    18 double uniforme(void);19

    20 int main(int argc, char** args){21 int i = 0; // contadores22 double p = 0.45; // probabilidad de nuevo nacimiento23 double q = 0.45; // probabilidad de muerte24 double eq = 1 - p - q; // probabilidad de quedar igual25 double r; // numero aleatorio26 int N = 10000; // poblacion inicial27 int MAXP = 10 * N; // poblacion final28

    29 // para el manejo del archivo...30 FILE *stream_f; //31 stream_f = fopen("datos.txt", "w"); // abrir para lectura32 if (stream_f == NULL){33 printf ("\nNo se puede abrir el archivo \n");

    Codigosen C++

    Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 88 Codigos

    34 printf("\nPor favor, verifique el nombre archivo");35 }36 srand(unsigned(time(0)));37 printf("\nEspere por favor...\n");38 printf("\nSimulando dinamica de la poblacion...");39 while (N > 0 && N < MAXP){40 r = uniforme();41 if (r p && r p + q){50 // Nadie nacio...51 // Nadie murio...52 //}53 printf("\nt = %i \tN = %i",i, N);54 // guardo en archivo...55 if(i % 25 == 0){56 fprintf(stream_f, "\n%i \t%i",i, N);57 }58 i++;59 if (i > 10000){60 break;61 }62 }63 fclose(stream_f);64 printf("\nSimulacion exitosa...");65 return 0;66 }67

    68 /*-----------------------------------------------69 Funcion para generar uniformes (0,1)70 -------------------------------------------------*/71 double uniforme(void){72 double u;73 u = 1.0 * rand() / RAND_MAX;74 return u;75 }

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

  • 2.6 Proyectos 89

    2.6 Proyectos

    En esta seccion encontraras codigos de problemas que he resuelto para incre-mentar mi biblioteca de programas.

    Espero que sean de ayuda para ti.

    2.6.1 Regresion lineal /* Nombre del archivo: LR.cpp

    Este programa pide las coordenadas (x,y) de n puntosy los graba en un archivo. Despues lee estos datos ycalcula la recta de mejor ajuste por el metodo demnimos cuadrados.

    --------------------------------------------------------------------Autor: Efran Soto ApolinarEmail: [email protected]

    [email protected] de ultima Modificacion: 21 de marzo de 2008

    --------------------------------------------------------------------

    */#include //#include //#include // Funciones basicas input/output#include // funciones matematicas#include // para usar: getche, getch#include // para grabar datos generados...//using namespace std;int main(void){

    char respuesta, letra;// char file_name[15];int i, j, n; // contadoresdouble b, m; // parametros...double xi, yi; // datosdouble Sx, Sy, Sxs, Sxy; // sumas de datos...for(;;){ // for infinito...Sx = 0; Sy = 0; Sxs = 0; Sxy = 0;// Informacion sobre el programa...cout

  • 90 Codigos

    cout

  • 2.6 Proyectos 91

    cout > yi;do { // estoy buscando el siguiente renglon

    in_stream >> letra;} while (!letra == \n);//Sx += xi; // Suma de xSy += yi; // Suma de ySxy += xi * yi; // Suma de xySxs += xi * xi; // Suma de x cuadrada}// Cierro el archivo de lectura...in_stream.close();// Calculo los parametros...m = (n * Sxy - Sx * Sy) / (n * Sxs - Sx * Sx);b = (Sy - m * Sx) / n;// Muestro los resultados...cout

  • 92 Codigos

    ambos por el metodo de mnimos cuadrados.--------------------------------------------------------------------Autor: Efran Soto ApolinarEmail: [email protected]

    [email protected] de ultima Modificacion: 21 de marzo de 2008

    --------------------------------------------------------------------

    */#include //#include //#include // Funciones basicas input/output#include // para usar getche, getch#include // para grabar los datos generados...//using namespace std;int main(void){

    char respuesta, letra;// char file_name[15];int i, j, n; // contadoresdouble a, b, c; // parametros para parabola...double m, beta; // parametros para recta...double Da = 0, Dp = 0;double xi, yi; // datosdouble Sx, Sy, Sx2, Sx3, Sx4, Sxy, Sx2y;double Error_p = 0, Error_r = 0;double dip, dir, y_approxp, y_approxr;for(;;){ // for infinito...Sx = 0; Sy = 0; Sxy = 0;Sx2 = 0; Sx3 = 0; Sx4 = 0; Sx2y = 0;// Informacion sobre el programa...cout

  • 2.6 Proyectos 93

    if (out_stream.fail()){ // si no puede abrir el archivo...cout

  • 94 Codigos

    Sx4 += xi * xi * xi * xi; // Suma x cuartaSx2y += xi * xi * yi;}// Cierro el archivo de lectura...in_stream.close();// Calculo parametros de recta...m = (n * Sxy - Sx * Sy) / (n * Sx2 - Sx * Sx);beta = (Sy - m * Sx) / n;

    // Calculo los parametros de parabola...Da = Sy * Sx2 * Sx2 + n * Sxy * Sx3 + Sx * Sx * Sx2y;Da = Da - n * Sx2 * Sx2y - Sx * Sx3 * Sy - Sx * Sxy * Sx2;Dp = Sx2 * Sx2 * Sx2 + n * Sx3 * Sx3 + Sx4 * Sx * Sx;Dp = Dp - n * Sx2 * Sx4 - 2 * Sx * Sx2 * Sx3;a = Da / Dp;b = (Sx * (Sy - a * Sx2) - n * (Sxy - a * Sx3))

    / (Sx * Sx - n * Sx2);c = (Sy - a * Sx2 - b * Sx) / n;// Muestro los resultados...cout

  • 2.6 Proyectos 95

    // Cierro el archivo de lectura...in_stream.close();cout

  • 96 Codigos

    2.7 Librera Estadstica

    Crear una librera con funciones estadsticas basicas para utilizar durante lossiguientes semestres de la maestra.

    Media / Desviacion estandar / Varianza Moda (intervalo de mayor frecuencia) Graficar el histograma de frecuencias Generadores de numeros pseudoalestorios con las siguientes distribuciones:

    3 Uniforme en el intervalo (0,1),

    3 Uniforme en el intervalo (a, b), definido por el usuario,

    3 Normal con media 0.0 y desviacion estandar 1.0,

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

    3 Exponencial con parametro , definido por el usuario,

    3 Weibull con parametros de forma c y de escala k, definidos por elusuario,

    3 Rayleigh con media , definida por el usuario.

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

    2.8 Implementacion

    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 clc derechocon un clc derechocon un clc derechocon un clc derechocon un clc derechocon un clc derechocon un clc derechocon un clc derechocon un clc derechocon un clc derechocon un clc derechocon un clc derechocon un clc derechocon un clc derechocon un clc derechocon un clc derechocon un clc 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 : . O bien, con doble clcdoble clcdoble clcdoble clcdoble clcdoble clcdoble clcdoble clcdoble clcdoble clcdoble clcdoble clcdoble clcdoble clcdoble clcdoble clcdoble clc sobre el mismo.

    A continuacion esta el codigo del mismo archivo.

    1 /*2 Nombre del archivo: "estadistica.h"3 Descripcion:4 Este archivo contiene funciones y clases5 para trabajar con cuestiones de probabilidad.6

    7 Las funciones se detallan con comentarios8 en el codigo.

    Efran Soto A. Este material NO esta listo para su publicacion.Prohibida la reproduccion sin permiso previo del autor.

    Codigosen C++

    /*Nombre del archivo: "estadistica.h"Descripcin:Este archivo contiene funciones y clasespara trabajar con cuestiones de probabilidad.

    Las funciones se detallan con comentarios en el cdigo.

    Fecha de ltima Modificacin: 05 de junio de 2008.

    BIBLIOGRAFA CONSULTADA:----------------------------------------- CUESTIONES DE ESTADSTICA... -----------------------------------------[1] Jerry Banks, John S. Carson II, Barry L. Nelson. Discrete-Event System Simulation. Ed. Prentice Hall. 2nd Edition. 1996. U.S.A.

    [2] John E. Freund Mathematical Statistics Ed. Prentice Hall 5th Edition. 1992. U.S.A.

    -----------------------------------------CUESTIONES DE PROGRAMACIN...-----------------------------------------[1] Walter Savitch Problem Solving with C++: The Object of Programming Ed. Addison Wesley Longmann Inc. U.S.A. 1999.

    [2] Edward Scheinerman C++ for Mathematicians An Introduction for Students and Professionals Ed. Chapman & Hall/CRC 2006. U.S.A.

    [3] Herbert Schildt C++: The Complete Reference Third Edition Ed. McGraw-Hill 1998. U.S.A. -----------------------------------------Sitios de Internet Consultados...------------------------------------------ Algoritmo para generar nmeros pseudoaleatorios con distribucin Rayleigh:http://www.brighton-webs.co.uk/distributions/rayleigh.asp

    */

    #ifndef PROBABILITY_H#define PROBABILITY_H

    #include #include #include #include #include #include #include

    const double PI = 3.141592654;const long PROBABILITY_RAND_MAX = 2147483647; // = 2^31 - 1; Es un nmero primo.

    // Declaro las funciones...void suniforme(unsigned seed);double uniforme(void);double uniforme(float a, float b); void funiforme(int N, char filename[]);void funiforme(int N, float a, float b, char filename[]); double lpuniforme(void); //double triangular(double media);double normal(void);double normal(double media, double desviacionStd);void fnormal(int N, char filename[]); void fnormal(int N, char filename[], double media, double desvStd);void errorDNormal(void);

    double weibull(double c, double k); void fweibull(int N, double C, double K, char filename[]);

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

    int geometrica(float p); void fgeometrica(int N, float p, char filename[]);int poisson(float alpha);void fpoisson(int N, float a, char filename[]);

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

    double media(char filename[]);double desviacionStd(char filename[]);

    double media(char filename[]);double desviacionStd(char filename[]);

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

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

    void RL(char filename[]);void RC(char filename[]);

    /***************************************************double uniforme(void)Descripcin:Esta funcin genera un nmero pseudo-aleatorio con distribucin uniforme en el intervalo (0,1).BUGS:Ninguno conocido...****************************************************/double uniforme(void){/*** [tested] ***/ double u; u = (double)(rand()) / (double)(RAND_MAX); return u;}

    /***************************************************double uniforme(float a, float b)Descripcin:Esta funcin genera un nmero pseudo-aleatorio con distribucin uniforme en el intervalo (a,b)./////////////////////////////////////////////////////BUGS:Ninguno conocido...****************************************************/double uniforme(float a, float b){/*** [tested] ***/ double x; x = (double)(a) + uniforme() * (double)(b - a); return x;}

    /***************************************************void funiforme(int N, char filename[15])Descripcin:Esta funcin guarda N nmeros pseudoaleatorioscon distribucin uniforme en el intervalo (0,1)en el archivo con nombre ./////////////////////////////////////////////////////BUGS:Ninguno conocido.****************************************************/void funiforme(int N, char filename[15]){/*** [tested] ***/ float x; FILE *stream_unif; // stream_unif = fopen(filename, "w"); // abrir para lectura if (stream_unif == NULL){ printf ("\nNo se puede abrir el archivo %s\n", filename); printf("\nPor favor, verifique el nombre archivo"); return; } fprintf(stream_unif, "# Este archivo contiene %i nmeros\n", N); fprintf(stream_unif, "# pseudoaletorios con distribucion uniforme\n"); fprintf(stream_unif, "# en el intervalo [0.0, 1.0]\n"); // Aqu va el cdigo para grabar... for(int i = 1 ; i y desviacin estndar >/////////////////////////////////////////////////////BUGS:Ninguno conocido...****************************************************/double normal(double media, double desviacionStd){/*** [tested] ***/ if (desviacionStd = 0.5){ z = media + desviacionStd * x; } else{ z = media - desviacionStd * x; } return z;}

    /***************************************************void fnormal(int N, char filename[15])Descripcin:Esta funcin guarda N nmeros pseudoaleatorioscon distribucin normal con media 0.0 y desviacion estndar 1.0 en el archivo con nombre ./////////////////////////////////////////////////////BUGS:Ninguno conocido...****************************************************/void fnormal(int N, char filename[]){/*** [tested] ***/ double x; FILE *stream_normal; // stream_normal = fopen(filename, "w"); // abrir para lectura if (stream_normal == NULL){ printf ("\nNo se puede abrir el archivo %s\n", filename); printf("\nPor favor, verifique el nombre archivo"); return; } fprintf(stream_normal, "# Este archivo contiene %i nmeros\n", N); fprintf(stream_normal, "# pseudoaletorios con distribucion normal\n"); fprintf(stream_normal, "# con media = 0.0 y desviacion estandar = 1.0\n"); // Aqu va el cdigo para grabar... for(int i = 1 ; i y desviacion estndar > en el archivode nombre ./////////////////////////////////////////////////////BUGS:Ninguno conocido...**********************************************/void fnormal(int N, char filename[], float med, float desvStd){/*** [tested] ***/ if (desviacionStd , y los graba en el archivo de nombre>/////////////////////////////////////////////////////BUGS:Ninguno conocido...***************************************/void fexponencial(int N, float Lambda, char filename[]){/*** [tested] ***/ float x; FILE *stream_exponencial; // stream_exponencial = fopen(filename, "w"); // abrir para lectura if (stream_exponencial == NULL){ printf ("\nNo se puede abrir el archivo %s\n", filename); printf("\nPor favor, verifique el nombre archivo"); return; } fprintf(stream_exponencial, "# Este archivo contiene %i nmeros\n", N); fprintf(stream_exponencial, "# pseudoaletorios con distribucion exponencial\n"); fprintf(stream_exponencial, "# con parmetro lambda = %.3f\n", Lambda); // Aqu va el cdigo para grabar... for(int i = 1 ; i , y los graba en el archivo de nombre>./////////////////////////////////////////////////////BUGS:Ninguno conocido...***************************************/void fgeometrica(int N, float p, char filename[]){/*** [tested] ***/ int x; FILE *stream_geometrica; // stream_geometrica = fopen(filename, "w"); // abrir para lectura if (stream_geometrica == NULL){ printf ("\nNo se puede abrir el archivo %s\n", filename); printf("\nPor favor, verifique el nombre archivo"); return; } fprintf(stream_geometrica, "# Este archivo contiene %i nmeros\n", N); fprintf(stream_geometrica, "# pseudoaletorios con distribucion geomtrica\n"); fprintf(stream_geometrica, "# con parmetro p = %.3f\n", p); // Aqu va el cdigo para grabar... for(int i = 1 ; i exp(-alpha)); return n;}

    /**************************************void fpoisson(int N, float a, char filename[15])Descripcin:Esta funcin genera N nmeros pseudoaleatorioscon distribucin poisson, con parmetro>, y los graba en el archivo de nombre>./////////////////////////////////////////////////////BUGS:Ninguno conocido...***************************************/void fpoisson(int N, float a, char filename[]){/*** [tested] ***/ int x; FILE *stream_poisson; // stream_poisson = fopen(filename, "w"); // abrir para lectura if (stream_poisson == NULL){ printf ("\nNo se puede abrir el archivo %s\n", filename); printf("\nPor favor, verifique el nombre archivo"); return; } fprintf(stream_poisson, "# Este archivo contiene %i nmeros\n", N); fprintf(stream_poisson, "# pseudoaletorios con distribucion geomtrica\n"); fprintf(stream_poisson, "# con parmetro p = %.3f\n", a); // Aqu va el cdigo para grabar... for(int i = 1 ; i y >, y los graba en el archivo de nombre >./////////////////////////////////////////////////////BUGS:Ninguno conocido...****************************************************/void fweibull(int N, char filename[], float C, float K){/*** [tested] ***/ float x; FILE *stream_weib; // stream_weib = fopen(filename, "w"); // abrir para lectura if (stream_weib == NULL){ printf ("\nNo se puede abrir el archivo %s\n", filename); printf("\nPor favor, verifique el nombre archivo"); return; } fprintf(stream_weib, "# Este archivo contiene %i nmeros\n", N); fprintf(stream_weib, "# pseudoaletorios con distribucion Weibull\n"); fprintf(stream_weib, "# con parmetros C = %.3f y K = %.3f\n", C, K); // Aqu va el cdigo para grabar... for(int i = 1 ; i Fuente: http://www.brighton-webs.co.uk/distributions/rayleigh.asp/////////////////////////////////////////////////////BUGS:Ninguno conocido...***************************************/double rayleigh(float media){/*** [tested] ***/ double factor, r; factor = media / 1.253314; r = sqrt(-2 * factor * factor * log(uniforme())); return r;}

    /***************************************************void frayleigh(int N, char filename[15], float M)Descripcin:Esta funcin genera N nmeros pseudoaleatorioscon distribucin rayleigh, con media> y los graba en el archivo de nombre >./////////////////////////////////////////////////////BUGS:Ninguno conocido...****************************************************/void frayleigh(int N, char filename[], float M){/*** [tested] ***/ float x; FILE *stream_rayl; // stream_rayl = fopen(filename, "w"); // abrir para lectura if (stream_rayl == NULL){ printf ("\nNo se puede abrir el archivo %s\n", filename); printf("\nPor favor, verifique el nombre archivo"); return; } fprintf(stream_rayl, "# Este archivo contiene %i nmeros\n", N); fprintf(stream_rayl, "# pseudoaletorios con distribucion Rayleigh\n"); fprintf(stream_rayl, "# con media = %.3f\n", M); // Aqu va el cdigo para grabar... for(int i = 1 ; i /////////////////////////////////////////////////////BUGS:Al dibujar el histograma la distribucin en realidadno parece triangular...NO USAR...BUSCAR EN INTERNET CMO SIMULARLA...****************************************************/double triangular(double media){ double R, x; R = uniforme(); if (R y los graba en el archivo de nombre >./////////////////////////////////////////////////////BUGS:Ninguno conocido...****************************************************/void ftriangular(int N, char filename[], float media){/*** [tested] ***/ float x; FILE *stream_tria; // stream_tria = fopen(filename, "w"); // abrir para lectura if (stream_tria == NULL){ printf ("\nNo se puede abrir el archivo %s\n", filename); printf("\nPor favor, verifique el nombre archivo"); return; } fprintf(stream_tria, "# Este archivo contiene %i nmeros\n", N); fprintf(stream_tria, "# pseudoaletorios con distribucion Rayleigh\n"); fprintf(stream_tria, "# con media = %.3f\n", media); // Aqu va el cdigo para grabar... for(int i = 1 ; i ./////////////////////////////////////////////////////BUGS:Ninguno conocido...***************************************/double media(char filename[]){/*** [tested] ***/char respuesta, letra = ' '; double datum; double x, Sx; double media; // lo que va a regresar int n = 0, j = 1, i = 0; // contadores... char dato[15]; char B4; // letra leida antes... FILE *stream_media; // stream_uniforme stream_media = fopen(filename, "r+"); // abrir para lectura if (stream_media == NULL){ printf ("\nNo se puede abrir el archivo %s\n", filename); printf("\nPor favor, verifique el nombre archivo"); system("PAUSE"); return 0; } Sx = 0; // reinicio la suma de datos // Ahora leemos los datos... do{ letra = fgetc(stream_media); // leer un char if (letra == feof(stream_media)){ break; // Salir del ciclo... } switch(letra){ case '\n': // lleg a un nuevo rengln if (i > 1){ dato[i] = '\0'; // fin del arreglo de caracteres x = atof(dato); // convierto el arreglo a un float //printf("\nDato leido: %f", x); // opcional Sx += x; // Suma de x i = 0; n++; } break; case '\t': // para el caso de varias columnas... //if (i > 0){ dato[i] = '\0'; // fin del arreglo de caracteres x = atof(dato); // convierto el arreglo a un float //printf("\nDato leido: %f", x); // opcional Sx += x; // Suma de x i = 0; n++; //} break; case ' ': // espacio en blanco... if (i > 1){ dato[i] = '\0'; // fin del arreglo de caracteres x = atof(dato); // convierto el arreglo a un float //printf("\nDato leido: %f", x); // opcional Sx += x; // Suma de x i = 0; n++; break; } case '#': // comentario... do{ // leer todos los alfanumricos letra = fgetc(stream_media); if (letra == feof(stream_media)){ break; } } while (letra!='\n'); i = 1; dato[0] = letra; break; default: dato[i] = letra; i++; } } while(!feof(stream_media)); fclose(stream_media); // cerrar archivo...

    media = Sx / (1.0 * n); return(media);}

    /**************************************double desviacionStd(char filename[15])Descripcin:Esta funcin calcula la desviacin estndar delos datos contenidos en el archivo de nombre>./////////////////////////////////////////////////////BUGS:Ninguno conocido...***************************************/double desviacionStd(char filename[]){/*** [tested] ***/ char respuesta, letra = ' '; double datum; double x, Sx, Sx2; double varianza, sd; int n = 0, j = 1, i = 0; // contadores... char dato[15]; char B4; // letra leida antes... FILE *stream_sd; // stream_uniforme stream_sd = fopen(filename, "r+"); // abrir para lectura if (stream_sd == NULL){ printf ("\nNo se puede abrir el archivo %s\n", filename); printf("\nPor favor, verifique el nombre archivo"); return 0.0; } Sx = 0, Sx2 = 0; // reinicio los contadores // Ahora leemos los datos... do{ letra = fgetc(stream_sd); // leer un char if (letra == feof(stream_sd)){ break; // Salir del ciclo... } switch(letra){ case '\n': // lleg a un nuevo rengln if (i > 1){ dato[i] = '\0'; // fin del arreglo de caracteres x = atof(dato); // convierto el arreglo a un float Sx += x; // Suma de x Sx2 += x * x; // Suma de x^2 i = 0; n++; } break; case '\t': // para el caso de varias columnas... //if (i > 0){ dato[i] = '\0'; // fin del arreglo de caracteres x = atof(dato); // convierto el arreglo a un float Sx += x; // Suma de x Sx2 += x * x; // Suma de x^2 i = 0; n++; //} break; case ' ': // espacio en blanco... if (i > 1){ dato[i] = '\0'; // fin del arreglo de caracteres x = atof(dato); // convierto el arreglo a un float Sx += x; // Suma de x Sx2 += x * x; // Suma de x^2 i = 0; n++; break; } case '#': // comentario... do{ // leer todos los alfanumricos letra = fgetc(stream_sd); if (letra == feof(stream_sd)){ break; } } while (letra!='\n'); i = 1; dato[0] = letra; break; default: dato[i] = letra; i++; } } while(!feof(stream_sd)); fclose(stream_sd); // cerrar archivo... varianza = (Sx2 - Sx * Sx / (1.0 * n)) / (n - 1.0); sd = sqrt(varianza); return(sd); printf("\n\n\n");}

    /**************************************void histograma(char filename[15])Descripcin:Esta funcin genera un histograma en la pantallaa partir de los datos ledos en el archivo denombre filename./////////////////////////////////////////////////////BUGS:Ninguno conocido... ***************************************/void histograma(char filename[]){/*** [tested] ***/ int I[10]; // los intervalos... int errores = 0, max =0, min = 1000000; int n = 0, j = 1, i = 0; // contadores int imax, imin;// double vmax = -2147483647, vmin = 2147483647; // mximo y mnimo double anchoIntervalo; // = vmax - vmin char dato[15]; // cada dato en forma de string float x; // el nmero generado... double escala; // para hacer la grfica... int factor; // para hacer la grfica... char letra = ' '; // // limpio la memoria del array para el histograma... for (i = 0 ; i 1){ dato[i] = '\0'; // fin del arreglo de caracteres x = atof(dato); // convierto el arreglo a un float // encuentro el mnimo y el mximo generados... if (x > vmax){ vmax = x; } if (x < vmin){ vmin = x; } i = 0; n++; } break; case '\t': // para el caso de varias columnas... dato[i] = '\0'; // fin del arreglo de caracteres x = atof(dato); // convierto el arreglo a un float // encuentro el mnimo y el mximo generados... if (x > vmax){ vmax = x; } if (x < vmin){ vmin = x; } i = 0; n++; break; case ' ': // espacio en blanco... if (i > 1){ dato[i] = '\0'; // fin del arreglo de caracteres x = atof(dato); // convierto el arreglo a un float i = 0; n++; // encuentro el mnimo y el mximo gene