Duda pascal array unidimensional

Iniciado por pyxolo, 2 Septiembre 2011, 18:46 PM

0 Miembros y 1 Visitante están viendo este tema.

pyxolo

Código (pascal) [Seleccionar]

program vec1;

uses crt;

var
        i, k, promedio: integer;
        resul: real;
        matriz : array[1..[size=15pt]k[/size]] of integer;
BEGIN
  clrscr;
  writeln('Tu promedio.');
  writeln();
  writeln('Cuantas asignaturas tienes?'); readln(k);
  promedio := 0;

  for i:=1 to k do

    begin
    write('Nota ', i, ': '); readln(matriz[i]);
    promedio := promedio + matriz[i];
    end;//for

  clrscr;
  resul := promedio / k;
  write('Su promedio es de: ');
  write(resul:0:2);
  readkey;
END.


El problema que me surge es cuando declaro el array... me gustaría establecer el índice final a través del usuario...

¿Alguna ayudita?

Valkyr

En Pascal, si no me equivoco, no se puede establecer el tamaño dependiendo de una variable que el usuario inserte. (Que me corrijan si me equivoco).

Una posible solución sería declararte una constante con el número máximo de elementos del array, leer el tamaño que inserte el usuario, sí es superior muestras mensaje por pantalla diciendo que no es posible, sí es menor que la constante entonces haces las operaciones pertinentes.

Saludos.

Khronos14

Cita de: Valkyr en  2 Septiembre 2011, 20:23 PM
En Pascal, si no me equivoco, no se puede establecer el tamaño dependiendo de una variable que el usuario inserte. (Que me corrijan si me equivoco).

Pues sí que se puede. Tienes que declarar tu array de esta manera:

Código (delphi) [Seleccionar]
var
matriz: array of integer;


Y para establecer el tamaño del array tienes que utilizar la función SetLength.

Código (delphi) [Seleccionar]
SetLength(matriz, 4);

De esta manera, matriz tendría 4 elementos. Usando SetLength siempre empieza en 0 el array. Puedes conocer donde empieza y donde acaba un array utilizando Low() y High().

Saludos.

Valkyr

Cita de: Khronos14 en  2 Septiembre 2011, 23:43 PM
Pues sí que se puede.

Gracias por la corrección, no tenía ni idea de que sí que se podía.

Saludos.