SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: franc en Viernes 12 de Diciembre de 2003, 17:30

Título: Cuadro Latino
Publicado por: franc en Viernes 12 de Diciembre de 2003, 17:30
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
Título: Re: Cuadro Latino
Publicado por: albany en Sábado 13 de Diciembre de 2003, 07:08
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
Título: Re: Cuadro Latino
Publicado por: mido_666 en Sábado 13 de Diciembre de 2003, 12:30
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.
Título: Re: Cuadro Latino
Publicado por: franc en Sábado 13 de Diciembre de 2003, 15:01
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 :)
Título: Re: Cuadro Latino
Publicado por: mido_666 en Sábado 13 de Diciembre de 2003, 16:33
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.