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;
}
#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;
}
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
Cita de: engel lex en 24 Abril 2014, 01:34 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:
int e=100;
double v[e];
double u[e];
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.
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"?
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? ¿?
v = rand () % (N-M+1) + M;
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:
for ( int i=0; i < 4; i++ )
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:
// una opcion
v[ i ] = ( rand( ) % 2 ) ? 1 : -1;
// otra
int valores[] = { 1, -1 };
v[ i ] = valores[ rand( ) % 2 ];
// otra
v[ i ] = -1 + 2 * ( rand( ) % 2 );
// esta suponiendo que v es un vector de tipo int, no float
v[ i ] = 1 ^ ( 0xFFFFFFFE * ( rand( ) % 2 ) );
No hay límites a la imaginación.
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: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:#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:for(int i=0; i< E;i++,k++){
if (k%25==0)
cout<<endl;
u[i]=-1+2*(rand()%2);
cout<<setw(3)<<u[i];
}
¡¡¡¡ Saluditos! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
muchas gracias por todo!