Exposicion De Econ. Freddy Villar C. Teoria De La Investig.Cientif.
c++ teoria
-
Upload
edua-echevnocc -
Category
Documents
-
view
225 -
download
0
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]
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]
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]
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]
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