Piramide de Numeros -> C++

Iniciado por Joseph CM, 29 Enero 2021, 19:39 PM

0 Miembros y 1 Visitante están viendo este tema.

Joseph CM

Necesito Ayuda. Tengo que imprimir una pirámide de números. Ya eh intentado varias opciones. El problema esta en que la forma en como se debe imprimir es un poco compleja. El programa pide "n" numero. Por ejemplo en caso de que sea n=6, debe imprimir esto:
123456
12345
 1234
  123
   12
    1
   12
  123
 1234
12345
123456
Lo que yo eh intentado me imprime solo así:
1
12
123
1234
12345
123456
No me aparecen los espacios, y tampoco la pirámide superior invertida. ¿Cómo le puedo hacer? Les muestro mi código.
Código (cpp) [Seleccionar]

#include <iostream>
using namespace std;

int main() {
int i,j,numero;
cout<<"Ingrese numero"<<endl;
cin>>numero;
cout<<endl;
for( i=1;i<=numero; i++){
    for(j=1; j<=i;j++){
        cout<<j;
    }
    cout<<endl;
}

return 0;
}


....

Espero obtener ayuda!   :-(  :-\

MOD: El código debe estar publicado entre etiquetas de Código GeSHi

K-YreX

El código debe estar publicado entre etiquetas de Código GeSHi. Puedes seleccionarlas en el desplegable que dice "Código GeSHi" o escribiendo directamente:
[code=cpp]
// Tu codigo C++
[/code]




Los espacios tienes que imprimirlos también tú pues el programa siempre escribirá desde la izquierda en cada línea. Entonces tienes que encontrar un patrón (una regla) que sigan estos espacios. Además lo bueno es que solo tienes que preocuparte por los espacios a la izquierda ya que a la derecha son indiferentes.

Si te fijas en la línea 0, los espacios a la izquierda son: 0. En la línea 1, los espacios a la izquierda son: 1. ...así hasta que solo imprimes 1 valor y entonces los espacios serán (n-1) y entonces empiezan a disminuir.

Otro problema que veo es que no va a parecer centrado sino que aparecerá alineado a la derecha. Esto es porque al usar fuentes monoespaciadas (todos los caracteres ocupan lo mismo), en la línea 1 (empezando a contar por el 0) el espacio ocupará el hueco del 1, el 1 el hueco del 2,..., y el 5 ocupará el hueco del 6 por lo que quedará a la derecha. La solución es incluir un espacio entre cada valor de forma que quede:

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


Para que se entienda bien lo que tienes que hacer:
Código (cpp) [Seleccionar]

int numeroMaximo = 6; // por ejemplo
for(int linea = 0; linea < numeroMaximo; ++linea){
 // En la linea 0 -> 0 espacios | En la linea 1 -> 1 espacio | En la linea 2 -> 2 espacios | ...
 for(int espacios = 0; espacios < linea; ++espacios){
   cout << " ";
 }
 // En la linea 0 -> 6 numeros | En la linea 1 -> 5 numeros | En la linea 2 -> 4 numeros | ...
 for(int numero = 1; numero <= (numeroMaximo - linea); ++numero){
   cout << numero << " "; // Incluimos un espacio despues de cada numero para que tenga forma
 }
}

Con esto consigues la primera mitad.
Ahora te toca ver cómo haces la segunda mitad pero la idea es la misma.

Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;