Pascal/Turbo Pascal - 3.2 tema 7 (2)

 
Vista:
sin imagen de perfil

3.2 tema 7 (2)

Publicado por Erik (73 intervenciones) el 09/04/2014 15:27:20
hola tengo que corregir lo siguiente, aqui dejo lo que tengo que corregir:

Como en el anterior, el vector debes pasarlo por valor no po referencia, porque no se modifica.

1
2
3
4
5
procedure limites( var arreglo : coleccion;
                     var min: real;
                     var max : real;
                     var posMax: integer;
                     var posMin : integer);

Fíjate como nos indica el modo de proceder:

RECORDATORIO:

A la hora de buscar el mínimo (o el máximo) dentro de una tabla se procede:

Se le da como valor inicial al mínimo, el primer valor de la tabla. Te falta hacer esto.

max := -20;
min := 99999;

será:

max := arreglo[1];
min := arreglo[1];

Se recorre el resto de la tabla y en cada iteración:

a) Se comprueba si el valor de la tabla es menor que mínimo. a.1) Si lo es al mínimo se le da el valor de dicho elemento.

a.2) Si es mayor no se hace nada y se pasa al siguiente elemento.

ahora dejo el codigo en cuestion que hay que corregir

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure limites( var arreglo : coleccion; var min: real; var max : real); {Podrían venir inicializados desde el progama principal}
 
  var
     indice : integer;
  begin
       max := -20;
       min :=  99999;
      for indice := 1 to TAMCOLECCION do
         begin
              if (arreglo[indice] > max) then
                 max := arreglo[indice];
              if (arreglo[indice] < min) then
                 min := arreglo[indice];
         end;
  end;

gracias de antemano.
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

3.2 tema 7 (2)

Publicado por Diego (98 intervenciones) el 09/04/2014 18:42:17
El vector es pasado por referencia para hacer un uso mejor de memoria, si fuera pasado por valor, entonces tendría el vector original y luego una copia de el como parametro por valor; osea 2 vectores(doble de espacio).
Al ser pasado por referencia se evita la duplicación de ese vector. Puesto que el vector no va aser modificado, solamente consultado, entonces no se crea ningun inconveniente en pasarlo por referencia y ahorrar memoria.
En cuanto a las inicializaciones de las variables está pensado para cuando sean 2 o más arreglos y tengan algún orden.(reutilización de código)
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
sin imagen de perfil

3.2 tema 7 (2)

Publicado por Erik (73 intervenciones) el 10/04/2014 17:05:18
explicamelo en codigo pascal por favor.
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
sin imagen de perfil

3.2 tema 7 (2)

Publicado por Diego (98 intervenciones) el 11/04/2014 17:01:43
Esto no tiene que ver con el código, tiene que ver con la manera en la que trabaja pascal;
Cuando se envia un parametro por valor lo que se hace es copiar el contenido original del parametro y duplicarlo; por eso es que se tienen dos datos: el original y el duplicado, el módulo usa el duplicado, por eso cualquier cambio que ocurra en el duplicado no afacta al original; pero esto tiene una desventaja, ya que al duplicarse el dato también se duplica el tamaño usado en la memoria,
Cuando se envia por referencia lo que se hace es enviar la dirección de memoria en la que está ubicado el principio del dato por lo tanto cuando se realizan cambios en el modulo se esta haciendo un cambio en la dirección del dato.
Generalmente la dirección pesa casi tanto como un dato simple; por eso al enviar la dirección en la que se aloca el dato cuesta menos que duplicar un dato y enviar ese dato duplicado.

Por ejemplo:
un vector ocupa 120 kb; al enviar lo por referencia solo usarias los 120 kb; pero al enviarlo por valor pedirias 120 kb más a la memoria para duplicar ese vector; y ahora tendrias 240 kb de memoria,

Si el vector es unicamente para consultarlo; osea no va a ser modificado; es preferible enviarlo por referencia ya que no hay peligro de que se pierdan datos por una moduficación en el módulo.
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
sin imagen de perfil

3.2 tema 7 (2)

Publicado por Erik (73 intervenciones) el 12/04/2014 20:28:21
si, esta bien pero muestramelo con el codigo pascal que escribi yo, configuralo para que se corriga los errores.
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
sin imagen de perfil

3.2 tema 7 (2)

Publicado por Diego (98 intervenciones) el 13/04/2014 03:34:37
Como ya te dije no tienen nada de malo los codigos, lo que digo es que esa es la manera en la trabaja y hace uso de la memoria pascal. por eso te digo que es casi la mejor manera de usar:
Resumiendo: no hay nada que corregir. (amenos que se requiera una optimización si es que la hay, se busca que optimizar y se ahorran unidades de tiempo).
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