×
Ir ao conteúdo
  • Cadastre-se

Programa dando erro no final end.


pascalzim

Posts recomendados

:o:o

estou com um problema com meu programa de Biblioteca??

Erro sintatico na linha 161 '.' não esperado!

a linha 161 é o End.

Não estou conseguindo consertar e faze-lo rodar!

Se alguem me ajudar agradeço!!

Program Gerencia_Biblioteca ;
Const n = 3000 ; (* no máximo 3000 exemplares *)
Type tipo_ficha = Record
codigo: Integer ;
titulo: String [20] ;
autor: String [30] ;
area: Integer ; (* 1: Humanas ; 2: Exatas ; 3: Biológicas *)
End ;

var
tamanho,opcao,codigo: Integer ;
tipo_fichario: Array[1..n] of tipo_ficha ;
fichario : tipo_fichario ;


Procedure Inicializa_Variaveis;
Var i : Integer;
Begin
tamanho := 0 ;
For i := 1 To n Do
fichario [i].codigo := -1 ; (* indica que o Record está disponível *)
End;

Procedure Apresenta_Menu;
Begin
Write('1 - Inserir Novo Cadastro');
Write('2 - Eliminar Cadastro Velho');
Write('3 - Atualizar Cadastro');
Write('4 - Consultar Livros Cadastrados');
Write('5 - Listar Acervo');
Write('6 - Sair');
Repeat
Read( opcao );
Until (opcao > 0) and (opcao < 7) ;
end;

Procedure Insere;



Function Cheia: Boolean ;
Begin
Cheia := (tamanho = n) ;
End ;


Function Posicao_Livre: Integer;
Var i : Integer ;
Begin
i := 1 ;
While (fichario[i].codigo <> -1) do
i := i + 1 ;
Posicao_Livre := i ;
End ;

Begin
If Not Cheia
Then Begin
Inc(tamanho);
pos := Posicao_Livre ;
With fichario[pos] Do
Begin
Read(codigo, titulo, autor,area);
End;
Write('Cadastro Inserido');
End
Else Write('Fichario Lotado') ;
End;


Function Busca: Integer ;
Var achou, acabou: Boolean ;
i : Integer ;
Begin
achou := False ;
acabou := False ;
i := 0 ;
While (Not achou) And (Not acabou) Do
Begin
i := i + 1 ;
achou := (fichario[i].codigo = codigo) ;
acabou := (i = n) ;
End ;
If achou
Then Busca := i
Else Busca := -1 ;
End ;

Procedure Elimina;
Var pos : Integer ;
Begin
Read(codigo);
pos := busca ;
If (pos = -1)
Then Write('Cadastro Inexistente')
Else
Begin
fichario[pos].codigo := -1 ;
tamanho := tamanho -1 ;
Write('Cadastro Eliminado');
End;
End;

Procedure Altera;
Var pos : Integer ;
Begin
Read(codigo);
pos := busca ;
If (pos = -1)
Then Write('Cadastro Inexistente')
Else
Begin
With fichario[pos] Do
Read(codigo, titulo, autor, area);
Write('Cadastro Alterado');
End;
End;

Procedure Consulta;
Var pos : Integer ;
Begin
Read(codigo);
pos := busca ;
If (pos = -1)
Then Write('Cadastro Inexistente')
Else With fichario[pos] Do
Write(codigo, titulo, autor, area);
End;




Procedure Lista;
Var t, pos: Integer ;
Begin
t := 0; pos := 1;
While (pos <= tamanho) Do
Begin
If (fichario[pos].codigo <> -1)
Then
Begin
With fichario[pos] Do
Write(codigo, titulo, autor, area) ;
t := t + 1;
end ;
pos := pos + 1 ;
End ;




Begin
Inicializa_Variaveis ;
Repeat
Apresenta_Menu ;
Case opcao of
1: Insere ;
2: Elimina ;
3: Altera ;
4: Consulta ;
5: Lista ;
end;
until opcao = 6 ;


End.

:wacko:

Link para o comentário
Compartilhar em outros sites

Begin 
Inicializa_Variaveis ;
Repeat
Apresenta_Menu ;
Case opcao of
1: Insere ;
2: Elimina ;
3: Altera ;
4: Consulta ;
5: Lista ;
end;
until opcao = 6 ;


End.

Mude para

Begin 
Inicializa_Variaveis ;
Repeat
Apresenta_Menu ;
Case opcao of
1: Insere ;
2: Elimina ;
3: Altera ;
4: Consulta ;
5: Lista ;
end;
until opcao = 6 ;
end;
end;

End.

Link para o comentário
Compartilhar em outros sites

  • Moderador

Olá,

1) Variável x Tipo de Variável

	Type tipo_ficha = Record
codigo: Integer ;
titulo: String [20] ;
autor: String [30] ;
area: Integer ; (* 1: Humanas ; 2: Exatas ; 3: Biológicas *)
End ;

var
tamanho,opcao,codigo: Integer ;
[COLOR="Red"]tipo_fichario: Array[1..n] of tipo_ficha ;
fichario : tipo_fichario ;[/COLOR] [1]

[1] tipo_fichario não seria um "tipo", então por quê está declarado no var? Está compilando com vocês??? (não estou em casa, estou testando no Turbo Pascal 7.1, via DOSBox 0.7 num Seven 64 bits).

Neste caso, eu tive que mover para o type... (acho estrando usar uma variável como sendo um tipo, nunca vi isso antes... aqui não rodou!)

2) Declaração de variáveis

Faltou declarar a variável "pos". O programa poderá dar outro erro pois ele acha que você está utilizando a function de mesmo nome! ("pos" já existe, mas é substituível - não é uma "palavra reservada")

Obs.: Ao declarar uma variável chamada "pos" (ou qualquer outra que já exista, como integer, writeln) você estará sobrescrevendo essa assinatura, ou seja, o "comando de mesmo nome deixará de ser acessível e passará a valer o que você declarou por último" -_-. Em programação, a assinatura que vale é a que está "mais próxima". (Biblioteca System < Variável Global < Variável Local)

3) Realmente faltou um end

Ficou faltando um end na Procedure Lista;

Abaixo esse trecho "corrigido"

Procedure Lista;
var
t,
pos :Integer ;
begin
t:=0;
pos:=1;
while (pos <= tamanho) do
begin
if (fichario[pos].codigo <> -1) then
begin
with fichario[pos] do
write(codigo, titulo, autor, area) ;
t:=t+1;
end;
pos:=pos+1;
end ;
end;

BEGIN
Inicializa_Variaveis ;
repeat
Apresenta_Menu;
Case opcao of
1: Insere;
2: Elimina;
3: Altera;
4: Consulta;
5: Lista;
end;
until opcao = 6 ;
END.

No Aguardo

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...

Como ganhar dinheiro montando computadores!

MINICURSO GRÁTIS!

Como ganhar dinheiro montando computadores!

CLIQUE AQUI E INSCREVA-SE AGORA MESMO!