[ Foro de C++ ]

QUE IMPRIME EL CODIGO...

13-May-2011 14:56
oscar gomez
6 Respuestas

Cordial saludo profesor Nacho Cabanes. GRACIAS POR TU TIEMPO Y TU GENEROSA AYUDA.

profesor es que en el siguiente programa me gustaria me explicaras, unas dudas que tengo:


Qué IMPRIME el siguiente segmento de código

#include <iostream.h>
void hace(int p, int &s, double &r)
{          
   p = s / 2;
   s++;
   r =p / s;
}
void main()
{
  int x = 12,  z = 2;
  double y = 4;
  hace(x, z, y);
  cout << x << " " << y << " " << z << endl;
}


al ejecutarlo tal cual me da los siguientes errores de ejecucion que no entiendo el porque y me gustaria me indicaras de que se trata o que esta mal en el programa.

32:2 C:\Dev-Cpp\include\c++\3.4.2\backward\backward_warning.h #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.


9 C:\Documents and Settings\user\resultado.cpp
`main' must return `int'


SI EN VEZ DE VOID EN LA FUNCION MAIN() PONGO INT me permite ejecutarlo, por que me exige int y no me acepta void?

ademas no se si este correcto el VOID de la funcion porque al fin y al cabo la funcion retorna valores tanto para el parametro por valor y los dos parametros por referencia(&)pues en ejecucion me da como resultado los valores:
x=12, y=0 y z=3
y sin embargo el void indica que la funcion no devuelve ningun valor entonces por que me da como resultado de ejecucion dichos valores??

gracias por tu ayuda profesor.


13-May-2011 15:05
oscar gomez

en que caso es correcto el void en el main() o en una funcion si pudieras explicarmelo atraves de un ejemplo te lo agradeceria.


15-May-2011 21:50
Nacho Cabanes (+30)

Tomado textualmente del apartado 7.5 de mi curso de C en

http://www.aprendeaprogramar.com/mod/resource/view.php?id=323

------

La forma habitual de declarar el cuerpo de un programa (“main”) sería ésta:

int main() {
 ...
}

Eso quiere decir que “main” también puede devolver un valor, que se leerá desde fuera de nuestro programa. Lo habitual es devolver 0 si todo ha funcionado correctamente

int main() {
 ...
 return 0;
}

Y devolveríamos otro valor si hubiera habido algún problema durante el funcionamiento de nuestro programa (por ejemplo, si no hemos podido abrir algún fichero):

int main() {
 FILE* fichero;
 fichero = fopen("nombre.txt", "rt");
 if (fichero == NULL) return 1;
 ...
 return 0;
}

Este valor se podría comprobar desde el sistema operativo. Por ejemplo, en MsDos y Windows se lee con “IF ERRORLEVEL”, así:

IF ERRORLEVEL 1 ECHO Ha habido un error en el programa

------

Algunos compiladores permiten que se declare "main" como "void" y que no devuelva valor, pero no puedes contar con que cualquier compilador lo permita.


16-May-2011 12:39
oscar gomez

Cordial saludo profesor Nacho Cabanes, gracias por tu atencion,tu tiempo y tu ayuda.

profesor es que me gustaria me explicaras un poco mas acerca de lo que te pregunto es que la explicacion que me das no resuelve mis dudas puntuales que te plantee en el enunciado de mis inquietudes,por favor te pido tengas en cuenta este mensaje e intentes ayudarme un poco mas para poder entender bien lo que te planteo en el mismo mil gracias profesor.


19-May-2011 19:04
Nacho Cabanes (+30)

¿La duda no era si usar "int" o "void" en main?

Si era sobre el contenido del programa... detalla más.  ;-)


19-May-2011 20:54
oscar gomez

Hola profesor gracias por tus orientaciones y tu valioso tiempo.

mira la verdad tengo dos dudas al respecto del programa:

1)

void hace(int p, int &s, double &r)
{          
   p = s / 2;
   s++;
   r =p / s;
}

en esta funcion el hecho de que retorne al programa donde se invoco la funcion,las dos variables que han sido pasadas por referencia (int &s, double &r),impiden que la funcion retornara a traves de return  otro valor?, porejemplo:

int hace(int p, int &s, double &r)
{          
   p = s / 2;
   s++;
   r =p / s;
  operacion = p+s;
 return operacion;
}

es decir, el hecho de que la funcion retorne el valor que tenga operacion ( como un valor int), no tiene nada que ver con que realmente se envien las variables s y r que han sido pasadas por referencia y que cambian su valor dentro de la funcion?

2)

En que caso puede utilizarse dentro de main() un valor void, por que generalmente cuando se hace void main(), el compilador pide que sea int, es decir int main()


porejemplo en el caso del codigo:

void main()
{
 int x = 12,  z = 2;
 double y = 4;
 hace(x, z, y);
 cout << x << " " << y << " " << z << endl;
}


por que void main(), y no porejemplo int main()???


me podrias explicar bien a traves de un ejemplo, es que estoy confundido en ello.

gracias


21-May-2011 21:58
Nacho Cabanes (+30)

Con relación a tus dos preguntas:

1) Una función sin parámetros puede devolver un único valor:

int numeroAlAzar()

Si quieres devolver dos valores (o más) tienes dos alternativas:

- Que la función pase a ser "void" y usar dos parámetros que se devuelvan por referencia.

- Que un valor se devuelva como retorno de la función y el otro como parámetro por referencia.

Lo más natural y lo más legible es lo primero.

2) Como ya te he comentado anteriormente, "main" debería ser int, y terminar con "return 0" en caso de que no haya problemas, aunque algunos compiladores (no todos) permiten que se declare como "void" y no se devuelva nada.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)