Pascal/Turbo Pascal - Problema con registros

 
Vista:

Problema con registros

Publicado por Borja (4 intervenciones) el 16/05/2010 21:43:29
Hola buenas, tengo que hacer una practica para la uni y no se porque no me funciona. No merece la pena contar en que consiste, pero el problema es que al finalizar me escribe que la vaca que mas y que menos han producido son datos nulos, por lo que no tienen nombre y sus datos son 0. Porque no funcionan los procedures? Muchas gracias.

program p14_1;
type
vaca=record
nombre:string[15];
fecha:record
dia:byte;
mes:byte;
ano:string;
end;
peso:integer;
litrosdia:integer;
litrostot:integer;
end;
listavacas=array[1..5] of vaca;
var
lista:listavacas;
i:integer;
vacamas,vacamenos:vaca;

procedure pedirdatos(animal:vaca;i:integer);
begin
writeln('Escriba el nombre de la vaca ',i);
readln(animal.nombre);
writeln('Escriba el dia de nacimiento de la vaca ',i);
readln(animal.fecha.dia);
writeln('Escriba el mes de nacimiento de la vaca ',i);
readln(animal.fecha.mes);
writeln('Escriba el ano de nacimiento de la vaca ',i);
readln(animal.fecha.ano);
writeln('Escriba el peso de la vaca ',i);
readln(animal.peso);
writeln('Escriba la produccion de hoy de la vaca ',i);
readln(animal.litrosdia);
writeln('Escriba los litros totales que ha producido la vaca ',i);
readln(animal.litrostot);
end;

procedure mas(listado:listavacas;vacamas1:vaca);
var i:byte;
litrosmas:integer;
begin
litrosmas:=0;
for i:=1 to 5 do
if (listado[i].litrosdia)>litrosmas then
begin
litrosmas:=(listado[i].litrosdia);
vacamas1:=listado[i];
end;
end;

procedure menos(listado:listavacas;vacamenos1:vaca);
var i:byte;
litrosmenos:integer;
begin
litrosmenos:=(listado[1].litrosdia);
vacamenos1:=listado[1];
for i:=2 to 5 do
if (listado[i].litrosdia)<litrosmenos then
begin
litrosmenos:=(listado[i].litrosdia);
vacamenos1:=listado[i];
end;
end;

procedure escribirdatos(animal:vaca);
begin
writeln('El nombre es: ',animal.nombre);
writeln('Su fecha de nacimiento es: ',animal.fecha.dia,'/',animal.fecha.mes,'/',animal.fecha.ano);
writeln('Su peso es: ',animal.peso);
writeln('Su produccion hoy ha sido: ',animal.litrosdia);
writeln('Su produccion total es de: ',animal.litrostot);
end;

begin
for i:=1 to 5 do
pedirdatos(lista[i],i);
mas(lista,vacamas);
menos(lista,vacamenos);
writeln('Los datos de la vaca que mas ha producido hoy son:');
escribirdatos(vacamas);
writeln('Los datos de la vaca que menos ha producido hoy son:');
escribirdatos(vacamenos);
readln;
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

RE:Problema con registros

Publicado por edwin (71 intervenciones) el 20/05/2010 19:56:04
antes que nada, la declaracion de tu registro no es la adecuada

program p14_1;
type
fecha:Record
dia:byte;
mes:byte;
ano:string;
End;

vaca=Record
nombre:string[15];
FechaNac:Fecha;
peso:integer;
litrosdia:integer;
litrostot:integer;
End;

listavacas:array[1..5] of vaca;

{en esta seccion tendrias que pasar por variable el arreglo para que puedas almacenar datos en el..y el tipo de dato que le asugna s a animal no es el adecuado
deberia quedar asi:}

procedure pedirdatos(var animal:listavacas;i:integer);
begin
{dejando los la obtencion de datos de la siguiente manera}
writeln('Escriba el nombre de la vaca ',i);
readln(animal[i].nombre);
writeln('Escriba el dia de nacimiento de la vaca ',i);
readln(animal[i].FechaNac.dia);
writeln('Escriba el mes de nacimiento de la vaca ',i);
readln(animal[i].FechaNac.mes);
writeln('Escriba el ano de nacimiento de la vaca ',i);
readln(animal[i].FechaNac.ano);
writeln('Escriba el peso de la vaca ',i);
readln(animal[i].peso);
writeln('Escriba la produccion de hoy de la vaca ',i);
readln(animal[i].litrosdia);
writeln('Escriba los litros totales que ha producido la vaca ',i);
readln(animal[i].litrostot);
end;

por esa razón no te está almacenando los dátos en tu arreglo..
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:Problema con registros

Publicado por luistorcol (8 intervenciones) el 25/05/2010 07:27:13
Pero no basta con hacer los cambios que te sugirió Edwin. Además, los procedimientos mas y menos debes hacer unos cambios, para que te queden como a continuación:
procedure mas(listado:listavacas; var vacamas1:vaca);

procedure menos(listado:listavacas; var vacamenos1:vaca);

Osea agregar la palabra var antes de vacamas y vacamenos. Ya yo lo probé y el programa corre perfectamente.

Saludos.
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