Autor
|
Tema: programa que muestre los números naturales mas pequeños que n (Leído 5,390 veces)
|
indict
Desconectado
Mensajes: 78
|
Hola, quiero hacer un programa que al introducirle un número natural n, calcule sus números menores hasta el 1. Ej de 7, 6,5,4,3,2,1 He echo lo siguiente pero solo me calcula el primer n-1 y sigue infinitamente, #include<iostream> using namespace std;
int main(){ int n,i=0; cin>>n; while (i<n){ i=n-1; cout<<i<<endl;} system ("PAUSE"); return 0; }
Gracias por la ayuda
|
|
|
En línea
|
|
|
|
marccamacho
Desconectado
Mensajes: 6
|
Buenas tardes!!! Primero de todo tienes que tener bien claro lo que quieres que te muestre... Quieres que te muestre la série crecientemente o decrecientemente? Tal como lo planteas en el 'enunciado', lo quieres hacer decrecientemente. En tal caso tienes un par de cosas mal... - La declaración y su posterior asignación de valores de variables. Declaras una variable n, que és la que utilizas para saber en que número empieza la série. Esto está bien. Luego a la variable i, le das un valor 0... En qué quedamos, empezamos de 0 o del número mayor?
- Luego, la condición del "while" no está bien planteada en caso de querer hacer la série decreciente.
- Y por último, la variable i, SIEMPRE tiene el mismo valor. Por que? Sencillo, n nunca cambia de valor y eso hace que i solo canvie una vez de valor (en la primera iteración).
haber si puedes corregir eso! Hasta otra!!!
|
|
|
En línea
|
|
|
|
Enagymo
Desconectado
Mensajes: 7
|
Le estás asignando a "i" dentro del while "n - 1", al no variar la variable "n", esa asignación siempre va a dar lo mismo y por ende nunca sale del loop. Solución: lo que tenés que modificar dentro del while es el valor de "i". Si lo querés recorrer de N..0 tenés que: - Inicializar "i" con "n - 1" (asignarselo antes del while)
- Dentro del while decrementar la variable "i" en 1, o sea "i--;".
- La condición del while debería de ser mientras que "i" sea mayor a 0.
Para esto también podrías usar un for: #include<iostream> using namespace std;
int main(){ int n; cin>>n; for(int i = n - 1; i > 0; i--) { cout<<i<<endl; } system ("PAUSE"); return 0; }
|
|
« Última modificación: 19 Octubre 2012, 19:36 pm por Enagymo »
|
En línea
|
|
|
|
indict
Desconectado
Mensajes: 78
|
Le estás asignando a "i" dentro del while "n - 1", al no variar la variable "n", esa asignación siempre va a dar lo mismo y por ende nunca sale del loop. Solución: lo que tenés que modificar dentro del while es el valor de "i". Si lo querés recorrer de N..0 tenés que: - Inicializar "i" con "n - 1" (asignarselo antes del while)
- Dentro del while decrementar la variable "i" en 1, o sea "i--;".
- La condición del while debería de ser mientras que "i" sea mayor a 0.
Para esto también podrías usar un for: #include<iostream> using namespace std;
int main(){ int n; cin>>n; for(int i = n - 1; i > 0; i--) { cout<<i<<endl; } system ("PAUSE"); return 0; } Muchas gracias por el aporte, pero en los ejercicios solo puedo utilizar while, si lo hago sin usar for, al dar un número empieza la sucesión con -1, es decir 7 hace 5,4,3,2,1. #include<iostream> using namespace std;
int main(){ int n,i; cin>>n; i=n-1; while (i>0){ i=i-1; cout<<i<<endl;} system ("PAUSE"); return 0; }
|
|
|
En línea
|
|
|
|
za.asi
Desconectado
Mensajes: 62
|
También puedes hacer el bucle con while. De la manera en que lo he hecho yo te salen los numeros por orden ascendente (Aunque se puede invertir facilmente) #include <iostream>
using namespace std;
int main () { int n, i=1; cin >> n; do { cout << endl << i; i++; }while (i<n); cin >> n; return 0; }
|
|
|
En línea
|
|
|
|
marccamacho
Desconectado
Mensajes: 6
|
#include<iostream> using namespace std;
int main(){ int n,i; cin>>n; i=n-1; while (i>0){ i=i-1; cout<<i<<endl;} system ("PAUSE"); return 0; }
Entonces empieza por i=n! Piensa que tu le das a i el valor n-1 (6) y luego, en la primera iteración, antes de mostrar i por pantalla, la vuelves a decrementar y tiene valor (5). El código podria ser el siguiente: int main(){ int n,i; cin>>n; i=n; cout << n << endl; //endl sólo si quieres hacer el salto de línea, y el cout de n sólo si quieres mostrar también el valor inicial, n while (i>0){ i=i-1; cout<<i<<endl;} system ("PAUSE"); return 0; }
|
|
« Última modificación: 19 Octubre 2012, 19:58 pm por marccamacho »
|
En línea
|
|
|
|
indict
Desconectado
Mensajes: 78
|
muchas gracias por la explicación, tomando que i=i+1 también se obtiene la sucesión decreciente. #include<iostream> using namespace std;
int main(){ int n,i; cin>>n; i=n+1; while (i>0){ i--; cout<<i<<endl;} system ("PAUSE"); return 0; }
|
|
|
En línea
|
|
|
|
Enagymo
Desconectado
Mensajes: 7
|
Creo que lo más "prolijo" en tu caso es inicializar "i" con "n" y dentro del loop realizar el output del número y después modificar el índice: El resultado es el mismo, sólo cuestión de legibilidad. Saludos.
|
|
|
En línea
|
|
|
|
za.asi
Desconectado
Mensajes: 62
|
Si es usando solo while lo mas facil es ... int i=1; cin >> n; while i<=n; { cout << i; i++; } ...
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Programa que muestre los numeros OMIRP
Programación C/C++
|
nigarcia
|
9
|
10,913
|
18 Julio 2011, 04:58 am
por PiroskY
|
|
|
Q estoy haciendo mal programa c++ que permita mostrar los primeros N naturales
Programación C/C++
|
oliverluis
|
6
|
3,749
|
30 Noviembre 2011, 13:00 pm
por Ferno
|
|
|
Script que muestre imagen si host responde,o que muestre otra si esta off
Scripting
|
Anonymous250
|
3
|
3,638
|
9 Diciembre 2011, 12:53 pm
por Novlucker
|
|
|
Como hacer para que muestre numeros aleatoreos y tengo q resolver la suma
Programación Visual Basic
|
manu4561
|
3
|
2,959
|
4 Julio 2012, 12:25 pm
por noele1995
|
|
|
Una joven descubre nuevo método para sumar los cien primeros números naturales
Noticias
|
wolfbcn
|
6
|
4,808
|
30 Octubre 2012, 22:30 pm
por kasiko
|
|