[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-----