Foros-FIUBA Foros HostingPortal
 FAQ  •  Buscar  •  Wiki  •  Apuntes  •  Planet  •  Mapa  •  Eyeon  •  Chat
Preferencias  •  Grupos de Usuarios
Registrarse  •  Perfil  •  Entrá para ver tus mensajes privados  •  Login
Ver tema siguiente
Ver tema anterior

Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente
Autor Mensaje
Fhran
Administrador


Edad: 39
Registrado: 25 Ago 2005
Mensajes: 3123
Ubicación: En la rama de un árbol... entre locos.
Carrera: Electrónica y Informática
blank.gif
MensajePublicado: Dom Sep 11, 2005 9:20 pm  Asunto:  [75.41] Algoritmos II - Mandrafina Responder citandoFin de la PáginaVolver arriba

***************

Gente, tengo entendido que ya tuvieron la clase de TDA y ya les dieron el enunciado del TP1.

Les anexo aqui el enunciado de los 3 TPs del 2do cuatrimestre del 2004, que fue cuando yo curse.

A continuacion les dejo como hicimos el TP1 en mi grupo:
(lean primero el enunciado que esta al final de este post para bajar)

Diseño de la estrategia:

Luego de entender el enunciado y comprender el trabajo que habia que realizar, el grupo comenzó a discutir como se implementaría el TDA en C++.
Lo primero que se decidió fue representar al TDA en una estructura compuesta por datos atómicos provista por C++ bajo el nombre de STRUCT.
A continuación se analizó que datos estarián incluídos dentro de esa estructura. Como el enunciado decía que tendríamos que guardar cadenas de texto en un archivo lo primero que al grupo se le ocurrió fue incluir en la estructura una dato de tipo STRING. Pero luego de deliberar un momento nos dimos cuenta de que no era necesario en ningun momento almacenar la cadena en memoria principal, ya que sería escrita directamente en el archivo. Entonces concluímos que para solucionar esa parte del problema solo necesitaríamos una referencia a un archivo de texto. Si bien se podría haber incluído un dato que representara al archivo, se optó por incluir un puntero hacia un dato de ese tipo para utilizar los conceptos sobre punteros y memoria dinámica aprendidos en clase.
Pero como el enunciado también decía que debería ser posible conocer la cantidad de registros almacenados en el archivo el grupo decidió incluir en la estructura un dato de tipo INT que serviría de contador.

Una vez definida la estructura, el grupo comenzó a discutir como se llevarían a cabo las primitivas que controlarían al TDA pedidas en el enunciado.
La primitiva inicializar sería la encargada de reservar memoria para el puntero al archivo donde se guardarían los registros y de iniciar el contador en cero.
La primitiva destruir tendría a cargo liberar la memoria reservada para el puntero y volver el contador a cero.
La primitiva escribirMensaje escribiría en el archivo el mensaje con su correspondiente fecha y hora obtenidas mediante el uso de la librería time.h sin olvidar de incrementar el contador en uno.
La primitiva escribirTitulo escribiría en el archivo un título con el formato pedido en el enunciado.
La primitiva escribirTotalMensajes escribiría en el archivo la cantidad de mensajes obtenida del contador con el formato pedido en el enunciado.

Datos:

Para la realización del trabajo el grupo utilizó 2 archivos: uno donde se incluyó la definición de la estructura y la declaración de las primitivas, el otro contenía la definición de todas las primitivas. Estos archivos son log.h y log.cpp respectivamente. A continuación se incluye el contenido de ambos:


Código

log.h-----------------------------------------------------------------------------------------------

Código:
#ifndef __LOG_H__
#define __LOG_H__

#include <fstream> // Libreria usada para el manejo de archivos
#include <string>  // Libreria usada para el manejo de Cadenas de Texto

using namespace std;

struct Log{
    int cantidad;      // Aqui se almacenara la cantidad de registros
    ofstream* archivo; // Puntero al archivo donde ser haran los registros
};

/*Definición de Primitivas*/
/*------------------------------------------------------------------*/
/*
  pre: ninguna.
  post: el log queda listo para ser usado.
  log: estructura a ser inicializada.
  nombreArchivo: nombre del archivo donde se escribirán los mensajes.
*/
  void inicializar (Log& log, string nombreArchivo);
/*------------------------------------------------------------------*/

/*
  pre: log ha sido inicializado con la primitiva inicializar().
  post: el log queda eliminado.
  log: instancia sobre la cual se aplica la primitiva.
*/
  void destruir (Log& log);
/*------------------------------------------------------------------*/

/*
  pre: log ha sido inicializado.
  post: agrega el mensaje al log con el siguiente formato:
        [fecha-hora] Mensaje.
  log: instancia sobre la cual se aplica la primitiva.
  mensaje: texto a escribir.
*/
  void escribirMensaje (Log& log, string mensaje);
/*------------------------------------------------------------------*/

/*
  pre: log ha sido inicializado.
  post: agrega el título al log con el formato:
        *******************************
        título
        *******************************
  log: instancia sobre la cual se aplica la primitiva.
  título: título a escribir.
*/
  void escribirTitulo (Log& log, string titulo);
/*------------------------------------------------------------------*/

/*
  pre: log ha sido inicializado.
  post: agrega un mensaje con la cantidad de mensajes escritos hasta ese
        momento con el formato:
        ------------------------------------------
        [fecha-hora] Total de Mensajes: XX
  log: instancia sobre la cual se aplica la primitiva.
*/
  void escribirTotalMensajes(Log& log);

/*------------------------------------------------------------------*/
#endif

log.cpp-----------------------------------------------------------------------------------------------

Código:
#include "log.h"     // Declaracion del tipo y de las primitivas
#include <time.h>    // Libreria usada para obtener la fecha y hora

using namespace std;

void inicializar(Log& log,string nombreArchivo){


    log.archivo = new ofstream(nombreArchivo.c_str()); // Se reserva memoria para el puntero al archivo
    log.cantidad=0;                                    // Se inicializa el contador

}   

void destruir(Log& log){
   
    log.cantidad=0;
    log.archivo->close();
    delete log.archivo;     // Se libera la memoria reservada para el puntero
    log.archivo=NULL;       // Se trunca el puntero
   
}   

void escribirMensaje(Log& log, string mensaje){

    time_t segundos=time(NULL);                        // Se obtiene la cantidad de segundos pasados desde el 1/1/1970
    tm* fechaHora=localtime(&segundos);                // Se procesa esa cantidad y se construye la estructura
   
    *log.archivo << "[" << fechaHora->tm_mday << "/";  // Se adjuntan
    *log.archivo << fechaHora->tm_mon+1 << "/";        // la fecha
    *log.archivo << 1900+fechaHora->tm_year << "-";    // y la hora.
    *log.archivo << fechaHora->tm_hour << ":";         // Luego
    *log.archivo << fechaHora->tm_min << ":";          // se
    *log.archivo << fechaHora->tm_sec << "]";          // adjunta el

    *log.archivo << mensaje << endl;                   // mensaje.
   
    log.cantidad++;                                    // Se incrementa el contador
   
}

void escribirTitulo(Log& log, string titulo){

    *log.archivo << "***************************" << endl;
    *log.archivo << titulo << endl;
    *log.archivo << "***************************" << endl;
}

void escribirTotalMensajes(Log& log){
   
    *log.archivo << "-------------------------------" << endl; // Se adjunta la cantidad de mensajes
    *log.archivo << "Total mensajes: " << log.cantidad << endl; // con formato.
}


main.cpp---------------------------------

Código:
#include "log.h"

int main(void){
   
  Log milog;
  inicializar(milog,"registro.txt");
  escribirTitulo(milog,"TDA LOG");
  escribirMensaje(milog,"Iniciando programa...");
  escribirMensaje(milog,"A continuacion se escribiran 10 mensajes:");
  for(int i=1;i<=10;i++){
    escribirMensaje(milog,"Mensaje");
  }
  escribirMensaje(milog,"Finalizando programa...");
  escribirTotalMensajes(milog);
  destruir(milog);
  return 0;
 
}


Espero que les sirva para ir entendiendo un poco mas la "filosofia" de TDA.

ACLARACION: Despues, un poco mas avanzado en la cursada, me di cuenta que se podria haber hecho mejor. Pero sepan que asi como esta fue aprobado con un 8 si mal no recuerdo.

Cualquier duda sobre el codigo, o sobre TDA en si... no duden en preguntar.

**************


Aquario Género:Masculino Rata OfflineGalería Personal de FhranVer perfil de usuarioEnviar mensaje privado
Melian
Nivel 4



Registrado: 23 Ago 2005
Mensajes: 69
Ubicación: Avellaneda

MensajePublicado: Dom Sep 11, 2005 10:55 pm  Asunto:  (Sin Asunto) Responder citandoFin de la PáginaVolver arriba

Muy bueno! Gracias... después lo voy a investigar bien.

_________________
Image

   OfflineGalería Personal de MelianVer perfil de usuarioEnviar mensaje privadoEnviar emailVisitar sitio web del usuarioMSN MessengerNúmero ICQ
Mostrar mensajes de anteriores:      
Responder al tema Ver tema anteriorEnviar por mail a un amigo.Mostrar una Lista de los Usuarios que vieron este TemaGuardar este Tema como un archivoPrintable versionEntrá para ver tus mensajes privadosVer tema siguiente

Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro
No podés responder a temas en este foro
No podés editar tus mensajes en este foro
No podés borrar tus mensajes en este foro
No podés votar en encuestas en este foro
No Podéspostear archivos en este foro
No Podés bajar archivos de este foro


Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker
365 Attacks blocked.

Powered by phpBB2 Plus, phpBB Styles and Kostenloses Forum based on phpBB © 2001/6 phpBB Group :: FI Theme :: Mods y Créditos

Foros-FIUBA está hosteado en Neolo.com Cloud Hosting

[ Tiempo: 0.4332s ][ Pedidos: 20 (0.3440s) ]