c++ teoria

download c++ teoria

of 202

Transcript of c++ teoria

  • 7/27/2019 c++ teoria

    1/202

    Codigos de Programas

    en el lenguaje C++

    Efran Soto Apolinar

  • 7/27/2019 c++ teoria

    2/202

  • 7/27/2019 c++ teoria

    3/202

    Codigos de Programas

    en el lenguaje C++

    Compilados por

    Efran Soto Apolinar

    PISIS

    Monterrey, N. L., Mexico. 2007

  • 7/27/2019 c++ teoria

    4/202

  • 7/27/2019 c++ teoria

    5/202

    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.

  • 7/27/2019 c++ teoria

    6/202

    4

    1.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 Regresio n l i n e a l . . . . . . . . . . . . . . . . . . . . . . . . 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++

  • 7/27/2019 c++ teoria

    7/202

    5

    2.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) . . . . . . . . . . . . . . . . . . 1682.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.

  • 7/27/2019 c++ teoria

    8/202

    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 vi ento . . . . . . . . . . . . . . . . . . . . 178

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

    2.8.4.2 Distribucion Rayl ei gh . . . . . . . . . . . . . . . 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

  • 7/27/2019 c++ teoria

    9/202

    1Introduccion

    Codigosen C++

    Este material NO esta listo para su publicacion.

    Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 7/27/2019 c++ teoria

    10/202

    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 programaci on

    son:

    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 fuente

    para 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++

  • 7/27/2019 c++ teoria

    11/202

    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 c odigode 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 c odigo.

    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.

  • 7/27/2019 c++ teoria

    12/202

    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. En

    C++ , 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 constante

    puede 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++

  • 7/27/2019 c++ teoria

    13/202

    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

    catchclass

    const

    const cast

    continue

    default

    delete

    do

    double

    dynamic cast

    else

    enum

    explicit

    externfalse

    float

    for

    friend

    goto

    if

    inline

    int

    log

    long

    mutable

    namespace

    newoperator

    private

    protected

    public

    register

    reinterpret cast

    return

    short

    signed

    sizeof

    static

    static cast

    structswitch

    template

    this

    throw

    true

    try

    typedef

    typeid

    typename

    union

    unsigned

    using

    virtualvoid

    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.141592654

    long double 104932 a 104932 19 dgitos 2.718281828char No aplica No aplica a

    string 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.

  • 7/27/2019 c++ teoria

    14/202

    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 la

    ejecucion 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 c odigo 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 ConstanteSalto de lnea \n

    Tabulacion \tNulo \0

    Diagonal 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++

  • 7/27/2019 c++ teoria

    15/202

    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: o

    int contador, dia, mes, edad; // Variables tipo int (entero)

    double promedio, precio, masa, volumen; // con punto decimal

    char nombre[15], apellido_m[15], apellido_p[15]; // Cadenas

    const 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 expresi onmatematica correctamente codificada en C++ . Como es costumbre, en mediodebemos escribir el smbolo =.

    La sintaxis es la siguiente:

    variable = expresion;

    Ejemplos: o

    total = 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.

  • 7/27/2019 c++ teoria

    16/202

    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 es

    la siguiente:

    Tipo\_de\_variable variable1 = valor\_1, variable2 = valor\_2, var3 = valor\

    Tipo\_de\_variable variable4 (valor\_4), variable5 (valor\_5), var6 (valor\_

    Ejemplos:o

    int 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:o

    x_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 =1

    2a 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++

  • 7/27/2019 c++ teoria

    17/202

    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 EquivalenteMatematico Espanol C++ Practico a

    = Igual a == x = = 0 x = 0= Distinto a != x ! = 0 x = 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.

  • 7/27/2019 c++ teoria

    18/202

    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++

  • 7/27/2019 c++ teoria

    19/202

    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

  • 7/27/2019 c++ teoria

    20/202

    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

  • 7/27/2019 c++ teoria

    21/202

    1.2 Sintaxis del lenguaje C++ 19

    6 int calificacion;

    7 cout calificacion;

    10 switch (calificacion){

    11 case 0:

    12 cout

  • 7/27/2019 c++ teoria

    22/202

    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

  • 7/27/2019 c++ teoria

    23/202

    1.2 Sintaxis del lenguaje C++ 21

    21 // Empiezan las tablas de multiplicar...

    22 for (i = 1; i

  • 7/27/2019 c++ teoria

    24/202

    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.h

    labs valor absoluto long long stdlib.hfabs valor absoluto doule double math.hceil cielo doule double math.h

    floor piso doule double math.hexp exp(x) doule double math.hlog ln(x) doule double math.h

    log10 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 double

    cosh coseno hiperbolico double doublesin seno double double

    sinh seno hiperbolico double doubletan tangente double double

    tanh tangente hiperbolico double double

    Funciones trigonometricas en C++

    Las funciones se invocan escribiendo primero el nombre de la funci on 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++

  • 7/27/2019 c++ teoria

    25/202

    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.

  • 7/27/2019 c++ teoria

    26/202

    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.cpp

    2 Descripcion:

    3 Este programa ayuda en la revision de funciones

    4 definidas por el usuario...

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

    6 ----------------------------------------------------

    7 Autor: Efran Soto Apolinar

    8 Email: [email protected]

    9 Fecha de ultima Modificacion: 24 de enero de 2008

    10 Lenguaje de Programacion: C++

    11 Compilador: Dev - C++ Version 4.9.9.2.

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

    13 ----------------------------------------------------

    14 */

    15 #include // Funciones basicas para input/output

    16 #include // para usar la funcion rand()

    17 #include // funciones matematicas (sin (double))

    18 #include // para usar: getche, getch

    19 #include // double difftime(time_t time2, time_t time1);

    20

    21 int errores; // variable global

    22 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++

  • 7/27/2019 c++ teoria

    27/202

    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; // contadores

    32 double pBin, pBer; // probabilidades

    33 clock_t tiempo1,tiempo2;

    34

    35 cout

  • 7/27/2019 c++ teoria

    28/202

    26 Introduccion

    76 cout

  • 7/27/2019 c++ teoria

    29/202

    1.3 Funciones en C++ 27

    126 }

    127 /**************************************

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

    130 int potencia(int e)

    131 {// para calcular la potencia 2e

    132 int i,potencia; // contador y resultado

    133 potencia = 1;

    134 for (i=1; i

  • 7/27/2019 c++ teoria

    30/202

    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 clase

    3 que se llama numero complejo

    4 */5 #include // Funciones para input/output

    6 #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 # complejo

    13 };

    14 int main(void){

    15 // defino una instancia de mi clase

    16 // se trata de un numero complejo

    17 complejo z1;

    18 z1.real = 3.14159; // parte real

    19 z1.imaginary = 2.717281828; // parte imaginaria

    20 cout

  • 7/27/2019 c++ teoria

    31/202

    1.4 Clases 29

    4 Se muestra ademas el uso de funciones

    5 definidas para las clases.

    6 */7 #include // Funciones para input/output

    8 #include //

    9 using namespace std;

    10 class complejo{

    11 public:

    12 // para asignar la parte real

    13 void DefinirReal(double r);

    14 // para asignar la parte imaginaria

    15 void DefinirImaginario(double i);

    16 // para leer la parte real

    17 double LeerReal(void);

    18 // para leer la parte imaginaria

    19 double LeerImaginario(void);

    20 private:21 double real; // parte real

    22 double imaginary; // parte imaginaria

    23 };

    24 int main(void){

    25 // defino una instancia de mi clase

    26 complejo z1;

    27 z1.DefinirReal(3.14159);

    28 z1.DefinirImaginario(2.717281828);

    29 cout

  • 7/27/2019 c++ teoria

    32/202

    30 Introduccion

    54 double complejo::LeerReal(void){

    55 return(real);

    56 }57

    58 // para leer la parte imaginaria

    59 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++

  • 7/27/2019 c++ teoria

    33/202

    2Codigos

    Codigosen C++

    Este material NO esta listo para su publicacion.

    Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 7/27/2019 c++ teoria

    34/202

    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]: 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++

  • 7/27/2019 c++ teoria

    35/202

    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

    {4

    double area, base, altura;5

    string unidad;6

    cout > unidad;8

    cout

  • 7/27/2019 c++ teoria

    36/202

    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 en

    toneladas 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

    {8

    double pesoOnzas, pesoTon, n;9

    double coef=35273.92;10

    char respuesta = c;11

    for (;;)12

    {13

    cout > pesoOnzas;15

    pesoTon = pesoOnzas / coef;16

    n = coef / pesoTon;17

    cout

  • 7/27/2019 c++ teoria

    37/202

    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 paciente

    desea 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

    {6

    double pesoPac, pesoRat, dosisRat, dosisPac;7

    double ratio=0.001;8

    char respuesta = c;9

    for (;;) {10

    cout > 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

  • 7/27/2019 c++ teoria

    38/202

    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 salario

    promedio 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

    {7

    double 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

  • 7/27/2019 c++ teoria

    39/202

    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

    {9

    int i,n,factorial;10

    char respuesta = c;11

    f o r ( ; ; ){12

    cout

  • 7/27/2019 c++ teoria

    40/202

    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

  • 7/27/2019 c++ teoria

    41/202

    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.cpp

    2 Descripcion:

    3 Escribir un programa que calcule la media real de 3

    4 numeros enteros dados por el usuario.

    5 Fecha de ultima Modificacion: 03 de enero del 2008

    6 ----------------------------------

    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

  • 7/27/2019 c++ teoria

    42/202

    40 Codigos

    12 int a,b;

    13 cout > a;15 cout > b;

    17 cout b;

    17 cout

  • 7/27/2019 c++ teoria

    43/202

    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

  • 7/27/2019 c++ teoria

    44/202

    42 Codigos

    3 Escribir un programa que acepte el valor de un angulo

    4 medido en grados sexagesimales e imprima su valor en

    5 radianes.6 Nota: Utiliza Pi = 3.141592654

    7 Fecha de ultima Modificacion: 03 de enero del 2008

    8 ----------------------------------

    9 ----------------------------------

    10 */

    11 #include // Funciones basicas para input/output

    12 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

  • 7/27/2019 c++ teoria

    45/202

    2.3 Funciones cin, cout 43

    24 }

    Calcular area del crculo y permetro de circunferencia. o1 /* Nombre del archivo: UnoOcho.cpp

    2 Descripcion:

    3 El area de un crculo es :

    4 A = P i * r2

    5 La longitud de la circunferencia es:

    6 P = 2 * Pi * r

    7 Escribir un programa que solicite el radio de un

    8 crculo e imprima en pantalla su permetro y su area.

    9

    10 Fecha de ultima Modificacion: 03 de enero del 2008

    11 ----------------------------------12 ----------------------------------

    13 */

    14 #include // Funciones basicas para input/output

    15 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

  • 7/27/2019 c++ teoria

    46/202

    44 Codigos

    12

    13 Fecha de ultima Modificacion: 03 de enero del 2008

    14 ----------------------------------15 ----------------------------------

    16 */

    17 #include // Funciones basicas para input/output

    18 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 Hrs;

    34 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

  • 7/27/2019 c++ teoria

    47/202

    2.3 Funciones cin, cout 45

    Calcular pendiente y ecuacion de una recta. o1 /* Nombre del archivo: UnoDiez.cpp

    2 Descripcion:

    3 Escribir un programa que encuentre la ecuacion de

    4 la recta que pasa por los dos puntos dados por el

    5 usuario A(x_a, y_a), y B(x_b, y_b).

    6 Indicar ademas sus intersecciones con los ejes

    7 coordenados.

    8

    9 Fecha de ultima Modificacion: 03 de enero del 2008

    10 ----------------------------------

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

    12 */

    13 #include // Funciones basicas para input/output

    14 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_a;

    25 cout > y_a;

    27 cout > x_b;29 cout > y_b;

    31 // Calculos...

    32 Dx = x_b - x_a;

    33 Dy = y_b - y_a;

    34 m = D y / D x ;

    35 b = D x * y_a - Dy * x_a;

    36 cout

  • 7/27/2019 c++ teoria

    48/202

    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.cpp

    3 Descripcion:

    4 Escribir un programa que solicite la edad del usuario

    5 y decida si es o no mayor de edad.

    6 Considera a una persona mayor de edad si tiene al menos

    7 18 anos cumplidos.

    8

    9 Fecha de ultima Modificacion: 04 de enero del 2008

    10 ----------------------------------

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

    12 */

    13 #include // Funciones basicas input/output

    14 using namespace std;

    15 int main(void){

    16 int edad;

    17 cout 17) {23 cout

  • 7/27/2019 c++ teoria

    49/202

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

    7 Fecha de ultima Modificacion: 04 de enero del 2008

    8 ----------------------------------

    9 ----------------------------------10 */

    11 #include // Funciones basicas input/output

    12 using namespace std;

    13 int main(void){

    14 int mes;

    15 cout

  • 7/27/2019 c++ teoria

    50/202

    48 Codigos

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

    58 cout

  • 7/27/2019 c++ teoria

    51/202

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

    38 break;

    39 case 7:

    40 cout

  • 7/27/2019 c++ teoria

    52/202

    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

  • 7/27/2019 c++ teoria

    53/202

    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

  • 7/27/2019 c++ teoria

    54/202

    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

  • 7/27/2019 c++ teoria

    55/202

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

    28 }

    29 cout

  • 7/27/2019 c++ teoria

    56/202

    54 Codigos

    38 // por ejemplo, si ingreso:

    39 // primer lado = 100, segundo lado = 1, tercer lado = 1

    40 cout y_0;

    28 d = fabs(A*

    x_0 + B*

    y_0 + C)/sqrt(A*

    A + B*

    B);

    29 cout

  • 7/27/2019 c++ teoria

    57/202

    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.cpp

    2 Descripcion:

    3 Escribir un programa que determine si el numero

    4 positivo introducido por el usuario es par o impar.

    5

    6 Fecha de ultima Modificacion: 05 de enero de 2008

    7 ----------------------------------

    8 ----------------------------------

    9 */

    10 #include // Funciones basicas input/output

    11 using namespace std;

    12 int main(void){

    13 int ent,residuo;

    14 char respuesta;

    15 cout

  • 7/27/2019 c++ teoria

    58/202

    56 Codigos

    1 /* Nombre del archivo: DosDiez.cpp

    2 Descripcion:3 Escribir un programa que convierta una temperatura

    4 dada por el usuario en grados Farenheit a grados

    5 Celsius.

    6 El usuario debe poder realizar el calculo tantas

    7 veces como lo desee.

    8

    9 Fecha de ultima Modificacion: 05 enero de 2008

    10 ----------------------------------

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

    12 */

    13 #include // Funciones basicas input/output

    14 using namespace std;

    15 int main(void){

    16 double C, F;17 char respuesta;

    18 cout

  • 7/27/2019 c++ teoria

    59/202

    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

  • 7/27/2019 c++ teoria

    60/202

    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

  • 7/27/2019 c++ teoria

    61/202

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

    5 mnimo. La lista finalizara cuando se introduzca el

    6 numero cero (0).

    7

    8 Fecha de ultima Modificacion: 05 enero de 2008

    9 ----------------------------------

    10 ----------------------------------

    11 */

    12 #include

    13 using namespace std;

    14 int main(void){

    15 double inicial, actual, max, min;

    16 char respuesta;

    17 cout

  • 7/27/2019 c++ teoria

    62/202

    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 (2 )

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

    Codigosen C++

  • 7/27/2019 c++ teoria

    63/202

    2.5 Mis tareas 61

    donde = 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.cpp

    Descripcion:

    Este programa simula el siguiente experimento:

    Se lanza un alfiler de longitud L a una mesa

    que tiene dibujadas lneas paralelas equidistantes

    separadas a L unidades una de la otra.

    El usuario debe ingresar el numero total de

    experimentos (entero) que se deben realizar,

    entendiendo por experimento la simulacion de un

    lanzamiento del alfiler sobre la mesa.

    El resultado indica la probabilidad de que el

    alfiler toque una de las lneas dibujadas sobre lamesa.

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

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

    Autor: Efran Soto Apolinar

    Email: [email protected]

    Fecha de ultima Modificacion: 24 de enero de 2008

    Lenguaje 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, getch

    using namespace std;

    int main(void)

    3Al multiplicar por 2 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.

  • 7/27/2019 c++ teoria

    64/202

    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 recta

    paralela de referencia

    al punto donde cayo la cabeza del alfiler.

    y = x + s i n ( 2 * pi * a)

    a --> es el angulo que forma el alfiler con

    las rectas paralelas dibujadas sobre

    la mesa

    si --> es el numero de veces que el alfiler

    toca lnea

    no --> es el numero de veces que el alfiler

    NO toca lneap --> es la probabilidad de que toque...

    total --> e s e l numero de experimentos que

    realizara el programa...

    */

    cout

  • 7/27/2019 c++ teoria

    65/202

    2.5 Mis tareas 63

    //

    cout

  • 7/27/2019 c++ teoria

    66/202

    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 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

  • 7/27/2019 c++ teoria

    70/202

    68 Codigos

    subfactorial = 1; // reinicio el subfactorial

    while (i

  • 7/27/2019 c++ teoria

    71/202

    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

  • 7/27/2019 c++ teoria

    72/202

    70 Codigos

    //

    // Muestro los resultados...

    cout

  • 7/27/2019 c++ teoria

    73/202

    2.5 Mis tareas 71

    Descripcion:

    Este programa simula el lanzamiento de dos dados...

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

    Autor: Efran Soto Apolinar

    Email: [email protected]

    [email protected]

    Webpage: http://yalma.fime.uanl.mx/efrain/

    Fecha de ultima Modificacion: 08 de febrero de 2008

    Lenguaje 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

  • 7/27/2019 c++ teoria

    74/202

    72 Codigos

    suma += x+y;

    if ((resp == S)||(resp == s)){

    // Muestro los resultados...cout

  • 7/27/2019 c++ teoria

    75/202

    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

  • 7/27/2019 c++ teoria

    76/202

    74 Codigos

    return 0;

    }

    /**************************************Declaro la funcion factorial...

    ***************************************/

    int factorial(int n){

    long fi,i;

    f i = i = 1 ;

    while (i

  • 7/27/2019 c++ teoria

    77/202

    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

  • 7/27/2019 c++ teoria

    78/202

    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 x

    if (fabs(xa - x) < 0.0001){

    // Criterio para salir del ciclo...

    cout

  • 7/27/2019 c++ teoria

    79/202

    2.5 Mis tareas 77

    if (x > 4){

    return 1;

    }f o r ( i = 0 ; i < 4 0 ; i + + ) {

    ua = u;

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

    un = u;

    } // endfor

    i f ( 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 / 107

    xi = 0; // empieza a integrar desde cero...

    while (xi

  • 7/27/2019 c++ teoria

    80/202

    78 Codigos

    j = 1 ;

    //

    while (j

  • 7/27/2019 c++ teoria

    81/202

    2.5 Mis tareas 79

    const double c = 1.315489247;

    //

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

  • 7/27/2019 c++ teoria

    82/202

    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.cpp

    Este programa simula un movimiento browniano.

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

    Autor: Efran Soto Apolinar

    Email: [email protected]

    [email protected]

    Fecha 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++

  • 7/27/2019 c++ teoria

    83/202

    2.5 Mis tareas 81

    int i = 0;

    //

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

    if (step

  • 7/27/2019 c++ teoria

    84/202

    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

  • 7/27/2019 c++ teoria

    85/202

    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 pseudoaleatorios

    con 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.

  • 7/27/2019 c++ teoria

    86/202

    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.c

    4 Utilizando ANSI-C y las funciones de generacion

    5 de numeros pseudoaleatorios, escribe un programa

    6 que por simulacion y la ley de numeros grandes7 aproxima la distribucion binomial con n y p para

    8 todos los valores de k = 0, 1, 2, . . . , n.

    9 Incluye en tu respuesta el codigo que escribiste

    10 junto con un dibujo preparado con gnuplot de la

    11 distribucion Bin(n, p) con los valores definidos

    12 para n y p.

    13 Autor: Efrain Soto Apolinar.

    14 fecha de ultima modificacion: 15 de agosto de 2008

    15 */

    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; // contadores

    27 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++

  • 7/27/2019 c++ teoria

    87/202

    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 combinaciones

    48 -------------------------------------------------*/

    49 int combinaciones(int m, int k){

    50 int i; // contador

    51 long int num = 1;

    52 long int den = 1;

    53 int r = 1; // resultado

    54 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 binomial

    77 -------------------------------------------------*/

    78 float binomial(double p, int N, int k){

    79 int i; // contador

    80 float r; // respuesta

    81 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 Bernoulli

    88 p = probabilidad de exito

    89 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.

  • 7/27/2019 c++ teoria

    88/202

    86 Codigos

    90 n = numero de experimentos

    91 -------------------------------------------------*/

    92 void bernoulli(int n, double p, int N){93 int arreglo[16]; // cuenta

    94 int i, j, c; // contadores

    95 int tote; // total de exitos

    96 float u;

    97 // reinicio el arreglo

    98 for(c = 0 ; c < 16 ; c++){

    99 arreglo[c] = 0;

    100 }

    101 // Vienen los n ensayos de Bernoulli

    102 for(i = 1 ; i

  • 7/27/2019 c++ teoria

    89/202

    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

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

    Variar los valores de p y q.

    1 /*2 Simulacion de la dinamica de poblaciones

    3 Fecha: 19 de agosto de 2008

    4

    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 poblacion

    12 sobre varias repeticiones del proceso

    13 */

    14 #include

    15 #include

    16 #include

    17

    18 double uniforme(void);

    19

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

    21 int i = 0; // contadores

    22 double p = 0.45; // probabilidad de nuevo nacimiento

    23 double q = 0.45; // probabilidad de muerte

    24 double eq = 1 - p - q; // probabilidad de quedar igual

    25 double r; // numero aleatorio

    26 int N = 10000; // poblacion inicial

    27 int MAXP = 10 * N; // poblacion final

    28

    29 // para el manejo del archivo...

    30 FILE *stream_f; //

    31 stream_f = fopen("datos.txt", "w"); // abrir para lectura

    32 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.

  • 7/27/2019 c++ teoria

    90/202

    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 ) {

    46 // Desgracia, un changuito fue devorado

    47 N--;

    48 }

    49 //if (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++

  • 7/27/2019 c++ teoria

    91/202

    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 puntos

    y los graba en un archivo. Despues lee estos datos ycalcula la recta de mejor ajuste por el metodo de

    mnimos cuadrados.

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

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

    Autor: Efran Soto Apolinar

    Email: [email protected]

    [email protected]

    Fecha 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; // contadores

    double b, m; // parametros...

    double xi, yi; // datos

    double Sx, Sy, Sxs, Sxy; // sumas de datos...

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

    S x = 0 ; S y = 0 ; S x s = 0 ; S x y = 0 ;

    // Informacion sobre el programa...

    cout

  • 7/27/2019 c++ teoria

    92/202

    90 Codigos

    cout

  • 7/27/2019 c++ teoria

    93/202

    2.6 Proyectos 91

    cout > yi;

    do { // estoy buscando el siguiente renglon

    in_stream >> letra;

    } while (!letra == \n);

    //

    Sx += xi; // Suma de x

    Sy += yi; // Suma de y

    Sxy += xi * yi; // Suma de xy

    Sxs += 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 = ( S y - m * Sx) / n;

    // Muestro los resultados...

    cout

  • 7/27/2019 c++ teoria

    94/202

    92 Codigos

    ambos por el metodo de mnimos cuadrados.

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

    ----------------------------------Autor: Efran Soto Apolinar

    Email: [email protected]

    [email protected]

    Fecha 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; // contadores

    double a, b, c; // parametros para parabola...

    double m, beta; // parametros para recta...

    double Da = 0, Dp = 0;

    double xi, yi; // datos

    double Sx, Sy, Sx2, Sx3, Sx4, Sxy, Sx2y;

    double Error_p = 0, Error_r = 0;

    double dip, dir, y_approxp, y_approxr;

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

    S x = 0 ; S y = 0 ; S x y = 0 ;Sx2 = 0; Sx3 = 0; Sx4 = 0; Sx2y = 0;

    // Informacion sobre el programa...

    cout

  • 7/27/2019 c++ teoria

    95/202

    2.6 Proyectos 93

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

    cout

  • 7/27/2019 c++ teoria

    96/202

    94 Codigos

    Sx4 += xi * xi * xi * xi; // Suma x cuarta

    Sx2y += 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;

    D a = D a - n * Sx2 * Sx2y - Sx * Sx3 * Sy - Sx * Sxy * Sx2;

    Dp = Sx2 * Sx2 * Sx2 + n * Sx3 * Sx3 + Sx4 * Sx * Sx;

    D p = D p - n * Sx2 * Sx4 - 2 * Sx * Sx2 * Sx3;

    a = D a / D p ;

    b = ( S x * (Sy - a * Sx2) - n * (Sxy - a * Sx3))

    / (Sx * S x - n * Sx2);c = ( S y - a * Sx2 - b * Sx) / n;

    // Muestro los resultados...

    cout

  • 7/27/2019 c++ teoria

    97/202

    2.6 Proyectos 95

    // Cierro el archivo de lectura...

    in_stream.close();

    cout

  • 7/27/2019 c++ teoria

    98/202

    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:

    Uniforme en el intervalo (0,1),

    Uniforme en el intervalo (a, b), definido por el usuario, Normal con media 0.0 y desviacion estandar 1.0,

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

    Exponencial con parametro , definido por el usuario,

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

    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 clases

    5 para trabajar con cuestiones de probabilidad.

    6

    7 Las funciones se detallan con comentarios

    8 e n e l codigo.

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

    Codigosen C++

  • 7/27/2019 c++ teoria

    99/202

    2.8 Implementacion 97

    9

    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 Hall26 5th Edition.

    27 1992. U.S.A.

    28

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

    30 CUESTIONES DE PROGRAMACION...

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

    32 [1] Walter Savitch

    33 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 Professionals40 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

    Codigosen C++

    Este material NO esta listo para su publicacion.

    Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 7/27/2019 c++ teoria

    100/202

    98 Codigos

    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[]);

    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[]);

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

    Codigosen C++

  • 7/27/2019 c++ teoria

    101/202

    2.8 Implementacion 99

    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-aleatorio

    120 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 }

    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;

    Codigosen C++

    Este material NO esta listo para su publicacion.

    Prohibida la reproduccion sin permiso previo del autor.

    Efran Soto A.

  • 7/27/2019 c++ teoria

    102/202

    100 Codigos

    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 for(int i = 1 ; i

  • 7/27/2019 c++ teoria

    103/202

    2.8 Implementacion 101

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

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

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

    213 }

    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 histogramas226 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 primo2