Pascal/Turbo Pascal - Lista no muestra nada.

   
Vista:

Lista no muestra nada.

Publicado por Martino (4 intervenciones) el 18/11/2014 01:11:51
Que tal ,vengo a pedirles ayuda porque ya no se que hacer, necesito crear una lista y mostrarla, el nodo es un registro, cuyos campos tienen info de otros 2 registros diferentes. El problema es que cuando ejecuto el programa, no me muestra la lista, y no se si me estoy confundiendo en el procedimiento mostrar lista o en el de creacion de nodos.
les dejo el código editado,ya que saque los casos 1,2 y 3 que contenian codig que no afectaba a las listas, el problema esta en los 2 primeros registros (insod y mostrarlista ) y los casos 4 y 6 del CASE en el programa principal.
desde ya muchas gracias.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
program projecto2;
USES crt;
CONST {declaracion de archivos como constantes}
FICHEROPER =  'D:\Programacion\PASCAL\Ficheros\ficherouser1.dat'; {fichero guarda clientes 1}
FICHEROPERT = 'D:\Programacion\PASCAL\Ficheros\ficherouser2.dat'; {Fichero aux}
FICHEROINS =  'D:\Programacion\PASCAL\Ficheros\ficheroinst1.dat'; {fichero guarda instrumentos 1}
FICHEROINST = 'D:\Programacion\PASCAL\Ficheros\Ficheroinst2.dat'; {fichero aux cli}
 
 
TYPE
regcli = record              //Registro de clientes//
 nomape: string[40];
 documento,telefono: real;
 nrouser: word;
 direccion: string[40];
 prestamo: boolean;
 codin: word;
end;
reginst = record              //Registro de Instrumentos//
 Nombre,Tipo: string[40];
 stock: word;
 codigo: word;
end;
reglista = record                //registro//
 Nom,Dnom,Dti:string[40];
 Udoc,Utel:real;
 COD:word;
end;
lista = ^nodo;
nodo =  record
 datos:reglista;
 psig:lista;
end;
 
clientes=file of regcli;
instrumentos=file of reginst;
 
 
{-----------PROCEDIMIENTOS----------}
 
procedure insord (var L:lista ;var datos:reglista; rega:regcli; regb:reginst);
var
nuevo:lista;
begin
new (nuevo);
nuevo^.datos.Nom:=rega.nomape;               //envia a un vector de 2 posiciones los datos del usuario e inst//
nuevo^.datos.Udoc:=rega.documento;           //v[1]contiene datos del usuario, el otro dle instrumento
nuevo^.datos.Utel:=rega.telefono;
nuevo^.datos.Dnom:=regb.Nombre;
nuevo^.datos.Dti:=regb.tipo;
nuevo^.datos.COD:=regb.codigo;
nuevo^.psig:=L;
L:=nuevo;
end;
procedure mostrarlista (var L:lista; var datos:reglista);                 //muestra lista mientras no sea = nil//
 var
 aux:lista;
begin
     aux:=L;
     while aux<>nil do
begin
         writeln ('Nombre ', aux^.datos.nom);
         writeln ('Documento ', aux^.datos.udoc:7:0);
         writeln ('Telefono ', aux^.datos.utel:9:0);
         writeln ('Nombre ins ',aux^.datos.Dnom);
         writeln ('Tipo ',aux^.datos.dti);
         writeln ('Codigo ',aux^.datos.COD);
         aux:=aux^.psig;
         end;
     end;
 
procedure cargacli (var clients:clientes ; var reg_cli:regcli); {procedimiento carga de datos de cliente}
begin
seek (clients,filesize(clients));
writeln ('ingrese el numero de documento sin (.)');   //Carga en el archivo los datos del cliente//
readln (reg_cli.documento);
writeln ('ingrese el numero de telefono');
readln (reg_cli.telefono);
writeln ('ingrese la direccion');
readln (reg_cli.direccion);
reg_cli.prestamo := false;                           //bandera de prestamo
reg_cli.nrouser := filesize(clients) + 1;            //asigna un codigo al usuario
reg_cli.codin:=0;                                    //variable para el codigo del instrumento que posee prestado//
writeln ('El codigo de usuario es ', reg_cli.nrouser);
end;
procedure cargains (var instru:instrumentos; var reg_ins:reginst); {procedimiento carga de instrumentos}
begin
seek (instru,filesize(instru));
writeln ('ingrese el tipo de instrumento [CUERDA / VIENTO / ELECTRONICO / PERCUCION]');//carga los datos del inst//
readln (reg_ins.Tipo);
writeln ('ingrese la cantidad de instrumentos a registrar');
readln (reg_ins.stock);
reg_ins.codigo:=filesize(instru) + 1;                      //Asigna un codigo al instrumento//
writeln ('el codigo del instrumento es ', reg_ins.codigo);
end;
procedure clisearch (var clients:clientes ; var reg_cli:regcli; var controlc:real ;var exist:boolean;var a:word );  {procedimiento recorrer archivo}
var
i:word;
begin
exist:=false;
i:=0;
writeln ('Ingrese DNI sin puntos [.]');
readln (controlc);
for i:=0 to fileSize(clients)-1 do                      //se ingresa el dni y se busca en el archivo//
begin
seek (clients,i);
read (clients,reg_cli);
if reg_cli.documento=controlc then
begin                                                   //cuando se encuentra se guarda la posicion en la variable a//
a:=i;                                                   //se marca la vandera exist en true//
exist:=true;
writeln ('El nombre y apellido es :',reg_cli.nomape);             //se muestran todos los datos//
writeln ('El numero de documento es:',reg_cli.documento:8:0);
writeln ('El numero de telefono es:',reg_cli.telefono:12:0);
writeln ('La direccion es:',reg_cli.direccion);
writeln ('El numero de usuario es:',reg_cli.nrouser);
 if reg_cli.prestamo = true then
               begin
               writeln ('El usuario posee instrumentos prestados');
               end
               else
               writeln ('El usuario no posee instrumentos prestados');
end;
end;
if exist=false then                                                //si no se encontro se muestra el siguiente mensaje//
begin
 writeln ('No existe un usuario con el documento nro >> ', controlc:8:0 ,' <<');
end;
end;
procedure editcli (var clients:clientes ; var reg_cli:regcli);    {Procedimiento editar usuario}
var
k:word;
begin
writeln ('1) Para editar nombre y apellido');
writeln ('2) Para editar DNI');
writeln ('3) Para editar numero telefonico');
writeln ('4) Para editar domicilio');
readln (k);
case k of                                                    //un caso nos da a elegir que dato especifico queremos editar//
 1: begin
     writeln ('Ingrese el nuevo nombre');
     readln (reg_cli.nomape)
    end;
 2: begin
     writeln ('Ingrese el nuevo DNI');
     readln (reg_cli.documento);
    end;
 3: begin
     writeln ('Ingrese el nuevo numero telefonico');
     readln (reg_cli.telefono);
 end;
 4: begin
     writeln ('Ingrese el nuevo domicilio');
     readln (reg_cli.direccion);
 end;
 end;
 writeln ('*DATOS MODIFICADOS CON EXITO*');
end;
procedure borraruser (var a:word ; var clients:clientes ; var clientsx:clientes);   {procedimiento borrar usuario}
var
l,m:word;
reg_cliaux: regcli;
reg_cliaux2: regcli;
begin                                                                      //crea un fichero auxiliar//
  Assign (clientsx,FICHEROPERT);
  rewrite (clientsx);
  for l:= 0 to filesize(clients)-1 do                                      //recorre el fichero y mientras el registr sea distinto del seleccionado es enviado al auxiliar//
   begin
   if l <> a then
    begin
    seek (clients,l);
    read (clients,reg_cliaux);
    reg_cliaux2:=reg_cliaux;
    write (clientsx,reg_cliaux2);
    end;
   end;
   ReWrite (clients);                                                    //se pone el fichero principal en blanco//
   for m:=0 to filesize(clientsx)-1 do                                   //recorre el fichero auxiliar y copia todos los datos para volver a enviarlos al fichero principal//
    begin
    seek (clientsx,m);
    read (clientsx,reg_cliaux2);
    reg_cliaux:=reg_cliaux2;
    write (clients,reg_cliaux);
    end;
   close (clientsx);
end;
procedure searchinst (var b:word ; var instru:instrumentos ; var reg_ins:reginst; var existe:boolean); {procedimiento busca instrumentos}
var
controlA,controlB:string[20];
i:word ;
begin
 existe:=false;
   writeln ('Ingrese el nombre del instrumento');
    readln (controlA);
    writeln ('Ingrese el tipo de instrumento');
    readln (controlB);                                               //ingresa 2 variables por teclado y recorre el archivo, mientras las 2 variables sean verdaderas //
    for i:=0 to fileSize(instru)-1 do                                //se entrega una variable con la posicion y un bool en true para señalar que existe//
     begin
      seek (instru,i);
      read (instru,reg_ins);
       if reg_ins.nombre=controlA then
       begin
        if reg_ins.tipo=controlB then
        begin
        existe:=true;
        b:=i;
    end;
        if existe = false then
        begin
       writeln ('No existe ningun instrumento con esas caracteristicas');
        end;
     end;
end;
end;
 
procedure borrarinst (var a:word ; var instru:instrumentos ; var instrux:instrumentos); {procedimiento borrar instrumento}
var
l,m:word;
reg_insaux:reginst;
reg_insaux2:reginst;
begin                                                                    //recorre el archivo//
Assign (instrux,FICHEROINST);
rewrite (instrux);
for l:=0 to filesize(instru)-1 do
 begin
 if l <> a then                                                         //mientras el registro sea distinto al seleccionado se copia a otro archivo auxiliar//
  begin
  seek (instru,l);
  read (instru,reg_insaux);
  reg_insaux2:=reg_insaux;
  write (instrux,reg_insaux2);
  end;
  end;
  Rewrite (instru);
  for m:=0 to filesize(instrux)-1 do                                   //se pone en blanco el archivo principal y luego todo lo del auxiliar es vuelto a copiar//
   begin
   seek (instrux,m);
   read (instrux,reg_insaux2);
   reg_insaux:=reg_insaux2;
   write (instru,reg_insaux);                                          //por ultimo el archivo aux tambien se pone en blanco//
   end;
  close (instrux);
 end;
 
 
VAR
m,rta3,a,b,aux,rta,i,menu:word;
clients,clientsx: clientes;
instru,instrux: instrumentos;
reg_cli,rega: regcli;
reg_ins,regb: reginst;
controlA,controlB:string[20];
lit,bol,exist,k,existe:boolean;
controlc:real;
rta2,rta4:char;
datos:reglista;
L,list:lista;
 
BEGIN
 
Assign (clients,FICHEROPER);
{$I-} reset(clients); {$I+}
if ioresult <> 0 then
 begin
 rewrite (clients);
 end;
Assign (instru,FICHEROINS);
{$I-} ReSet (instru); {$I+}
if ioresult <> 0 then
 begin
 rewrite (instru);
 end;
k:= false;
L:=nil;
repeat
writeln ('Ingrese la opcion que desea (1-2-3-4)');
writeln ('1)Agregar un usuario');
writeln ('2)Agregar un instrumento');
writeln ('3)Buscar un usuario o instrumento');
writeln ('4)Registrar un prestamo o devolucion');
writeln ('5)Salir');
readln (menu);
 
 
case menu of
1:Begin                                                                  //CASO PRINCIPAL: AGREGAR USUARIO//
 
  end;
2:begin                                                                           //CASO PRINCIPAL: AGREGAR INSTRUMENTO//
 
3:begin                                                             //CASO PRINCIPAL:BUSCADOR//
 
4:begin                                    //CASO PRINCIPAL: PRESTAMOS Y DEVOLUCIONES//
  writeln ('***** PRESTAMOS Y DEVOLUCIONES *****');
  writeln ('1)Registrar un prestamo');
  writeln ('2)Registrar una devolucion');
  readln (rta3);
  case rta3 of                                    //caso para elegir la opcion deseada, prestamo o devolucion//
  1:begin
    seek (clients,0);
    seek (instru,0);
    writeln (' *** PRESTAMO *** ');               //subcaso 1 prestamo//
    Writeln ('Busqueda del cliente');
    clisearch (clients,reg_cli,controlc,exist,a); //procedimiento busqueda de cliente//
    if exist = true then
    begin
    seek (clients,a);
    read (clients,reg_cli);
    if reg_cli.prestamo = false then               //reg_cli.prestamo es un booleano que señala si posee instrumento (true) o no (false)
    begin
    writeln ('Busqueda del instrumento');
    searchinst (b,instru,reg_ins,existe);          //procedimiento busqueda del instrumento//
    seek (instru,b);
    read (instru,reg_ins);
    if existe = true then
    begin
     seek (clients,a);
     seek (instru,b);
     reg_cli.prestamo:= true;
     reg_cli.codin:=reg_ins.codigo;               //se le asigna el codigo del instrumento prestado//
     if reg_ins.stock > 0 then
     begin
     rega.nomape:=reg_cli.nomape;
     rega.direccion:=reg_cli.direccion;
     rega.telefono:=reg_cli.telefono;
     regb.Nombre:=reg_ins.Nombre;
     regb.Tipo:=reg_ins.tipo;
     regb.codigo:=reg_ins.codigo;
     reg_ins.stock:=reg_ins.stock-1;              //se resta el stock//
     writeln ('Instrumento asociado correctamente');
     Writeln;
     insord (L,datos,reg_cli,reg_ins);
     writeln ('La cantidad de ',reg_ins.Nombre,'s actualmente es de ',reg_ins.stock); //se muestra lo asociado//
      write (clients,reg_cli);
      write (instru,reg_ins);
     end else
     writeln('No hay stock suficiente');
     reg_cli.prestamo:=true;
     reg_cli.codin:=0
    end;
    end;
    end;
    readkey;
   end;
  2:begin
     writeln (' *** DEVOLUCION *** ');                //Subcaso devolucion//
     writeln ('Busqueda del cliente');
     clisearch (clients,reg_cli,controlc,exist,a);
     if exist = true then
     begin
      seek (clients,a);
      read (clients,reg_cli);
      if reg_cli.prestamo = true then
      begin
         seek(clients,a);
         reg_cli.prestamo := false;
         write (clients,reg_cli);
         {funcion que busca nodo usando el nro de doc y devuelve el cod de inst}
         {funcion busca inst por cod en el archivo}
 
         {reg_ins.stock:=reg_ins.stock + 1 <--- agregar};
      end;
     end;
  end;
  end;
  end;
5:begin
 k:=true
 end;
6:begin
  mostrarlista (list,datos);
  readkey;
 end;
end;{fincaso}
 
clrscr;
until k=true;
close (clients);
close (instru);
writeln ('*** EL PROGRAMA SE CERRARA ***');
readkey;
END.
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

Lista no muestra nada.

Publicado por ramon (2072 intervenciones) el 19/11/2014 00:46:26
{Primero en tu programa no tienes activado la entrada de datos opcion 1 por lo tanto mal podras ver datos
ya que no los as cargado si lo que quieres es un ejemplo general de como podria ser dimelo y te lo pasare}
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

Lista no muestra nada.

Publicado por Martino (4 intervenciones) el 19/11/2014 04:42:48
El programa esta completo, el problema es que son mas de 500 lineas entonces no podía publicarlo entero.
Por suerte pude solucionar el problema por mi parte.
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

Lista no muestra nada.

Publicado por ramon (2072 intervenciones) el 19/11/2014 10:52:44
Me alegro que lo hayas solucionado pues eso demuestra que trabajas suerte.
Pero para poder serte util devemos de ver todo el proceso sino adibinos no somos.
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

Lista no muestra nada.

Publicado por Martino (4 intervenciones) el 20/11/2014 01:01:38
Para no crear otro post te lo pregunto por acá.
Una vez registrado un préstamo, cuando quiero hacer la devolución, utilizo una función para que me devuelva el código del instrumento, (que es igual a su posición en el archivo + 1); es decir, que me devuelve su posición a partir de su código.
El problema es que luego de utilizarla, si por ejemplo yo tenia 2 instrumentos guardados en el archivo, ahora no se porque me aparece como que tengo 6000.
Ese numero luego me desvirtúa todo lo siguiente, dado a que si quiero agregar un 3er instrumento, su código seria 6001.
sin mas vueltas te dejo el codigo que esta en la siguiente pagina : http://pastebin.com/BG7RvihZ porque sino aca no tengo caracteres suficientes para mostrarlo.
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