[Programación] Segmentation fault y la pu.. que lo pario

Sebastián D. Criado programacion@lugro.org.ar
Sun, 27 Apr 2003 00:43:44 -0300


--Boundary-00=_wH1q+hxuMs8PQLO
Content-Type: Text/Plain;
  charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable
Content-Description: clearsigned data
Content-Disposition: inline

=2D----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Estoy haciendo una programilla en C++ y me esta dando un dolor de cabeza qu=
e=20
no tendr=EDa que darme.

Al ejecutarlo anda todo bien pero al pasarle los datos, crash.
Segmentation fault

Trate de debugearlo, pero no di pie con bola

A ver que les parece a uds.


=2D --=20
=2D --
Sebasti=E1n D. Criado - scriado@ciudad.com.ar
L.U.G.R.o - http://www.lugro.org.ar
GNU/Linux Registered User # 146768
=2D -------------------------------------------------------------------
"Si el Universo fuera un programa estar=EDa hecho en C, y correr=EDa sobre
un sistema UNIX"
                                                   An=F3nimo.

		=09
=2D----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQE+q1Hx8hmHQ8ZCg0IRAj9pAJ9oyQ8qDYiRCqE92Ky4DnTNGsUy5ACeOM+w
GIFJdfk+sZ+9p/Km5gEK4OM=3D
=3DX2N9
=2D----END PGP SIGNATURE-----

--Boundary-00=_wH1q+hxuMs8PQLO
Content-Type: text/x-c++src;
  charset="us-ascii";
  name="trayec.cpp"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="trayec.cpp"


#include <cmath>
#include <stdlib.h>
#include <ctype.h>
#include <iostream.h>


int isnum(char *arg);


int main()
{



const double gt =9.8;	// Aceleración de la gravedad
const double radian = 57.29578; // Grado en radianes para la conversión
	
double 		v0cos, 
			v0sen,
		puntoalto, // El punto más alto
		r,			// Alcance horizontal
		v0,		// Velocidad inicial
		vx,		// Vx
		vy,		// Vy
		x,		// Posición en el eje x
		y,		// Posición en el eje Y
		v;		// Velocidad resultante
		
double	angulo,		// Angulo de elevación
		radianes,	// Angulo en radianes para calcular los grados
		angulofin;	// Angulo en el tiempo	

double 		tiempoalto,		//El tiempo del punto mas alto
		tiempollegada,		// Tiempo en el que llega a destino
		tiempo;			// Tiempo del calculo



char * velo;
char * ang;
char * time;
// Asignación de las varibles desde los Text_Entry

		
	cout << "Ingrese la velocidad inicial Vo: ";
	cin >> v0;
	cout << "Ingrese el angulo de inclinación en grados: ";
	cin >> angulo;
	radianes = angulo/radian;
	cout << "Ingrese el tiempo en segundos: ";
	cin >> tiempo;

	
	sprintf(velo,"%lf",v0);
	sprintf(ang,"%lf",angulo);
	sprintf(time,"%lf",tiempo);
	
	

if((isnum (velo) && isnum (ang)) && (v0>0.0 && angulo>0.0))
	
{
	

	// Calculo del punto en tiempo=t

	v0cos = v0 * cos(radianes);
	v0sen = v0 * sin(radianes);
	

	// Calculo de la llegada del proyectil

	vx = v0cos;
	vy = v0sen - gt;
	angulofin = atan(vy/vx)*radian;
	v = sqrt(pow(vx,2)+pow(vy,2));
	tiempoalto = v0sen/gt; 		// Tiempo en el que llego al punto más alto
	puntoalto = (v0sen * tiempoalto) - (0.5 * gt * pow(tiempoalto,2));
	tiempollegada = tiempoalto * 2;
	r = vx * tiempollegada;		// Metros recorridos en el eje x desde el lanzamiento 


	// Seteo de la variable buffer output para asignarla a las etiquetas
	// Se utilizan 3 etiquetas para un mejor control de lo que se muestra


	printf("Punto mas alto: %.2lf metros a los %.2lf s.\n",puntoalto,tiempoalto);
	printf("Proyectil llegara a destino a %.2lf metros\nen %.2lf seg desde el lanzamiento",r,tiempollegada);
	
	
	if(isnum(time) == 1 && tiempo >= 0.0)	 	// Si no esta seteado el tiempo t 
										// o es negativo,
										// no se muestra el punto xy en ese tiempo 
		
			{
				if (tiempo <= tiempollegada) // Si el tiempo es menor al tiempo de llegada
											 // se calcula la posición
					{
						x = v0cos * tiempo;
						y = v0sen * tiempo - 0.5 * gt * pow(tiempo, 2);
						printf("A los %.2lf segundos: \n Proyectil a: %.2lf metros en X.\nProyectil a: %.2lf metros en Y.\nVelocidad: %.2lf m/seg, angulo de caida:%.2lf grados",
						tiempo,x,y,v,angulofin);
						
					}
					else  					// Si no se indica que ya llego
					{
						printf("A los %.2lf segundos: el proyectil llego a destino",tiempo);
						
					}
					
										
			}
	
	}

else
	{
	printf("!!! Ingrese los datos requerido por favor ˇˇˇ");
	
	}
}	

// La función isnum() determina si el string es un numero 

int isnum(char *arg) 
	{
		int i;
		for (i = 0; arg[i]!='\0'|| arg[i]!='.' ; i++)
			
				if (!isdigit(arg[i])) 
					{
						return 0;
					}
				
		return 1;
	}

--Boundary-00=_wH1q+hxuMs8PQLO--