1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[Help]Programa no Pascal

Discussão em 'Programação' iniciada por EmptyxD, 29 de Maio de 2008. (Respostas: 13; Visualizações: 1562)

  1. EmptyxD

    EmptyxD Power Member

    Boa Tarde !

    Bem tenho de entregar um trabalho para o modulo 7 de Programação(10 ano) em Pascal, mas tenho aqui um grande problema, bloqueie mesmo :x

    Neps, não venho para aqui pedir que me façam o trabalho apenas que me digam o que é que eu estou a fazer mal, porque já mexi em tudo e continua a bloquear ali.

    Código:
    Program morreu;
    Uses crt;
    type registo=record
         apelido:string[15];
         nascimento:integer;
         personalidade:char;
    end;
    
    Var morte1 : file of registo;
        pessoa:registo;
        nascimento,l,x,y,z : integer;
        op : char;
    
    Procedure som;
    begin
    For x:=1000 downto 0 do
    begin
    sound(x);
    delay(3);
    end;
    end;
    
    Procedure Menu;
    Begin
    CLRSCR;
           Writeln('Smells like death spirit');
           Writeln('Um programa que prevˆ e regista o ano da sua MORTE');
           Writeln;
           Writeln('Para descobrir o seu futuro use a tecla P');
           Writeln('Para listar os dados use a tecla 2');
           Writeln('Para consultar/alterar use a tecla C');
           Writeln('Para apagar todos os registos use a tecla E');
           Writeln('Se quer sair carregue na tecla S');
           Writeln;
    Repeat
          readln(op);
          op:=readkey;
          until op in['P','S','p','s','D','d','C','c','E','e'];
    End;
    
    Function existe:boolean;
    Begin
         Assign(morte1,'Morte.dat');
         {$I-};
         reset(morte1);close(morte1);
         {$I+};
         existe:=(IoResult=0);
    end;
    
    Procedure prog;
    Var J,Q : Integer;
    
    Begin
         CLRSCR;
         Writeln('Vamos a isto');
         If existe then
            Reset(morte1)
         Else
             Rewrite(morte1);
             Writeln;
             Writeln('Quer o programa advinhe quantas morte?');
             Readln(Q);
             For J:=1 to Q do
    Begin
     Writeln;
     Writeln('Escreva o seu apelido');
     Readln(pessoa.apelido);
     Writeln('Escreva o ano em que nasceu');
     Readln(pessoa.nascimento);
         Writeln ('Seleciona de 0 a 9 o tipo de pessoa com a qual mais te identificas');
         Writeln ('0 - Romantico');
         Writeln('1 - Intelectual');
         Writeln('2 - Moderno');
         Writeln('3 - Natural');
         Writeln('4 - Confuso');
         Writeln('5 - EMOcional');
         Writeln('6 - Bixo do Mato');
         Writeln('7 - Ambicioso');
         Writeln('8 - Mitra');
         Writeln('9 - Outro');
         Readln(l);
         Begin
         randomize;
         repeat
         y:=random(100);
         z:=y+nascimento;
         until z>=2008;
         Case l of
         0:Writeln(z);
         1:Writeln(z);
         2:Writeln(z);
         3:Writeln(z);
         4:Writeln(z);
         5:Writeln(z);
         6:Writeln(z);
         7:Writeln(z);
         8:Writeln(z);
         9:Writeln(z)
    end;
         Readln(pessoa.personalidade);
     Seek (morte1,filesize(morte1));
     Write(morte1,pessoa);
    End;
    Close(morte1);
    End;
    
    Begin
         CLRSCR;
         If not existe then
    Begin
         Writeln('NÆo existem registos :|');
         Writeln('Use a tecla R para retroceder');
         Readln(op);
         Repeat until op in['R','r'];
    End
    
       Else
    
    Begin
    Reset(morte1);
                 Writeln('Aqui est  a lista com os registo :)');
                 Writeln('... E aqui estÆo os registos que existem neste ficheiro');
                 Writeln(filesize(morte1));
                 Writeln;
                 While not eof (morte1) do
    Begin
     Read(morte1,pessoa);
     Writeln(pessoa.apelido);
     Writeln(pessoa.nascimento);
     Writeln(pessoa.personalidade);
     Writeln;
     Writeln('Use a tecla R para retroceder');
     Readln(op);
    Repeat until op in['R','r'];
    end;
    Close(morte1);
    End;
    
    Procedure listar;
    
    Var G : Char;
        K : Integer;
    
    Begin
    CLRSCR;
           If not existe then
    Begin
         Writeln('NÆo existem registos :x');
         Writeln('Use a tecla R para retroceder');
         Readln(op);
    Repeat until op in['R','r'];
    End;
    
        Else
    Begin
    Repeat
    Reset(morte);
                 Writeln('Aqui pode consultar/alterar os registos :)');
                 Writeln;
                 Writeln('Quantos registos quer consultar/alterar');
                 Readln(K);
    Until (K>0) and (K<=filesize(morte));
    Seek(morte,k-1);
    Writeln;
    Writeln(pessoa.apelido);
    Writeln(pessoa.nascimeno);
    Writeln(pessoa.personalidade);
    Writeln;
    Writen('Pretende alterar alguma coisa? Y or N');
    Repeat
          G:=upcase(readkey);
    Until G in ['Y','y','N','n'];
          Writeln;
    If G='Y' or 'y' then
    Begin
         Writeln('EntÆo escreve o novo apelido pretendido');
    Repeat
          Readln(pessoa.apelido);
    Until pessoa.apelido <> ' ';
    
          Writeln('EntÆo escreve o novo ano de nascimento pretendido');
    Seek(morte,K-1);
                    Writeln('EntÆo escolhe a personalidade desejada');
                    Append (morte);
                    Writeln ('0 - Romantico');
                    Writeln('1 - Intelectual');
                    Writeln('2 - Moderno');
                    Writeln('3 - Natural');
                    Writeln('4 - Confuso');
                    Writeln('5 - EMOcional');
                    Writeln('6 - Bixo do Mato');
                    Writeln('7 - Ambicioso');
                    Writeln('8 - Mitra');
                    Writeln('9 - Outro');
                    Readln(pessoa.personalidade);
                    Writeln(morte,pessoa);
                    Writeln('Foi modificado com sucesso');
                    Writeln('Use a tecla R para retroceder');
    End;
    Close(morte);
    End;
    End;
    
    Procedure apagar;
    
    Begin
    CLRSCR;
           If not existe then
    Begin
         Writeln('NÆo existem registos :x');
         Writeln('Use a tecla R para retroceder');
         Readln(op)
    Repeat until op in['R','r'];
    End
       Else
    Begin
    Repeat
    CLRSCR;
           Writeln('Tem a certeza que quer apagar tudo? Y or N');
           Readln(op);
    Until op in['Y','y','N','n'];
    If op in['Y','y'] then
    
    Begin
    Assign(morte,'Morte.dat');
    Rewrite(morte);
    Repeat
    CLRSCR;
           Writeln('Foi tudo apagado');
           Writeln('Use a tecla R para retroceder');
           Readln(op);
    Until op in['R','r'];
    End;
    If op in['n','N']; then
    Begin
    Assign (morte,'Morte.dat');
    Reset(morte);
    Repeat
    CLRSCR;
           Writeln('Cancelou a elemina‡Æo dos registo');
           Writeln;
           Writeln('Use a tecla R para retroceder');
           Readln(op);
    Until op in['R','r'];
    End;
    End;
    End;
    
    Begin
    CLRSCR;
    Repeat
    som;
     Menu;
     lista;
     Case op of
     ['P','p'] : Descobrir;
     '2':listar;
     ['C','c']: Vizualizar;
     ['E','e'] : Apagar;
     Else
     Writeln('Opera‡Æo Inv lida');
    End;
    Until op in['S','s';
    Readln;
    End.
    
    Somebody help me? xD
     
  2. nram

    nram Power Member

    Podes dizer qual é a mensagem de erro?
    Não tenho compilador.. -.-''

    Cumprimentos
     
  3. The_True_Eue

    The_True_Eue Power Member

    Bloqueia onde, exactamente?
     
  4. EmptyxD

    EmptyxD Power Member

    Na parte do procedimento listar
     
  5. nram

    nram Power Member

    Chega a escrever alguma coisa do procedimento listar?
     
  6. EmptyxD

    EmptyxD Power Member


    Error 113: Error in statement .
     
  7. nram

    nram Power Member

    Já não tenho pascal à tanto tempo, mas acho que aqui algo não está certo:

    Repeat until op in['R','r']; <-- O que faz isto?
     
  8. EmptyxD

    EmptyxD Power Member

    Continua naquele ''passo'' até que carregues R maiúsculo ou r minúsculo
     
  9. nram

    nram Power Member

    isso não deveria ser assim:


    Código:
    Repeat 
    Readln(op);
    until op in['R','r'];
     
  10. EmptyxD

    EmptyxD Power Member

    Pois mas o erro que me está a dar é mesmo na linha do Procedure listar;
     
  11. MPalhas

    MPalhas Power Member

    se te desses ao trabalho de formatar o código era uma grande ajuda. o erro provavelmente é que te falta um begin ou um end.
    estou agora a tentar por o código legivel (formatado) e já te digo com mais precisão, mas acho que já vi por ali um end seguido de um begin logo a seguir, o que não faz muito sentido para mim (mas também não me lembro de quase nada de pascal)


    EDIT: e aqueles repeat until também não fazem muito sentido. não será isto que tu queres?
    Repeat
    Readln(op);
    until op in['R','r'];

    ou seja, pedir uma opção enquanto esta for diferente de R ou r
     
    Última edição: 29 de Maio de 2008
  12. EmptyxD

    EmptyxD Power Member

    Sim isso já tá bem mas continua o mesmo erro :X
     
  13. MPalhas

    MPalhas Power Member

    o procedure listar, pelo que vejo no notepad++ (não tenho compilador de pascal, isto é o maximo que posso fazer) está declarado dentro de algo que julgo ser o programa principal.

    os meus conhecimentos de pascal são mesmo muito poucos por isso não sei dizer ao certo, mas no notepad++ quando acrescentei um End antes do procedure listar aquilo pareceu ficar direito

    tenta fazer isso. senão acho que não posso ajudar muito mais. mas aconselho-te a formatares o código. é a melhor maneira de evitar erros deste tipo e torna o programa muito mais legivel
     
  14. nram

    nram Power Member

    eu passei uma vista de olhos.. mas não está no programa principal... também me pareceu estar dentro de algo, mas acho que é dentro de uma procedure ou mesmo de um IF.... mas desisti... com o código tão mal formatado. :\\
     

Partilhar esta Página