Ayuda con este problema de figuras por fa
Publicado por Hugo (2 intervenciones) el 08/10/2022 00:15:39
Valora esta pregunta
0
#include <iostream>
using namespace std;
//Metodo que comprueba que lo introducido es un numero
bool check(string v){
bool result=true;
for(int i=0;i<v.length();i++)
if(!isdigit(v[i]))
result=false;
return result;
}
int main(){
string num;
int numero=0;
//bucle de condicion numero mayor igual 3, menor que 10
do{
cout<<"Introduce un numero: ";
cin>>num;
if(check(num)){
numero=stoi(num);
}
else{
cout<<"\nDebes introducir un numero\n";
}
}while(numero>9 || numero<3);
//variables necesarias el ancho y alto en este caso de la figura, o lo que es
//lo mismo el doble del numero introducido -1
int ancho=(numero*2)-1;
//variable que ira cambiando mostrada
int exp=0;
//otra variable para saber cuando empeza y acaba la parte a partir de la mitad
//es decir, cuando el alto sea mas que el numero
int otro=1;
//doble bucle para el alto y ancho
for(int i=0;i<ancho;i++){
//condicion de que valdra la variable mostrada
if (i<numero) exp=i+1;
else exp=numero;
for(int j=0;j<ancho;j++){
//antes de la mitad, es decir, la parte de arriba
if(i<numero){
//Si j es menor que la mitad o lo que es lo mismo el numero introducido,
if(j<numero && exp>0){
cout<<exp;
//se ira restando 1 excepto para cuando sea justo el medio
if(j!=numero-1)
exp=exp-1;
}
//aqui viene lo dificil de entender si j es decir el ancho es mayor o igual que lo que vale
//el ancho menos i, es decir, en el primer caso i=0 el ancho por ejemplo de 4 es 4*2-1=7
//pues empezara a imprimir por pantalla el valor que se va cambiando que es exp
else if(j>=ancho-(i+1)){
exp=exp+1;
cout<<exp;
}
//Y lo demas seran espacios en blanco
else
cout<<" ";
}
//condicion para cuando se mayor o igual a la mitad
else if(i>=numero){
//aqui es cuando necesitamos saber cuando empezar a mostrar por pantalla
//es decir la otra variable
//si j(ancho) es igual o mayor a la otra varible y es menor que la mitad del ancho
if(j>=otro && j<numero){
cout<<exp;
if(j!=numero-1)
exp=exp-1;
}
//Si es mayor que el ancho y la variable sobrepasa el valor del numero introducido
else if(j>=numero && exp<numero){
exp=exp+1;
cout<<exp;
}
//Lo demas son espacios en blanco, es decir, antes de la variable otra cuando empieza y
//cuando la variable que va mostrando sobrepasa el valor
else
cout<<" ";
}
}
//Si i es mayor que la mitad ir actualizando la variable para saber donde empieza a mostrar
if(i>=numero) otro=otro+1;
//salto de linea para cada alto
cout<<"\n";
}
return 0;
}