No te voy a hacer la tarea, la magia de estos ejercicios esta en pasarsela pensando, sin complicarse haciendolo de la forma mas simple posible.
Estoy suponiendo que tu frustracion te trajo a este sitio(que no es un foro comun y corriente como otros), te recomiendo encarecidamente que leas:
Bien pues ahora volvamos a tu ejercicio:
Te voy a ayudar con la logica por un momento...
Cuando escribes codigo, tienes que hacerlo lo mas bonito que te parece. ¿Por que? porque en algun momento de tu vida tienes q releer ese codigo y creeme si no esta bonito no te va a dar ganas de leerlo ni de estudiarlo, etc.
Para aprender C++ nesesitas practica, al igual que con las matematicas, esta sucecion es simple, tienes que recorrer hasta el numero y luego en reversa, en el codigo de abajo estoy representando este numero como la variable numerica entera int pisos
, luego utilizo los bucles for
para iterar o recorrer la condicion dada, que se lee asi:
Desde el numero i
que valdra 1, quiero que recorra hasta el la variable pisos
que es 6, siempre y cuando i
al incrementarse, siga siendo menor igual a pisos
; luego ejecuta por cada vez que i
se incremente, un for
que dira; hasta que j
que vale 1 sea menor a i
, imprime la diferencia entre i
e j
. Luego imprime un salto de linea cout << endl;
cuando acabes de hacer el for
con j
, el bucle for
con k
solo imprime la parte acendiente, hasta antes del numero .
#include <iostream>
using namespace std;
int main() {
int pisos = 6;
for (int i = 1; i <= pisos; i++) {
for (int k = 1; k < i ;k++) {
cout << k << " ";
}
for (int j = 0; j < i; j++) {
cout << i-j << " ";
}
cout << endl;
}
return 0;
}
El codigo que te escribi resuelve, a la mitad tu ejercicio, te lo pongo todo porque hay mas dificultad en manipular los espacios " "
.
Buena suerte!
Resolucion
Te recomiendo que veas eso solo cuando hayas intentado de todoy aun asi no hayas conseguido sacar la piramide.
#include <iostream>
using namespace std;
int main() {
int pisos = 6;
for (int i = 1; i <= pisos; i++) {
//calcula los espacios a imprimir por la izquierda
for (int x = 0; x < pisos -i; x++) {
cout << " ";
}
//imprime crecientemente los numeros hasta 1 antes del limite
for (int k = 1; k < i ;k++) {
cout << k << " ";
}
//imprime los elementos desde el limite decrecientemente hasta 1
for (int j = 0; j < i; j++) {
cout << i-j << " ";
}
cout << endl;
}
return 0;
}
Efectivamente todo lo que dice PaperBirdMaster es correcto, estas usando librerias inutiles, que nisiquiera son de C++, y el uso de punteros es basicamtente ahogarse en un vaso de agua, como puedes notar en mi resolucion, puedes tener la solucion al problema sencillamente, no deseo usar string
porque no quiero sumergirme en C++, lo hago solo usando matematica sencilla.
El ultimo for
que agregue con x
lo que hace es imprimir la cantidad de espacios que nesesitamos, si te dijas la logica esta en que es el mismo triangulo pero invertido(volteado de cabeza) en espacios, si teniamos el limite que era 6, entonces imprimimos 5 espacios, porque son los 6 menos el caracter, salen 5. Y asi sucecivamente, hasta que el limite es 0 espacios y lleno de caracteres. Yo te pongo " "
porque le agregamos un espacio a cada caracter o numero por elemento, asi que para que se acomode en la consola, le puse 2 espacios para asi verlo legible.