Ir ao conteúdo
  • Cadastre-se

Problema no acumulador


Visitante: osjunior2

Posts recomendados

Visitante: osjunior2
 

caros, peço ajuda para solucionar um problema no exerecio de pascal, pois o programa está rodando, porém quando executo após compilar no turbo pascal, onde cadastro uma disciplina, adicionei uma variavel integer, para acumular c:=c+1 só que o programa registra -7549 e nao sei como solucionar, desde já agradeço. segue o programa abaixo para facilitar entendimento:


PROGRAM ESCOLA;
USES CRT;
{VARIAVEL USADA NA INCLUSAO DE DISCIPLINAS}
TYPE REC = RECORD
C: INTEGER;
S : STRING;
DEL : INTEGER;
END;
{VARIAVEL USADA NA INCLUSAO DE ALUNOS}
TYPE ALN = RECORD
CA: INTEGER;
N: STRING;
DD,MM,AA:INTEGER;
N1,N2: REAL;
DEL:INTEGER;
END;

{MODULOS DO PROGRAMA}
PROCEDURE CAD_DISCIPLINA;
VAR
F: FILE OF REC;
BEGIN
ASSIGN (F,'DISCIPLINA.DB');
REWRITE(F);
CLOSE(F);
WRITE('ARQUIVO PARA CADASTRO DE DISCIPLINAS CRIADO COM SUCESSO');
CLRSCR;
END;
{INCLUSÃO DE DADOS}
PROCEDURE INC_DISCIPLINA(S:STRING);
VAR
F: FILE OF REC;
R:REC;
BEGIN
ASSIGN(F,'DISCIPLINA.DB');
RESET(F);
SEEK(F,FILESIZE(F));
R.C:=R.C+1;
R.S:=S;
R.DEL:=0;
WRITE(F,R);
WRITELN('DISCIPLINA ADICIONADA: (COD.',R.C:2,' - ',R.S:2,') ');
CLOSE(F);
END;
{PROCEDURE CONSULTA DE DADOS}
PROCEDURE CON_DISCIPLINA(C:INTEGER);
VAR
ACHEI:INTEGER;
F:FILE OF REC;
R:REC;
BEGIN
ACHEI:=0;
ASSIGN(F,'DISCIPLINA.DB');
RESET(F);
WHILE(NOT EOF(F)) AND (ACHEI=0) DO
BEGIN
READ(F,R);
IF (R.C=C) AND (R.DEL=0) THEN
BEGIN
WRITELN('DISCIPLINA CONSULTADA:');
WRITELN(R.S);
ACHEI:=1;
END;
END;
IF ACHEI=0 THEN
BEGIN
WRITELN('DISCIPLINA NAO CADASTRADA!'); CLRSCR;
END;
CLOSE(F);
END;

{PROCEDURE LISTAGEM DE DISCIPLINAS CADASTRADAS}
PROCEDURE LIS_DISCIPLINA;
VAR

F:FILE OF REC;
R:REC;
BEGIN
ASSIGN(F,'DISCIPLINA.DB');
RESET(F);
WRITELN('DISCIPLINA CONSULTADA:');
WHILE(NOT EOF(F)) DO
BEGIN
READ(F,R);
BEGIN
WRITELN('CODIGO ',R.C,' - DESCRICAO ', R.S);
END;
END;
CLOSE(F);
END;

{PROCEDURE DE ALTERAÇÃO DE DADOS}
PROCEDURE ALT_DISCIPLINA(C:INTEGER);
VAR
ACHEI:INTEGER;
F:FILE OF REC;
R:REC;
BEGIN
ACHEI:=0 ;
ASSIGN(F,'DISCIPLINA.DB');
RESET(F);
WHILE(NOT EOF(F)) AND (ACHEI=0) DO
BEGIN
READ(F,R);
IF (R.C=C) AND (R.DEL=0) THEN
BEGIN
WRITELN('DISCIPLINA ATUAL :',R.S);
WRITE('ENTRE COM A NOVA DISCIPLINA;');
READLN(R.S) ;
SEEK(F, FILEPOS(F)-1);
WRITE(F,R);
ACHEI:=1;
WRITE('ALTERACAO REALIZADA COM SUCESSO!');
END;
END;
IF ACHEI = 0 THEN
BEGIN
WRITE('DISCIPLINA NAO CADASTRADA');
END;
CLOSE(F);
END;
{PROCEDURE DE EXCLUSÃO DE DADOS}
PROCEDURE EXC_DISCIPLINA(C:INTEGER);
VAR
ACHEI:INTEGER;
F: FILE OF REC;
R:REC;
BEGIN
ACHEI:=0;
ASSIGN(F,'DISCIPLINA.DB');
RESET(F);
WHILE(NOT EOF(F)) AND(ACHEI=0) DO
BEGIN
READ(F,R);
IF(R.C=C) AND (R.DEL=0) THEN
BEGIN
SEEK(F,FILEPOS(F)-1);
R.DEL:=1;
WRITE(F,R);
ACHEI:=1;
WRITE('EXCLUSAO DA DISCIPLINA REALIZADA COM SUCESSO!');
END;
END;
IF ACHEI =0 THEN
BEGIN
WRITE('DISCIPLINA NAO CADASTRADA');
END;
CLOSE(F)
END;
{PROCEDURE PARA CRIAÇÃO DO ARQUIVO DE ALUNOS}
PROCEDURE CAD_ALUNO;
VAR
K: FILE OF ALN;
BEGIN
ASSIGN (K,'ALUNO.DB');
REWRITE(K);
CLOSE(K);
WRITE('ARQUIVO DE ALUNOS CRIADO COM SUCESSO');
END;
{INCLUSÃO DE DADOS}
PROCEDURE INC_ALUNO(CA:INTEGER;N:STRING;DD,MM,AA:INTEGER;N1,N2:REAL);
VAR
K: FILE OF ALN;
RA:ALN;
BEGIN
ASSIGN(K,'ALUNO.DB');
RESET(K);
SEEK(K,FILESIZE(K));
RA.CA:=CA;
RA.N:=N;
RA.AA:=AA;
RA.MM:=MM;
RA.DD:=DD;
RA.N1:=N1;
RA.N2:=N2;
RA.DEL:=0;
WRITE(K,RA);
WRITE('INCLUSAO DO ALUNO REALIZADA COM SUCESSO');READKEY;
CLOSE(K);
END;
{PROCEDURE CONSULTA DE DADOS}
PROCEDURE CON_ALUNO(CA:INTEGER);
VAR
ACHEI:INTEGER;
K:FILE OF ALN;
RA:ALN;
BEGIN
ACHEI:=0;
ASSIGN(K,'ALUNO.DB');
RESET(K);
WRITE('RESULTADO DA CONSULTA DE ALUNO: ');
WHILE(NOT EOF(K)) AND (ACHEI=0) DO
BEGIN
READ(K,RA);
IF (RA.CA=CA) AND (RA.DEL=0) THEN
BEGIN
WRITELN('COD: ',RA.CA, ' NOME: ',RA.N);
WRITELN('NASCIMENTO: ',RA.DD,'/',RA.MM,'/',RA.AA,' NOTAS ',RA.N1:0:2,' E ',RA.N2:0:2);
ACHEI:=1;
END;
END;
IF ACHEI=0 THEN
BEGIN
WRITE('ALUNO NAO CADASTRADO!');
END;
CLOSE(K);
END;

{PROCEDURE LISTAGEM DE ALUNOS CADASTRADAS}
PROCEDURE LIS_ALUNO;
VAR

K:FILE OF ALN;
RA:ALN;
BEGIN
ASSIGN(K,'ALUNO.DB');
RESET(K);
WRITELN('ALUNO(S) CADASTRADO(S):');
WHILE(NOT EOF(K)) DO
BEGIN
READ(K,RA);
BEGIN
WRITELN('COD. ',RA.CA,' - ', RA.N,' NASC.: ',RA.DD,'/',RA.MM,'/',RA.AA);
END;
END;
CLOSE(K);
END;
{PROCEDURE DE ALTERAÇÃO DE DADOS}
PROCEDURE ALT_ALUNO(CA:INTEGER);
VAR
ACHEI:INTEGER;
K:FILE OF ALN;
RA:ALN;
BEGIN
ACHEI:=0 ;
ASSIGN(K,'ALUNO.DB');
RESET(K);
WHILE(NOT EOF(K)) AND (ACHEI=0) DO
BEGIN
READ(K,RA);
IF (RA.CA=CA) AND (RA.DEL=0) THEN
BEGIN
WRITELN('ALUNO ATUAL :',RA.N);
WRITELN('ENTRE COM OS NOVOS DADOS PARA O ALUNO');
WRITE('NOME DO ALUNO: ');READLN(RA.N);
WRITE('DIA DO NASCIMENTO: ');READLN(RA.DD);
WRITE('MES DO NASCIMENTO: ');READLN(RA.MM);
WRITE('ANO DO NASCIMENTO: ');READLN(RA.AA);
WRITE('PRIMEIRA NOTA: ');READLN(RA.N1);
WRITE('SEGUNDA NOTA: ');READLN(RA.N2);
SEEK(K, FILEPOS(K)-1);
WRITE(K,RA);
ACHEI:=1;
WRITE('ALTERACAO REALIZADA COM SUCESSO!');
END;
END;
IF ACHEI = 0 THEN
BEGIN
WRITE('ALUNO NAO CADASTRADO');
END;
CLOSE(K);
END;
{PROCEDURE DE EXCLUSÃO DE DADOS}
PROCEDURE EXC_ALUNO(CA:INTEGER);
VAR
ACHEI:INTEGER;
K: FILE OF ALN;
RA:ALN;
BEGIN
ACHEI:=0;
ASSIGN(K,'ALUNO.DB');
RESET(K);
WHILE(NOT EOF(K)) AND(ACHEI=0) DO
BEGIN
READ(K,RA);
IF(RA.CA=CA) AND (RA.DEL=0) THEN
BEGIN
SEEK(K,FILEPOS(K)-1);
RA.DEL:=1;
WRITE(K,RA);
ACHEI:=1;
WRITE('EXCLUSAO DO ALUNO REALIZADA COM SUCESSO!');
END;
END;
IF ACHEI =0 THEN
BEGIN
WRITE('ALUNO NAO CADASTRADO');
END;
CLOSE(K)
END;
{PROGRAMA PRINCIPAL}
VAR
S,N: STRING;
COND,OP,DD,MM,AA,CA,C:INTEGER;
N1,N2:REAL;
BEGIN
WRITELN('TECLE 1 PARA O MENU DE DISCIPLINAS');
WRITELN('TECLE 2 PARA O MENU DE ALUNOS');
WRITELN('TECLE QUALQUER OUTRA TECLA, SEGUIDA DE "ENTER" PARA SAIR');
READLN(COND); {READKEY;} CLRSCR;
IF COND = 1 THEN
BEGIN
OP:=8;
WHILE OP <> 7 DO
BEGIN
WRITELN('TECLE 1 PARA CRIAR BANCO DE DISCIPLINAS');
WRITELN('TECLE 2 PARA INCLUSAO DE DISCIPLINAS');
WRITELN('TECLE 3 PARA CONSULTAR DISCIPLINAS');
WRITELN('TECLE 4 PARA ALTERAR DISCIPLINAS');
WRITELN('TECLE 5 PARA EXCLUIR DISCIPLINAS');
WRITELN('TECLE 6 PARA LISTAR DISCIPLINAS');
WRITELN('TECLE 7 PARA SAIR DO PROGRAMA');
READLN(OP);
IF OP=1 THEN
BEGIN
CAD_DISCIPLINA;
WRITELN('BANCO DE DISCIPLINAS CRIADO COM SUCESSO');READKEY;CLRSCR;
END
ELSE IF OP = 2 THEN
BEGIN
WRITE('DIGITE O NOME DA DISCIPLINA: ');
READLN(S);
INC_DISCIPLINA (S); READKEY; CLRSCR;
END
ELSE IF OP = 3 THEN
BEGIN
WRITE('DIGITE O CODIGO DA DISCIPLINA PARA CONSULTA: ');
READLN(C);
CON_DISCIPLINA (C); READKEY;CLRSCR;
END
ELSE IF OP = 4 THEN
BEGIN
WRITE('DIGITE O CODIGO DA DISCIPLINA QUE DESEJA ALTERAR :');
READLN(C);
ALT_DISCIPLINA ( C ); READKEY; CLRSCR;
END
ELSE IF OP = 5 THEN
BEGIN
WRITE('DIGITE O CODIGO DA DISCIPLINA QUE DESEJA EXCLUIR:');
READLN (C );
EXC_DISCIPLINA (C); READKEY; CLRSCR;
END
ELSE IF OP = 6 THEN
BEGIN
WRITELN('LISTAGEM DAS DISCIPLINAS CADASTRADAS: ');
LIS_DISCIPLINA; READKEY; CLRSCR;
END
ELSE IF OP <> 7 THEN
BEGIN
WRITE('OPCAO INVALIDA'); READKEY;
END
ELSE IF COND = 2 THEN
BEGIN
OP:=8;
WHILE OP <> 7 DO
BEGIN
WRITELN('1 - PARA CRIAR BANCO DE ALUNOS');
WRITELN('2 - PARA INCLUSAO DE NOVO ALUNO');
WRITELN('3 - PARA CONSULTAR UM ALUNO CADASTRADO');
WRITELN('4 - PARA ALTERAR DADOS DE UM ALUNO');
WRITELN('5 - PARA EXCLUIR O CADASTRO DE UM ALUNO');
WRITELN('6 - PARA LISTAR OS ALUNOS CADASTRADOS');
WRITELN('7 - PARA SAIR DO PROGRAMA');
READLN(OP);
IF OP = 1 THEN
BEGIN
CAD_ALUNO; READKEY;
END
ELSE IF OP = 2 THEN
BEGIN
WRITE('DIGITE O CODIGO DA ALUNO: '); READLN(CA);
WRITE('DIGITE DESCRICAO DA ALUNO: '); READLN(N);
WRITE('DIGITE O DIA DE NASCIMENTO: '); READLN(DD);
WRITE('DIGITE O MES DE NASCIMENTO: '); READLN(MM);
WRITE('DIGITE O ANO DE NASCIMENTO: '); READLN(AA);
WRITE('DIGITE A PRIMEIRA NOTA: '); READLN(N1);
WRITE('DIGITE A SEGUNDA NOTA: '); READLN(N2);
INC_ALUNO (CA,N,DD,MM,AA,N1,N2); READKEY;
END
ELSE IF OP = 3 THEN
BEGIN
WRITE('DIGITE O CODIGO DO ALUNO PARA CONSULTA: ');
READLN(CA);
CON_ALUNO ( CA ); READKEY;
END
ELSE IF OP = 4 THEN
BEGIN
WRITE('DIGITE O CODIGO DO ALUNO QUE DESEJA ALTERAR :');
READLN(CA);
ALT_ALUNO ( CA ); READKEY;
END
ELSE IF OP = 5 THEN
BEGIN
WRITE('DIGITE O CODIGO DO ALUNO QUE DESEJA EXCLUIR:');
READLN (CA );
EXC_ALUNO (CA); READKEY;
END
ELSE IF OP = 6 THEN
BEGIN
WRITELN('LISTAGEM DOS ALUNOS CADASTRADOS: ');
LIS_ALUNO; READKEY;
END
ELSE IF OP <> 7 THEN
BEGIN
WRITE('OPCAO INVALIDA'); READKEY;
END
END
END
END
END;
CLRSCR;
END.

Link para o comentário
Compartilhar em outros sites

Visitante: osjunior2
 
pelo que vi(ou não vi) você não inicializou a variável, antes de usá-la dê a ela o valor 0.

Cara, obrigado, acabei conseguindo resolver da seguinte forma:


BEGIN
ASSIGN(F,'DISCIPLINA.DB'); {associa o arquivo a variavel f}
RESET(F); {abre o arquivo}
SEEK(F,FILESIZE(F)); {seek altera o apontador, f é a variavel associada ao arquivo anterior}
[B][COLOR="Red"]R.C:=filesize(f)+1; {filesize conta até o final do arquivo e implementa +1}[/COLOR][/B]
R.S:=S;
R.DEL:=0;
WRITE(F,R);
WRITELN('DISCIPLINA ADICIONADA: (COD.',R.C:2,' - ',R.S:2,') ');
CLOSE(F);
END;

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!