elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Rellenar vector con 1 y -1 aleatoriamente
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Rellenar vector con 1 y -1 aleatoriamente  (Leído 2,763 veces)
kenonni

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Rellenar vector con 1 y -1 aleatoriamente
« en: 24 Abril 2014, 00:11 am »

Hasta ahora lo mejor que he conseguido es esto, pero es problema es que rand() no trabaja con 0, si alguien me puede ayudar se lo agradecería.


#include <iostream>
#include <cmath>
using namespace std;
int main()
{
   



    int e=100;
   
    int M=2;
    int N=2;
    int Y=3;
    int T=2;
   

    double v[e];
    double u[e];
   
   
    for(int i=0; i< e+1;i++){
       
        if (u==2){
           
            u=0;}
        else {
           
 
     
    v = rand () % (N-M+1) + M;
       
    u = rand () % (T-Y+1) + Y;

            cout<<v-u<<endl;}
}
   
   
   

    system("pause");
    return 0;
}


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Rellenar vector con 1 y -1 aleatoriamente
« Respuesta #1 en: 24 Abril 2014, 01:34 am »

Código
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. int main()
  5. {
  6.    int e=100;
  7.    int M=2;
  8.    int N=2;
  9.    int Y=3;
  10.    int T=2;
  11.  
  12.    double v[e];
  13.    double u[e];
  14.  
  15.    for(int i=0; i< e+1;i++){
  16.  
  17.        if (u==2){
  18.  
  19.            u=0;}
  20.        else {
  21.  
  22.    v = rand () % (N-M+1) + M;
  23.  
  24.    u = rand () % (T-Y+1) + Y;
  25.  
  26.            cout<<v-u<<endl;}
  27. }
  28.    system("pause");
  29.    return 0;
  30. }

realmente  no se que intentaste con N-M XD ambos son 2

por otro lado... u y v son vector de 100 espacios de double... pero los llenas como si fueran numero... eso debería darte error

i<e+1 no entiendo el por qué... debería darte un error... estás accediendo valores más allá del array

cmath no contiene rand() es cstdlib

tu codigo tiene muchos errores :s como compila?

procura no usar nombres de variables en mayusculas...

para tu problema panteado como tal debes hacer:
rand()%2 eso devolverá 1 y 0 si es 1 lo dejas así, si es 0 lo multiplicas por -1


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Rellenar vector con 1 y -1 aleatoriamente
« Respuesta #2 en: 24 Abril 2014, 09:50 am »

tu codigo tiene muchos errores :s como compila?

Directamente no compila. No se ha molestado ni tan siquiera en corregir los errores de compilación:

Código
  1.    int e=100;
  2.  
  3.    double v[e];
  4.    double u[e];
  5.  

Para que esto compile, "e" debe ser constante... y no lo es... o pones "e" como constante o usas new y delete para crear y destruir los vectores.

Código
  1. if (u==2){

u es un arreglo... no se puede comparar con un entero así por las buenas... no tiene sentido... ¿Qué intentas comprobar aquí? ¿La posición de memoria? ¿El valor del primer elemento de "u"?

Código
  1. u=0;}

Lo mismo que en el apartado anterior. "u" es un arreglo o vector... ¿Pretendes cambiar el valor de algún elemento concreto? ¿La dirección apuntada por el arreglo? ¿?

Código
  1. v = rand () % (N-M+1) + M;
  2. u = rand () % (T-Y+1) + Y;

No puedes convertir así a bote pronto un entero en un arreglo... estamos ante el mismo problema que en los dos casos anteriores... para acceder a una posición concreta de un arreglo, en tu caso "u" y "v", tienes que usar un índice ( u[0]=3, almacenamos un 3 en la primera posición del vector "u" )... obviamente ese índice puede venir dado por una variable:

Código
  1. for ( int i=0; i < 4; i++ )
  2.  u[ i ] = i * 2;

Además de todo esto, no queda claro si los valores de 1 y -1 vienen determinados por alguna expresión matemática o, como se puede intentar adivinar, simple azar.

Para sacar únicamente valores 1 y -1 hay varias opciones:

Código
  1. // una opcion
  2. v[ i ] = ( rand( ) % 2 ) ? 1 : -1;
  3.  
  4. // otra
  5. int valores[] = { 1, -1 };
  6. v[ i ] = valores[ rand( ) % 2 ];
  7.  
  8. // otra
  9. v[ i ] = -1 + 2 * ( rand( ) % 2 );
  10.  
  11. // esta suponiendo que v es un vector de tipo int, no float
  12. v[ i ] = 1 ^ ( 0xFFFFFFFE * ( rand( ) % 2 ) );

No hay límites a la imaginación.


« Última modificación: 24 Abril 2014, 10:34 am por eferion » En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Rellenar vector con 1 y -1 aleatoriamente
« Respuesta #3 en: 24 Abril 2014, 14:29 pm »


Como ya te comentaron, te sobra la librería <cmath> y te faltan la <cstlib> y <ctime> para el uso de rand y time, además de <iomanip> por si quieres que salgan separados una cierta distancia los 1 de los -1 y un k%25 para agruparlos en la salida de 25 en 25 y que no salgan un montón de 1 y -1 unos debajo de otros. Por no hablar de que no inicializas la semilla de los números aleatorios:

Código
  1. srand((unsigned) time(NULL));

Por otro lado haces e=100 y después declaras u[e], es decir podrías haber hecho directamente u[100]. Pero si la idea es poder variar la dimensión del array, mejor usar un:

Código
  1. #define E   100

Y así sólo tienes que cambiar el valor de E en un solo sitio.

Mi propuesta coincide con una de las propuestas por eferion, sólo que espaciando los 1 y -1 y una salida en bloques de 25 en 25:


Código
  1. for(int i=0; i< E;i++,k++){
  2.    if (k%25==0)
  3.      cout<<endl;
  4.    u[i]=-1+2*(rand()%2);
  5.    cout<<setw(3)<<u[i];
  6.  }

¡¡¡¡ Saluditos! ..... !!!!




En línea

kenonni

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Rellenar vector con 1 y -1 aleatoriamente
« Respuesta #4 en: 9 Mayo 2014, 13:18 pm »

muchas gracias por todo!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines