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

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Recursividad en C++, programas que no comprendo muy bien
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Recursividad en C++, programas que no comprendo muy bien  (Leído 9,806 veces)
TaLaP0 XoR BiT

Desconectado Desconectado

Mensajes: 97



Ver Perfil WWW
Recursividad en C++, programas que no comprendo muy bien
« en: 25 Octubre 2012, 19:25 pm »

Buen dia a todos, he comenzado a estudiar C++, y tengo dudas con las iteraciones y las estructuras repetitivas.

me dejaron un programa que pida un numero que este numero siempre sea impar y que despues imprima lo siguiente:

por ejemplo si introduces el 7

                                  1234567
                                    12345
                                      123
                                       12
                                        1


yo hago:

 for (i=1; i<=7; i++)
       cout<<"i";

Esto me imprime 1234567, mi pregunta es como hago para imprimir la piramide invertida?? no en comprendido muy bien el concepto de anidar los for :( alguien que me explique "en español", se lo agradeceria muchisimo. Gracias de antemano. :huh:



En línea

za.asi

Desconectado Desconectado

Mensajes: 62


Ver Perfil
Re: Recursividad en C++, programas que no comprendo muy bien
« Respuesta #1 en: 25 Octubre 2012, 19:48 pm »

Si quieres la piramide invertida lo que deberías hacer es pedir un numero y luego escribes

Código:
for (n=7, n>0, n--)
   {
    cout <<n;
   }
cout << endl;
for (n=n-1, n<0, n--)
   {
    cout << n;
   }
 


En línea

TaLaP0 XoR BiT

Desconectado Desconectado

Mensajes: 97



Ver Perfil WWW
Re: Recursividad en C++, programas que no comprendo muy bien
« Respuesta #2 en: 25 Octubre 2012, 20:16 pm »

Al correrlo el programa escribe

14768890

creo que estan mal anidados los for.  :(

Si quieres la piramide invertida lo que deberías hacer es pedir un numero y luego escribes

Código:
for (n=7, n>0, n--)
   {
    cout <<n;
   }
cout << endl;
for (n=n-1, n<0, n--)
   {
    cout << n;
   }
 
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Recursividad en C++, programas que no comprendo muy bien
« Respuesta #3 en: 25 Octubre 2012, 21:13 pm »

Buen dia a todos, he comenzado a estudiar C++, y tengo dudas con las iteraciones y las estructuras repetitivas.

me dejaron un programa que pida un numero que este numero siempre sea impar y que despues imprima lo siguiente:

por ejemplo si introduces el 7

                                  1234567
                                    12345
                                      123
                                       12
                                        1


Citar
Creo que sería más exacto:
                                     1 2 3 4 5 6 7
                                        1 2 3 4 5
                                           1 2 3
                                            1 2
                                             1
Creo que lo he complicado demasiado, no estoy inspirado, pero es lo que te piden:
Código
  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    int a,cont =0;
  8.    cout << "Introduce un numero IMPAR: "<<endl;
  9.    cin >> a;
  10.    while (a>=0)
  11.       {
  12.            for (int i=1;i<=a;i++)
  13.                cout<<i<<" " ;
  14.            if (a<=3 )
  15.                {a-=1;cont ++;}
  16.            else
  17.                {a-=2;cont+=2 ;}
  18.            cout <<endl << setw(cont) << " ";
  19.       }
  20.    return 0;
  21. }
Redito: tengo que "ajustarlo" para números más grandes de 11.
« Última modificación: 25 Octubre 2012, 21:30 pm por leosansan » En línea

TaLaP0 XoR BiT

Desconectado Desconectado

Mensajes: 97



Ver Perfil WWW
Re: Recursividad en C++, programas que no comprendo muy bien
« Respuesta #4 en: 25 Octubre 2012, 21:30 pm »

Muchas gracias Leonsansan, pero realmente es asi disminuye de a dos no de 1, es decir, en la primera linea saldra 1234567, en la segunda le restamos dos, 12345 y asi sucesivamente. Pero gracias. una cosa mas que libreria es esa <iomanip>???


Creo que lo he complicado demasiado, no estoy inspirado, pero es lo que te piden:
Código
  1. #include <iostream>
  2. #include <iomanip>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    int a,cont =0;
  8.    cout << "Introduce un numero IMPAR: "<<endl;
  9.    cin >> a;
  10.    while (a>=0)
  11.       {
  12.            for (int i=1;i<=a;i++)
  13.                cout<<i<<" " ;
  14.            if (a<=3 )
  15.                {a-=1;cont ++;}
  16.            else
  17.                {a-=2;cont+=2 ;}
  18.            cout <<endl << setw(cont) << " ";
  19.       }
  20.    return 0;
  21. }
Redito: tengo que "ajustarlo" para números más grandes de 10.
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Recursividad en C++, programas que no comprendo muy bien
« Respuesta #5 en: 25 Octubre 2012, 21:37 pm »

Muchas gracias Leonsansan, pero realmente es asi disminuye de a dos no de 1, es decir, en la primera linea saldra 1234567, en la segunda le restamos dos, 12345 y asi sucesivamente. Pero gracias. una cosa mas que libreria es esa <iomanip>???
Citar
Entonces el enunciado tiene un fallo ya que al llegar a 12 debajo va el 1 y si no tiene "hueco" irá debajo del 1 o debajo del 2, porque no tendrá sitio en medio de ambos.
La librería es para el uso de "setw· que permite configurar el "espaciado"

En línea

TaLaP0 XoR BiT

Desconectado Desconectado

Mensajes: 97



Ver Perfil WWW
Re: Recursividad en C++, programas que no comprendo muy bien
« Respuesta #6 en: 25 Octubre 2012, 21:49 pm »


Gracias Leosansan, se te agradece mucho me has aclarado todo.



En línea

cypascal

Desconectado Desconectado

Mensajes: 42


Ver Perfil WWW
Re: Recursividad en C++, programas que no comprendo muy bien
« Respuesta #7 en: 26 Octubre 2012, 00:56 am »

Usando unicamente la libreria de entrada salida, el siguiente programa permite la construcción de la piramide que tu quieres hasta el numero 99. Te lo dejo aqui:http://cypascal.blogspot.com.es/2012/10/problema-8-piramide-de-numeros.html

y aqui:
Código:
#include <stdio.h>

int main()
{
int a,cont,espacios;

printf("Introduce un numero IMPAR: "); scanf("%d",&a);
printf("\n\n");

espacios=0;
while (a>=0)
{
if ((a)<8) espacios=espacios+1;
if ((a)>8) espacios=espacios+2;

for (cont=1;cont<=espacios;cont++) printf(" ");
for (cont=1;cont<=a;cont++)
{
printf("%d",cont);
}
printf("\n");
a=a-2;
}
return 0;
}

Espero que te sirva
En línea

Problemas interesantes de programación en C/C++ y Pascal en:
BLOG C/C++


WWW.CYPASCAL.BLOGSPOT.COM.ES
BatchianoISpyxolo

Desconectado Desconectado

Mensajes: 166


Ver Perfil
Re: Recursividad en C++, programas que no comprendo muy bien
« Respuesta #8 en: 26 Octubre 2012, 01:45 am »

Ya que tu título habla sobre recursividad te voy a dar la solución recursiva y funcional en C. Vale para cualquier entero 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.

Uso la librería stdlib.h para malloc y la string.h para jugar con el salto inical.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void figura(int n) {
  6.  
  7. int aux(int n, char * jump) {
  8.  
  9. if (n < -1) return 0;
  10. else {
  11.  
  12. if (n==1) {
  13. jump[strlen(jump)-1] = '\0';
  14. printf("%s1 2\n", jump);
  15. } else if (n==0 || n==-1) {
  16. jump[strlen(jump)-1] = '\0';
  17. printf("%s1\n", jump);
  18. } else {
  19. int i;
  20. printf("%s", jump);
  21. for ( i=1; i<=n; i++ )
  22. printf("%d ", i);
  23. printf("\n");
  24.  
  25. }
  26.  
  27. jump = strcat(jump, "  ");
  28. aux(n-2,jump);
  29. }
  30.  
  31. }
  32.  
  33. char * jump = malloc(n*sizeof(char)+1);
  34. strcpy(jump, "");
  35. aux(n,jump);
  36.  
  37. free(jump);
  38. jump = NULL;
  39.  
  40. }
  41.  
  42. void main (int argc, char * argv[]) {
  43. figura(atoi(argv[1]));
  44. }

Ejemplos de funcionamiento:

Código:
pyxolo@ubuntu:~/Escritorio$ ./f 3
1 2 3
 1 2
  1
pyxolo@ubuntu:~/Escritorio$ ./f 5
1 2 3 4 5
  1 2 3
   1 2
    1
pyxolo@ubuntu:~/Escritorio$ ./f 7
1 2 3 4 5 6 7
  1 2 3 4 5
    1 2 3
     1 2
      1
pyxolo@ubuntu:~/Escritorio$ ./f 9
1 2 3 4 5 6 7 8 9
  1 2 3 4 5 6 7
    1 2 3 4 5
      1 2 3
       1 2
        1
pyxolo@ubuntu:~/Escritorio$ ./f 11
1 2 3 4 5 6 7 8 9 10 11
  1 2 3 4 5 6 7 8 9
    1 2 3 4 5 6 7
      1 2 3 4 5
        1 2 3
         1 2
          1
pyxolo@ubuntu:~/Escritorio$ ./f 13
1 2 3 4 5 6 7 8 9 10 11 12 13
  1 2 3 4 5 6 7 8 9 10 11
    1 2 3 4 5 6 7 8 9
      1 2 3 4 5 6 7
        1 2 3 4 5
          1 2 3
           1 2
            1
pyxolo@ubuntu:~/Escritorio$ ./f 15
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
  1 2 3 4 5 6 7 8 9 10 11 12 13
    1 2 3 4 5 6 7 8 9 10 11
      1 2 3 4 5 6 7 8 9
        1 2 3 4 5 6 7
          1 2 3 4 5
            1 2 3
             1 2
              1

« Última modificación: 26 Octubre 2012, 22:29 pm por BatchianoISpyxolo » En línea

Puede que desees aprender a programar desde 0: www.espascal.es
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Recursividad en C++, programas que no comprendo muy bien
« Respuesta #9 en: 26 Octubre 2012, 12:00 pm »

Sólo tiene un pequeño fallo, no "termina" de hacer lo que quiere. En tú código se produce el resultado
1234567
  12345
    123
      1
cuando debería ser:
1 2 3 4 5 6 7
   1 2 3 4 5
     1 2 3
       1 2   <=== ésta faltaría en tú código.
        1
Saludos!.
« Última modificación: 26 Octubre 2012, 12:12 pm por leosansan » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
No comprendo codigo[Python]
Scripting
Ricardo95 2 3,266 Último mensaje 11 Diciembre 2010, 00:25 am
por Shell Root
Problema que no comprendo con la api GetPixel
Programación Visual Basic
Elemental Code 7 3,317 Último mensaje 7 Septiembre 2012, 00:17 am
por Dessa
Expliquenme esta nota que no la comprendo ?
.NET (C#, VB.NET, ASP)
TrashAmbishion 2 2,081 Último mensaje 4 Mayo 2013, 16:59 pm
por TrashAmbishion
[JS] Cada vez me siento más idiota, no comprendo lo más sencillo « 1 2 »
Desarrollo Web
Linton 10 4,672 Último mensaje 20 Junio 2013, 13:15 pm
por Linton
MOVIDO: [JS] Cada vez me siento más idiota, no comprendo lo más sencillo
Scripting
Novlucker 0 1,404 Último mensaje 17 Junio 2013, 21:25 pm
por Novlucker
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines