Jump to content

Recommended Posts

Posted

Desejo passar uma constante, na verdade uma varivel por parametro com a intensão de identicar o tamanho de um array

procedure remove_repetidos(array_repeti:array of real; quantos_campos:integer);
var
 novo_array:array[1..quantos_campos] of real;
begin
 for i:=0 to quantos_campos do
   begin
  for j:=i+1 to quantos_campos do
    begin
	  if array_repeti[j]<>array_repeti[i] then  novo_array[i]:=array_repeti[i];
    end;
   end;
end;

A ideia é criar um novo array com quantos_campos forem passados por parametros. Mas, o pascal diz que não pode passar constante na expressão.

Como sair dessa?

Carlos Rocha

Posted (edited)

Não. Ele vai ser usado.

A ideia seria criar um array de 'n' elementos tantos quantos o parametro quantos_campos receber.

Na verdade, nem seria criar. Pois isso ficaria dento de begin end. No caso de var, seria declarar mesmo.

Edited by carcleo
Posted (edited)

"Usado" é diferente de "alterado". Se quantos_campos não for alterado, então podes declará-lo constante tal como indiquei no exemplo.

Edited by thoga31

Knowledge is free!

Posted

Ficaria assim então?

procedure remove_repetidos(var array_repeti:array of real; const quantos_campos:integer);
var
 novo_array:array[1..quantos_campos] of real;
begin
 for i:=0 to quantos_campos do
   begin
	  for j:=i+1 to quantos_campos do
	    begin
			  if array_repeti[j]<>array_repeti[i] then  novo_array[i]:=array_repeti[i];
	    end;
   end;
end;

Esta dando esse erro:

32 / 37 questo~1.pas

Error: Can't evaluate constant expression

Posted (edited)

De facto fiz alguns testes e não funciona. É uma inconsistência da linguagem (compilador), mas temos de nos adaptar.

Tens de utilizar Arrays Dinâmicos para fazeres o que queres dessa forma.

var array1 : array[1..5] of real;  // array estático
   array2 : array of real;        // array dinâmico

Length(array1);  // (function) Retorna o número de elementos de uma array

SetLength(array2, nova_dimensao);  // (procedure) Define uma nova dimensão à array - AVISO! dimensão de base 0

EDIT: não tinha visto o post do @pwseo, ele recomendou precisamente o mesmo 🙂

Edited by thoga31

Knowledge is free!

Posted

thoga31,

Penso que a dimensão não é de base 0 (ou seja, 5 elementos são sempre 5); o que é de base 0 é o acesso aos elementos armazenados (o elemento 5 é acedido através de array[4]) 🙂

Posted

Penso que a dimensão não é de base 0 (ou seja, 5 elementos são sempre 5); o que é de base 0 é o acesso aos elementos armazenados (o elemento 5 é acedido através de array[4]) 🙂

Sim, é isso mesmo. Quando disse "dimensão de base 0" queria dizer precisamente isso. 😉

Aproveito e acrescento que o array que sofre um SetLength não pode ter uma dimensão definida aquando a sua declaração. Este método só se aplica a arrays dinâmicos, e quando se define uma dimensão logo à partida este será estático até ao fim, excepto em casos muito específicos que não interessam agora para o caso.

Knowledge is free!

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.