Pascal/Turbo Pascal - Problema ejercicio pascal

 
Vista:

Problema ejercicio pascal

Publicado por victor (10 intervenciones) el 26/06/2008 19:03:48
Hola en el código de abajo me falla el procedimiento busca_autor debería buscar en la tabla y si existe el autor listar los datos del libro. Sin embargo no logro que me salgan los datos completos si el autor existe ,solo logro repetir el autor. Gracias anticipadas.

Program galeria;

Const
tamcolection=3;

Type
tcuadro=record
numero:integer;
titulo:string[50];
autor:string;
precio:real;
end;
tcoleccion= array[1..tamcolection] of tcuadro;

Procedure lee_coleccion(var coleccion1:tcoleccion;tamcolection:integer);

Var
i:integer;
Begin
for i:= 1 to tamcolection do
Begin
writeln('Introduzca numero: ');
readln(coleccion1[i].numero);
writeln('Introduzca titulo: ');
readln(coleccion1[i].titulo);
writeln('Introduzca autor: ');
readln(coleccion1[i].autor);
writeln('Introduzca precio: ');
readln(coleccion1[i].precio);
writeln('------------------');
End;
end;

Procedure imprime_coleccion(coleccion1:tcoleccion;tamcolection:integer);

Var
i:integer;
begin
for i:= 1 to tamcolection do
Begin
writeln('Numero: ',coleccion1[i].numero);
writeln('Titulo: ',coleccion1[i].titulo);
writeln('Autor: ',coleccion1[i].autor);
writeln('Precio: ',coleccion1[i].precio:0:2);
writeln('-------------------------------');
end;
end;

Function suma_coleccion(coleccion1:tcoleccion;tamcolection:integer;var no_en_venta:real):real;

Var
i:integer;
suma:real;
begin
suma:=0;
for i:= 1 to tamcolection do
if coleccion1[i].precio=0 then
no_en_venta:=no_en_venta+1
else suma:=suma+coleccion1[i].precio;
suma_coleccion:=suma;
end;

Procedure busca_autor(var coleccion1:tcoleccion;tamcolection:integer;autor:string);
Var
i:integer;


begin
for i:= 1 to tamcolection do
if autor=coleccion1[i].autor then
writeln('autor encontrado',coleccion1[i].autor)
else
writeln('autor no encontrado');

end;

Var

suma1:real;
coleccion1:tcoleccion;
no_en_venta:real;
autor:string;

Begin
suma1:=0;
no_en_venta:=0;

writeln('> Datos de los cuadros: ');
lee_coleccion(coleccion1,tamcolection);
writeln;
writeln(' > Datos de los cuadros: ');
imprime_coleccion(coleccion1,tamcolection);
suma1:=suma_coleccion(coleccion1,tamcolection,no_en_venta);
writeln('La suma es: ', suma1:0:2);
writeln('> Y hay ',no_en_venta:0:0, ' cuadro no en venta');
writeln('Escriba el autor a buscar (0 para terminar:');
readln(autor);
busca_autor(coleccion1,tamcolection,autor);
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 ejercicio pascal

Publicado por Diego Romero (996 intervenciones) el 27/06/2008 00:56:39
Procedure busca_autor(var coleccion1:tcoleccion;tamcolection:integer;autor:string);
Var
i:integer;
found: boolean;
begin
i:=0;
found:=false;
while (found=false) and (i<tamcolection) do
begin
inc(i);
if autor=coleccion1[i].autor then found:=true;
end; { while }

if found then
begin
writeln(' * Autor encontrado* ');
writeln('Número: ',coleccion1[i].numero);
writeln('Título: ',coleccion1[i].titulo);
writeln('Autor: ',coleccion1[i].autor);
writeln('Precio: ',coleccion1[i].precio:7:2);
end { if }
else writeln('Autor no encontrado.');

end; { busca_autor }

De nada...

No entiendo para qué pasas como parámetro tamcolection si ya tienes una constante global con ese identificador, así tampoco entiendo por qué coleccion1 lo pasas como parámetro por referencia cuando dentro de este procedimiento no hay modificaciones.
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 ejercicio pascal

Publicado por victor (10 intervenciones) el 27/06/2008 20:24:48
Gracias diego probaré y estudiare el codigo. Respecto a pasar por referencia coleccion1 ya se que no hacía falta pero cuando un código me da problemas y no doy con el ,empiezo a probar con cambios y este fue uno de ellos.
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