elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con este trozo de código
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con este trozo de código  (Leído 2,216 veces)
valrojo

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Ayuda con este trozo de código
« en: 15 Noviembre 2019, 21:22 pm »

Realizar un programa que lea de teclado un número entero 'n' entre 4 y 300, par y nos muestre un
cuadrado de lado 'n' formado por:
Asteriscos (*) en la parte inferior de la diagonal secundaria,
Guiones (-) en la diagonal secundaria, y
Cruces (+) por encima de la diagonal secundaria.
Si se introduce un número incorrecto, el programa volverá a pedir de nuevo un número hasta que
se introduzca un número correcto.

Tiene que dar como resultado:
+++-
++-*
+-**
-***
Mi resultado:
-***
+-**
++-*
+++-

#include <iostream>
using namespace std;

int main ()
{
    int lado;
    
    cout << "Este programa muestra un cuadro con -, + y * " << endl;

    do
    {
        cout << "Dame valor del lado del cuadro (par entre 4 y 300): ";
        cin >> lado;
        
        if (lado < 4 || lado > 300 || lado % 2 != 0)
            cout << "Valor incorrecto. " << endl;
    }
    while(lado < 4 || lado > 300 || lado % 2 != 0);
    
    for (int i = 0; i < lado; i++)
    {
        for (int x = 0; x < lado; x++)
        {
            if(x < i)
                cout << "+";
            else if (x > i)
                cout << "*";
            else
                cout << "-";
        }
        cout << endl;
    }

    return 0;
}


« Última modificación: 15 Noviembre 2019, 21:24 pm por valrojo » En línea

K-YreX
Moderador
***
Desconectado Desconectado

Mensajes: 1.008



Ver Perfil
Re: Ayuda con este trozo de código
« Respuesta #1 en: 16 Noviembre 2019, 01:49 am »

Para próximas consultas, coloca el código entre etiquetas de Código GeSHi.

La parte del filtro está todo bien. La única mejora que se me ocurre es guardar las condiciones en una variable de tipo <bool> para no tener que realizar las comprobaciones dos veces (una en el <if> y otra en el <while>).
Código
  1. int lado;
  2. bool ladoValido;
  3. do{
  4.    cout << "Dame valor del numero (par entre 4 y 300): ";
  5.    cin >> lado;
  6.  
  7.    ladoValido = (lado < 4 || lado > 300 || lado % 2 != 0);
  8.    if(!ladoValido)
  9.        //...
  10. }  while(!ladoValido);

Ahora imagina que <lado> vale 4. El resultado se vería algo así:
Código:
+ + + -
+ + - *
+ - * *
- * * *
Ahora tienes que encontrar una relación entre ese dibujo y el valor de <lado>. Por ejemplo:
Código:
Fila 0: (lado - 1) veces el símbolo '+' y un '-'
Fila 1: (lado - 2) veces el símbolo '+', un '-' y un '*'
Fila 2: (lado - 3) veces el símbolo '+', un '-' y dos veces el '*'
Fila 3: (lado - 4) veces el símbolo '+', un '-' y tres veces el '*'
Ahora hay que intentar generalizarlo para poder hacer un programa que se adapte.
La parte del '+' ya la tenemos: para la fila i, (lado - i - 1) veces el símbolo '+'.
La parte del '-' también porque siempre es, un símbolo '-' cuando se completan los '+'. Es decir, para cada fila i, un '-' en la posición (lado - i).
La parte del '*' podemos verlo como desde (lado - i) hasta (lado - 1).

Entonces quedaría algo así:
Código:
INICIO
    PARA i := 0 HASTA lado - 1 HACER // para cada fila
        PARA j := 0 HASTA lado - i - 2 HACER
            MOSTRAR '+'
        FIN PARA
        MOSTRAR '-'
        PARA k := j HASTA lado - 1 HACER // al terminar el PARA anterior, j vale (lado-i)
            MOSTRAR '*'
        FIN PARA
    FIN PARA
FIN

Intenta codificar ese pseudocódigo en C++ y si tienes problemas puedes poner tu código para que te ayudemos pero recuerda, entre etiquetas de Código GeSHi.


« Última modificación: 16 Noviembre 2019, 18:30 pm por YreX-DwX » En línea

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

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: Ayuda con este trozo de código
« Respuesta #2 en: 16 Noviembre 2019, 10:20 am »

    
Código
  1.    for(int i = 0; i < lado - 1; i++)
  2.    {
  3.        for(j = 0; j < lado - i - 1; j++)
  4.           cout << "+";
  5.  
  6.        cout << "-";
  7.  
  8.        for (int k = j; k < lado - 1; k++)
  9.            cout << "*";
  10.  
  11.        cout << endl;
  12.    }
  13.  

Para lado 4:

+++-
++-*
+-**

No veo el porqué de salirme una fila menos :(



Ya está:
Código
  1.    for(int i = 0; i < lado; i++) //El error era a lado restarle 1
  2.    {
  3.        for(j = 0; j < lado - i - 1; j++)
  4.            cout << "+";
  5.  
  6.        cout << "-";
  7.  
  8.        for (int k = j; k < lado - 1; k++)
  9.            cout << "*";
  10.  
  11.        cout << endl;
  12.    }
  13.  

Muchas gracias por la ayuda, soy nuevo en esto y me cuestan ver este tipo de fallos :)

MOD: No hacer triple post. Usa el boton modificar.


« Última modificación: 16 Noviembre 2019, 11:26 am por MCKSys Argentina » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
VB .Net decompilado, necesito quedarme con un trozo de codigo en el EXE.
Ingeniería Inversa
olevlove 2 2,880 Último mensaje 15 Mayo 2010, 21:06 pm
por olevlove
Que sucede en este trozo?
Ingeniería Inversa
0x98364 5 4,804 Último mensaje 28 Enero 2011, 03:15 am
por jackgris
Reconstruir este trozo de código en java
Java
Tuplado 6 3,285 Último mensaje 16 Octubre 2012, 19:23 pm
por sapito169
Pregunta trozo código ensamblador de malware
Análisis y Diseño de Malware
orApic 6 3,674 Último mensaje 19 Junio 2017, 17:44 pm
por orApic
Ayuda con trozo codigo de "quiere continuar s/n"..
Programación C/C++
samis101 4 1,690 Último mensaje 6 Diciembre 2018, 07:28 am
por AlbertoBSD
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines