elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Programa que elige el mayor complejo de un array de ellos. Fallo de salida
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Programa que elige el mayor complejo de un array de ellos. Fallo de salida  (Leído 2,532 veces)
NikNitro!


Desconectado Desconectado

Mensajes: 1.309


Galletaaa!!!


Ver Perfil WWW
Programa que elige el mayor complejo de un array de ellos. Fallo de salida
« en: 1 Febrero 2013, 13:53 pm »

Bueno pues seguimos con los ejercicios estos. En este caso el fallo está al imprimir un dato dentro del struct TComplejo. El código es el siguiente:
Código:
#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(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){
TComplejo prueba;
//Tarray array1;
for (int i = 0; i<TAMANO; i++) {
prueba = array1[i];
if ( moduloDeComplejo(prueba)>moduloDeComplejo(complejo)) complejo = prueba;
}
}

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 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);
mayorComplejo(array, elMayor);
cout << "El complejo con mayor módulo de todos es -->  ";
imprimirComplejo(elMayor);
return 0;
}

pero resulta que si le meto como entrada de tamano el valor 0 me devuelve:
 "El complejo con mayor módulo de todos es -->  1.31755e+281+4.5515e+264i"

por lo que pienso que el error es al imprimir. ¿Qué me decís? Gracias ^^

S@lu2;)


En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Programa que elige el mayor complejo de un array de ellos. Fallo de salida
« Respuesta #1 en: 1 Febrero 2013, 15:22 pm »

Si le metes Tamanyo 0, ningun bucle for de los que has puesto se ejecutará. Al no rellenar los vectores solo imprimiras basura.

Lo unico que tienes que hacer es una pequeña comprobación en el main:

Código
  1. int main()
  2. {
  3.    Tarray array;
  4.    TComplejo elMayor;
  5.    int tamanyo = cuantosHay();
  6.  
  7.    if (tamanyo != 0)    
  8.    {
  9.        introduzcaValores(array, tamanyo);
  10.        mayorComplejo(array, elMayor);
  11.        cout << "El complejo con mayor módulo de todos es -->  ";
  12.        imprimirComplejo(elMayor);
  13.    }
  14.    else
  15.         cout<<"Error, no se puede introducir un tamanyo de cero";
  16.  
  17.    return 0;
  18. }


En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
NikNitro!


Desconectado Desconectado

Mensajes: 1.309


Galletaaa!!!


Ver Perfil WWW
Re: Programa que elige el mayor complejo de un array de ellos. Fallo de salida
« Respuesta #2 en: 2 Febrero 2013, 02:30 am »

La pega sigue siendo la misma :s
Esta es la salida:
Código:
Introduzca cuantos complejos va a introducir: 2

Introduzca parte real del complejo nº1: 50

Introduzca parte imaginaria del complejo nº1: 3

Introduzca parte real del complejo nº2: 2

Introduzca parte imaginaria del complejo nº2: 1
El complejo con mayor módulo de todos es -->  6.09354e+265+1.03941e+268i
En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Programa que elige el mayor complejo de un array de ellos. Fallo de salida
« Respuesta #3 en: 2 Febrero 2013, 15:49 pm »

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:

Código
  1. #include <iostream>
  2. #include<cmath>
  3.  
  4. using namespace std;
  5. const int TAMANO = 50;
  6. struct TComplejo {
  7. double p_real, p_imaginaria;
  8. };
  9. typedef TComplejo Tarray[TAMANO];
  10. /*********************************************/
  11. /*void imprimirComplejo (TComplejo complejo){
  12. double a = complejo.p_real;
  13. double b = complejo.p_imaginaria;
  14. if (b<0){
  15. cout << a << "-" << b << "i" << endl;
  16. } else {
  17. cout << a << "+" << b << "i" << endl;
  18. }
  19. }*/
  20. /*********************************************/
  21. double moduloDeComplejo(Tarray& array, int tamano) {
  22. double modulo[tamano],mayor=0;
  23. for (int i = 0; i<tamano; i++){
  24.    double radikal = pow(array[i].p_real,2)+ pow(array[i].p_imaginaria,2);
  25.    modulo[i] = sqrt(radikal);
  26.  }
  27. for (int i = 0; i<tamano; i++){
  28.    if ( modulo[i]>mayor) mayor = modulo[i];
  29.    }
  30.  return mayor;
  31. }
  32. /*********************************************/
  33. /*void mayorComplejo (Tarray& array, int tamano){
  34. double mayor=0;
  35. //Tarray array1;
  36. for (int i = 0; i<tamano; i++) {
  37.  
  38. if ( moduloDeComplejo(i)>menor) mayor = moduloDeComplejo(i);
  39. }
  40. }*/
  41. /*********************************************/
  42. int cuantosHay(){
  43. int tamano;
  44. cout << "Introduzca cuántos complejos va a introducir: ";
  45. cin >> tamano;
  46. return tamano;
  47. }
  48. /*********************************************/
  49. void introduzcaValores(Tarray& array, int tamano){
  50. //Tarray array;
  51. for (int i = 0; i < tamano; i++) {
  52. cout <<endl<< "Introduzca parte real del complejo nº"<<i+1<<": ";
  53. cin  >>array[i].p_real;
  54. cout <<endl<< "Introduzca parte imaginaria del complejo nº"<<i+1<<": ";
  55. cin  >>array[i].p_imaginaria;
  56. }
  57. }
  58. /*********************************************/
  59. int main() {
  60. Tarray array;
  61. TComplejo elMayor;
  62. int tamano = cuantosHay();
  63. introduzcaValores(array, tamano);
  64.  cout <<endl<< "El complejo con mayor modulo de todos es -->  ";
  65.  cout<<moduloDeComplejo(array, tamano);
  66.  
  67.  return 0;
  68. }
  69. /*********************************************/
  70.  

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
  1. #include <iostream>
  2. #include<cmath>
  3. #include<cstdlib>
  4. using namespace std;
  5. const int TAMANO = 50;
  6. struct TComplejo {
  7. double p_real, p_imaginaria;
  8. };
  9. typedef TComplejo Tarray[TAMANO];
  10.  
  11. void imprimirComplejo (TComplejo complejo){
  12. double a = complejo.p_real;
  13. double b = complejo.p_imaginaria;
  14. if (b<0){
  15. cout << a << b << "i" << endl;
  16. } else {
  17. cout << a << "+" << b << "i" << endl;
  18. }
  19. }
  20.  
  21. double moduloDeComplejo(TComplejo complejo) {
  22. double radikal = pow(complejo.p_real,2)+ pow(complejo.p_imaginaria,2);
  23. double modulo = sqrt(radikal);
  24. return modulo;
  25. }
  26.  
  27. void mayorComplejo (Tarray array1, TComplejo& complejo, int tamano){
  28. TComplejo mayor;
  29.  
  30. //Tarray array1;
  31. for (int i = 0; i<tamano; i++) {
  32. mayor = array1[i];
  33.    if ( moduloDeComplejo(mayor)>=moduloDeComplejo(array1[i])) mayor = array1[i];
  34.  
  35. }
  36. imprimirComplejo(mayor);
  37. }
  38.  
  39. int cuantosHay(){
  40. int tamano;
  41. cout << "Introduzca cuantos complejos va a introducir: ";
  42. cin >> tamano;
  43. return tamano;
  44. }
  45.  
  46. void introduzcaValores(Tarray& array, int tamano){
  47. //Tarray array;
  48. for (int i = 0; i < tamano; i++) {
  49. cout <<endl<< "Introduzca parte real del complejo "<<i+1<<": ";
  50. cin  >>array[i].p_real;
  51. cout <<endl<< "Introduzca parte imaginaria del complejo "<<i+1<<": ";
  52. cin  >>array[i].p_imaginaria;
  53. }
  54. }
  55.  
  56. int main() {
  57. Tarray array;
  58. TComplejo elMayor;
  59. int tamano = cuantosHay();
  60. introduzcaValores(array, tamano);
  61.  cout << "El complejo con mayor modulo de todos es -->  ";
  62. mayorComplejo(array, elMayor, tamano);
  63. return 0;
  64. }
  65.  
« Última modificación: 2 Febrero 2013, 18:34 pm por leosansan » En línea

NikNitro!


Desconectado Desconectado

Mensajes: 1.309


Galletaaa!!!


Ver Perfil WWW
Re: Programa que elige el mayor complejo de un array de ellos. Fallo de salida
« Respuesta #4 en: 10 Febrero 2013, 19:00 pm »

Muchas gracias :)

La verdad es que el ejercicio ya lo entregué (mal xD) pero aun asi me gusta aprender de mis errores ^^

Nos vemos ;)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
programa en vb (ordenar de mayor a menor)
Programación Visual Basic
jjam45 1 9,590 Último mensaje 19 Febrero 2006, 18:36 pm
por jjam45
programa flash,un poco complejo « 1 2 3 »
Diseño Gráfico
karlitos10 24 10,751 Último mensaje 3 Noviembre 2008, 20:05 pm
por Azielito
Fallo de segmentacion con fgets y Array de cadenas. « 1 2 »
Programación C/C++
samur88 12 6,560 Último mensaje 7 Marzo 2011, 00:37 am
por samur88
PWM con salida en 4 pines de un pic desfasados entre ellos « 1 2 »
Electrónica
xiruko 12 15,887 Último mensaje 28 Junio 2013, 04:54 am
por ingtasco
Meter en un array la salida de una consulta de varios documentos con Foreach.
PHP
frauzamb 1 1,644 Último mensaje 13 Mayo 2014, 20:02 pm
por DanB
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines