Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Mozzard en 4 Enero 2019, 12:56 pm



Título: Ayuda en funciones en estructuras
Publicado por: Mozzard en 4 Enero 2019, 12:56 pm
Bueno pues yo programaba lo básico en c, y decidí pasarme a c++,pues me compré un libro que parecía ser el ideal.
Ahora este en un ejercicio supone que yo ya se hacer funciones en estructuras, pero por alguna razón, las hago como si fueran las normales y no compila el visual studio:
Código:
#include "pch.h"
#include <iostream>
#include <math.h>
using namespace std;

struct complejo {
float real, imaginario;
}num1, num2;
int main()
{
complejo sumar(complejo a,complejo b) {
complejo suma;
suma.real= a.real += b.real;
suma.imaginario=a.imaginario += b.imaginario;
return suma;
}

}
He buscado bastante en google, pero tampoco me deja las cosas claras.


Título: Re: Ayuda en funciones en estructuras
Publicado por: K-YreX en 4 Enero 2019, 13:52 pm
Las funciones se declaran fuera del main y se usan dentro de este
Código
  1.  
  2. struct Complejo{
  3.    double real;
  4.    double imaginario;
  5. };
  6.  
  7. Complejo sumar(Complejo, Complejo);
  8.  
  9. int main(){
  10.    Complejo num1, num2; // mejor declararlos locales, no globales
  11.    num1.real = 2;
  12.    num1.imaginario = 1;
  13.    num2.real = 3;
  14.    num2.imaginario = 2;
  15.  
  16.    Complejo suma = sumar(num1, num2);
  17. }
  18.  
  19. Complejo sumar(Complejo a, Complejo b){
  20.    Complejo suma;
  21.    suma.real = a.real + b.real;
  22.    suma.imaginario = a.imaginario + b.imaginario;
  23.    return suma;
  24. }

Las sumas de tu función sobra el = de cada +=. Eso se usa para otra cosa. Suerte :-X


Título: Re: Ayuda en funciones en estructuras
Publicado por: Cero++ en 4 Enero 2019, 14:00 pm
Bueno pues yo programaba lo básico en c, y decidí pasarme a c++,pues me compré un libro que parecía ser el ideal.
Ahora este en un ejercicio supone que yo ya se hacer funciones en estructuras, pero por alguna razón, las hago como si fueran las normales y no compila el visual studio:
Código:
#include "pch.h"
#include <iostream>
#include <math.h>
using namespace std;

struct complejo {
float real, imaginario;
}num1, num2;
int main()
{
complejo sumar(complejo a,complejo b) {
complejo suma;
suma.real= a.real += b.real;
suma.imaginario=a.imaginario += b.imaginario;
return suma;
}

}
He buscado bastante en google, pero tampoco me deja las cosas claras.

A ver, si no mal entiendo, por lo que veo (corrígeme si me equivoco) has programado la función dentro del main verdad?
Las funciones siempre se programan por fuera del main, de este modo:
Código
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4. struct complejo {
  5. float real, imaginario;
  6. }num1, num2;
  7. complejo sumar(complejo a,complejo b) {
  8. complejo suma;
  9. suma.real= a.real += b.real;
  10. suma.imaginario=a.imaginario += b.imaginario;
  11. return suma;
  12. }
  13. int main(int argc, char *argv[]) {
  14.  
  15.  
  16.  
  17. return 0;
  18. }
  19.  
  20.  


O podes hacer prototipo antes del main y luego seguir programandola luego del main, así:
Código
  1. #include <iostream>
  2. #include <math.h>
  3. using namespace std;
  4. struct complejo {
  5. float real, imaginario;
  6. }num1, num2;
  7.  
  8. complejo sumar(complejo a,complejo b);
  9.  
  10. int main(int argc, char *argv[]) {
  11.  
  12. return 0;
  13. }
  14. complejo sumar(complejo a,complejo b) {
  15. complejo suma;
  16. suma.real= a.real += b.real;
  17. suma.imaginario=a.imaginario += b.imaginario;
  18. return suma;
  19. }

Así pues, ya no deberías tener ningún problema de sintaxis.  ;D


Título: Re: Ayuda en funciones en estructuras
Publicado por: Cero++ en 4 Enero 2019, 14:02 pm
Las funciones se declaran fuera del main y se usan dentro de este
Código
  1.  
  2. struct Complejo{
  3.    double real;
  4.    double imaginario;
  5. };
  6.  
  7. Complejo sumar(Complejo, Complejo);
  8.  
  9. int main(){
  10.    Complejo num1, num2; // mejor declararlos locales, no globales
  11.    num1.real = 2;
  12.    num1.imaginario = 1;
  13.    num2.real = 3;
  14.    num2.imaginario = 2;
  15.  
  16.    Complejo suma = sumar(num1, num2);
  17. }
  18.  
  19. Complejo sumar(Complejo a, Complejo b){
  20.    Complejo suma;
  21.    suma.real = a.real + b.real;
  22.    suma.imaginario = a.imaginario + b.imaginario;
  23.    return suma;
  24. }

Las sumas de tu función sobra el = de cada +=. Eso se usa para otra cosa. Suerte :-X
A pues, es como dijo el profe  ;D


Título: Re: Ayuda en funciones en estructuras
Publicado por: Mozzard en 4 Enero 2019, 17:37 pm
Las funciones se declaran fuera del main y se usan dentro de este
Código
  1.  
  2. struct Complejo{
  3.    double real;
  4.    double imaginario;
  5. };
  6.  
  7. Complejo sumar(Complejo, Complejo);
  8.  
  9. int main(){
  10.    Complejo num1, num2; // mejor declararlos locales, no globales
  11.    num1.real = 2;
  12.    num1.imaginario = 1;
  13.    num2.real = 3;
  14.    num2.imaginario = 2;
  15.  
  16.    Complejo suma = sumar(num1, num2);
  17. }
  18.  
  19. Complejo sumar(Complejo a, Complejo b){
  20.    Complejo suma;
  21.    suma.real = a.real + b.real;
  22.    suma.imaginario = a.imaginario + b.imaginario;
  23.    return suma;
  24. }

Las sumas de tu función sobra el = de cada +=. Eso se usa para otra cosa. Suerte :-X



Al declarar la funcion en la linea 7 que significa poner esos parametros?
Código:
Complejo sumar(Complejo, Complejo);


Título: Re: Ayuda en funciones en estructuras
Publicado por: K-YreX en 4 Enero 2019, 17:52 pm
Código
  1. Complejo sumar(Complejo, Complejo);
Esto es el prototipo de una función a la que se le pasan dos variables de tipo <Complejo> (que es la <struct> que has creado) y retorna otro valor de tipo <Complejo>. Es como poner:
Código
  1. int sumar(int, int); // suma dos enteros y retorna la suma

Cuando haces un prototipo no es necesario poner el nombre de la variable ya que no lo vas a usar pero cuando defines la función, sí. Por eso en el prototipo (línea 7) sólo he puesto el tipo de variable que toma como parámetros y en la definición de la función (líneas 19-24) les pongo nombre a cada parámetro (a y b respectivamente) porque en la definición sí los voy a usar.

Si pones en la línea 7:
Código
  1. Complejo sumar(Complejo a, Complejo b);
también es válido. O con cualquier otro nombre en vez de a y b puedes poner num1, num2 o lo que quieras. En esta función no importa mucho el nombre porque es algo muy sencillo pero en funciones más largas o complejas es recomendable usar nombres que te ayuden a entender lo que hacen por ejemplo:
Código
  1. Complejo convertir(double real, double imaginaria){
  2.    Complejo resultado;
  3.    resultado.real = real;
  4.    resultado.imaginaria = imaginaria;
  5.    return resultado;
  6. }

Suerte :-X


Título: Re: Ayuda en funciones en estructuras
Publicado por: MAFUS en 5 Enero 2019, 02:10 am
Creo que pregunta por los métodos.


Título: Re: Ayuda en funciones en estructuras
Publicado por: Cero++ en 5 Enero 2019, 02:13 am
Creo que pregunta por los métodos.

Puede ser, pero el código que puso de ejemplo me hizo pensar que se refería a funciones  :xD