programa que muestre los números naturales mas pequeños que n

Iniciado por indict, 19 Octubre 2012, 19:13 PM

0 Miembros y 1 Visitante están viendo este tema.

indict

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 :D

marccamacho

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?  :P
  • 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!!!

Enagymo

#2
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;
}

indict

Cita de: Enagymo en 19 Octubre 2012, 19:34 PM
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;
}


za.asi

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;
}


marccamacho

#5
Citar
#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;
}



indict

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;
}



Enagymo

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:

cout<<i<<endl;
i--;


El resultado es el mismo, sólo cuestión de legibilidad.

Saludos.

za.asi

Si es usando solo while lo mas facil es


...
     int i=1;
     cin >> n;
     while i<=n;
     {
          cout << i;
          i++;
     }
...