[CODE] PRACTICA PRO

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

Re: [CODE] PRACTICA PRO

Notapor xeneizesiempre » Vie, 02 Ene 2009 18:50

erKURITA escribió:
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.


valee, entiendo porque no funciona, pero no comprendo como hacerlo funcionar, estoy ya bloqueado de ideas.
xeneizesiempre
Bishibosh
 
Mensajes: 35
Registrado: Lun, 22 Dic 2008 13:41

Re: [CODE] PRACTICA PRO

Notapor omikinho » Sab, 03 Ene 2009 3:00

¿Por qué queres facer un ficheiro de arrays?
Por certo, erKURITA, tes razón, o de f^.[i].nombre non compila.
Estuven fozando un pouco con código pra ver cómo se podería facer e o único que se me ocorreu é meter e acceder ós datos indirectamente, utilizando unha variable que tipo sea o tipo base do ficheiro:
aux = TipoAumno
Fixen catro programiñas:
Código: Seleccionar todo
PROGRAM proba_con_arrays_acceso_aleatorio (input,output);

CONST
   MAX = 4;

TYPE
   Talumno = record
      nombre : string(10);
      edad : integer;
   end;
   TipoAlumno=ARRAY[1..MAX] of Talumno;
   Tfichero=file [1..MAX]of TipoAlumno;

VAR
   f : Tfichero;
   aux : tipoalumno;
   i : integer;
BEGIN
   seekwrite(f,3);
   aux[3].nombre := 'hola';
   aux[3].edad := 14;
   f^ := aux;
   put(f);
   seekread(f,3);
   aux := f^;
   for i := 1 to MAX do writeln(aux[i].nombre:5,aux[i].edad:5);
   writeln;
END.

(Só imprime os valores dos campos de cada elemento do array que está na posición 3 do ficheiro).

Código: Seleccionar todo
PROGRAM proba_con_arrays_acceso_secuencial (input,output);
CONST
   MAX = 4;
TYPE
   Talumno = record
      nombre : string(10);
      edad : integer;
   end;
   TipoAlumno=ARRAY[1..MAX] of Talumno;
   Tfichero=file of TipoAlumno;

VAR
   f : Tfichero;
   aux : tipoalumno;
   i : integer;
BEGIN
   rewrite(f);
   aux[1].nombre := 'hola';
   aux[2].edad := 14;
   f^ := aux;
   put(f);

   aux[1].nombre := 'adios';
   aux[2].edad := 15;
   f^ := aux;
   put(f);

   reset(f);
   while not eof(f) do begin
      aux := f^;
      for i:= 1 to MAX do
         writeln(aux[i].nombre:5,aux[i].edad:5);
      writeln;
      get(f);
   end;
END.

(Éste si que imprime todo, o que pasa é que non todo ten cousas).

Código: Seleccionar todo
PROGRAM proba_sen_arrays_acceso_aleatorio (input,output);

CONST
   MAX = 4;

TYPE
   Talumno = record
      nombre : string(10);
      edad : integer;
   end;
   Tfichero=file [1..MAX]of TAlumno;

VAR
   f : Tfichero;
BEGIN
   seekwrite(f,3);
   f^.nombre := 'hola';
   f^.edad := 14;
   put(f);
   seekread(f,3);
   writeln(f^.nombre:5,' ',f^.edad:5);
END.


Código: Seleccionar todo
PROGRAM proba_sen_arrays_acceso_secuencial (input,output);

CONST
   MAX = 4;

TYPE
   Talumno = record
      nombre : string(10);
      edad : integer;
   end;
   Tfichero=file of TAlumno;

VAR
   f : Tfichero;
BEGIN
   rewrite(f);
   f^.nombre := 'hola';
   f^.edad := 14;
   put(f);
   f^.nombre := 'adios';
   f^.edad := 15;
   put(f);
   reset(f);
   while not eof(f) do begin
      writeln(f^.nombre:5,' ',f^.edad:5);
      get(f);
   end;
END.
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 MarTin06 » Lun, 05 Ene 2009 16:22

Código: Seleccionar todo
TYPE
   tNota = record
            teoria:real;
            practica:real;
            global:real;
         end;
   
   tConvocatoria = record
                  febrero:tNota;
                  junio:tNota;
                  septiembre:tNota;
                  diciembre:tNota;
                    end;

   tAlumno = record
            nombre:string(30);
            apellido:string(30);
            login:string(20);
            convocatoria:tConvocatoria;
           end;
   TipoAlumno=array[1..n] of tAlumno;

VAR   
   alumnos:TipoAlumno;
   n:integer;



defino todo esto asi pero al intentar compilar me da estos errores....

introducirDatos.pas:23: error: undeclared identifier `n' (first use in this routine)
introducirDatos.pas:23: error: (Each undeclared identifier is reported only once
introducirDatos.pas:23: error: for each routine it appears in.)
introducirDatos.pas:23: error: subrange bounds must be of ordinal type
introducirDatos.pas:26: error: unknown identifier `TipoAlumno'

no consigo arreglarlo.. i no entiendo xq lo pone xq 'n' lo declaro en var...
MarTin06
Griswold
 
Mensajes: 189
Registrado: Jue, 25 Dic 2008 19:10

Re: [CODE] PRACTICA PRO

Notapor Fer » Lun, 05 Ene 2009 16:27

MarTin06 escribió:no consigo arreglarlo.. i no entiendo xq lo pone xq 'n' lo declaro en var...


Tal y como te dice no encuentra "n" definido. En el caso de que hagas eso de [1...n], "n" debe ser una constante predefinida antes (o bien lo pones debajo de n sin ser "tipo", pero eso sería una ñapa mal hecha). Prueba a poner antes de TYPE un:

Código: Seleccionar todo
CONT
   n = valor_predefinido;


Siendo valor_predefinido el valor inicial que le quieras meter al tamaño del array.
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 MarTin06 » Lun, 05 Ene 2009 16:39

pero q tamaño le hay q meter al array? eso no depende del numero d alumnos q se introduzcan?.....

si hago
CONST
n=100; (x ejemplo)

me da este error:

introducirDatos.pas:29 : syntax error before '='

creo q es al definir el array d registros....
MarTin06
Griswold
 
Mensajes: 189
Registrado: Jue, 25 Dic 2008 19:10

Re: [CODE] PRACTICA PRO

Notapor Fer » Lun, 05 Ene 2009 16:41

No es "=", sino que es ":".
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 MarTin06 » Lun, 05 Ene 2009 16:45

no se q paso.. ajajaj
con el igual volvi a compilar i ahora funciona!!
muxas gracias x la ayuda
MarTin06
Griswold
 
Mensajes: 189
Registrado: Jue, 25 Dic 2008 19:10

Re: [CODE] PRACTICA PRO

Notapor Fer » Lun, 05 Ene 2009 16:46

FeR escribió:No es "=", sino que es ":".


De hecho, olvida este mensaje. Sí es "=". El ":" es para las variables declaradas (en VAR, vamos). Son muchos años sin programar en Pascal ya. :lol:


Y de nada. :D
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 MarTin06 » Lun, 05 Ene 2009 19:12

en el procedure d introducir datos me ha surgido una duda...
al principio todo claro..
introduce nombre, apellidos, login..
pero al llegar a la nota..
q le tenemos q pedir?? teoria y practica esta claro! pero la nota global se le pide o se calcula como la media de las 2 anteriores???

y otra pregunta..

ya le hai q preguntar todas las notas d las 4 convocatorias (febrero,junio,septiembre y diciembre) o debemos poder introducir solo en las convocatorias q qeramos???
MarTin06
Griswold
 
Mensajes: 189
Registrado: Jue, 25 Dic 2008 19:10

Re: [CODE] PRACTICA PRO

Notapor xeneizesiempre » Jue, 08 Ene 2009 17:16

MarTin06 escribió:en el procedure d introducir datos me ha surgido una duda...
al principio todo claro..
introduce nombre, apellidos, login..
pero al llegar a la nota..
q le tenemos q pedir?? teoria y practica esta claro! pero la nota global se le pide o se calcula como la media de las 2 anteriores???

y otra pregunta..

ya le hai q preguntar todas las notas d las 4 convocatorias (febrero,junio,septiembre y diciembre) o debemos poder introducir solo en las convocatorias q qeramos???


segun el enunciado de la practica lo qe hay que hacer es que el usuario del programa elija que nota quiere introducir, si la de teoria, la de practica o la global y despues el mes, pero eso lo tiene que decidir el usuario, asi que lo mejor seria un case of para cada cosa
xeneizesiempre
Bishibosh
 
Mensajes: 35
Registrado: Lun, 22 Dic 2008 13:41

Re: [CODE] PRACTICA PRO

Notapor xeneizesiempre » Jue, 08 Ene 2009 17:18

como se puede hacer por cierto listados ordenados alfabeticamente? :S
buenoo, primero...como se pueden hacer listados? como se deberian de mostrar?
xeneizesiempre
Bishibosh
 
Mensajes: 35
Registrado: Lun, 22 Dic 2008 13:41

Re: [CODE] PRACTICA PRO

Notapor Charly » Vie, 09 Ene 2009 1:01

Una duda existencial: La practica que dia se entrega? el mismo dia del examen (9 de febrero) o antes del 27 de enero??
Reza, si te pilla por sorpresa, abres el ascensor te enseña el pene y te invita a cenar
Charly
Bishibosh
 
Mensajes: 44
Registrado: Sab, 04 Oct 2008 19:29

Re: [CODE] PRACTICA PRO

Notapor Fer » Vie, 09 Ene 2009 1:09

Charly escribió:Una duda existencial: La practica que dia se entrega? el mismo dia del examen (9 de febrero) o antes del 27 de enero??


Hilo de [DUDAS ESENCIALES] Practica Pro. Este es un hilo en la que tienen una duda sobre el código de la práctica y la intentan resolver. Si no tiene nada que ver la pregunta tuya, pregunta mejor en su sitio. :wink:
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 Charly » Vie, 09 Ene 2009 1:17

FeR escribió:
Charly escribió:Una duda existencial: La practica que dia se entrega? el mismo dia del examen (9 de febrero) o antes del 27 de enero??


Hilo de [DUDAS ESENCIALES] Practica Pro. Este es un hilo en la que tienen una duda sobre el código de la práctica y la intentan resolver. Si no tiene nada que ver la pregunta tuya, pregunta mejor en su sitio. :wink:


Tienes razon, perdona, vi practica pro y no me fije en el detaye del code. Buscare un sitio para preguntar
Reza, si te pilla por sorpresa, abres el ascensor te enseña el pene y te invita a cenar
Charly
Bishibosh
 
Mensajes: 44
Registrado: Sab, 04 Oct 2008 19:29

Re: [CODE] PRACTICA PRO

Notapor MarTin06 » Jue, 22 Ene 2009 18:37

mi problema es.... si tengo un array d registros, como paso cada posicion del array (con su registro) al archivo....lo he puesto asi pero no funciona..
lo de while alumno[i].nombre <> '**' lo tengo xq al iniciar el programa en cada nombre pongo ** para darle a enteder q esta vacio!!

Código: Seleccionar todo
procedure rellenarArchivo (alumno:tAlumno; var t:tfichero);

var
   i:integer value 1;
   j:integer;
begin
  while not eof(f) do
    begin
         for j:=1 to n do
             begin
                  while alumno[i].nombre <> '**' do
                          begin
                               extend(f);
                               f^:=alumno[i];
                               write(f,alumno[i]);
                               get(f);
                           end;
                  i:=i+1;
            end;
    end;
end;

MarTin06
Griswold
 
Mensajes: 189
Registrado: Jue, 25 Dic 2008 19:10

AnteriorSiguiente

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 0 invitados