Recursividad en C++, programas que no comprendo muy bien

Iniciado por TaLaP0 XoR BiT, 25 Octubre 2012, 19:25 PM

0 Miembros y 2 Visitantes están viendo este tema.

BatchianoISpyxolo

Cita de: BatchianoISpyxolo en 26 Octubre 2012, 01:45 AM
...y si quieres generar la misma figura que la tuya solo le tienes que poner una condición para que genere correctamente las dos últimas filas.
Puede que desees aprender a programar desde 0: www.espascal.es

leosansan

Cita de: BatchianoISpyxolo en 26 Octubre 2012, 15:23 PM
...y si quieres generar la misma figura que la tuya solo le tienes que poner una condición para que genere correctamente las dos últimas filas.
Lo haría con el código de cypascal, pero el tuyo es demasiado "denso": realmente has sacado la artillería pesada: strcpy, strcat, malloc ....
Pero reconozco que lo has "bordado", me parece increible.

BatchianoISpyxolo

Cita de: leosansan en 26 Octubre 2012, 15:39 PM
Lo haría con el código de cypascal, pero el tuyo es demasiado "denso": realmente has sacado la artillería pesada: strcpy, strcat, malloc ....
Pero reconozco que lo has "bordado", me parece increible.


Opino lo mismo que tú :P

PD: ya modifiqué el código para que sea exactamente la figura que se pide.
Puede que desees aprender a programar desde 0: www.espascal.es

leosansan

#13
Cita de: BatchianoISpyxolo en 26 Octubre 2012, 15:45 PM
Opino lo mismo que tú :P
PD: ya modifiqué el código para que sea exactamente la figura que se pide.
Corrige algo porque sólo me sale " 1 ". No veo la sentencia - scanf- que permita entrar el tamaño de la figura. Supongo que estoy torpe, pero no me "cuadra" el código sin un scanf o un tamaño predeterminado. Perdona las observaciones. ¿O lo entras por el terminal?. Sí, eso es de ahí la conversión atoi. OK. Aclarado. Basta cambiar
Código (cpp) [Seleccionar]
figura(atoi(argv[1]));
por
       int num;
printf ("Entre un numero IMPAR:");
scanf ("%d",&num);
figura(num);

Pero no funciona correctamente ya que el 1 2 están desplazados una posición más a la derecha de lo que deberían; lo mismo le pasa al último 1.Saludos!

BatchianoISpyxolo

#14
Cita de: leosansan en 26 Octubre 2012, 17:55 PM
Corrige algo porque sólo me sale " 1 ". No veo la sentencia - scanf- que permita entrar el tamaño de la figura. Supongo que estoy torpe, pero no me "cuadra" el código sin un scanf o un tamaño predeterminado. Perdona las observaciones. ¿O lo entras por el terminal?. Sí, eso es de ahí la conversión atoi. OK. Aclarado. Basta cambiar
Código (cpp) [Seleccionar]
figura(atoi(argv[1]));
por
       int num;
printf ("Entre un numero IMPAR:");
scanf ("%d",&num);
figura(num);

Pero no funciona correctamente ya que el 1 2 están desplazados una posición más a la derecha de lo que deberían; lo mismo le pasa al último 1.Saludos!

Disculpa, no me fijé. Es sencillo, para esos dos casos, basta con rectificar su salto inicial (jump) en un espacio.

Código modificado.

PD: cuidado con recoger valores numéricos por teclado  :D
Puede que desees aprender a programar desde 0: www.espascal.es

leosansan

#15
Cita de: BatchianoISpyxolo en 26 Octubre 2012, 22:22 PM
Código modificado.
PD: cuidado con recoger valores numéricos por teclado  :D
;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
Y yo que creía que mi código lo había hecho demasiado complejo.....
Desde que tenga tiempo trataré de implementarlo con recursividad, pero más "humanizado"  :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

REEDITO:

Ya lo tengo con recursividad y sin la "artilleria pesada"  :rolleyes: :rolleyes:
Código (cpp) [Seleccionar]
#include <iostream>
#include <iomanip>
using namespace std;
int cont=0;
int dibuja (int a);
int main()
{
    int a,cont =0;
    cout << "Introduce un numero IMPAR: "<<endl;
    cin >> a;
    dibuja (a);
    return 0;
}
int dibuja (int a)
{
    if (a==0) return 1;
    for (int i=1;i<=a;i++)
                cout<<i<<" " ;
    cout <<endl << setw(cont) << " ";
    if (a<=3 )
                {cont ++;dibuja (a-1);}
    else
                {cont+=2;dibuja (a-2);}

}


Ahora en serio, envidio tus conocimientos en C++, yo me manejo mejor en C - y estoy empezando- y apenas en C++. Tu código demuestra un conocimiento y manejo de librerias, comandos y punteros que ya quisiera yo para mí.
...... Pero no me negaras que mi código es más "humano".
:silbar: :silbar: :silbar: