Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Cuadro de vignere

Estas en el tema de Cuadro de vignere en el foro de C/C++ en Foros del Web. Hola muy buenas, No se como plantear este problema, tengo que realizar un cuadro de vignere en C++ y no se me ocurre como podria ...
  #1 (permalink)  
Antiguo 31/07/2013, 17:44
 
Fecha de Ingreso: mayo-2012
Mensajes: 19
Antigüedad: 12 años
Puntos: 1
Cuadro de vignere

Hola muy buenas,

No se como plantear este problema, tengo que realizar un cuadro de vignere en C++
y no se me ocurre como podria hacerlo, lo que no me sale es rellenar el cuadro.

Os explico mejor,

El cuadro seria una cosa asi,

A B C D E F G H I ... Y Z
B C D E F G H I J ... Z A
C D E F G H I J K ... A B
.
.
.
Z A B C D E F G H ... X Y

Creo que eso se puede hacer con dos bucles for, pero no se como rellenar el cuadro con las letras. Las letras NO debe introducirla el usuario, sino que una vez se inicie el programa dibuje el cuadro.

Espero que me contesteis con algo por favor, es bastante urgente.

PD: El ejercicio no debe contener clases.

Gracias.
  #2 (permalink)  
Antiguo 31/07/2013, 18:04
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Cuadro de vignere

Código C:
Ver original
  1. void ABC(char  n)
  2. {
  3.     n = n - 'A';
  4.     for(i = 0; i< 26;i++) {
  5.         printf("%c ",  n + 'A' );
  6.         n = (n + 1) % 26;
  7.     }
  8.     printf("\n");
  9. }
  10.  
  11. int main()
  12. {
  13.    ABC('A');
  14.    ABC('B');
  15. }

Te pase una función que imprime todo el ciclo desde la letra que le pedis. Proba vos de hacer el resto.

Saludos
  #3 (permalink)  
Antiguo 31/07/2013, 18:25
 
Fecha de Ingreso: mayo-2012
Mensajes: 19
Antigüedad: 12 años
Puntos: 1
Respuesta: Cuadro de vignere

Podrias ponerlo en C++? Por favor. Es que hay un par de cosas que no entiendo de ese codigo, omo por ejemplo el % en el bucle.

De todas formas lo voy a intentar y ya te dire que tal, grascias por tu respuesta y por tu rapidez.

Espero que alguien mas me de alguna otra solucion por si no me fuera.

Gracias.
  #4 (permalink)  
Antiguo 31/07/2013, 19:11
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Cuadro de vignere

Código C++:
Ver original
  1. void ABC(char  n)
  2. {
  3.     n = n - 'A';
  4.     for(i = 0; i< 26;i++) {
  5.         cout <<  (char)  (n + 'A')  << " " ;
  6.         n = (n + 1) % 26;
  7.     }
  8.     cout << endl;
  9. }
  10.  
  11. int main()
  12. {
  13.    ABC('A');
  14.    ABC('B');
  15. }

El operador % devuelve el resto de la división:
10 % 2 = 0
11 % 2 = 1
11 % 5 = 1

Si quieres reemplazar este operador podrías hacer:

Código C++:
Ver original
  1. n++;
  2. if (n == 26) n = 0;

Ya que 26 % 26 es cero. Este operador se suele usar para crear ciclos y así evitar el if. En este caso el ciclo seria desde 0 a 26.... Fijate que pasa si en el for la variable i haces que vaya esta 100 o 200. Vas a ver que se repiten las secuencias una y otra vez.

Solo hay que reemplazar los printf por cout para llevarlo a C++.
  #5 (permalink)  
Antiguo 31/07/2013, 19:30
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Cuadro de vignere

Código C++:
Ver original
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void ABC() {
  6.  
  7.     for(char i = 0; i < 26; i++) {
  8.         for(char c = 0; c <= 26; c++) {
  9.             cout << (char) ('A' + ((c + i) % 26)) << " ";
  10.         }
  11.         cout << endl;
  12.     }
  13. }
  14.  
  15. int main() {
  16.  
  17.     ABC();
  18.     return 0;
  19. }

Como te dijeron antes, solo haz buen uso del operador modulo.
  #6 (permalink)  
Antiguo 01/08/2013, 03:31
 
Fecha de Ingreso: mayo-2012
Mensajes: 19
Antigüedad: 12 años
Puntos: 1
Respuesta: Cuadro de vignere

Muchisimas gracias a todos por las soluciones, me habeis ayudado muxo.

Etiquetas: cuadro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 19:15.