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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  programa que muestre los números naturales mas pequeños que n
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: programa que muestre los números naturales mas pequeños que n  (Leído 5,116 veces)
indict

Desconectado Desconectado

Mensajes: 78


Ver Perfil
programa que muestre los números naturales mas pequeños que n
« en: 19 Octubre 2012, 19:13 pm »

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,

Código:
#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


En línea

marccamacho

Desconectado Desconectado

Mensajes: 6


Ver Perfil
Re: programa que muestre los números naturales mas pequeños que n
« Respuesta #1 en: 19 Octubre 2012, 19:29 pm »

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!!!


En línea

Enagymo

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: programa que muestre los números naturales mas pequeños que n
« Respuesta #2 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:

Código:
#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 Desconectado

Mensajes: 78


Ver Perfil
Re: programa que muestre los números naturales mas pequeños que n
« Respuesta #3 en: 19 Octubre 2012, 19:44 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:

Código:
#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.

Código:
#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 Desconectado

Mensajes: 62


Ver Perfil
Re: programa que muestre los números naturales mas pequeños que n
« Respuesta #4 en: 19 Octubre 2012, 19:52 pm »

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)

Código:
#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 Desconectado

Mensajes: 6


Ver Perfil
Re: programa que muestre los números naturales mas pequeños que n
« Respuesta #5 en: 19 Octubre 2012, 19:56 pm »

Citar
Código:
#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:
Código:
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 Desconectado

Mensajes: 78


Ver Perfil
Re: programa que muestre los números naturales mas pequeños que n
« Respuesta #6 en: 19 Octubre 2012, 20:05 pm »

muchas gracias por la explicación,

tomando que i=i+1 también se obtiene la sucesión decreciente.

Código:
#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 Desconectado

Mensajes: 7


Ver Perfil
Re: programa que muestre los números naturales mas pequeños que n
« Respuesta #7 en: 19 Octubre 2012, 20:55 pm »

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:

Código:
cout<<i<<endl;
i--;

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

Saludos.
En línea

za.asi

Desconectado Desconectado

Mensajes: 62


Ver Perfil
Re: programa que muestre los números naturales mas pequeños que n
« Respuesta #8 en: 19 Octubre 2012, 22:04 pm »

Si es usando solo while lo mas facil es

Código:
...
     int i=1;
     cin >> n;
     while i<=n;
     {
          cout << i;
          i++;
     }
...
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines