Autor
|
Tema: Recursividad en C++, programas que no comprendo muy bien (Leído 10,501 veces)
|
TaLaP0 XoR BiT
|
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 1yo 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. 
|
|
|
En línea
|
|
|
|
za.asi
Desconectado
Mensajes: 62
|
Si quieres la piramide invertida lo que deberías hacer es pedir un numero y luego escribes 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
|
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 for (n=7, n>0, n--) { cout <<n; } cout << endl; for (n=n-1, n<0, n--) { cout << n; }
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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
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:#include <iostream> #include <iomanip> using namespace std; int main() { int a,cont =0; cout << "Introduce un numero IMPAR: "<<endl; cin >> a; while (a>=0) { for (int i=1;i<=a;i++) cout<<i<<" " ; if (a<=3 ) {a-=1;cont ++;} else {a-=2;cont+=2 ;} cout <<endl << setw(cont) << " "; } return 0; }
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
|
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:#include <iostream> #include <iomanip> using namespace std; int main() { int a,cont =0; cout << "Introduce un numero IMPAR: "<<endl; cin >> a; while (a>=0) { for (int i=1;i<=a;i++) cout<<i<<" " ; if (a<=3 ) {a-=1;cont ++;} else {a-=2;cont+=2 ;} cout <<endl << setw(cont) << " "; } return 0; }
Redito: tengo que "ajustarlo" para números más grandes de 10.
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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>??? 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
|
Gracias Leosansan, se te agradece mucho me has aclarado todo.
|
|
|
En línea
|
|
|
|
cypascal
|
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.htmly aqui: #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
|
|
|
|
BatchianoISpyxolo
Desconectado
Mensajes: 166
|
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. #include <stdio.h> #include <stdlib.h> #include <string.h> void figura(int n) { int aux(int n, char * jump) { if (n < -1) return 0; else { if (n==1) { } else if (n==0 || n==-1) { } else { int i; for ( i=1; i<=n; i++ ) } aux(n-2,jump); } } char * jump = malloc(n *sizeof(char)+1); aux(n,jump); jump = NULL; } void main (int argc, char * argv[]) { }
Ejemplos de funcionamiento: 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
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
No comprendo codigo[Python]
Scripting
|
Ricardo95
|
2
|
3,597
|
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,569
|
7 Septiembre 2012, 00:17 am
por Dessa
|
|
|
Expliquenme esta nota que no la comprendo ?
.NET (C#, VB.NET, ASP)
|
TrashAmbishion
|
2
|
2,253
|
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
|
5,288
|
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,646
|
17 Junio 2013, 21:25 pm
por Novlucker
|
|