Dev - C++ - Ayuda con este problema de figuras por fa

 
Vista:
sin imagen de perfil

Ayuda con este problema de figuras por fa

Publicado por Hugo (2 intervenciones) el 08/10/2022 00:15:39
web1
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1
Ha aumentado su posición en 3 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con este problema de figuras por fa

Publicado por antonio (85 intervenciones) el 11/10/2022 11:42:48
Hola buenas te paso el código con anotaciones si no entiendes algo explicado manda un correo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#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;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar