Uno de los problemas fundamentales está en el uso de TAMANO en las funciones, cuando deberías usar tamano, porque si no se llenan los restantes 50 valores de "basura" y te dan un resultado disparatado. Además creo que deberías incorporar la variable "módulo" a la strct, junto a parte real e imaginaria.
El otro error está en la función imprimir que le pasas un valor no establecido y te devuelve basura, aunque el resto del programa esté haciendo lo correcto.
Por cierto, puedes entrar el complejo nulo sin problemas, si cambias lo de tamano.
Como prueba he cambiado algunas cositas ... y funciona. Fíjate en los cambios y adecua los a tus funciones originales:
Saluditos!.
REEDITO:
Con el valor tamano corregido, el valor mayor lo obtienes en la función "mayorComplejo" y desde ahí, con ese valor "mayor" llamo a la función imprimir ..... y funciona O.K:
El otro error está en la función imprimir que le pasas un valor no establecido y te devuelve basura, aunque el resto del programa esté haciendo lo correcto.
Por cierto, puedes entrar el complejo nulo sin problemas, si cambias lo de tamano.
Como prueba he cambiado algunas cositas ... y funciona. Fíjate en los cambios y adecua los a tus funciones originales:
Código (cpp) [Seleccionar]
#include <iostream>
#include<cmath>
using namespace std;
const int TAMANO = 50;
struct TComplejo {
double p_real, p_imaginaria;
};
typedef TComplejo Tarray[TAMANO];
/*********************************************/
/*void imprimirComplejo (TComplejo complejo){
double a = complejo.p_real;
double b = complejo.p_imaginaria;
if (b<0){
cout << a << "-" << b << "i" << endl;
} else {
cout << a << "+" << b << "i" << endl;
}
}*/
/*********************************************/
double moduloDeComplejo(Tarray& array, int tamano) {
double modulo[tamano],mayor=0;
for (int i = 0; i<tamano; i++){
double radikal = pow(array[i].p_real,2)+ pow(array[i].p_imaginaria,2);
modulo[i] = sqrt(radikal);
}
for (int i = 0; i<tamano; i++){
if ( modulo[i]>mayor) mayor = modulo[i];
}
return mayor;
}
/*********************************************/
/*void mayorComplejo (Tarray& array, int tamano){
double mayor=0;
//Tarray array1;
for (int i = 0; i<tamano; i++) {
if ( moduloDeComplejo(i)>menor) mayor = moduloDeComplejo(i);
}
}*/
/*********************************************/
int cuantosHay(){
int tamano;
cout << "Introduzca cuántos complejos va a introducir: ";
cin >> tamano;
return tamano;
}
/*********************************************/
void introduzcaValores(Tarray& array, int tamano){
//Tarray array;
for (int i = 0; i < tamano; i++) {
cout <<endl<< "Introduzca parte real del complejo nº"<<i+1<<": ";
cin >>array[i].p_real;
cout <<endl<< "Introduzca parte imaginaria del complejo nº"<<i+1<<": ";
cin >>array[i].p_imaginaria;
}
}
/*********************************************/
int main() {
Tarray array;
TComplejo elMayor;
int tamano = cuantosHay();
introduzcaValores(array, tamano);
cout <<endl<< "El complejo con mayor modulo de todos es --> ";
cout<<moduloDeComplejo(array, tamano);
return 0;
}
/*********************************************/
Saluditos!.
REEDITO:
Con el valor tamano corregido, el valor mayor lo obtienes en la función "mayorComplejo" y desde ahí, con ese valor "mayor" llamo a la función imprimir ..... y funciona O.K:
Código (cpp) [Seleccionar]
#include <iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
const int TAMANO = 50;
struct TComplejo {
double p_real, p_imaginaria;
};
typedef TComplejo Tarray[TAMANO];
void imprimirComplejo (TComplejo complejo){
double a = complejo.p_real;
double b = complejo.p_imaginaria;
if (b<0){
cout << a << b << "i" << endl;
} else {
cout << a << "+" << b << "i" << endl;
}
}
double moduloDeComplejo(TComplejo complejo) {
double radikal = pow(complejo.p_real,2)+ pow(complejo.p_imaginaria,2);
double modulo = sqrt(radikal);
return modulo;
}
void mayorComplejo (Tarray array1, TComplejo& complejo, int tamano){
TComplejo mayor;
//Tarray array1;
for (int i = 0; i<tamano; i++) {
mayor = array1[i];
if ( moduloDeComplejo(mayor)>=moduloDeComplejo(array1[i])) mayor = array1[i];
}
imprimirComplejo(mayor);
}
int cuantosHay(){
int tamano;
cout << "Introduzca cuantos complejos va a introducir: ";
cin >> tamano;
return tamano;
}
void introduzcaValores(Tarray& array, int tamano){
//Tarray array;
for (int i = 0; i < tamano; i++) {
cout <<endl<< "Introduzca parte real del complejo "<<i+1<<": ";
cin >>array[i].p_real;
cout <<endl<< "Introduzca parte imaginaria del complejo "<<i+1<<": ";
cin >>array[i].p_imaginaria;
}
}
int main() {
Tarray array;
TComplejo elMayor;
int tamano = cuantosHay();
introduzcaValores(array, tamano);
cout << "El complejo con mayor modulo de todos es --> ";
mayorComplejo(array, elMayor, tamano);
return 0;
}