Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Joan.Agusti en 8 Mayo 2016, 16:23 pm



Título: Aprendiendo a programar
Publicado por: Joan.Agusti en 8 Mayo 2016, 16:23 pm
Hola a todos, hace menos de una setmana que estoy aprendiendo a programar con C++, debido a que en la universiad lo necesito para hacer calculos numericos, y bueno, me he cogido un libro de la biblioteca, Problemas Resueltos de  Programación en Lenguaje C++ y he ha salido un problema que necessito vuestra ayuda.
Dice así: Escriba un programa que acepte un entero positivo y determine si es un numero perfecto (un numero perfecto es un numero el cual se puede obtener sumando sus divisores propios, y un divisor propio es aquel que n%d==0).
El caso es que este ejercicio lo tengo resuelto, pero lo he intentado "ampliar", haciendo que el cogido entre un bucle en el cual puedas introducir el numero sin que se cierre la ventana.

Código:
#include<iostream>
using namespace std;

int main(){
    int numero;
    int suma=0;
    int divisor=1;
    char opcion;
   
  do {
       
       
    cout<<"Introduzca un numero: "<<endl;
    cin>>numero;
   
    cout<<"Los divisores propios de "<<numero<<" son: " <<endl;
    while(divisor<numero){
                          if(numero%divisor==0){
                                                cout<<divisor<<" ";
                                                suma+=divisor;
                                                }
                          divisor++;
   
                         
                         
    }
    if(numero==suma)
       cout<<"el numero es perfecto"<<endl;
    else
       cout<<"el numero no es perfecto"<<endl;


          cout<<"Quieres poner otro numero [s/n]? "<<endl;
          cin>>opcion;

  }while(opcion=='s');
   

       
       system("pause");
       return 0;
       
}

Asi, lo he he hecho para ampliar el codio es introducir este do-while. Pero el problema es que cuando lo hago, la parte de la suma no me sale en la ventana, y no se porque.

Otra duda: tengo que poner siempre system("pause"); al final de cada codigo? es que si no lo pongo, la ventana se me cierra muy rapido y no puedo fer el output.
Utilizo el DevC++ como compilador.

Gracias :)


Título: Re: Aprendiendo a programar
Publicado por: ivancea96 en 8 Mayo 2016, 16:28 pm
Con respecto a lo del system("pause");, una vez que acabe el programa, se va a cerrar. Si la consola la creó el mismo programa, también se cerrar.a la consola. La opción, es que primero abras un cmd, y luego llames al programa ">> programa.exe".´Sinó, pues system("pause"); o cualquier método que quieras para detener el programa.

Con respecto a lo otro, con "cin>>" es preferible no mezclar "cin>>int" con "cin>>string" con "cin>>char". En general, no mezclar, porque dará problemas. La opción más sencilla que tienes es que "opcion" sea int, y en vez de pedir 's' o 'n', pidas '1' o '0', por ejemplo.