• Sábado 27 de Abril de 2024, 19:09

Autor Tema:  Re: Desesperado... :-)  (Leído 7257 veces)

kenshin

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Desesperado... :-)
« en: Lunes 18 de Febrero de 2002, 10:08 »
0
Por qué al compilar con DEV C++ no consigo un número aleatorio?...es rarísimo, pongo:
int a=rand(10); (tratando de obtener un número aleatorio entre 0-10 y siempre da como resultado 41!)...¿alguien puede ayudarme?

jpastor

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #1 en: Lunes 18 de Febrero de 2002, 15:54 »
0
La función rand devuelve un numero aleatorio solo en parte, ya que realmente es imposible predecir el numero que saldrá, pero siempre saldra el mismo.

Para solucionar el problema tienes que usar la funcion srand que sirve para indicar una semilla que luego se utilizara para crear los numero.

Si llamamos a srand con alguna variable como el tiempo (antes de intentar obtener un numero con rand) obtendrás numero totalmente aleatorios:

srand (time(NULL));

makeijan

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
    • http://makeijan.cjb.net
Re: Desesperado... :-)
« Respuesta #2 en: Lunes 18 de Febrero de 2002, 17:16 »
0
Yo no estoy muy puesto en el tema aún, pero lo que utilizaría es:

randomize();
int a=random(10);

Recuerda llamar a randomize, siempre antes de usar random .

Espero haberte sido de ayuda.

tenesor

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #3 en: Lunes 18 de Febrero de 2002, 19:50 »
0
Hola!

El randomize() (creo recordar) que es de borland, asi que al compilarlo con GCC, DEVC++4 o cualquiera distinto del de borland dará error.

Para sacar numeros aleatorios utilizo lo tipico del ANSI, aca te lo pongo.

#include <time.h> // Pa que funcione el rand
srand(time(0)); // el randomize de ANSI
x=rand()%100; // Aqui asigna a 'x' un numero aleatorio de 0 a 100

Saludos,
   Tenesor
Que el toro estoque al matador, que el preso enciere al guardián, que solo sean de cerveza los tanques, que el pez pesque al pescador y que el tigre dome al domador, que la television se prohiba y el hachis se legalice, que africa sea tierra mágica y no trágica... cambiando el mundo [NS]

kenshin

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #4 en: Lunes 18 de Febrero de 2002, 21:40 »
0
GrAcIaS!, ya he conseguido hacerlo...

...Hasta pronto, porque seguro que me surgen más dudas!

K_e_N_s_H_i_N

kenshin

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #5 en: Lunes 18 de Febrero de 2002, 22:51 »
0
¿Alguien sabe si es posible y cómo hacer lo siguiente?...

Tengo un entero de 5 cifras (12345 p.ejemplo) y me gustaría almacenarlo en un array, de manera que al primer elemento del array le corresponda la primera cifra del entero y así sucesivamente: array[0]=1;array[1]=2;etc...

GRACIAS!!

tenesor

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #6 en: Martes 19 de Febrero de 2002, 03:55 »
0
OK, como lo cuentas es muy simple:
-----------------------------------------
int x;    // Donde se almacenara el numero
int y[4]; // El array que almacenara las 5 cifras (0,1,2,3,4)
int cont; // Una variable contador para el bucle

printf("Introduce un entero de 5 cifras: ");
scanf("%i",x); // Guardamos el numero en 'x'

do{ // Aqui el bucle culpable de todo:)
    y[cont]=x; // guardamos 'x' en la variable 'cont' del array. La primera vez que entra, cont = 0, por lo tanto y[0]
    cont++; // Luego le sumamos uno a 'cont'  y empezamos de nuevo
}while(cont != 4); // a no ser que lleguemos a 4 (Quinta cifra)
-------------------------------------------

Por supuesto, esto funciona si sabes que te han metido 5 cifras o menos (si te meten 4 la 5ª = 0...)

Si quieres controlarlo mejor, deberias hacer esto:
-----------------------------------------

char x,*y;
int cont, numlon;

printf("Introduce un numero: ");
scanf("%s",x);

numlon = strlen(x);

do{
  y[cont] = x;
  cont ++;
}while(cont != numlon);

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

Con esto haces que te metan las cifras(o caracteres, que aqui tambien serian admitidos) que te metan, siempre guardara cada uno en el elemento del array que le corresponda.

Esto no lo he probado, pero supongo que funcionara:) Lo acabo ahora mismo pero si no funciona por lo menos ya tienes la idea.

Saludos,
   Tenesor
Que el toro estoque al matador, que el preso enciere al guardián, que solo sean de cerveza los tanques, que el pez pesque al pescador y que el tigre dome al domador, que la television se prohiba y el hachis se legalice, que africa sea tierra mágica y no trágica... cambiando el mundo [NS]

kenshin

  • Miembro activo
  • **
  • Mensajes: 29
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #7 en: Martes 19 de Febrero de 2002, 22:22 »
0
Gracias Tenesor;)

delpa

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #8 en: Martes 19 de Febrero de 2002, 23:56 »
0
justo iba a poner un mensaje pidiendo ayuda sobre un codigo como ese de ahi arriba:)
thx  very much tenesor

jpastor

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #9 en: Miércoles 20 de Febrero de 2002, 17:46 »
0
Citar
OK, como lo cuentas es muy simple:
-----------------------------------------
int x;    // Donde se almacenara el numero
int y[4]; // El array que almacenara las 5 cifras (0,1,2,3,4)
int cont; // Una variable contador para el bucle

printf("Introduce un entero de 5 cifras: ");
scanf("%i",x); // Guardamos el numero en 'x'


lo correcto si queremos obtener el número sería: scanf ("%i", &x);

 
Citar
do{ // Aqui el bucle culpable de todo:)
    y[cont]=x; // guardamos 'x' en la variable 'cont' del array. La primera vez que entra, cont = 0, por lo tanto y[0]
    cont++; // Luego le sumamos uno a 'cont'  y empezamos de nuevo
}while(cont != 4); // a no ser que lleguemos a 4 (Quinta cifra)


¿todos lo elementos de y no sería iguales y de valor x?

 
Citar

Por supuesto, esto funciona si sabes que te han metido 5 cifras o menos (si te meten 4 la 5ª = 0...)

Si quieres controlarlo mejor, deberias hacer esto:
-----------------------------------------

char x,*y;


hay que definir x como un array: char x[80]; por ejemplo.

 
Citar
int cont, numlon;

printf("Introduce un numero: ");
scanf("%s",x);

numlon = strlen(x);


tienes que reservar la memoria que quieres para y:

y = (char *)malloc(sizeof(char) * numlon);

 
Citar
do{
  y[cont] = x;
  cont ++;
}while(cont != numlon);



creo que tendria que ser:

y[cont] = x[cont];


[Modificado el 2/20/02 por jpastor]

ibito

  • Miembro HIPER activo
  • ****
  • Mensajes: 549
  • Nacionalidad: mx
  • Se mas de C++ que lo que se de ese CSS
    • Ver Perfil
    • http://www.ibquezada.com
Re: Desesperado... :-)
« Respuesta #10 en: Miércoles 20 de Febrero de 2002, 20:07 »
0
Cuales son todas las funciones q regresan numeros aleatorios?

Thanks
______________________________________
www.hazjuegos.com Una comunidad dedicada al desarrollo de videojuegos.

rafael

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #11 en: Miércoles 20 de Febrero de 2002, 21:28 »
0
y que tal esta otra solución?;)

  #include<stdio.h>

#define MAXDIGITOS 20

int main(){
   long int n;
   int t,a[MAXDIGITOS];
   int num_digitos,i,j;

   /* obtener el entero */
   printf("N:");
   scanf("%ld",&n);

   /* poner cada digito del numero en el arreglo */
   num_digitos=0;   
   while(n>0){
      a[num_digitos++]=n%10;
      n=n/10;
   }

   /* invertir los elementos del arreglo para que los digitos esten en el
   orden correcto */
   i=0;j=num_digitos-1;
   while(i<j){
      /* intercambiar los valores de los elementos i y j del arreglo */
      t=a;
      a=a[j];
      a[j]=t;

      i++;j--;
   }

   /* escribir los digitos contenidos en el arreglo */
   for(i=0;i<num_digitos;i++){
      printf("%dn",a);
   }
   
   return 0;
}

tenesor

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #12 en: Miércoles 20 de Febrero de 2002, 21:58 »
0
OK, esta vez comprobé el codigo haciendolo y compilandolo:) El de antes lo hice en la ventana de aqui de solo codigo y no comprobé nada:(

Lo del & fue un pequeño despiste, lo de que todos los elementos de y[cont] serian = x es cierto. Vengo de pascal y se me mezclaron los dos. En pascal (en c no lo se) puedes tratar las strings como arrays. por ejemplo, para acceder al caracter numero 2 del string x, simplemente seria x[2]. Al hacerlo en c y con prisas se me colo es pequeño gran error.

En cuanto a lo de decir que X sea array, no estoy muy seguro... asi lo que harias seria almacenar en x[0] la cifra que te han metido, y de x[1] a x[80] serian todo valores nulos.

Lo de reservar la memoria es algo que veo innecesario aqui y que complica y alarga el programa (una funcion en principio simple).

Creo que lo que hay que hacer es recorrer uno por uno los caracteres almacenados en un char (x) y alamcenandolos uno por uno en cada elemento de y, no?
Por lo tanto seria un bucle que recorra los caracteres de X y cada uno almacenarlos en el elemento [cont] del array Y

No se si me explico...
Ahora me pondré a hacerlo y cuando termine paso el codigo.

Saludos,
   Teneosr
Que el toro estoque al matador, que el preso enciere al guardián, que solo sean de cerveza los tanques, que el pez pesque al pescador y que el tigre dome al domador, que la television se prohiba y el hachis se legalice, que africa sea tierra mágica y no trágica... cambiando el mundo [NS]

tenesor

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #13 en: Miércoles 20 de Febrero de 2002, 22:03 »
0
Perdona rafael, no vi tu mensaje.

Me gusta esa solucion, solo que creo que se podría acortar un poco.

Ah, una cosa.
A es un array y T un entero
En la sentencia "t=a;" no daria un error de "tipos incompatibles"? O almacenaria el numero de elementos de a en t?
Que el toro estoque al matador, que el preso enciere al guardián, que solo sean de cerveza los tanques, que el pez pesque al pescador y que el tigre dome al domador, que la television se prohiba y el hachis se legalice, que africa sea tierra mágica y no trágica... cambiando el mundo [NS]

tenesor

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #14 en: Miércoles 20 de Febrero de 2002, 23:14 »
0
Bueno, al final he recortado codigo todo lo que he podido, alguien lo puede acortar mas?

Con esto lo que hace es que te pide que le metas caracteres hasta que el usuario pulsa intro. Los va almacenando uno a uno en el elemento [cont] del array txt. Es otra forma de hacerlo, no?


Esta vez he probado el codigo antes de enviarlo al foro:)

Saludos,
   Tenesor


#define ENTER 13

main()
{
   char txt[100], chr;
   int cont;

   printf("nIntroduce caracteres: ");
   while (chr != ENTER)
   {
      chr = getche();
      txt[cont]=chr;
      cont++;   
   }         
}
Que el toro estoque al matador, que el preso enciere al guardián, que solo sean de cerveza los tanques, que el pez pesque al pescador y que el tigre dome al domador, que la television se prohiba y el hachis se legalice, que africa sea tierra mágica y no trágica... cambiando el mundo [NS]

jpastor

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #15 en: Jueves 21 de Febrero de 2002, 14:04 »
0
Hola de nuevo tenesor, lo de que x sea un array (en el segundo ejemplo que pusistes) es necesarior porque un char simple solo sirve para almacenar un caracter y tu necesitas obtener una cadena de caracteres.

La funcion scanf ("%s", x); te guarda cada caracter de la cadena que le metas en cada posicion de x: x[0] x[1] ...

En cuanto a reservar memoria tambien es necesario. Puede que cuando lo compiles y ejecutes no te de problema pero aun asi no esta bien. y[0] y[1] ... se almacenaran a la memoria donde apunte *y. Y si no reservas la memoria puede que este siendo ocupada por otros datos importantes o que otros datos la utilicen mas tarde y te borren lo que tienes.

jpastor

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #16 en: Jueves 21 de Febrero de 2002, 14:09 »
0
ahh, otra cosa, lo de que t=a no se puede hacer es verdad, aunque no es fallo de rafael.

El puso t=a[ i] pero el sistema de foros lo interpreta como el inicio de la letra cursiva y no lo escribe.

tenesor

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #17 en: Jueves 21 de Febrero de 2002, 21:01 »
0
De acuerdo, vamos a ver si esta va la vencida. Con este programa he tenido diversos problemas en XP, pero lo he probado en win 98 y ha funcionado. Con estas experiencias ya pille el porque del malloc, y en cuanto a lo de 'X' sea array estoy deacuerdo. Tengo una mezcla extraña de lenguajes en mi cabeza y confundia el char de C con el String de Pascal:(

Bueno, aki va el codigo.

--------------------------------------------
      char x[100],*y;
      int cont, numlon;

      printf("Introduce numeros: ");
      scanf("%s",x);

      numlon = strlen(x);
      y = (char *)malloc(sizeof(x));

      do{
         y[cont] = x[cont];
         cont ++;
         printf("nY = %s  X = %s",y[cont], x[cont]);
      }while(cont != numlon);

      free(y);
-------------------------------------------
Que el toro estoque al matador, que el preso enciere al guardián, que solo sean de cerveza los tanques, que el pez pesque al pescador y que el tigre dome al domador, que la television se prohiba y el hachis se legalice, que africa sea tierra mágica y no trágica... cambiando el mundo [NS]

tenesor

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #18 en: Jueves 21 de Febrero de 2002, 21:03 »
0
AH, gracias por todo lo que estas explicando, son cosas básicas que ya habia olvidado, pero se agradece y mucho.
Que el toro estoque al matador, que el preso enciere al guardián, que solo sean de cerveza los tanques, que el pez pesque al pescador y que el tigre dome al domador, que la television se prohiba y el hachis se legalice, que africa sea tierra mágica y no trágica... cambiando el mundo [NS]

rafael

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #19 en: Viernes 22 de Febrero de 2002, 01:56 »
0
;)Bueno tenesor es que yo trate de hacerlo exacto a lo que  kenshin pidio.
 
Citar
¿Alguien sabe si es posible y cómo hacer lo siguiente?...

Tengo un entero de 5 cifras (12345 p.ejemplo) y me gustaría almacenarlo en un array, de manera que al primer elemento del array le corresponda la primera cifra del entero y así sucesivamente: array[0]=1;array[1]=2;etc...

 

rafael

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #20 en: Viernes 22 de Febrero de 2002, 02:06 »
0
En cuanto a la parte que aparece como:

i=0;j=num_digitos-1;
while(i<j){
/* intercambiar los valores de los elementos i y j del arreglo */
t=a;
a=a[j];
a[j]=t;

i++;j--;
}


debia ser:

i=0;j=num_digitos-1;
while(i<j){
/* intercambiar los valores de los elementos i y j del arreglo */
t=a;
a=a[j];
a[j]=t;

i++;j--;
}

Gracias por indicarme el error.

tenesor

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #21 en: Viernes 22 de Febrero de 2002, 02:52 »
0
Hola Rafael!

Si, ya se que pidio numeros enteros, pero es que empezamos con evoluciones, si te das cuenta, la primera respuesta (aunque erronea) iba con los numeros. Luego pase a caracteres.

De todas formas, el mismo codigo que escribi solo hay que añadirle una linea para que recoja caracteres hasta que sea NUMEROS, u otra solucion seria bloquear el teclado exceptuando los numeros, el backspace y el intro.

Esto no se exactamente como hacerlo pero lo puedo mirar....

Ah, ya dije que me gusto tu codigo, pero si se usa como función de un programa mas largo, es aconsejable acortarlo todo lo posible.

Saludos,
Tenesor
Que el toro estoque al matador, que el preso enciere al guardián, que solo sean de cerveza los tanques, que el pez pesque al pescador y que el tigre dome al domador, que la television se prohiba y el hachis se legalice, que africa sea tierra mágica y no trágica... cambiando el mundo [NS]

jpastor

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #22 en: Viernes 22 de Febrero de 2002, 15:44 »
0
ok amigos, me acorde de una forma muy rápida y sencilla de hacerlo:


char numero_str[100];
int numero = 12345;

sprintf (numero_str, "%d", numero);

jpastor

  • Nuevo Miembro
  • *
  • Mensajes: 19
    • Ver Perfil
Re: Desesperado... :-)
« Respuesta #23 en: Viernes 22 de Febrero de 2002, 15:49 »
0
Si estas pensando que me pase con el tamaño (100) de numero_str tienes razón, ningun número dentro de rango tiene tantos dígitos.

Es solo la costumbre. :D

tenesor

  • Miembro activo
  • **
  • Mensajes: 90
    • Ver Perfil
Desesperado... :-)
« Respuesta #24 en: Viernes 22 de Febrero de 2002, 18:19 »
0
VAYA! Muchisimo mejor! todo en una sola linea!!

Gracias :)
Que el toro estoque al matador, que el preso enciere al guardián, que solo sean de cerveza los tanques, que el pez pesque al pescador y que el tigre dome al domador, que la television se prohiba y el hachis se legalice, que africa sea tierra mágica y no trágica... cambiando el mundo [NS]