[ Foro de Pascal ]

Androides

28-Dec-2014 03:12
Alberto Rilo Mosteiro
4 Respuestas

Buenas noches, me aparece un error en solicitardatos, me pone que las variables no son un registro textualmente 'request for field... is not a record a shcema or a object'. Muchas gracias.


(*Ridely Scott en el año 1982 estrenó la cinta ?Blade Runner?, ligeramente basada en la
novela de Philip K. Dick ¿Sueñan los androides con ovejas eléctricas?. En la película,
ambientada en el año 2019, Harrison Ford se dedica a ?retirar? androides replicantes
fabricados por la Tyrell Corporation, Roy Batty era uno de ellos..
Realice un programa para ayudar en su tarea a nuestro protagonista. La citada empresa
ha llegado a fabricar 5.000 androides.
Se debe llevar un registro de los androides con la siguiente información:
Nº de serie
Año de fabricación
Sexo
Planeta de fabricación
Planetas visitados por cada androide (hasta la fecha sólo se conocen 500 planetas)
Debe codificar la parte TYPE del programa y un procedimiento que indique por
pantalla los androides que hay que retirar si se cumplen las condiciones de haber
visitado un determinado planeta y haber sido fabricado en un año en concreto.*)

 
PROGRAM basico(input,output);
CONST maxandroides=5000;
      maxplanetas=500;
 
TYPE
 tanho=0..maxint;
 tplaneta=string(50);
 tnumplanetas=0..maxplanetas;
 
 trAndroide=RECORD
           numserie:integer;
           anhofab:tanho;
           sexo:char;
           planeta:tplaneta;
           numplanetas:tnumplanetas;      
 
           END;
 
  tAndroide=array[1..maxandroides] of trAndroide;        
 
 VAR
  androide:tAndroide;
 
 
(************************************************************************)
PROCEDURE SolicitarDatosAndroide(var Androide:tAndroide);
 var i:integer;
 BEGIN
  For i:=1 TO maxandroides DO begin
     with androide do begin
   write('Introduzca el numero de serie'); readln(numserie);
   write('Introduzca el año de fabricacion'); readln(anhofab);
   write('Introduzca el sexo'); readln(sexo);
   write('Introduzca el planeta'); readln(planeta);
   write('Introduzca el numero de planetas visitado'); readln(numplanetas);
 
     end;
    end;
  end;
 
 
 begin
 end.      
 




28-Dec-2014 04:13
Luis Torres (+12)

Debiste escribirlo así:

 
with androide[i] do
begin
  .
  .
  .
end;
 


- Por otra parte, tienes un error en la declaración de tipos, específicamente aquí:
tplaneta=string(50);
Debe ser string[50];    con corchetes

- Si utilizas freepascal no tendrás problema con la memoria, pero en caso de usar Turbo Pascal sí lo tendrías, en vez de declarar la constante maxandroides como 5000, deberías bajarlo a 500, de manera que no se desborde la capacidad de memoria asignada por Turbo Pascal a las variables, la cual es muy limitada.


Saludos.


28-Dec-2014 10:34
Alberto Rilo Mosteiro

Muchas gracias por la correccion. Uso pascal estandar extendido(ISO 10206)


28-Dec-2014 11:03
Alberto Rilo Mosteiro

A ver si me podeis ayudar ahora con la condicion de retirar los androides( es decir borrar los datos en una casilla de un array) con dos condiciones introducidas por teclado por el usuario.
Las variables planeta y año de fabricacion serian otros distintas, y compararlas con las del registro y si son iguales retirarlo??? Podria valer esto???( no esta en el codigo esta idea)

 
PROCEDURE RetirarAndroide(var androide:tAndroide);
 var i:integer;
 begin
 FOR i:=1 TO maxandroides
  with androide[i] do begin
  writeln('Que planeta quiere introducir como condicion de retiro?');readln;(planeta);
  writeln('Que año de fabricacion para retirar androides?'); readln(anhofab);
  if androide[i] .....
 




28-Dec-2014 11:11
Alberto Rilo Mosteiro

Solucionado!!

 
Procedure BUSCAR(Protected VAR Androide:
TAAndroides;planeta:Tcadena15;Manno:Tanno);
 VAR  i,j: Integer;
 Encontrado:Boolean; 
 
BEGIN
 FOR i:= 1 to MaxAndroides DO
 With Androides[i] Do BEGIN
 if anno = Manno then BEGIN { Busco en planetas}
 j:= 1;
 Encontrado:= FALSE;
 Repeat
 IF PlanetaVisi[j]= Planeta THEN BEGIN
 Encontrado:= TRUE;
 Writeln('Hay que RETIRAR al siguiente androide:');
 Writeln('Nº de Serie:', NumSerie);
 Writeln('Año de fabricación: ',anno);
 Writeln('Sexo: ',Sexo);
 Writeln('Fue fabricado en: ',PlanetaFabri);
 END;
 j:= j+1;
 UNTIL ((j> MaxPlanetas) or (encontrado));
 END;
 END;
END;
 








(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)