Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: cristofermil en 21 Enero 2017, 23:00 pm



Título: En una funcion nunca debe ir cout y cin??
Publicado por: cristofermil en 21 Enero 2017, 23:00 pm
Mi profesor me explico que nunca dentro de una función debe ir cout y cin , digamos un ejemplo : este es para hallar el máximo común divisor de 2 números , si se fijan al ultimo del void puse cout , pero dicen que la funcion void no devuelve nada , si no devuelve nada como rayos me va a botar el compilador algo :¬¬ :¬¬ ?? , entonces para que me sirviria , expliquenme :silbar: :silbar: detalladamente porfavor ;) :3
Código
  1. #include <iostream>
  2. using namespace std;
  3. void MCD(int a, int b) {
  4. int m;
  5. if(a>b){
  6. m=a%b;
  7. }
  8. else if(b>a){
  9. m=b%a;
  10. }
  11. else if(a==b){
  12. m=1;
  13. }
  14. cout<<"el maximo comun divisior es :"<<m;
  15. }
  16. int main(){
  17. int p,q;
  18. cout<<"ingrese el primer valor :"; cin>>p;
  19. cout<<"ingrese el segundo valor :"; cin>>q;
  20. MCD(p,q);
  21.  
  22. }
  23.  
  24.  


Título: Re: En una funcion nunca debe ir cout y cin??
Publicado por: engel lex en 21 Enero 2017, 23:07 pm
probablemente sacas un poco de contexto a tu profesor, con eso de cin y cout... solo que el ejemplo no es para hacerlo así...
simplemente cambia void en el MCD por int y en lugar de usar cout, usas return (claro que sin <<) y listo, puedes hacer

Código
  1. cout << MCD(p,q);


Título: Re: En una funcion nunca debe ir cout y cin??
Publicado por: ivancea96 en 22 Enero 2017, 12:33 pm
Para concretar:
Una función es, o un trozo de código que quieres "encapsular", también llamado sub-rutina o sub-programa, o, como una función matemática, a la que tú le das unos valores de entrada y ella te da unos valores de salida.

En el primer caso, usar cout/cin o cualquier otro método de entrada o salida es totalmente válido (mientras sea coherente, claro, generelizar es complicado).
En el segundo caso, rara vez querrás hacer eso.

Tu ejemplo claramente es del "segundo tipo". Tú le das unos valores de entrada (a, b), y ella te da un valor de retorno que ella calcula (MCD). La forma de usar esa función es como dijo engel lex.

Imagínate que el MCD no lo quieres sacar por pantalla con cout, sino que quieres guardarlo en un archivo. Tendrías que modificar la función para lograrlo, mientras que haciendo que retorne el valor, sería tan simple como:
Código
  1. archivo << MCD(5,8);
U otro ejemplo:
Código
  1. int n = 50 / MCD(50, 25);
  2. for(int i=0; i<n; i++){
  3.    // ...
  4. }