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.