Listar dados de um Array em pascal

Fala galera. Estou com um probleminha!
gostaria de cadastrar dados em um vetor e depois exibi-los, entretanto não estou obtendo exito.
vejam como fiz e me digam porque nao estou conseguindo listar os dados digitados:

Program Biblioteca ;

Type
Livros = Record
matricula:integer;
	Nome: String;
	Autor: String;
	Editora: String;
	Quant:integer;
End;	

var
vetor_livros: array[1…10] of Livros;
qtd_livros,i,j: integer;
//cadastra livros
Procedure Cadastrar_Livro;
Begin

 qtd_livros := qtd_livros +1; 
   
Writeln('Digite a Matricula: ');
readln(vetor_livros[qtd_livros].matricula);
Writeln('Digite o nome do Livro: ');
readln(vetor_livros[qtd_livros].Nome);
Writeln('Digite o Autor: ');
readln(vetor_livros[qtd_livros].Autor);
Writeln('Digite a Editora: ');
readln(vetor_livros[qtd_livros].Editora);

End;
//Mostrar dados cadastrados em um Array
Procedure Listar_Livro;
Begin
for i:=1 to qtd_livros do
begin
writeln(vetor_livros[qtd_livros].matricula);
writeln(vetor_livros[qtd_livros].Nome);
writeln(vetor_livros[qtd_livros].Autor);
writeln(vetor_livros[qtd_livros].Editora);
end;
End;

A criação do array não usa apenas dois pontos?

vetor_livros[1..10] of Livros;

Documentação
http://wiki.freepascal.org/Array

Na mesma página há exemplo de uso usando length no array ao inves de qtd_livros…

Coloquei o que vc disse mas nao resolveu! Ainda não consigo mostrar os dados cadastrados em um vetor

Alguma mensagem de erro do compilador?

Como você não disse se o programa dá erro, meu palpite é que está exibindo sempre o último livro, não todos os livros cadastrados. Isso porque você está fazendo:

writeln(vetor_livros[qtd_livros].matricula);

quando deveria fazer:

writeln(vetor_livros[i].matricula);

já que i é a variável do laço de repetição. qtd_livros sempre será a quantidade de livros cadastrados, então se você usar seu código sempre exibirá o último livro, independente de quantos forem cadastrados. Prefira também usar variáveis locais para os laços, declarando-as dentro dos métodos onde são usados. Isso evita surpresas quando o valor dessas variáveis é usado ou alterado.

Seu método para listar livros pode ficar assim:

Procedure Listar_Livro;
var
  i : integer; // tire a declaração de i lá de cima
Begin
  for i:=1 to qtd_livros do
  begin
    writeln(vetor_livros[i].matricula);
    writeln(vetor_livros[i].Nome);
    writeln(vetor_livros[i].Autor);
    writeln(vetor_livros[i].Editora);
  end;
End;

Outra coisa: você não mostrou onde inicializou a variável qtd_livros. Em algum lugar (quando o programa inicia, de preferência), deve haver algo como:

qtd_livros := 0;

Para evitar problemas quando você incrementa essa variável no método Cadastrar_Livro.

Abraço.

2 curtidas

AAAAAAA muito Obrigado cara!! Ajudou muito mesmo, abraço.