Ir ao conteúdo
  • Cadastre-se

Dúvida básica com arrays em procedures


Visitante: Rackor

Posts recomendados

Visitante: Rackor
 

Olá, comecei há pouco tempo o estudo da linguagem e este é um dos primeiros programas com array que faço.

Coloquei esse procedimento simples de introdução de dados, mas fica dando erro de sintaxe na linha 15, "Array inesperado". Não consegui entender o porquê disso.

Program Introduzir ;
type
notes= record
nome1: string;
nome2: string;
telr: real;
telcm: real;
cel: real;
rua: string;
nrua: integer;
comp: string;
mailc: string;
mailp: string;
end;
procedure Introduzir (op: char; var agenda: array[1..2] of notes; idx: integer);

begin
writeln('Quais dados gostaria de introduzir?');
writeln('Digite: 1-nome1, nome2, temr, telcm, cel, nrua, comp, mailc ou mailp');
readln(op);
idx:=1;
Case op of
'1':
begin
writeln('Digite o dado');
readln(agenda[idx].nome1);
end;
end;
end;
var
agenda: array [1..2] of notes;
idx: integer;


Begin
Introduzir;
writeln(agenda[idx].nome1);

End.

Obrigado pela ajuda.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá Rackor,

[..] mas fica dando erro de sintaxe na linha 15, "Array inesperado". Não consegui entender o porquê disso.

procedure Introduzir (op: char; var agenda: array[1..2] of notes;  idx: integer);

O erro está na assinatura da procedure. O seu compilador não aceita essa declaração do array passando a sua faixa, ou seja, usando o "[1..2]".

Você pode fazer assim:

procedure Introduzir (op: char; var agenda: array of notes; idx: integer);

Mas tem um detalhe: Independente de como você declarou a faixa do array, ao declarar assim ele vai começar sempre do "0", ou seja, em vez de "[1..2]" vai ficar "[0..1"]... resumidamente sempre ficará de "0" a "quantidade de posições -1".

PS: Caso queira usar uma faixa personalizada no precedimento, uma solução seria criar um Type e depois passar por parâmetro. Ex.:

Obs.: Têm mais outros detalhes no código, mas auto-explicativos. ^_^

PROGRAM _Introduzir;
const
TAM = 2; //tamanho do array (não é obrigatório, é só um exemplo)
type
notes = record
nome1 :string;
nome2 :string;
telr :real;
telcm :real;
cel :real;
rua :string;
nrua :integer;
comp :string;
mailc :string;
mailp :string;
end;
[COLOR="Blue"] t_Agenda = array[1..TAM] of notes;[/COLOR]

procedure Introduzir (var [COLOR="Blue"]agenda:t_Agenda;[/COLOR] idx: integer);
var
op: char; //essa é uma variável local, não precisa receber por parâmetro
begin

end;
var
agenda :t_Agenda;
idx :integer;
BEGIN

END.

Olá andreHO,

o nome do programa e o nome do procedimento estão iguais... por isso o erro XD

De certo modo você está certo sobre o (possível) erro de "duplicidade de identificadores" (mesmo nome para duas coisas diferentes), mas o erro anunciado é outro, ou seja, seriam dois erros diferentes e independentes (um não influencia no outro).

Obs.: A depender do programa, é possível usar desta forma. Vai depender do compilador. Por exemplo: no Turbo Pascal 7.0 e 7.1 não aceita essa duplicidade (erro nos dois casos), mas no Free Pascal sim (só erro na procedure).

Abraços

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...