lunes, 25 de octubre de 2010

Las funciones drand48() y srand48()

¿Y si queremos un número aleatorio con decimales?. Tenemos la función drand48() que nos devuelve un número aleatorio con decimales entre 0.0 (incluido, puede salir el 0,0) y 1.0 (excluido, nunca saldrá 1.0). A partir de ahí es fácil transformarlo al rango que queramos. Si queremos un rango entre 10.0 y 20.0 (o entre M y N siendo N mayor que M y ambos con decimales, aunque sean .0)

#include
...
numero = drand48() * (20.0-10.0) + 10.0;
numero = drand48() * (N-M) + N;

De la misma forma que antes, la secuencia de números aleatorios se repetirá cada vez que ejecutemos nuestro programa y de igual manera, tenemos manera de cambiar la "semilla" de esa secuencia. Hay que llamar a la función srand48() pasándole un entero que sea disntinto en cada ejecución del programa. Nuevamente, tenemos las dos opciones anteriores

srand48(time(NULL));
srand48(getpid());

La funcion rand ()

En C, para obtener números aleatorios, tenemos la función rand(). Esta función, cada vez que la llamamos, nos devuelve un número entero aleatorio entre 0 y el RAND_MAX (un número enorme, como de 2 mil millones).

El primer problema que se nos presenta es que no solemos querer un número aleatorio en ese rango, sería un dado muy curioso el que tenga tantas caras. Podemos querer, por ejemplo, un número aleatorio entre 0 y 10. O de forma más general, entre 0 y N. La cuenta que debemos echar para eso es esta

#include
...
numero = rand() % 11;
numero = rand() % (N+1);

La operación módulo (%) nos da el resto de dividir rand() entre 11. Este resto puede ir de 0 a 10. De la misma forma, el módulo de rand() entre N+1 va de 0 a N.

¿Y si queremos un rango que no empiece en 0?. Por ejemplo, queremos un rango entre 20 y 30 (de forma más general, entre M y N con N mayor que M). Pues es fácil, obtenemos un número entre 0 y 10 y le sumamos 20 (un número entre 0 y N-M y le sumamos M)

numero = rand () % 11 + 20; // Este está entreo 20 y 30
numero = rand () % (N-M+1) + M; // Este está entre M y N

Obtencion de numeros aleatorios en C++

A veces queremos que nuestro programa obtenga números de forma aleatoria, por ejemplo, para simular una tirada de dados o el reparto de cartas en un juego. En C de linux tenemos varias funciones que nos permiten obtener estos valores aleatorios.

En esta explicación vamos a ver un uso básico de estas funciones. Algunas de las cosas que contamos aquí no son útiles para aplicaciones más serias, en las que se requiere que la secuencia de números aleatorios sea muy aleatoria, impredecible, que no se repita hasta pasado muchos números, etc, etc. Sin embargo, las explicaciones aquí presentadas servirán para la mayoría de nuestros programas.

GENERAR NUMEROS ALEATORIOS EN C++

En el lenguaje de programación C, tenemos la función rand() que genera una secuencia de número pseudoaleatorios. Pero, ¿cómo se pueden conseguir número totalmente aleatorios? ¿Qué os parece si nos ayudamos de la hora del sistema?



01 #include stdio.h
02 #include stdlib.h
03
04 int main (int argc, char *argv[])
05 {
06 int counter,stime;
07 long ltime;
08
09 /*obtener la hora local del sistema*/
10 ltime = time(NULL);
11 stime = (unsigned) ltime/2;
12 srand(stime);
13
14 for (counter=0;counter menor que 10;counter++)
15 printf("%d ", rand());
16
17 return 0;
18 }

viernes, 15 de octubre de 2010

programa con vectores

hacer un programa con vectores de 0 a 9 con los numeros de 2 en dos hasta 20.


programa de vectores

hallar un programa con vectores donde el indice empiese en cero y termine en 9. es decir 10 elementos con los numeros del 1 al 10.





.


















INICIALIZACION DE UN VECTOR

Podemos inicializar los vectores con valores
constantes:


#define N 100
//Declaración del vector y del subíndice
int vector[N], i;
for (i = 0; i < N; i++)
vector[i] = 0; // Inicialización de cada
// elemento del vector en 0


Podemos inicializar los vectores con otro tipo de
instrucciones:


int a[4] = {0};
a[0] = a[1] = a[2] = a[3] = 0
float n[5] = {0.25, 0.50, 0.75, 1.00, 1.25};
n[0] = 0.25 n[1] = 0.50 n[2] = 0.75
n[3] = 1.00 n[4] = 1.25

Podemos inicializar los vectores con otro tipo de
instrucciones :

char cdn[8] = {'S', 'I', ' ', 'a', 'l', 'l', 'i', ','};
cdn[0] = 'S' cdn[1] = 'I' cdn[2] = ' '
cdn[3] = 'a' cdn[4] = 'l' cdn[5] = 'l'
cdn[6] = 'i' cdn[7] = ','

QUE ES INDICE EN VECTORES

Todo vector se compone de un determinado número de elementos. Cada elemento es referenciado por la posición que ocupa dentro del vector. Dichas posiciones son llamadas índice y siempre son correlativos. Existen tres formas de indexar los elementos de una matriz:

•Indexación base-cero (0): En este modo el primer elemento del vector será la componente cero ('0') del mismo, es decir, tendrá el indice '0'. En consecuencia, si el vector tiene 'n' componentes la última tendrá como índice el valor 'n-1'. El lenguaje C es un ejemplo típico que utiliza este modo de indexación.

Indexación base-uno (1): En esta forma de indexación, el primer elemento de la matriz tiene el indice '1' y el último tiene el índice 'n' (para una matriz de 'n' componentes).
•Indexación base-n (n): Este es un modo versátil de indexación en la que el índice del primer elemento puede ser elegido libremente, en algunos lenguajes de programación se permite que los índices puedan ser negativos e incluso de cualquier tipo escalar (también cadenas de caracteres).

TIPO DE VECTORES

Tipos de datos enteros :
Se usan para representar números enteros con signo. Hay cuatro tipos: byte, short, int y long.


Tipo Tamaño
byte 1Byte (8 bits)
shor 2 Bytes (16 bits)
int 4 Bytes (32 bits)

long 8 Bytes (64 bits)

Tipos de datos en coma flotante
Se usan para representar números con partes fraccionarias. Hay dos tipos de coma flotante: float y double. El primero reserva almacenamiento para un número de precisión simple de 4 bytes y el segundo lo hace para un numero de precisión doble de 8 bytes.
Tipo Tamaño
float 4 Byte (32 bits)
double 8 Bytes (64 bits)

Tipo de datos boolean
Se usa para almacenar variables que presenten dos estados, que serán representados por los valores true y false. Representan valores bi-estado, provenientes del denominado álgebra de Boole.

Tipo de datos carácter
Se usa para almacenar caracteres Unicode simples. Debido a que el conjunto de caracteres Unicode se compone de valores de 16 bits, el tipo de datos char se almacena en un entero sin signo de 16 bits.

Tipo de datos carácter
Se usa para almacenar caracteres Unicode simples. Debido a que el conjunto de caracteres Unicode se compone de valores de 16 bits, el tipo de datos char se almacena en un entero sin signo de 16 bits.


Vectores y Matrices
Una matriz es una construcción que proporciona almacenaje a una lista de elementos del mismo tipo, ya sea simple o compuesto. Si la matriz tiene solo una dimensión, se la denomina vector.

QUE ES UN VECTOR

Un vector, también llamado array (arreglo) unidimensional, es una estructura de datos que permite agrupar elementos del mismo tipo y almacenarlos en un solo bloque de memoria juntos, uno después de otro. A este grupo de elementos se les identifica por un mismo nombre y la posición en la que se encuentran. La primera posición del array es la posición 0.

En programación, una matriz o vector (llamados en ingles arrays) es una zona de almacenamiento contiguo, que contiene una serie de elementos del mismo tipo, los elementos de la matriz. Desde el punto de vista lógico una matriz se puede ver como un conjunto de elementos ordenados en fila (o filas y columnas si tuviera dos dimensiones). En principio, se puede considerar que todas las matrices son de una dimensión, la dimensión principal, pero los elementos de dicha fila pueden ser a su vez matrices (un proceso que puede ser recursivo), lo que nos permite hablar de la existencia de matrices multidimensionales, aunque las más fáciles de imaginar son los de una, dos y tres dimensiones.
Estas estructuras de datos son adecuadas para situaciones en las que el acceso a los datos se realice de forma aleatoria e impredecible. Por el contrario, si los elementos pueden estar ordenados y se va a utilizar acceso secuencial sería más adecuado utilizar una lista, ya que esta estructura puede cambiar de tamaño fácilmente durante la ejecución de un programa.


Matriz unidimensional con 10 elementos