Pascal/Turbo Pascal - Problema con un procedimiento

 
Vista:
sin imagen de perfil

Problema con un procedimiento

Publicado por Bastian (2 intervenciones) el 12/04/2022 20:16:24
Necesito devolver el codigo de los dos productos más baratos. Me ayudan a analizar el problema de porque me devuelve los ultimos codigos ingresados y no los mas baratos. Gracias

Program baratos;

procedure masBarato (var precio,codigo,min_codigo,min2_codigo: integer);
var
min, min2: integer;
begin
min:= 9999; min2:= 9999;
if (precio < min) then begin
min2:= min;
min:= precio;
min2_codigo:= min_codigo;
min_codigo:= codigo;
end
else
if (precio < min2) then begin
min2:= precio;
min2_codigo:= codigo;
end;
end;
var
i, precio, codigo, cod, cod2: integer;
tipo: string;
begin
for i := 1 to 3 do begin
writeln('Ingresar precio, codigo y tipo de un producto de una tienda de ropa: ');
readln(precio); readln(codigo); readln(tipo);
masBarato(precio,codigo,cod,cod2);
end;
writeln('El codigo de los dos productos mas baratos fueron: ',cod,' y ',cod2);
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
sin imagen de perfil
Val: 112
Bronce
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Problema con un procedimiento

Publicado por juanba (40 intervenciones) el 04/05/2022 22:13:04
El problema es que no se conservan los dos precios más baratos entre llamadas al procedimiento masBarato y siempre se compara el nuevo precio con 9999, con lo que siempre el último es más barato (que 9999).
Aquí tienes una versión que creo que funciona (no la he comprobado).

Suerte

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Program baratos;
 
procedure masBarato (var precio, codigo, min_codigo, min2_codigo, min_precio, min2_precio: integer);
begin
  if (precio < min) then begin
    min2_precio:= min;
    min_precio:= precio;
    min2_codigo:= min_codigo;
    min_codigo:= codigo;
  end else
  if (precio < min2_precio) then begin
    min2_precio:= precio;
    min2_codigo:= codigo;
  end;
end;
 
var i, precio, codigo, cod, cod2, min_prec, min_prec2: integer;
    tipo: string;
begin
  min_prec := 9999; min_prec2 := 9999;
cod := 0; cod2 ;= 0;
  for i := 1 to 3 do begin
    writeln('Ingresar precio, codigo y tipo de un producto de una tienda de ropa: ');
    readln(precio); readln(codigo); readln(tipo);
    masBarato(precio,codigo,cod,cod2, min_prec, min_prec2);
  end;
  end;
  writeln('El codigo de los dos productos mas baratos fueron: ',cod,' y ',cod2);
end.
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