[Programación] Re: [LUG.ro] [Programacion] Programa corregido (Urege para Seba)

Sebastián D. Criado programacion@lugro.org.ar
Mon, 28 Apr 2003 10:35:39 -0300


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

El Lunes 28 Abril 2003 09:56, Horacio Castellini escribió:
> Hola Seba:
> 	Te lo mando por lugro pues por este correo no estoy suscripto en
> programación ;)))


No hay problemas, yo te contesto por la lista esta nomas.

>
> 	Te he corregido tu programa ya que tiene vicios de principiante y
> no de un programador profecional, te cometo cuando compilo la versión
> original (corregido el estilo y errores gruesos pero con el error que te
> comenté)

Es que soy principiante. :-)
>
> pues el equivlente en c++ de "printf" es "cout.form", macho! me extraña,
> vos manyas de esto....


jajaja, eso es por el port de C a C++,quedo muy feo??
>
> fijate lo que dá


Muchas gracias, igualmente lo solucione directamente con arreglos definidos a 
T y pasando a ingresar directamente con cin a los arreglos en lugar de a 
double.Y funciona de maravilla.

ahora voy a ver como queda con los punteritos :-))

saludos y Gracias.
>
> [hcaste@oscura tmp]$ c++ -g -Wall trayec.cc
> [hcaste@oscura tmp]$ ./a.out
> Ingrese la velocidad inicial Vo: 1
> Ingrese el angulo de inclinación en grados: 10
> Ingrese el tiempo en segundos: 4
> [hcaste@oscura tmp]$ gdb ./a.out a.out.core
> GNU gdb 4.18 (FreeBSD)
> Copyright 1998 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you
> are
> welcome to change it and/or distribute copies of it under certain
> conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB.  Type "show warranty" for
> details.
> This GDB was configured as "i386-unknown-freebsd"...Deprecated bfd_read
> called at
> /usr/src/gnu/usr.bin/binutils/gdb/../../../../contrib/gdb/gdb/dbxread.c
> line 2627 in elfstab_build_psymtabs
> Deprecated bfd_read called at
> /usr/src/gnu/usr.bin/binutils/gdb/../../../../contrib/gdb/gdb/dbxread.c
> line 933 in fill_symbuf
>
> Core was generated by `a.out'.
> Program terminated with signal 10, Bus error.
> Reading symbols from /usr/lib/libstdc++.so.3...done.
> Reading symbols from /usr/lib/libm.so.2...done.
> Reading symbols from /usr/lib/libc.so.4...done.
> Reading symbols from /usr/libexec/ld-elf.so.1...done.
> #0  0x2813e86b in memcpy () from /usr/lib/libc.so.4
> (gdb) q
>
> Este error se debe a que justamente a que la libc y la glibc (linux) estan
> "stripeadas" ahora bien con las correciones sugeridas (ver programa
> anexado) no solo me compila sino que anda, no me puse a analizar la
> consistencia de código.
>
> [hcaste@oscura tmp]$ c++ -g trayec.cc
> [hcaste@oscura tmp]$ ./a.out
> Ingrese la velocidad inicial Vo: 1
> Ingrese el angulo de inclinación en grados: 10
> Ingrese el tiempo en segundos: 2
> !!! Ingrese los datos requerido por favor ¡¡¡
>
> Bueno Saludos Horacio.
>
> Código corregido
> ---------------------------------------------------------------------------
>---- #include <cmath>
> #include <stdlib.h>
> #include <ctype.h>
> #include <iostream.h>
> #define T 100
> // La función isnum() determina si el string es un numero
> extern "C" int sprintf(char*, const char*, ...);
> int isnum(char *arg)
> {
>    int i;
>    for (i = 0; arg[i]!='\0'|| arg[i]!='.' ; i++)
>      if (!isdigit(arg[i]))
>        {
> 	  return 0;
>        }
>    return 1;
> }
> int main(void)
> {
>    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, *ang, *tiem; //no uso "time" pues es reservada!
>    // 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;
>    velo=new char[T];
>    ang=new char[T];
>    tiem=new char[T];
>    sprintf(velo,"%f",v0);
>    sprintf(ang,"%f",angulo);
>    sprintf(tiem,"%f",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
> 	cout.form("Punto mas alto: %.2lf metros a los %.2lf s.\n",puntoalto,
> 		  tiempoalto);
> 	cout.form("Proyectil llegara a destino a %.2lf metros\nen %.2lf
> 		    seg desde el lanzamiento",r,tiempollegada);
> 	if(isnum(tiem) == 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);
> 		  cout.form("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
> 	       {
> 		  cout.form("A los %.2lf segundos: el proyectil
> 			      llego a destino",tiempo);
> 	       }
> 	  }
>      }
>    else
>      {
> 	cout.form("!!! Ingrese los datos requerido por favor ¡¡¡\n");
>      }
>    delete velo;
>    delete ang;
>    delete tiem;
>    return 0;
> }
> ---------------------------------------------------------------------------
>----
>
> _______________________________________________
> Lugro mailing list
> Lugro@lugro.org.ar
> http://www.lugro.org.ar/mailman/listinfo/lugro

- -- 
- --
Sebastián D. Criado - scriado@ciudad.com.ar
L.U.G.R.o - http://www.lugro.org.ar
GNU/Linux Registered User # 146768
- -------------------------------------------------------------------
"Si el Universo fuera un programa estaría hecho en C, y correría sobre
un sistema UNIX"
                                                   Anónimo.

			
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD4DBQE+rS4r8hmHQ8ZCg0IRAqy5AJd819uH73TZxY30CEIDzC3LbxC8AJ4/R8wz
y/CwI2Dom0QBf5BR71Xqxw==
=tAjj
-----END PGP SIGNATURE-----