Pascal/Turbo Pascal - Practica de punteros con array al visualizar

 
Vista:

Practica de punteros con array al visualizar

Publicado por miguel (3 intervenciones) el 25/03/2006 15:20:45
Buenas es el primer ejercicio que hago con punteros, este es de pascal, el problema me viene cuando visualizo la lista de clientes que contiene la empresa, solo me sale el ultimo cliente que tengo dado de alta "procedure mostrarclientes(var tempresa:tipoempresa);"
hay este el problema.

Dejo aqui subido en zip el enunciado, el proyec y las unidades, compila sin problema solo me queda saber por que solo me sale por pantalla el ultimo cliente.
http://www.megaupload.com/?d=35ELX85V

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Practica de punteros con array al visualizar

Publicado por Edgar Rodriguez (8 intervenciones) el 26/03/2006 06:49:50
Dile a tus profesores que pueden trabajar con Delphi porque es la última versión de pascal... además pueden bajar versiones demos sin problemas, y para linux, existe una versión que se llama Kylix que es Open Source y es como trabajar VB pero con la potencia y facilidad de Pascal...

Para tu ejemplo, sería bueno que dieras el enunciado aquí porque intenté ir al sito que dijiste y no vi forma de bajarlo... sobre punteros, generalmente la gente comete el error de pensar que ya es la variable, cuando los punteros hay que trabajarlos como referencia... claro que hay que instanciarlos antes para poder trabajar con ellos, si es una lista, hay que ver si es sencilla o doblemente encadenada, y ten siempre presente que un puntero no es el valor de la variable en sí, sino que es como una "plantilla" de memoria, que sólo funciona cuando la instancias con la función new... ahí sí es cuando ya puedes trabajar con valores...

Volviendo al tema de Delphi, es más chévere trabajar con él porque las pilas y colas ya están definidas y sólo hay que trabajar con ellas como objetos, por ejemplo, dile al profesor que hay un objeto llamado TList que maneja punteros internamente, y otra TStringList...

Después que hayas aprendido Delphi bien, es facilísimo pasarse a C++Builder o C#Builder... son herramientas más poderosas que las de M$...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Practica de punteros con array al visualizar

Publicado por miguel (3 intervenciones) el 26/03/2006 13:30:25
Sobre el programa que esta hecho el ejercicio es en borland delphi 7 ,pongo aqui entonces el enunciado mejor, te pongo aqui el ejercicio.


PROGRAM practica3;

{$APPTYPE CONSOLE}

uses
SysUtils,
laempresa,
cliente;

var
miempresa: tipoempresa;

cliente1,cliente2: tipocliente;

begin
inicializarempresa(miempresa);
leerdatoscliente(cliente1);
anyadircliente(cliente1,miempresa);
leerdatosCliente(cliente2);
anyadircliente(cliente2,miempresa);
mostrarclientes(miempresa);
borrarcliente(miempresa,'88891451H');
mostrarclientes(miempresa);
readln;
end.
____________________________________________________________________

unit laempresa;

interface
uses cliente;
type
tipoempresa=array[1..100]of ^client;
tipocliente=client;
var
cadnif:string;
x:integer;
procedure inicializarempresa(var tempresa:tipoempresa);
procedure leerDatosCliente(var cli:tipocliente);
procedure anyadirCliente(var cli:tipocliente;tempresa:tipoempresa);
procedure mostrarClientes(var tempresa:tipoempresa);
procedure borrarcliente(var tempresa:tipoempresa;cadnif:string);

implementation

procedure inicializarempresa(var tempresa:tipoempresa);
begin
x:=1;
writeln('Inicializar la empresa');
writeln('======================');
end;

procedure leerDatosCliente(var cli:tipocliente);
begin
leer_datos_cliente(cli);
end;

procedure anyadirCliente(var cli:tipocliente;tempresa:tipoempresa);
begin
new(tempresa[x]);
tempresa[x]^:=cli;
dispose(tempresa[x]);
x:=x+1;
end;

procedure mostrarclientes(var tempresa:tipoempresa);
begin
writeln('Ver lista de clientes');
x:=1;
while x<= 2 do
begin
new(tempresa[x]);
with tempresa[x]^ do
begin
writeln(nombre);
writeln(apellido);
writeln(direccion);
writeln(nif);
writeln(telefono);
writeln(fecha_nacimiento.dia);
writeln(fecha_nacimiento.mes);
writeln(fecha_nacimiento.anio);
end;
dispose(tempresa[x]);
x:=x+1;
end;
readln;
end;

procedure borrarcliente(var tempresa:tipoempresa;cadnif:string);
begin

end;

end.
_________________________________________________________________

unit cliente;

interface
uses fecha;
type
client = record
nombre,apellido,direccion,nif:string[20];
telefono:integer;
fecha_nacimiento:fech;
end;

procedure inicializar_cliente(var c:client);
procedure leer_datos_cliente(var c:client);
procedure mostrar_datos_cliente(var c:client);

implementation

procedure inicializar_cliente(var c:client);
begin
writeln('Inicializar cliente');
writeln('===================');
end;

procedure leer_datos_cliente(var c:client);
begin
with c do
begin
writeln('Introduce el nombre');
readln(nombre);
writeln('Introduce el apellido');
readln(apellido);
writeln('Introduce la direccion');
readln(direccion);
writeln('Introduce el NIF');
readln(nif);
writeln('Introduce el telefono');
readln(telefono);
writeln('Introduce la fecha de nacimiento');
leer_fecha(fecha_nacimiento);
end;
end;

procedure mostrar_datos_cliente(var c:client);
begin
with c do
begin
writeln(nombre);
writeln(apellido);
writeln(direccion);
writeln(nif);
writeln(telefono);
mostrar_fecha(fecha_nacimiento);
end;
end;

end.
__________________________________________________________________

unit fecha;

interface

type
fech = record
dia:1..31;
mes:1..12;
anio:integer;
end;

procedure iniciar_fecha(var f:fech);
procedure leer_fecha(var f:fech);
procedure mostrar_fecha(var f:fech);

implementation

procedure iniciar_fecha(var f:fech);
begin
writeln('Inicializar fecha');
writeln('=================');
end;

procedure leer_fecha(var f:fech);
begin
with f do
begin
writeln('Introduce el dia');
readln(dia);
writeln('Introduce el mes');
readln(mes);
writeln('Introduce el anio');
readln(anio);
end;
end;

procedure mostrar_fecha(var f:fech);
begin
with f do
begin
writeln(dia);
writeln(mes);
writeln(anio);
end;
end;

end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Practica de punteros con array al visualizar

Publicado por miguel (3 intervenciones) el 26/03/2006 13:56:32
De todos modos te pongo un ejercicio sencillo que da el mismo error al visualizar que es para mi el maldito problema

si por ejemplo introduzco el 3,4,5 al visualizar solo me sale el ultimo 5,5,5 como puedo hacer que me imprima el 3,4,5 y no el 5,5,5

program ejemplo;

{$APPTYPE CONSOLE}

uses
SysUtils;
type
tipoempresa=array[1..3]of ^integer;

var
x:integer;
tempre:tipoempresa;

procedure introducir(var tempre:tipoempresa);
begin
for x:=1 to 3 do
begin
new(tempre[x]);
writeln('introduce un numero');
readln(tempre[x]^);
dispose(tempre[x]);
end;
end;

procedure visualizar(var tempre:tipoempresa);
begin
for x:=1 to 3 do
begin
new(tempre[x]);
writeln(tempre[x]^);
dispose(tempre[x]);
end;
end;

begin
introducir(tempre);
visualizar(tempre);
readln;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar