Pascal/Turbo Pascal - Fallo en variable

 
Vista:
Imágen de perfil de Judit
Val: 25
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Fallo en variable

Publicado por Judit (12 intervenciones) el 20/08/2017 18:53:16
Buenas tardes, estoy realizando un ejercicio y todo está correcto excepto que una de dos variables me sale 0 en lugar del número que le correspondería tras la ejecución del procedimiento. Son las variables "posmin" y "posmax", he probado a iniciarlas en el procedimiento y en el modulo principal, en distintas posiciones, y a no iniciarlas, una de las dos siempre me sale 0. Si podéis ayudarme os dejo aquí copiado el procedimiento y parte del módulo principal y adjunto el archivo .pas en un archivo .zip.


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
procedure limites(var max, min, posmax, posmin: real);
begin
  max:= precio[1];
  min:= precio[1];
 
  for i:= 2 to num do
    if max < precio[i] then
    begin
      posmax:= i;
      max:= precio[i];
    end;
 
  for i:= 2 to num do
    if min > precio[i] then
    begin                               (*Fallo: posmin o posmax sale 0*)
      posmin:= i;
      min:= precio[i];
    end;
end;
 
 
    (*Módulo principal*)
 
begin
 
  limites(max, min, posmax, posmin);
  writeln('El maximo es ', max:0:2,' en la posicion ',posmax:0:0);
  writeln('El minimo es ', min:0:2,' en la posicion ', posmin:0:0);



Un saludo y disfrutad de lo que queda de agosto.
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

Fallo en variable

Publicado por ramon (2127 intervenciones) el 20/08/2017 23:10:57
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
{Mira las correcciones}
 
program U7_2;
 
uses
  crt;
 
const
  tamcoleccion= 4;
 
type
  coleccion = array[1..tamcoleccion] of real;
 
var
  precio: coleccion;
  i: integer;
  num: integer;
  suma: real;
  max, min: real;
  posmax, posmin: integer;
 
procedure lee_tabla (VAR precio: coleccion; num: integer);
begin
  for i:= 1 to num do
  begin
    writeln('Introduzca el precio del cuadro numero ',i,': ');
    readln(precio[i]);
  end;
end;
 
procedure imprime_tabla (precio: coleccion; num: integer);
begin
    begin
    clrscr;
    for i:= 1 to num do
      writeln('El precio del cuadro numero ',i,' es: ',precio[i]:0:2);
    end
end;
 
function suma_coleccion (precio: coleccion; num: integer): real;
var
   tot : real;
begin
  tot := 0.0;
  for i:= 1 to num do
    tot := tot + precio[i];
    suma_coleccion := tot;
end;
 
procedure limites(var max, min : real; var posmax, posmin: integer);
var
  d : integer;
begin
  d := 1;
  max:= precio[d];
  min:= precio[d];
  for i := d + 1 to num do
    if max < precio[i] then
    begin
      posmax := i;
      max := precio[i];
    end;
 
  for i := d + 1 to num do
    if min > precio[i] then
    begin                     (*Fallo: posmin o posmax sale 0*)
      posmin := i;
      min := precio[i];
    end
  else
      begin
         posmin := d;
         min := precio[d];
      end;
end;
 
begin
  clrscr;
  repeat
    writeln('Introduzca el numero de cuadros de la coleccion: ');
    readln(num);
  until (num <= tamcoleccion);
  lee_tabla(precio, num);
  imprime_tabla(precio, num);
  suma:= suma_coleccion(precio, num);
  writeln;
  writeln('El valor total de la coleccion es: ',suma:0:2);
  writeln;
  limites(max, min, posmax, posmin);
  writeln('El maximo es ', max:0:2,' en la posicion ',posmax);
  writeln('El minimo es ', min:0:2,' en la posicion ', posmin);
  readkey
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Judit
Val: 25
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Fallo en variable

Publicado por Judit (12 intervenciones) el 21/08/2017 09:21:03
Muchas gracias Ramon.
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
Imágen de perfil de Judit
Val: 25
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Fallo en variable

Publicado por Judit (12 intervenciones) el 21/08/2017 09:39:03
¿Me explicas esta parte?:

1
2
3
4
5
else
    begin
      posmin:= d;
      min:= precio[d];
    end;


Hace que salga un fallo y que posmin sea 1.

¿Cual es el fallo que hacía que posmin o posmax saliera 0?
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

Fallo en variable

Publicado por ramon (2127 intervenciones) el 21/08/2017 09:51:46
Al realizar la con probación de if min > precio[i] then si esto no se cumple y es menor el contador sera 0 o sea i = 0 el else
garantiza en 1 como mínimo el echo es que el contador for al terminar se como no encontró que min mayar que precio[i]
no pone valor a min.
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
Imágen de perfil de Judit
Val: 25
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Fallo en variable

Publicado por Judit (12 intervenciones) el 21/08/2017 16:00:17
Pero entonces a menos que en la última vuelta del bucle el precio sea menor que min el programa hará el fallo
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
Imágen de perfil de Judit
Val: 25
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Fallo en variable

Publicado por Judit (12 intervenciones) el 21/08/2017 16:06:47
¡Ya lo he solucionado! He cambiado en mi archivo original el tipo de posmin y posmax a integer ¡Gracias por tu ayuda Ramon! Un saludo y disfruta del verano
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

Fallo en variable

Publicado por ramon (2127 intervenciones) el 21/08/2017 23:28:17
Corrija también el otro for o sea

1
2
3
4
5
6
for i := d + 1 to num do
    if max < precio[i] then
    begin
      posmax := i;
      max := precio[i];
    end;

sino te pasara lo mismo cuando el primero sea el mayor.
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
Imágen de perfil de Judit
Val: 25
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

Fallo en variable

Publicado por Judit (12 intervenciones) el 22/08/2017 08:18:50
No me sale ese error, he iniciado las variables con el valor 1 así que si es el primero el mayor o menor ya tienen el número de posición.
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

Fallo en variable

Publicado por ramon (2127 intervenciones) el 22/08/2017 22:27:27
Es otra opción suerte.
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