Ayuda en funciones en estructuras

Iniciado por Mozzard, 4 Enero 2019, 12:56 PM

0 Miembros y 1 Visitante están viendo este tema.

Mozzard

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:
#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.
Programalo... sin miedo...

K-YreX

Las funciones se declaran fuera del main y se usan dentro de este
Código (cpp) [Seleccionar]

struct Complejo{
    double real;
    double imaginario;
};

Complejo sumar(Complejo, Complejo);

int main(){
    Complejo num1, num2; // mejor declararlos locales, no globales
    num1.real = 2;
    num1.imaginario = 1;
    num2.real = 3;
    num2.imaginario = 2;

    Complejo suma = sumar(num1, num2);
}

Complejo sumar(Complejo a, Complejo b){
    Complejo suma;
    suma.real = a.real + b.real;
    suma.imaginario = a.imaginario + b.imaginario;
    return suma;
}


Las sumas de tu función sobra el = de cada +=. Eso se usa para otra cosa. Suerte :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

Cero++

Cita de: 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:
#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 (cpp) [Seleccionar]
#include <iostream>
#include <math.h>
using namespace std;
struct complejo {
float real, imaginario;
}num1, num2;
complejo sumar(complejo a,complejo b) {
complejo suma;
suma.real= a.real += b.real;
suma.imaginario=a.imaginario += b.imaginario;
return suma;
}
int main(int argc, char *argv[]) {



return 0;
}



O podes hacer prototipo antes del main y luego seguir programandola luego del main, así:
Código (cpp) [Seleccionar]
#include <iostream>
#include <math.h>
using namespace std;
struct complejo {
float real, imaginario;
}num1, num2;

complejo sumar(complejo a,complejo b);

int main(int argc, char *argv[]) {

return 0;
}
complejo sumar(complejo a,complejo b) {
complejo suma;
suma.real= a.real += b.real;
suma.imaginario=a.imaginario += b.imaginario;
return suma;
}


Así pues, ya no deberías tener ningún problema de sintaxis.  ;D
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]

Cero++

Cita de: YreX-DwX en  4 Enero 2019, 13:52 PM
Las funciones se declaran fuera del main y se usan dentro de este
Código (cpp) [Seleccionar]

struct Complejo{
    double real;
    double imaginario;
};

Complejo sumar(Complejo, Complejo);

int main(){
    Complejo num1, num2; // mejor declararlos locales, no globales
    num1.real = 2;
    num1.imaginario = 1;
    num2.real = 3;
    num2.imaginario = 2;

    Complejo suma = sumar(num1, num2);
}

Complejo sumar(Complejo a, Complejo b){
    Complejo suma;
    suma.real = a.real + b.real;
    suma.imaginario = a.imaginario + b.imaginario;
    return suma;
}


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
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]

Mozzard

Cita de: YreX-DwX en  4 Enero 2019, 13:52 PM
Las funciones se declaran fuera del main y se usan dentro de este
Código (cpp) [Seleccionar]

struct Complejo{
    double real;
    double imaginario;
};

Complejo sumar(Complejo, Complejo);

int main(){
    Complejo num1, num2; // mejor declararlos locales, no globales
    num1.real = 2;
    num1.imaginario = 1;
    num2.real = 3;
    num2.imaginario = 2;

    Complejo suma = sumar(num1, num2);
}

Complejo sumar(Complejo a, Complejo b){
    Complejo suma;
    suma.real = a.real + b.real;
    suma.imaginario = a.imaginario + b.imaginario;
    return suma;
}


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?
Complejo sumar(Complejo, Complejo);
Programalo... sin miedo...

K-YreX

Código (cpp) [Seleccionar]

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 (cpp) [Seleccionar]

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 (cpp) [Seleccionar]

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 (cpp) [Seleccionar]

Complejo convertir(double real, double imaginaria){
    Complejo resultado;
    resultado.real = real;
    resultado.imaginaria = imaginaria;
    return resultado;
}


Suerte :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

MAFUS

Creo que pregunta por los métodos.

Cero++

Cita de: MAFUS en  5 Enero 2019, 02:10 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
Ser diligente es lo ÚNICO que importa para lograr el éxito[c/ode]