PDA

Ver la Versión Completa : Implementacion Secuencia


Manshula
25-09-2008, 16:05:38
Esta es una implementacion de secuencia de caracteres que hice pero me han sugerido un par de cosas y quisiera saber si lo dejo asi o hago los cambios.

1) en el TSecuencia.LeerPrim;
mi profesor dice que estoy leyendo el segundo elemento, no el primero.

2)Me sugirieron reemplazar en el Tsecuencia.fin
en vez de comparar con eof, insertar una marca de fin por el Tsecuencia.marcar y luego comparar el fin a traves de ese elemento.

espero que se halla entendido, soy novato en esto. Cualquier ayuda viene bien saludos

unit Secuencia;

interface

type

TSecuencia = class

private

f: TextFile;
filename: string;

public

procedure leerPrim(var x:char);
procedure leerSig(var x:char);
procedure escribir(var x:char);
procedure marcar;
function fin: boolean;

end;

implementation

uses SysUtils, Dialogs, Classes;

procedure TSecuencia.leerPrim;
begin
try
assignFile (f, filename);
reset(f);
except
on exception do
begin
ShowMessage('Error al intentar abrir el archivo.');
exit;
end;
end;
read(f,x);
end;

procedure TSecuencia.leerSig;
begin
read(f, x);
end;

function TSecuencia.fin(): boolean;
begin

result := eof(f);
end;

procedure TSecuencia.escribir;
begin
write (f,x);
end;

procedure TSecuencia.marcar();
var x: char;
begin
closefile(f);
end;
end.

Manshula
25-09-2008, 16:18:54
Quisiera saber si esta bien planteado lo que hice yo y si conviene o no hacer lo sugerido. En ese caso lo hago y lo posteo a ver que les parece

duilioisola
25-09-2008, 16:56:45
No entiendo que es lo que quieres hacer con esto.
Aparentemente, abres un archivo y lees caracteres.

- En ningún lugar le envias el nombre del archivo. Quizás sería un buen lugar en LeerPrim.

procedure TSecuencia.leerPrim(Archivo: string; var x:char);
begin
FileName := Archivo;
try
assignFile (f, filename);
reset(f);
except
on exception do
begin
ShowMessage('Error al intentar abrir el archivo.');
exit;
end;
end;
read(f,x);
end;

También puedes hacerlo en un metodo para inicializar el objeto.

LeerPrim lee el primer caracter despues de abrir el archivo. Parece que todo es correcto.

- LeerSig no verifica si ya ha llegado al final.

procedure TSecuencia.leerSig;
begin
if (not fin) then
read(f, x);
else
Raise exception.Create("No hay mas datos para leer!");
end;


- Qué se supone que hace marcar?
Parece que solo cierra el archivo. Quizás te sugirieron que miraras si habías llegado al final antes de cerrarlo, para no dejar nada sin leer.

- Sobra var x: char; en marcar.

Manshula
25-09-2008, 17:17:18
Gracias por la respuesta.

La idea de el marcar es "marcar" el fin de la secuencia

lo que me sugieren ahi es insertar un elemento "x" para comparar el fin por ese elemento y no por eof

duilioisola
25-09-2008, 17:42:32
No entiendo que es lo que quieres hacer con esto.
Sigo sin saber cual es el objetivo de todo esto.

Has preguntado porqué te sugieren poner un elemento que marque el final? Si es para leer archivos no hace falta.

Delphius
26-09-2008, 02:39:53
Manshula, cuando te respondí al mensaje privado te pedí que seas lo más detallista posible. Veo que preferiste ahorrarte palabras, de hecho no veo diferencia alguna entre el mensaje que me enviaste y el post.

Para que podamos ayudarte debes explicar mejor tu caso. La verdad es que no se te entiende. Tomate el tiempo para organizar bien tus ideas y exponerlas.

Te he dicho que no se cobran por la palabras.
Es preferible un post largo y bien explícito y descriptivo que un post vacio.

Saludos,