Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Rackor

Dúvida básica com arrays em procedures

Recommended Posts

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Muito Obrigado, andreHO e EstilingueAtomico. Era um erro elementar na procedure mesmo.

    Also, para colocar Resolvido no tópico, como faço?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×