[CODE] PRACTICA PRO

Para cualquier tema relacionado con la asignatura de Programación en cualquier titulación.

[CODE] PRACTICA PRO

Notapor xeneizesiempre » Lun, 29 Dic 2008 12:20

Código: Seleccionar todo
VAR
 alumnos:TipoAlumno;
 f:Tfichero;
 nombre:Tnombrefichero;
 seguir:char;
(*************************************************************************************************************************)
PROCEDURE modificar (VAR f:Tfichero);
VAR
 encontrado:boolean value FALSE; es:char; I:integer; nombre:Tnombre;
BEGIN
 Writeln('ESCRIBA EL NOMBRE DEL ALUMNO AL CUAL DESEA MODIFICAR ALGUN DATO');
 Readln(nombre);
 WHILE NOT (encontrado) and (I<lastposition(f)) DO BEGIN
 seekread(f,I);
  IF (f^.nombre=nombre) THEN BEGIN               (***********************DONDE DA EL ERROR*******************)
   encontrado:=TRUE;
  ELSE
   I:=I+1;
  END;
  IF encontrado THEN
     seekupdate(f,I);
   Write(f^.nombre);
   Write(f^·apellido);
   Write(f^.login);
   Write('ES ESTE?'); Readln(es);
   IF es = 's' OR es = 'S' THEN BEGIN
    WHILE alumnos DO BEGIN
     Write('nombre'); Readln(nombre);
     Write('apellido'); Readln(apellido);
     Write('login'); Readln(login);
    END;
    seekupdate(f,registro);
   END;
  END;
 END;
END.
(******************************************************************************************************)

ese es el pseudocodigo de mi procedimiento de la practica para modificar datos, esta tal cual Esteban lo hizo en clase pero con un problema parecido a la practica, solo que puso como ejemplo una escalera de vecinos, al compilarlo me da solo un error y es el siguiente:


modificaar.pas: In procedure `modificar':
modificaar.pas:43: error: request for field `nombre' in something not
modificaar.pas:43: error: a record, schema or object
modificaar.pas:45: error: syntax error before `ELSE'

le mande un email a esteban hace ya mas de una semana y no me contesto nada, estoy atascado en este procedimiento de la practica, el de introducir datos sta perfecto y este en teoria deberia estarlo porque esta copiado de clase, si alguien tiene alguna idea...
xeneizesiempre
Bishibosh
 
Mensajes: 35
Registrado: Lun, 22 Dic 2008 13:41

Re: [CODE] PRACTICA PRO

Notapor Fer » Lun, 29 Dic 2008 14:24

Tienes dos errores y uno sé cuál es. Se supone que cuando abres un bloque en un IF con un BEGIN, debes cerrarlo, pero creo que es:
Código: Seleccionar todo
IF cond THEN BEGIN
   cosa
END
else BEGIN
   cosa2
END


Es decir, te faltaría cerrar el END en la línea 45 és. Sería lógico, pero no lo sé fijo. Sobre lo otro, leyendo lo que te dice el compilador, no sé si será que f no contiene el campo "nombre". Comprueba el tipo de "f".
Campaña de donación de apuntes:

¡Súbelos a la sección de apuntes o deja los tuyos en el local de alumnos!
Avatar de Usuario
Fer
QG Admin
Corresponsal de guerra
 
Mensajes: 26112
Registrado: Vie, 22 Sep 2006 14:18
Ubicación: A Coruña

Re: [CODE] PRACTICA PRO

Notapor xeneizesiempre » Lun, 29 Dic 2008 14:40

mmmm estuve viendo lo del if y no afecta para nada, la verdad es que a eso le doy poca importancia porque el error que realmente me importa es el otro, copio aca los tipos de datos y haber si alguien me puede ayudar.

Código: Seleccionar todo
TipoAlumno=ARRAY[1..n] of Talumno;
Tfichero=bindable file [1..n]of TipoAlumno;
VAR
 alumnos:TipoAlumno;
 f:Tfichero;
xeneizesiempre
Bishibosh
 
Mensajes: 35
Registrado: Lun, 22 Dic 2008 13:41

Re: [CODE] PRACTICA PRO

Notapor xeneizesiempre » Lun, 29 Dic 2008 14:41

bueno, me falto decir que el tipo alumno tiene sus correspondientes campos en el registro, que son el nombre ...apellidos...login...etc..
xeneizesiempre
Bishibosh
 
Mensajes: 35
Registrado: Lun, 22 Dic 2008 13:41

Re: [CODE] PRACTICA PRO

Notapor Fer » Lun, 29 Dic 2008 15:13

xeneizesiempre escribió:bueno, me falto decir que el tipo alumno tiene sus correspondientes campos en el registro, que son el nombre ...apellidos...login...etc..



Prueba a meterle antes de todo un WITH, que igual es que te haces la picha un lío. Y ten en cuenta siempre todos los errores que te da el compilador. Puede que sea el origen del fallo de todo o algo.
Campaña de donación de apuntes:

¡Súbelos a la sección de apuntes o deja los tuyos en el local de alumnos!
Avatar de Usuario
Fer
QG Admin
Corresponsal de guerra
 
Mensajes: 26112
Registrado: Vie, 22 Sep 2006 14:18
Ubicación: A Coruña

Re: [CODE] PRACTICA PRO

Notapor erKURITA » Lun, 29 Dic 2008 16:32

Código: Seleccionar todo
VAR
   alumnos:TipoAlumno;
   f:Tfichero;
   nombre:Tnombrefichero;
   seguir:char;
(*************************************************************************************************************************)
PROCEDURE modificar (VAR f:Tfichero);
VAR
   encontrado:boolean value FALSE;
   es:char;
   I:integer;
   nombre:Tnombre;
BEGIN
   Writeln('ESCRIBA EL NOMBRE DEL ALUMNO AL CUAL DESEA MODIFICAR ALGUN DATO');
   Readln(nombre);
   WHILE NOT (encontrado) and (I<lastposition(f)) DO BEGIN
      seekread(f,I);
      IF (f^.nombre=nombre) THEN
         encontrado:=TRUE
      ELSE
         I:=I+1;
      IF encontrado THEN  BEGIN
         seekupdate(f,I);
         Write(f^.nombre);
         Write(f^·apellido);
         Write(f^.login);
         Write('ES ESTE?'); Readln(es);
         IF (es = 's') OR (es = 'S') THEN BEGIN
            WITH alumnos DO BEGIN
               Write('nombre'); Readln(nombre);
               Write('apellido'); Readln(apellido);
               Write('login'); Readln(login);
            END;
            seekupdate(f,registro);
         END;
      END;
   END;
END;
(******************************************************************************************************)


Esto en teoria deberia ir. No lo he compilado para ver si corre, pero por la parte de sintaxis, deberia estar bien.
Última edición por erKURITA el Mar, 30 Dic 2008 3:42, editado 1 vez en total
Avatar de Usuario
erKURITA
Colenzo el Aniquilador
erKARAJO
 
Mensajes: 2446
Registrado: Sab, 13 Sep 2008 10:43

Re: [CODE] PRACTICA PRO

Notapor omikinho » Mar, 30 Dic 2008 2:07

O tipo Tfichero telo definido de tal forma que unha variable dese tipo é un ficheiro de acceso aleatorio de elementos de tipo TipoAlumno, e este tipo, á súa vez é un array de elementos de tipo Talumno, e dis que Talumno é un rexistro onde gardas nome, login,...
Vale, pois entón o problema é que f^.nombre non existe. En tal caso sería f^.[i].nombre, creo.
O que dixo FeR, básicamente.
O que estarías facendo nese bucle é, se non me engano (bueno terías que inicializar a variable i a un), comprobar primeiro o campo nombre do rexistro asociado ó primeiro elemento do array asociado ó primeiro elemento do ficheiro, logo o campo nombre asociado ó rexistro do segundo elemento do array asociado ó segundo elemento do ficheiro,...
Creo que che sobra o array e TipoAlumno:
Código: Seleccionar todo
Tfichero=bindable file [1..n]of TAlumno;

Así sí que poderás facer o de f^.nombre.

E aquí:
Código: Seleccionar todo
            WHILE alumnos DO BEGIN
               Write('nombre'); Readln(nombre);
               Write('apellido'); Readln(apellido);
               Write('login'); Readln(login);
            END;

Tes que cambiar o WHILE por un WHIT.
Miguel Torga escribió:
Minha Galiza de perfil bonito,
órfã de pátria num asilo austero:
Só por seres portuguesa é que te quero,
e por seres castelhana te acredito.
omikinho
Doncella Sarina
 
Mensajes: 471
Registrado: Mar, 19 Feb 2008 17:31

Re: [CODE] PRACTICA PRO

Notapor erKURITA » Mar, 30 Dic 2008 4:42

omikinho escribió:O tipo Tfichero telo definido de tal forma que unha variable dese tipo é un ficheiro de acceso aleatorio de elementos de tipo TipoAlumno, e este tipo, á súa vez é un array de elementos de tipo Talumno, e dis que Talumno é un rexistro onde gardas nome, login,...

Aleatorio!?! No jodas!!!! Siempre he querido un fichero que me diera un registro al azar y no el que quiero 8D!!

Va a ser que no :( Eso es un fichero de acceso directo.

omikinho escribió:Vale, pois entón o problema é que f^.nombre non existe. En tal caso sería f^[i].nombre, creo.
O que dixo FeR, básicamente.

Asi si. Pero espera, al usar seek*(), puedes usarlo sin el indice, afaik. Asi que, como que no.

omikinho escribió:O que estarías facendo nese bucle é, se non me engano (bueno terías que inicializar a variable i a un),

Correcto. Solo añade " VALUE 1" al final de la declaracion de I.

omikinho escribió:comprobar primeiro o campo nombre do rexistro asociado ó primeiro elemento do array asociado ó primeiro elemento do ficheiro, logo o campo nombre asociado ó rexistro do segundo elemento do array asociado ó segundo elemento do ficheiro,...

Me he perdido, srsly @_@

Quisiste decir:

Comprobar si el nombre del registro pasado como argumento coincide con el nombre del registro en cuya posicion se encuentra el fichero, y si no es el deseado, el siguiente.
?
En tal caso, si, hace eso.

omikinho escribió:Creo que che sobra o array e TipoAlumno:
Código: Seleccionar todo
Tfichero=bindable file [1..n]of TAlumno;

Así sí que poderás facer o de f^.nombre.

Correcto. En caso contrario, tendrias un fichero de acceso directo de arrays de alumnos. Uh.... momento WTF?

omikinho escribió:E aquí:
Código: Seleccionar todo
            WHILE alumnos DO BEGIN
               Write('nombre'); Readln(nombre);
               Write('apellido'); Readln(apellido);
               Write('login'); Readln(login);
            END;

Tes que cambiar o WHILE por un WITH.

Yo lo habia cambiado en el mio pero no se porque no cogio el edit :X Pero si, hay que cambiar el WHILE por WITH

Ah y una cosita para el OP: si para modificar un alumno, el programa tiene que hacer esto, coge mi consejo: ni se te ocurra implementarlo. Suponte que te equivocaste metiendo el ultimo registro. De un fichero de 998 entradas. No es que el programa vaya a tardar tanto, pero la paciencia de una persona no aguanta tanto.

Te sugeriria que le pidieras al usuario un apellido o un nombre, buscaras las coincidencias y se las mostraras, numeradas. Luego leyeras por pantalla la opcion que quiera y le permitiera modificar esa, directamente.
Avatar de Usuario
erKURITA
Colenzo el Aniquilador
erKARAJO
 
Mensajes: 2446
Registrado: Sab, 13 Sep 2008 10:43

Re: [CODE] PRACTICA PRO

Notapor MarTin06 » Mar, 30 Dic 2008 12:07

erKURITA escribió:
Ah y una cosita para el OP: si para modificar un alumno, el programa tiene que hacer esto, coge mi consejo: ni se te ocurra implementarlo. Suponte que te equivocaste metiendo el ultimo registro. De un fichero de 998 entradas. No es que el programa vaya a tardar tanto, pero la paciencia de una persona no aguanta tanto.

Te sugeriria que le pidieras al usuario un apellido o un nombre, buscaras las coincidencias y se las mostraras, numeradas. Luego leyeras por pantalla la opcion que quiera y le permitiera modificar esa, directamente.



yo lo q estoy intentando consegir esq me pida el nombre, y despues me enseñe una lista numerada d todos los alumnos/as que tienen el nombre introducido, variando solo los apellidos. el usuario solo tendria que introducir el numero que se correspondiera con el nombre y apellidos que esta buscando para modificar....
me parezia mu facil hacerlo pero no consigo hacer nada...... me pierdo mui facilmente.... aer si me podeis echar una mano...
gracias
MarTin06
Griswold
 
Mensajes: 189
Registrado: Jue, 25 Dic 2008 19:10

Re: [CODE] PRACTICA PRO

Notapor erKURITA » Mar, 30 Dic 2008 16:16

MarTin06 escribió:
erKURITA escribió:
Ah y una cosita para el OP: si para modificar un alumno, el programa tiene que hacer esto, coge mi consejo: ni se te ocurra implementarlo. Suponte que te equivocaste metiendo el ultimo registro. De un fichero de 998 entradas. No es que el programa vaya a tardar tanto, pero la paciencia de una persona no aguanta tanto.

Te sugeriria que le pidieras al usuario un apellido o un nombre, buscaras las coincidencias y se las mostraras, numeradas. Luego leyeras por pantalla la opcion que quiera y le permitiera modificar esa, directamente.



yo lo q estoy intentando consegir esq me pida el nombre, y despues me enseñe una lista numerada d todos los alumnos/as que tienen el nombre introducido, variando solo los apellidos. el usuario solo tendria que introducir el numero que se correspondiera con el nombre y apellidos que esta buscando para modificar....
me parezia mu facil hacerlo pero no consigo hacer nada...... me pierdo mui facilmente.... aer si me podeis echar una mano...
gracias


has intentado hacerlo en pseudo-codigo?
Avatar de Usuario
erKURITA
Colenzo el Aniquilador
erKARAJO
 
Mensajes: 2446
Registrado: Sab, 13 Sep 2008 10:43

Re: [CODE] PRACTICA PRO

Notapor MarTin06 » Mar, 30 Dic 2008 18:10

erKURITA escribió:
MarTin06 escribió:
erKURITA escribió:
Ah y una cosita para el OP: si para modificar un alumno, el programa tiene que hacer esto, coge mi consejo: ni se te ocurra implementarlo. Suponte que te equivocaste metiendo el ultimo registro. De un fichero de 998 entradas. No es que el programa vaya a tardar tanto, pero la paciencia de una persona no aguanta tanto.

Te sugeriria que le pidieras al usuario un apellido o un nombre, buscaras las coincidencias y se las mostraras, numeradas. Luego leyeras por pantalla la opcion que quiera y le permitiera modificar esa, directamente.



yo lo q estoy intentando consegir esq me pida el nombre, y despues me enseñe una lista numerada d todos los alumnos/as que tienen el nombre introducido, variando solo los apellidos. el usuario solo tendria que introducir el numero que se correspondiera con el nombre y apellidos que esta buscando para modificar....
me parezia mu facil hacerlo pero no consigo hacer nada...... me pierdo mui facilmente.... aer si me podeis echar una mano...
gracias


has intentado hacerlo en pseudo-codigo?



q bah!! toi probando en un folio con el libro d leestma al lado pero soi incapaz d hacerlo... i cmo vi q estabais ablando d esto x si me podias ayudar! nada mas.....
MarTin06
Griswold
 
Mensajes: 189
Registrado: Jue, 25 Dic 2008 19:10

Re: [CODE] PRACTICA PRO

Notapor erKURITA » Mar, 30 Dic 2008 19:14

MarTin06 escribió:
erKURITA escribió:*snip*

has intentado hacerlo en pseudo-codigo?

q bah!! toi probando en un folio con el libro d leestma al lado pero soi incapaz d hacerlo... i cmo vi q estabais ablando d esto x si me podias ayudar! nada mas.....


Te recomiendo sinceramente que intentes hacerlo en pseudo-codigo primero, y luego lo metas al ordenador, como dijo Esteban. Esto no es el programita de sacar el n-ésimo termino de la serie de Fibonnaci, o una calculadora. Esto es un programa a gran escala que requiere pensarlo muy bien, planearlo y planificarlo muy bien y un buen concepto, sobre todo.

Cuando cojas mas experiencia programando, podras intentarlo mediante "trial and error", pero a los que aprenden a programar, este no es el caso. Si se aprenden las limitaciones del lenguaje más la sintaxis, y lo pensais bien bien como lo vais a hacer, os resultara mas facil hacer la practica.

Mira, por adelantarles un poco: lo que yo estoy haciendo es un programa que utiliza 2 tipos de fichero, ambos de tipo secuencial: el primero que es donde guarda los alumnos, y el segundo que es un indice. El indice me va a permitir buscar los alumnos mas facilmente y hacer la ordenacion mas sencilla (solamente tengo que ordenar el indice :potito:). Pero lo estoy haciendo porque:

  • Primero: Ya llevo 5 años programando, tengo experiencia con varios lenguajes.
  • Segundo: he pensado y le he dado muchisimas vueltas a este concepto y al diseño del programa, y aunque tengo que forzozamente ir cambiando el programa, lo tengo en cuenta a medida que voy programando. Tambien voy separando las funciones en ficheros, asegurandome que las funciones esten en su debido orden (usando sentencias de pre-procesador, esto es ya algo mas avanzado)
  • Tercero: Aunque no tiene nada que ver con la asignatura en si, uso un sistema de versionado llamado Subversion que me permite hacer cambios drásticos en la estructura del programa para probar ideas u opciones, y revertirla a una version anterior en caso de que no resulte o se complique a una escala exponencial.

Y solamente llevo la mitad de la practica. Hace 10 minutos logre implementar la primera opcion de ordenacion.

Esto no lo digo por vanagloriarme, sino para que sepais que teneis que tomaros la practica en serio y con corazón. Si no os gusta o lo veis muy complicado, pues habeis escogido la carrera equivocada, porque esto es solo la punta del iceberg. Un iceberg muy gordo.

Teneis que mentalizaros de que es como aprender un idioma nuevo, y vais a hablarlo con la maquina: si le hablais de una manera que no entiende, se va a quejar. Si le hablais bien pero no es lo que le preguntasteis, tendreis que reformular la pregunta.

Si aun asi teneis duda o necesitais algun consejo (no os voy a hacer la practica, que no), podeis contactarme en la facultad despues de las clases en las mesas de abajo. Buscad el Toshiba con el logo de Debian a la izquierda. O bien podeis ir al foro de presentaciones, ver quien soy y luego me buscais. Pero venid preparados con la materia, porque si veo que no habeis buscado nada, va a ser la ultima vez que os ayudare en algo.

Bueno, basta de thread-hijacking :potito:
Avatar de Usuario
erKURITA
Colenzo el Aniquilador
erKARAJO
 
Mensajes: 2446
Registrado: Sab, 13 Sep 2008 10:43

Re: [CODE] PRACTICA PRO

Notapor omikinho » Mié, 31 Dic 2008 0:07

erKURITA escribió:
omikinho escribió:O tipo Tfichero telo definido de tal forma que unha variable dese tipo é un ficheiro de acceso aleatorio de elementos de tipo TipoAlumno, e este tipo, á súa vez é un array de elementos de tipo Talumno, e dis que Talumno é un rexistro onde gardas nome, login,...

Aleatorio!?! No jodas!!!! Siempre he querido un fichero que me diera un registro al azar y no el que quiero 8D!!

Va a ser que no :( Eso es un fichero de acceso directo.


"ciencias de la computación, el acceso aleatorio es la habilidad para acceder a un elemento arbitrario de una secuencia de datos en tiempos iguales. El opuesto es el acceso secuencial, donde para acceder a un elemento remoto se necesita más tiempo."
http://es.wikipedia.org/wiki/Acceso_aleatorio
Ó acceso directo tamén se lle chama acceso aleatorio, qué queres que lle faiga :D.

erKURITA escribió:
omikinho escribió:Vale, pois entón o problema é que f^.nombre non existe. En tal caso sería f^[i].nombre, creo.
O que dixo FeR, básicamente.

Asi si. Pero espera, al usar seek*(), puedes usarlo sin el indice, afaik. Asi que, como que no.


Eu non puxen f^[i].nombre, puxen f^.[i].nombre,porque tal e como tiña definido o tipo Tfichero, f^.nombre non existía, porque f^ sería un array de tipo Talumno:
Código: Seleccionar todo
TipoAlumno=ARRAY[1..n] of Talumno;
Tfichero=bindable file [1..n]of TipoAlumno;


Como é moi probable que non sea isto o que quere, por iso lle dixen despois o de que faiga que o tipo Tfichero
sea de elementos de tipo Talumnos, directamente, sin arrays.


erKURITA escribió:
omikinho escribió:comprobar primeiro o campo nombre do rexistro asociado ó primeiro elemento do array asociado ó primeiro elemento do ficheiro, logo o campo nombre asociado ó rexistro do segundo elemento do array asociado ó segundo elemento do ficheiro,...

Me he perdido, srsly @_@

Quisiste decir:

Comprobar si el nombre del registro pasado como argumento coincide con el nombre del registro en cuya posicion se encuentra el fichero, y si no es el deseado, el siguiente.
?
En tal caso, si, hace eso.


Volvemos á mesma:
Se o tipo de Tfichero é:
Código: Seleccionar todo
TipoAlumno=ARRAY[1..n] of Talumno;
Tfichero=bindable file [1..n]of TipoAlumno;

O que creo que faría (poñendo f^.[i].nombre pra que compilara) sería o que dixen.
Pero dudo moito que sea ese o tipo de Tfichero que quere:
omikinho escribió:Creo que che sobra o array e TipoAlumno:
Código: Seleccionar todo
    Tfichero=bindable file [1..n]of TAlumno;


Así sí que poderás facer o de f^.nombre.

O que quería é explicarlle o que faría o seu programa tal e como estaban os tipos pra que vira se realmente era iso o que quería ou non.

erKURITA escribió:
omikinho escribió:Creo que che sobra o array e TipoAlumno:
Código: Seleccionar todo
Tfichero=bindable file [1..n]of TAlumno;

Así sí que poderás facer o de f^.nombre.

Correcto. En caso contrario, tendrias un fichero de acceso directo de arrays de alumnos. Uh.... momento WTF?


:D.
Miguel Torga escribió:
Minha Galiza de perfil bonito,
órfã de pátria num asilo austero:
Só por seres portuguesa é que te quero,
e por seres castelhana te acredito.
omikinho
Doncella Sarina
 
Mensajes: 471
Registrado: Mar, 19 Feb 2008 17:31

Re: [CODE] PRACTICA PRO

Notapor xeneizesiempre » Vie, 02 Ene 2009 17:27

Código: Seleccionar todo
TipoAlumno=ARRAY[1..n] of Talumno;
Tfichero=bindable file of TipoAlumno;
VAR
       alumnos:TipoAlumno;
       f:Tfichero;
       nombre:Tnombrefichero;
    (*************************************************************************************************************************)
PROCEDURE modificar (VAR f:Tfichero);
VAR
   encontrado:boolean value FALSE;
   es:char;
   I:integer value 1;
   nombre:Tnombrefichero;
    BEGIN
       Writeln('ESCRIBA EL NOMBRE DEL ALUMNO AL CUAL DESEA MODIFICAR ALGUN DATO');
       Readln(nombre);
       WHILE NOT (encontrado) and (I<lastposition(f)) DO BEGIN
          seekread(f,I);
          IF (f^.[I].nombre=nombre) THEN
             encontrado:=TRUE
          ELSE
             I:=I+1;
          IF encontrado THEN  BEGIN
             seekupdate(f,I);
             Write(f^.[I].nombre);
             Write(f^.[I].apellido);
             Write(f^.[I].login);
             Write('ES ESTE?'); Readln(es);
             IF (es = 's') OR (es = 'S') THEN BEGIN
                WITH alumnos DO BEGIN
                   Write('nombre'); Readln(nombre);
                   Write('apellido'); Readln(apellido);
                   Write('login'); Readln(login);
                END;
                seekupdate(f,alumnos);
             END;
          END;
       END;
    END;

(******************************************************************************************************************************************************************************************************)

tal y como esta el programa me da el siguiente error:



modificar.pas: In procedure `modificar':
modificar.pas:42: error: direct access to files without declared domain is an
modificar.pas:42: error: extension of Borland Pascal, traditional Macintosh Pascal
modificar.pas:43: error: direct access to files without declared domain is an
modificar.pas:43: error: extension of Borland Pascal, traditional Macintosh Pascal
modificar.pas:44: error: syntax error before `['




y ahora poniendo esto:
Código: Seleccionar todo
TipoAlumno=ARRAY[1..n] of Talumno;
Tfichero=bindable file [1..n] of TipoAlumno;


los errores son:
modificar.pas: In procedure `modificar':
modificar.pas:44: error: syntax error before `['





alguien tiene alguna idea?:S
xeneizesiempre
Bishibosh
 
Mensajes: 35
Registrado: Lun, 22 Dic 2008 13:41

Re: [CODE] PRACTICA PRO

Notapor erKURITA » Vie, 02 Ene 2009 18:17

xeneizesiempre escribió:
Código: Seleccionar todo
TipoAlumno=ARRAY[1..n] of Talumno;
Tfichero=bindable file of TipoAlumno;
VAR
       alumnos:TipoAlumno;
       f:Tfichero;
       nombre:Tnombrefichero;
    (*************************************************************************************************************************)
PROCEDURE modificar (VAR f:Tfichero);
VAR
   encontrado:boolean value FALSE;
   es:char;
   I:integer value 1;
   nombre:Tnombrefichero;
    BEGIN
       Writeln('ESCRIBA EL NOMBRE DEL ALUMNO AL CUAL DESEA MODIFICAR ALGUN DATO');
       Readln(nombre);
       WHILE NOT (encontrado) and (I<lastposition(f)) DO BEGIN
          seekread(f,I);
          IF (f^.[I].nombre=nombre) THEN
             encontrado:=TRUE
          ELSE
             I:=I+1;
          IF encontrado THEN  BEGIN
             seekupdate(f,I);
             Write(f^.[I].nombre);
             Write(f^.[I].apellido);
             Write(f^.[I].login);
             Write('ES ESTE?'); Readln(es);
             IF (es = 's') OR (es = 'S') THEN BEGIN
                WITH alumnos DO BEGIN
                   Write('nombre'); Readln(nombre);
                   Write('apellido'); Readln(apellido);
                   Write('login'); Readln(login);
                END;
                seekupdate(f,alumnos);
             END;
          END;
       END;
    END;

(******************************************************************************************************************************************************************************************************)

tal y como esta el programa me da el siguiente error:



modificar.pas: In procedure `modificar':
modificar.pas:42: error: direct access to files without declared domain is an
modificar.pas:42: error: extension of Borland Pascal, traditional Macintosh Pascal
modificar.pas:43: error: direct access to files without declared domain is an
modificar.pas:43: error: extension of Borland Pascal, traditional Macintosh Pascal
modificar.pas:44: error: syntax error before `['


Hubo un ejercicio bien bonito que hicimos en clase de Esteban, y era analizar que hacia una sentencia determinada.

Dime tu que hace esto

Código: Seleccionar todo
writeln(f^.[I].nombre);


Y yo te digo lo que hace

Spoiler: mostrar
Da error, porque intenta acceder al valor de la direccion apuntada por f, que es un registro que contiene un miembro llamado [I], pero como no pueden haber variables que empiecen o terminen con [ o ], pues da error en tiempo de compilacion.
Avatar de Usuario
erKURITA
Colenzo el Aniquilador
erKARAJO
 
Mensajes: 2446
Registrado: Sab, 13 Sep 2008 10:43

Siguiente

Volver a 1º [EI/ETIS/ETIX] Programación (Pro)

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado