Saturday, December 31, 2005


(La foto es como se ve con el yakuake).
Bueno aca esta el segundo programa significativo que he hecho, espero que les logre interesar, a los que quieran aprender a hacer programas con TAD, creo que mas o menos bien definidos, y ademas que sirve para aprender. Por lo que yo se que hice, el programa trabaja bien los conceptos de funciones, de metodos, de clases, y un acercamiento a los objetos. Bueno si algun buen programador lo revisa, se dara cuenta de inmediato que no es un maravilla, pero pienso que es una buena ayuda para aquel estudiante que este en busca de ejemplos alternativos.
Esta separado por partes, asi es que las explicare cada una ligeramente y como compilarlo con el g++.





Aca va la clase en si, con sus partes, pero sin sus metodos. Eso va aparte, por un asunto de orden y claridad, que ademas permite la modificacion posterior del codigo, o inlcuso adaptacion, en realidad es muy recomendable que el estudiante lo aprenda a hacer de esta manera, y no como un solo gran codigo





//TIEMPO.H
//DECLARACION DE LA CLASE TIEMPO
//LAS FUNCIONES O PROCEDIMIENTOS MIEMBROS ESTAN DEFINIDAS EN TIEMPO.CPP

#ifndef TIEMPO_H
#define TIEMPO_H

class Tiempo {
public:
Tiempo();//constructor
void duracionMaterialYear(double constante, long cantProtonesIni, long
cantProtFin);
void duracionMaterialDia(double constante, long cantProtonesIni, long
cantProtFin);
void duracionMaterialSeg(double constante, long cantProtonesIni, long
cantProtFin);
long cantidadMateria(double constante, int tiempo, long cantProtIni);

//funciones de acceso

int getSegundos();
int getMinutos();
int getHora();
int getDia();
int getMes();
long getYear();

private:
int segundos;
int minutos;
int hora;
int dia;
int mes;
long long int year;
};

#endif







Bueno la idea es hacer esto por separado, en el cual ahora viene el asunto de la definicion de los metodos en si, que es lo que hacer y como es que a traves de estos yo voy a ser capas de entrar y modificar los elementos del tad. Recordemos que el usuario no tiene por que sabes "como" es que funciona el metodo, lo que tiene que saber es "que" hace el metodo. O por lo menos eso es lo que le bastaria para poder usarlo desde el programa externo, en este caso que seria nuestro programa final, que sera el que usa para hacer "algo" el TAD en si.

A continuacion viene entonces el correspondiente archivo con los metodos que llamaremos tiempo.cpp.








//TIEMPO.CPP
//FUNCIONES O PROCEDIMIENTOS MIEMBROS DE LA CLASE TIEMPO
#include "tiempo.h"
#include
#include

Tiempo::Tiempo(){segundos = minutos = hora = dia = mes = year = 0;}

void Tiempo::duracionMaterialYear(double constante, long
cantProtonesIni, long cantProtFin)
{

//caso que sea k= * a^-1
float aux= log(cantProtonesIni/cantProtFin)/constante;
long long int a= (long long int)aux;
year=a;
}

void Tiempo::duracionMaterialDia(double constante, long
cantProtonesIni, long cantProtFin)
{
//caso que k = * d^-1
float d = log(cantProtonesIni/cantProtFin)/constante;
long aux = (long) d;
int p,q;

if (aux > 30){
p=aux/360;
year=p ;
q=aux%360;
mes=q/30;
dia=q%30;
}
else
dia=aux;
}

void Tiempo::duracionMaterialSeg(double constante, long
cantProtonesIni, long cantProtFin){
//caso que k = * s^-1
float aux = log(cantProtonesIni/cantProtFin)/constante;
long s =(long)aux;
int p,r,q=s;
if ( s > 3600 ) // esto es la cantidad de segundos que tiene un dia
{
if ( s > 86400 )
{
p=s/86400;
dia=p;
q=s%86400;
}
hora=q/3600;
r=q%3600;
minutos=r/60;
segundos=r%60;
}
else
segundos=s;

}


long Tiempo::cantidadMateria(double constante, int tiempo, long
cantProtIni)
{
float aux = cantProtIni*exp(-constante*tiempo);
long cantidad = (long)aux;
return cantidad;
}
// obtener los tiempos

int Tiempo::getSegundos(){ return segundos;}
int Tiempo::getMinutos(){ return minutos;}
int Tiempo::getHora(){ return hora;}
int Tiempo::getDia(){ return dia;}
int Tiempo::getMes(){ return mes;}
long Tiempo::getYear(){ return year;}






Bueno aca se tenian entonces las herramientas principales que usaremos en el programa principal para poder interactuar con el tad. Teniamos por ejemplo el constructor que inicializa las variables, funciones que son capaces de operar con elementos del objeto, herramientas que imprimiran lo que les pedimos del objeto, o sea una familia de operadores que pemiten acceder de forma externa al objeto.

Y obvio, ahora viene lo importante, la implementacion del objeto. y es lo que mostramos a continuacion.





// PROGRAMA PRINCIPAL QUE ADMINISTRARA EL TAD TIEMPO

#include
#include
#include "tiempo.h"
using namespace std;

//declaracion de funciones a usar en el main

void menu_1();
void menu_2();
void menuConstantes();
//void(tiempo t);
//desarrollo del programa principal

int main()
{
//Tiempo t;
cout << "\n\n\t\tCALCULADORA DE VIDA DE ELEMENTOS RADIACTIVOS "<cout << "\n\tUsted puede escojer 2 operaciones a continuacion, o bien calcular" <cout << "\tla cantidad de material que quedara despues de determinado tiempo." <cout << "\tO bien calcular la cantidad de tiempo que demorara un elemento en que" <cout << "\tse desintegre una cierta cantidad de material radiactivo" <cout << endl;

int opc;
do{

cout << "\n\n\t\t\tQue desea hacer?" << endl;
cout << "1.- Cantidad de materialque queda despues de cierto tiempo\n\n2.- Cantidad de tiempo en descomponerse\n\nOtro.- Salir\n\n"<
cin >> opc;
switch (opc)
{
case 1:
{ menu_1();
break;
}
case 2:
{
menu_2();
break;
}
}

}while(opc>0 && opc<3);
return 0;
}


void menu_1()
{
Tiempo t;
float result,time1;
double k;
int time, cant;
menuConstantes();
cout << "Ingrese la constante\t(Hint: la constante se mide en t^-1)\n" << endl;
cin >> k;
cout << "\n\nIngrese ahora la cantidad del elemento que se dispone originalmente N_0\n(Hint: se supone que deberiamos colocar la cantidad de nucleos radioactivos presentes en el instante t=0.)" << endl;
cin >> cant;
cout<<"\n\nIngrese la cantidad de tiempo que transcurre al tomar la muestra"<cout<<"(recuerde que debe estar en relacion con la constante seleecionada anteriormente, para obtener un resultado coherente.Por ejemplo, si su constante estaba en segundos^-1 entonces ingrese segundos trancurridos, y asi con las demas)\n"<cin >>time1;
time = (int)time1;
result = t.cantidadMateria(k, time, cant);
cout<<"\n\nLa cantidad de material que quedara despues del tiempo :"<}

void menu_2()
{
Tiempo t;
double k;
long cantI, cantF;
int op;
cout << "Ingrese ahora la cantidad del elemento que se dispone originalmente\n(Hint: se supone que deberiamos colocar la cantidad de núcleos radioactivos existentes, pues eso es lo que se espera medir)" << endl;
cin >> cantI;
cout << "\nIngrese ahora la cantidad del elemento que queda despues de algun tiempo deseado "<cin >> cantF;
menuConstantes();
cout << "\nIngrese la constante\t(Hint: la constante se mide en t^-1)" << endl;
cin >> k;
cout << "\nen que unidades esta midiendo la constante? \n1. seg^-1 \t 2. dia^-1 \t 3. year^-1"<< endl;
cin >> op;
cout<if (op>0 && op<4)
{

switch (op)
{
case 1 :
{
t.duracionMaterialSeg(k,cantI,cantF);

break;
}
case 2 :
{
t.duracionMaterialDia(k,cantI,cantF);
break;
}
case 3 :
{
t.duracionMaterialYear(k,cantI,cantF);
break;
}
}
}
cout << "\n\n El tiempo transcurrido es de\n seg: "<< t.getSegundos()<<"\n min: "<
}

void menuConstantes(){
cout<< "\n\n Aqui mostramos algunas contantes conocidas.\n\n Recuerde que su constante es una constante muy pequeña, pues tiene una relacion inversa a la duracion del material.\nPuede usar alguna de las ofrecidas aca abajo, o cualquier otra.\n"<cout <<"Carbono 14 \t\t\t 0.00012 years^-1"<cout <<"Germanio \t\t\t 0.00252 dias^-1"<cout <<"Niquel 63 \t\t\t 0.00753 años^-1"<cout <<"Radio 226 \t\t\t 0.00043 años^-1"<cout <<"Uranio 38 \t\t\t 1.5507 * 10^-10 años^-1"<cout <<"Radón 222 \t\t\t 0.17329 dias^-1\n\n"<}





El programa en si no sea una maravilla, pero trabaja bien, y sirve para entender los conceptos basicos de la programacion estructural.




Cualquier comentario que deseen hacer, evidentemente estare dispuesto a escuchar o leer las criticas.

0 Comments:

Post a Comment

<< Home