• Martes 21 de Mayo de 2024, 05:19

Autor Tema:  Cuadro Latino  (Leído 4227 veces)

franc

  • Miembro MUY activo
  • ***
  • Mensajes: 157
    • Ver Perfil
Cuadro Latino
« en: Viernes 12 de Diciembre de 2003, 17:30 »
0
El programa se llama cuadro latino y consiste en esto:

Para N=4 :


1 2 3 4
4 1 2 3
3 4 1 2
2 3 4 1


Se supone que se debe introducir cualkier numero y te saca el cuadro latino correspondiente ( es un cuadrado de orden NxN )

alguien me puede guiar de como hacer esto ?

gracias

albany

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Cuadro Latino
« Respuesta #1 en: Sábado 13 de Diciembre de 2003, 07:08 »
0
Hola!!
Si estás en C++ se me ocurre esto, de la nada, y habría que probarlo:
cargás en un vector de la STL hasta el número y después usás un iterador(puntero a la componente que vos querés) para mostrar lo que vos querés por pantalla (o donde sea).
Si necesitás alguna ayuda mandame un mail a albany@ciudad.com.ar
Ojalá te sirva, realmente recién vi tu mensaje y pensé en eso, no le dediqué mucho tiempo...
Flor Castagnino

mido_666

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
    • http://www.geocities.com/mato_rrales
Re: Cuadro Latino
« Respuesta #2 en: Sábado 13 de Diciembre de 2003, 12:30 »
0
Saludos, franc:

Has conseguido ya lo que te proponías? albany ya te dio unas buenas pistas.
De cualquier modo, te remito una posible solución en C, a mí me compila en gcc
sin ningún tipo de problmema, aunque soy consciente de que el codigo puede
resultar un poco enrevesado.
Nota: No te limites a copiarlo, reescríbelo a tu manera ( - ; y no dudes en decir
si le encuentras fallos.

Código: Text
  1.  
  2.  
  3. #include <stdio.h>
  4.  
  5. /* Cuadro Latino */
  6.  
  7. int main(void)
  8. {
  9. int nummax, numcomienzo, i, j, k;
  10.  
  11. numcomienzo=1;
  12.  
  13. printf ("Introduzca N: ");
  14. scanf  ("%d", &nummax);
  15.  
  16. for (i=0;i<nummax;i++)
  17.     {
  18.     k=0;
  19.     for(j=numcomienzo;j<=nummax;j++)
  20.   {
  21.   printf ("%d ", j);
  22.   k++;
  23.   }
  24.     for(j=1;j<=nummax-k;j++)
  25.   printf ("%d ", j);
  26.     numcomienzo++;
  27.     printf ("\n");
  28.     }
  29. return 0;
  30. }
  31.  
  32. /*siempre puedes depurar el codigo para, por ejemplo
  33.   -comprobar la entrada del scanf
  34.   -contar numero de cifras del máximo y en el printf sacar %nd, donde n es ese numero
  35.    con lo que conseguirías alinearlo
  36.   -etc
  37. */
  38.  
  39.  
  40.  

Miguel desde Soria.

- Miguel - On ne voit bien qu'avec le coeur

franc

  • Miembro MUY activo
  • ***
  • Mensajes: 157
    • Ver Perfil
Re: Cuadro Latino
« Respuesta #3 en: Sábado 13 de Diciembre de 2003, 15:01 »
0
muchas gracias, ya lo he conseguido.

mido_666 tu codigo me ha ayudado, aunque no era lo que queria ( en verdad si pero no imprimia los numeros en el orden que yo queria ).


albany lo de los vectores, lo he intentado pero me fallaban a la hora de imprimir el cuadro.


Gracias a todos :)

mido_666

  • Nuevo Miembro
  • *
  • Mensajes: 13
    • Ver Perfil
    • http://www.geocities.com/mato_rrales
Re: Cuadro Latino
« Respuesta #4 en: Sábado 13 de Diciembre de 2003, 16:33 »
0
Es cierto, franc, tienes razón; no me fijé en el orden, pensé que iban añadiendo uno.
Soy consciente además de que no es la única forma de hacerlo (también se podría comprobar el último numero que se escribió y empezar por ahí) pero también se puede añadir una variable y un par de líneas de código para solventar el problema;
sé que ya lo has solucionado tú, probablemente de otra forma diferente, pero por si a alguien le interesa el código que mande con sus arreglos correspondientes, lo adjunto aquí abajo.

Código: Text
  1.  
  2. #include <stdio.h>
  3.  
  4. /* Cuadro Latino */
  5.  
  6. int main(void)
  7. {
  8. int nummax, numcomienzo, i, j, k, l;  /*solo necesitaba una variable mas para llevar la cuenta */
  9.  
  10. numcomienzo=1;
  11. l=0;
  12.  
  13. printf ("Introduzca N: ");
  14. scanf  ("%d", &nummax);
  15.  
  16. for (i=0;i<nummax;i++)
  17.     {
  18.     if(l>0)numcomienzo = nummax - l +1;
  19.     k=0;
  20.     for(j=numcomienzo;j<=nummax;j++)
  21.   {
  22.   printf ("%d ", j);
  23.   k++;
  24.   }
  25.     for(j=1;j<=nummax-k;j++)
  26.   printf ("%d ", j);
  27.     printf ("\n");
  28.     l++;   /*también eliminé "numcomienzo++;"*/
  29.     }
  30. return 0;
  31. }
  32.  
  33.  
  34.  

Saludos, y perdona las molestias por la equivocación.

- Miguel - On ne voit bien qu'avec le coeur