Foros del Web » Programación para mayores de 30 ;) » C/C++ »

programa ya corre,pero cuando imprimo el resultado siempre me da un cero(apuntadores)

Estas en el tema de programa ya corre,pero cuando imprimo el resultado siempre me da un cero(apuntadores) en el foro de C/C++ en Foros del Web. Hola. El programa ya corre,despues de meter los datos el resultado siempre es cero,lo cual es equivocado.¿en donde es el error en una funcion o ...
  #1 (permalink)  
Antiguo 01/09/2011, 10:49
 
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico D.F
Mensajes: 10
Antigüedad: 10 años, 11 meses
Puntos: 0
Exclamación programa ya corre,pero cuando imprimo el resultado siempre me da un cero(apuntadores)

Hola. El programa ya corre,despues de meter los datos el resultado siempre es cero,lo cual es equivocado.¿en donde es el error en una funcion o en un apuntador?Muchas gracias.

#include <iostream>
#include <string>
#include <cmath>

using namespace std;

struct corriente
{
string intensidad;
string voltaje;
string resistencia;
string inductancia;
string capacitancia;
string frecuencia;
float inten;

};
string capturacad(string msj);
float capturanum(string msj);
float calculainten(float inten);
void capturainten(corriente *apinten);
void imprimir(corriente *apinten);

int main()
{


corriente apinten1;


capturainten(&apinten1);
imprimir(&apinten1);




system("pause");
return 0;

}


string capturacad(string msj)
{
string texto;
fflush(stdin);
cout<<msj;
getline(cin,texto);
return texto;
}




float capturanum(string msj)
{
float num;
cout<<msj;
cin>>num;
return num;
}





float calculainten(float inten)

{

float i,vol=0,resis=0,induc=0,capa=0,frecu=0;

i=vol/sqrt(pow(resis,2)+pow(2*3.1416*frecu*induc-(1/(2*3.1416*frecu*capa)),2));

return i;

}



void capturainten(corriente *apinten)

{

(*apinten).voltaje=capturacad("Introduzca el voltaje:");
(*apinten).resistencia=capturacad("Introduzca resistencia:");
(*apinten).inductancia=capturacad("Introduzca inductancia:");
(*apinten).capacitancia=capturacad("Introduzca capacitancia:");
(*apinten).frecuencia=capturacad("Introduzca la frecuencia:");

(*apinten).inten=calculainten(apinten->inten);

}


void imprimir(corriente *apinten)
{
cout<<"La intensidad es:"<<apinten->inten<<endl;

}
  #2 (permalink)  
Antiguo 01/09/2011, 11:38
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Melita
Mensajes: 6.192
Antigüedad: 18 años, 3 meses
Puntos: 74
Respuesta: programa ya corre,pero cuando imprimo el resultado siempre me da un cero(a

Código:
float i,vol=0,resis=0,induc=0,capa=0,frecu=0;
Ahora estan inicializados los valores que usas para calcular ... pero a 0 todos. Tenes que usar lo que el usuario introdujo previamente en apinten1.
__________________
Luche y vuelve! Nacional y Popular
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 01/09/2011, 12:11
 
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico D.F
Mensajes: 10
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: programa ya corre,pero cuando imprimo el resultado siempre me da un cero(a

Ok.Pero como le hago?.Por favor ya estoy desesperado
  #4 (permalink)  
Antiguo 01/09/2011, 12:29
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 12 años, 4 meses
Puntos: 228
Respuesta: programa ya corre,pero cuando imprimo el resultado siempre me da un cero(a

Mira lo siguiente, En :


float calculainten(float inten)

{

float i,vol=0,resis=0,induc=0,capa=0,frecu=0;

i=vol/sqrt(pow(resis,2)+pow(2*3.1416*frecu*induc-(1/(2*3.1416*frecu*capa)),2));

return i;

}

Es obvio que todo eso da cero porque todos losvalores estan seteados a cero. Cual deberia ser el valor correspondiente. Sorprende que no de un error por division por cero.

Si puedes deir que es lo que quieres hacer seria mas facil interpretar el problema.
  #5 (permalink)  
Antiguo 01/09/2011, 12:37
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Melita
Mensajes: 6.192
Antigüedad: 18 años, 3 meses
Puntos: 74
Respuesta: programa ya corre,pero cuando imprimo el resultado siempre me da un cero(a

Como te dije antes en lugar de pasar inten tenes que pasar apinten1 y eso seria mas o menos asi:

Código:
float calculainten(corriente *apinten)
Código:
apinten->inten = calculainten(apinten);
En calculainten podes acceder a los miembros de la estructura que rellenaste antes de la misma manera que lo hago en la ultima linea de codigo (variable->miembro).
__________________
Luche y vuelve! Nacional y Popular
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #6 (permalink)  
Antiguo 01/09/2011, 12:57
 
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico D.F
Mensajes: 10
Antigüedad: 10 años, 11 meses
Puntos: 0
Pregunta Respuesta: programa ya corre,pero cuando imprimo el resultado siempre me da un cero(a

Cita:
Iniciado por Eternal Idol Ver Mensaje
Como te dije antes en lugar de pasar inten tenes que pasar apinten1 y eso seria mas o menos asi:

Código:
float calculainten(corriente *apinten)
Código:
apinten->inten = calculainten(apinten);
En calculainten podes acceder a los miembros de la estructura que rellenaste antes de la misma manera que lo hago en la ultima linea de codigo (variable->miembro).


ok por lo que me dices el codigo quedaria asi:Por favor corrigeme si estoy mal

#include <iostream>
#include <string>
#include <cmath>

using namespace std;

struct corriente
{
string intensidad;
string voltaje;
string resistencia;
string inductancia;
string capacitancia;
string frecuencia;
float inten;

};
string capturacad(string msj);
float capturanum(string msj);
float calculainten(corriente *apinten);
void capturainten(corriente *apinten);
void imprimir(corriente *apinten);

int main()
{


corriente apinten1;


capturainten(&apinten1);
imprimir(&apinten1);




system("pause");
return 0;

}


string capturacad(string msj)
{
string texto;
fflush(stdin);
cout<<msj;
getline(cin,texto);
return texto;
}




float capturanum(string msj)
{
float num;
cout<<msj;
cin>>num;
return num;
}





float calculainten(corriente *apinten)

{

float i,vol,resis,induc,capa,frecu;

i=vol/sqrt(pow(resis,2)+pow(2*3.1416*frecu*induc-(1/(2*3.1416*frecu*capa)),2));

return i;

}



void capturainten(corriente *apinten)

{

(*apinten).voltaje=capturacad("Introduzca el voltaje:");
(*apinten).resistencia=capturacad("Introduzca resistencia:");
(*apinten).inductancia=capturacad("Introduzca inductancia:");
(*apinten).capacitancia=capturacad("Introduzca capacitancia:");
(*apinten).frecuencia=capturacad("Introduzca la frecuencia:");

apinten->inten = calculainten(apinten);

}


void imprimir(corriente *apinten)
{
cout<<"La intensidad es:"<<calculainten(apinten)<<endl;

}
  #7 (permalink)  
Antiguo 01/09/2011, 13:01
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Melita
Mensajes: 6.192
Antigüedad: 18 años, 3 meses
Puntos: 74
Respuesta: programa ya corre,pero cuando imprimo el resultado siempre me da un cero(a

No sirve de nada el cambio, seguis usando las variables locales esas (vol,resis,induc,capa,frecu), borralas y usa los miembros de la estructura ... tal vez quieras cambiarles el tipo a float y usar la funcion que recibe numeros y no cadenas ...
__________________
Luche y vuelve! Nacional y Popular
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #8 (permalink)  
Antiguo 02/09/2011, 01:13
 
Fecha de Ingreso: septiembre-2011
Ubicación: Mexico D.F
Mensajes: 10
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: programa ya corre,pero cuando imprimo el resultado siempre me da un cero(a

Cita:
Iniciado por Eternal Idol Ver Mensaje
No sirve de nada el cambio, seguis usando las variables locales esas (vol,resis,induc,capa,frecu), borralas y usa los miembros de la estructura ... tal vez quieras cambiarles el tipo a float y usar la funcion que recibe numeros y no cadenas ...
Gracias por tomarte el tiempo en ayudarme. Por fin me salio. Despues de que me hiciste esas correcciones, el programa corrio perfectamente. Me quedo asi:

#include <iostream>
#include <string>
#include <cmath>

using namespace std;

struct corriente
{

double volt;
double resis;
double induc;
double capaci;
double frecue;
double inten;

};

float capturanum(string msj);
double calculainten(corriente *apinten);
float capturainten(corriente *apinten);
void imprimir(corriente *apinten);

int main()
{


corriente apinten1;


capturainten(&apinten1);
imprimir(&apinten1);


system("pause");
return 0;

}



float capturanum(string msj)
{
float num;
cout<<msj;
cin>>num;
return num;
}





double calculainten(corriente *apinten)

{
float i,x1,x2,x3,x4,x5,x6,x7;


x1=-1*(1/2*3.1416*(*apinten).frecue*(*apinten).capaci);
x2=2*3.1416*(*apinten).frecue*(*apinten).induc;
x3=x1+x2;
x4=pow(x3,2);
x5=pow((*apinten).resis,2)+x4;
x6=sqrt(x5);
x7=(*apinten).volt/x6;
i=x7;
return i;

}



float capturainten(corriente *apinten)

{

(*apinten).volt=capturanum("Introduzca el voltaje:");
(*apinten).resis=capturanum("Introduzca resistencia:");
(*apinten).induc=capturanum("Introduzca inductancia:");
(*apinten).capaci=capturanum("Introduzca capacitancia:");
(*apinten).frecue=capturanum("Introduzca la frecuencia:");

apinten->inten=calculainten(apinten);

}


void imprimir(corriente *apinten)
{
cout<<"La intensidad es:"<<calculainten(apinten)<<endl;

}
  #9 (permalink)  
Antiguo 02/09/2011, 02:30
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Melita
Mensajes: 6.192
Antigüedad: 18 años, 3 meses
Puntos: 74
Respuesta: programa ya corre,pero cuando imprimo el resultado siempre me da un cero(a

Bien me alegro de que te funcione bien, ahora podes tratar de hacerlo mas legible, por ejemplo en todo lugar donde hagas esto (el miembro en cuestion es redundante):

Código:
(*apinten).frecue
Podes hacer esto:
Código:
apinten->frecue
Y la funcion calculainten podria tener variables con sentido como antes y ser mas compacta.
__________________
Luche y vuelve! Nacional y Popular
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO

Etiquetas: apuntadores, c++, funciones, struct
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:40.