Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Dumy en 26 Octubre 2023, 19:37 pm



Título: Función pedir un a llenar un array
Publicado por: Dumy en 26 Octubre 2023, 19:37 pm
Hola

Intento desarrollar jna función para un juego de memorua, consistenete en:

Llenar un array con números enteros, comprendidos entre el 1 y el 4, pedidos al usuario. Si el usuario introduce un número no comprendido en ese rango, se le vuelve a pedir hasta que cumpla
las especificaciones. El array tiene máximo 10 posiciones y se llenarán las que se indiquen por parámetro de entrada que coincidirán con las generadas aleatoriamente.

Asi es como intento solucionarlo:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. void arrayjugador() {
  6.  
  7.    int num,numero2,numero3,numero4,numero5,numero6,numero7,numero8,numero9,numero10;
  8.  
  9.    int numero[10] = {2,3,4,1,2,3,4,4,1,3};
  10.    numero[0] = 2;
  11.    numero[1] = 3;
  12.    numero[2] = 4;
  13.    numero[3] = 1;
  14.    numero[4] = 2;
  15.    numero[5] = 3;
  16.    numero[6] = 4;
  17.    numero[7] = 4;
  18.    numero[8] = 1;
  19.    numero[9] = 3;
  20.  
  21.    printf("Introduce diez numeros desde el 1 al 4");
  22.  
  23.    scanf("%d",&numero[0]);
  24.    scanf("%d",&numero[1]);
  25.    scanf("%d",&numero[2]);
  26.    scanf("%d",&numero[3]);
  27.    scanf("%d",&numero[4]);
  28.    scanf("%d",&numero[5]);
  29.    scanf("%d",&numero[6]);
  30.    scanf("%d",&numero[7]);
  31.    scanf("%d",&numero[8]);
  32.    scanf("%d",&numero[9]);
  33.    scanf("%d",&numero[10]);
  34.  
  35.    if((numero < 0)) && ((numero > 5)) {
  36.  
  37.        do {
  38.  
  39.            printf("Introduce diez numeros desde el 1 al 4");
  40.  
  41.        } while(numero < 0) && (numero > 5)
  42.  
  43.    }
  44.  
  45. }
  46.  
Lo que no estoy seguro de que se solucione dd esta manera si slguien me pudiera almenos indicar el camino  correcto, seria de ageadecer


Título: Re: Función pedir un a llenar un array
Publicado por: MAFUS en 26 Octubre 2023, 20:22 pm
Necesitas hacer un bucle con índice, dentro de él pedir un número y comprobar si está dentro del rango:
Código:
for i = 0 to 10:
   do
      get n
   while not ( (n is number) && (1 <= n <= 4) )
   numero[i] = n


Título: Re: Función pedir un a llenar un array
Publicado por: Dumy en 26 Octubre 2023, 23:01 pm
-Disculpa pero ¿a que te refieres con lo del indice?, ¿es el codigo que me pasas?, perdona las preguntas pero es la primera vez que leo al respecto


Título: Re: Función pedir un a llenar un array
Publicado por: MAFUS en 27 Octubre 2023, 20:45 pm
Es pseudocódigo, más o menos para que tengas una idea. Este es fácil de traducir a C.


Título: Re: Función pedir un a llenar un array
Publicado por: Dumy en 29 Octubre 2023, 14:28 pm
Hola de nuevo

Tengo este codigo:

int numeroaleatorio[10] = {1,2,4,3,3,2,4,1,2,1};
srand(time(NULL));//inicialización de los números aleatoriosint num,num2;
for(int f = 0; f<=10; f++) {
numeroaleatorio[f]=rand()%4;

}

Que debería rellenar el array con 10 números aleatorios del 0 al 4 pero necesito incluir un parámetro de entrada, que indique la posición de los números generados.

El caso es que tengo entendido que con el corchete inicias el array, pero no tengo claro como hacer lo del parámetro de entrada, que dictamina el orden


Título: Re: Función pedir un a llenar un array
Publicado por: MAFUS en 30 Octubre 2023, 19:40 pm
No hace falta que inicialices un array si después vas a darles valores. Basta con
Código:
int mi_array[10];

Recuerda que para pedir datos del usuario debes usar scanf. Para enteros se usa el parámetro %i o %d.

Código:
int num;
scanf("%d", &num);


Título: Re: Función pedir un a llenar un array
Publicado por: Atika en 16 Diciembre 2023, 21:41 pm
El tamaño del array numero es 10, por lo que los índices van de 0 a 9. Sin embargo, estás intentando leer en numero[10], lo cual está fuera de los límites del array.

scanf("%d",&numero[10]); <--- Esta línea sobra, al ser un array de 10 elementos, tienes que recordar que el primer elemento es el 0, el segundo el 1... y así hasta el 9, que serían los diez
elementos.

El bloque if tiene una condición incorrecta (if((numero < 0)) && ((numero > 5))). Parece que estás intentando validar si algún número ingresado está fuera del rango del 1 al 4, pero la lógica está equivocada. Para que sea válido sustitúyelo por: if (numero < 1 || numero > 4)


El do-while tiene un error de sintaxis: falta un punto y coma al final de la condición y también hay un error en la lógica de la condición. Si lo corregimos sería algo así: } while (numero < 1 || numero > 4);

Con paciencia lo lograrás.


Título: Re: Función pedir un a llenar un array
Publicado por: D3s0rd3n en 17 Diciembre 2023, 05:13 am
Primero y te lo digo como amigo, tu codigo esta horrible. Hay muchas maneras de hacer lo que buscas pero intentaré mostrarte una forma simple para que agarres práctica. Uno de los primeros problemas al que te vas a enfrentar es que este array es inaccesible a tu funcion principal. Es muy tedioso lidiar con arrays cuando se trata de accesarla atraves de una funcion y si nada mas la vas a modificar una vez (como creo que es tu caso) puedes usar una allocacion dinamica. Solo acuerdate de liberarla cuando termines. Y lo bueno de este codigo es que es facil modificarlo para que funcione cpn diferentes valores. Otra es que para poder validar los números en este caso uso unsigned int para poder solo usar una comparación y no tener que preocuparse por los numeros negativos. Ademas deberias tomar en cuenta que cuando haces algo veces repetidas es mejor usar un ciclo que escribirlo varias veces.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. unsigned int *obtenerNumeros();
  5.  
  6. int main() {
  7. unsigned int *numeros = obtenerNumeros();
  8.  
  9. for(int i = 0; i < 10; i++) {
  10. printf("%d\n", numeros[i]);
  11. }
  12.  
  13. free(numeros);
  14.  
  15. }
  16.  
  17. unsigned int *obtenerNumeros() {
  18. unsigned int *ret = malloc(10);
  19. int i = 0;
  20. unsigned int numero;
  21.  
  22. printf("ingresa 10 numeros del 1 al 4\n");
  23.  
  24. do {
  25. scanf("%u", &numero);
  26.  
  27. if(numero > 4) {
  28. printf("%d no es un numero valido, vuelve a intentar\n", numero);
  29. } else {
  30. ret[i] = numero;
  31. i++;
  32. }
  33. } while(i < 10);
  34.  
  35. return ret;
  36. }
  37.