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

duvidas num programa em pasca

Discussão em 'Programação' iniciada por Ashlazr, 16 de Dezembro de 2007. (Respostas: 1; Visualizações: 1156)

  1. Ashlazr

    Ashlazr Power Member

    o enunciado do trabalho é este
    Uma Associação Cultural e Desportiva (ACD) de âmbito regional pretende actualizar cada fim-de-semana a tabela classificativa da terceira divisão distrital de futebol, para a disponibilizar aos seus sócios.
    Escreva um programa em linguagem Pascal que proporcione à ACD as seguintes funcionalidades:
    a) Ler de um dado ficheiro binário a tabela classificativa correspondente à jornada anterior;
    b) Listar no ecrã do computador a tabela lida;
    c) Actualizar a tabela classificativa, mediante os resultados da nova jornada;
    d) Actualizar o conteúdo do ficheiro binário, substituindo-o pela nova tabela;
    e) Manter um ficheiro de texto actualizado com os resultados das sucessivas jornadas da época.

    e o programa que já tenho é o seguinte

    Código:
    program projecto2;
    uses crt, dos;    { - - Declaração dos Tipos necessarios - - }
    const max_equip=3;
    type nova_tabela=record
        nome_equipa:string;
        jornada,pontos,jogos,vitorias,empates,derrotas,golos_m,golos_s:integer;
    end;
        tabela=file of nova_tabela;    
        vector=array[1..max_equip] of nova_tabela;
    
    function ficheiro_existe:boolean;        { - - Funcao para verificar a existencia do ficheiro equipas.txt - -}
    begin 
        if (FSearch('class.dat', '.')<>'') then
            ficheiro_existe := TRUE
        else
            ficheiro_existe := FALSE;
    end;
    
    procedure nova_jornada(var v:vector;var num_equip:integer); { - - Inicia uma nova época - - }
    var    i:integer;
    begin
        repeat
        clrscr;
        writeln;
        writeln('Numero Equipas (não exceder',max_equip,')?');
        readln(num_equip);
        until (num_equip>1) and (num_equip <=max_equip);
        for i:=1 to num_equip do
            with v[i] do
            begin
                writeln;
                writeln('Introduza o nome para a equipa numero ',i,':');
                writeln;
                readln(nome_equipa);
                jornada:=0;
                pontos:=0;
                jogos:=0;
                vitorias:=0;
                empates:=0;
                derrotas:=0;
                golos_m:=0;
                golos_s:=0;
            end;
        writeln;
        writeln('Equipas introduzidas com sucesso, prima ENTER para continuar.');
    end;
    
    procedure gravar_tabela( var fix:tabela; v:vector; n:integer);
    var i:integer;
    begin
        for i:=1 to n do
            write(fix,v[i]);
    end;
    
    procedure ler_tabela( var fix:tabela; var v:vector; var n:integer);
    begin
        n:=0;
        while not eof(fix) do
        begin
            n:=n+1;
            read(fix,v[n]);
        end;
    end;
    
    procedure insere_jornada( var fix:tabela; var v:vector; var n:integer);
    var i,gm,gs:integer;
        c:char;
    begin
        for i:=1 to n do
            with v[i] do
            begin
                clrscr;
                jornada:=jornada+1;
                write('Introduza o resultado da ',jornada,' jornada para a equipa ',nome_equipa,'(V/D/E):');
                readln(c);
                writeln;
                case upcase(c) of
                    'V':begin
                            pontos:=pontos+3;
                            jogos:=jogos+1;
                            vitorias:=vitorias+1;
                            empates:=empates+0;
                            derrotas:=derrotas+0;
                            repeat
                                clrscr;
                                write('Insira o numero de golos MARCADOS pela equipa ',nome_equipa,'.');
                                readln(gm);
                                writeln;
                                write('Insira o numero de golos SOFRIDOS pela equipa ',nome_equipa,'.');
                                readln(gs);
                                writeln;
                            until (gm>gs);
                            golos_m:=golos_m+gm;
                            golos_s:=golos_s+gs;
                        end;
                    'E':begin
                            pontos:=pontos+1;
                            jogos:=jogos+1;
                            vitorias:=vitorias+0;
                            empates:=empates+1;
                            derrotas:=derrotas+0;
                            repeat
                                clrscr;
                                write('Insira o numero de golos MARCADOS pela equipa ',nome_equipa,': ');
                                readln(gm);
                                writeln;
                                write('Insira o numero de golos SOFRIDOS pela equipa ',nome_equipa,': ');
                                readln(gs);
                                writeln;
                            until (gm=gs);
                            golos_m:=golos_m+gm;
                            golos_s:=golos_s+gs;
                        end;
                    'D':begin
                            pontos:=pontos+0;
                            jogos:=jogos+1;
                            vitorias:=vitorias+0;
                            empates:=empates+0;
                            derrotas:=derrotas+1;
                            repeat
                                clrscr;
                                write('Insira o numero de golos MARCADOS pela equipa ',nome_equipa,'.');
                                readln(gm);
                                writeln;
                                write('Insira o numero de golos SOFRIDOS pela equipa ',nome_equipa,'.');
                                readln(gs);
                                writeln;
                            until (gm<gs);
                            golos_m:=golos_m+gm;
                            golos_s:=golos_s+gs;
                        end;
                end;
            end;
    end;
    procedure lista_tabela(var fix:tabela; var v:vector; var n:integer);
    var i:integer;
    begin
        n:=0;
        while not eof(fix) do
        begin
            n:=n+1;
            read(fix,v[n]);
        end;
        writeln;
        writeln('Jornada | Nome Equipa | Pontos | Jogos | Vitorias | Empates | Derrotas | Golos Marcados | Golos Sofridos');
        writeln;
        for i:=1 to n do
            with v[i] do
                writeln(jornada,'|',nome_equipa,'|',pontos,jogos,'|',vitorias,'|',empates,'|',derrotas,'|',golos_m,'|',golos_s);
    end;
    
    procedure apagar_fixeiros( var fix:tabela);            { - - Procedimento para eliminar os ficheiros do programa - - }
    var resp:char;
    begin
        clrscr;
        writeln('Tem a certeza que pretende fazer reset ao programa?(S/N)');
        writeln;
        writeln('Ira apagar todos os seus fixeiro relativos a tabela classificativa.');
        writeln;
        readln(resp);
        if (resp='S') then
            begin
                erase(fix);
                clrscr;
                writeln;
                writeln('Dados removidos com sucesso.');
                writeln;
                writeln('Prima ENTER para Sair');
                writeln;
                readln;    
            end
    end;
    
    procedure apagar_registos(var fix:tabela);        { - - Procedimento para apagar todos os registos do programa - - }
    var resp:char;
    begin
        clrscr;
        writeln('Tem a certeza que pretende apagar todos os registos?(S/N)');
        writeln;
        readln(resp);
        if (resp='S') then
            begin
                rewrite(fix);
                clrscr;
                writeln;
                writeln('Registos removidos com sucesso.');
                writeln;
            end;
    end;
    
    var vt:vector;
        ne:integer;
        op:char;
        f:tabela;
    begin    { - - Programa Principal - - }
        clrscr;
        assign (f,'class.dat');
        repeat
            begin
            clrscr;
                writeln('':20);
                writeln('':20);
                writeln('Associacao Cultural e Desportiva':20);
                writeln('':20);
                writeln('Tabela Classificativa':20);
                writeln('da':15);
                writeln('':20);
                writeln('Terceira divisao distrital':20);
                writeln('de':15);
                writeln('':20);
                writeln('Futebol':15);
                writeln('':20);
                writeln('':20);
                writeln('1 -    Inicializar Tabela Classificativa':20);
                writeln('':20);
                writeln('2 -    Inserir Resultados da jornada':20);
                writeln('':20);
                writeln('3 -    Listar Tabela Classificativa':20);
                writeln('':20);
                writeln('4 -    Eliminar Registos':20);
                writeln('':20);
                writeln('5 -    Eliminar Fixeiros':20);
                writeln('':20);
                writeln('6 -    Sair do Programa':20);
                writeln('':20);
                writeln('':20);
                writeln;
                writeln('Escolha uma opcao:' );    
                writeln;
                readln(op);
                case op of
                    '1':begin clrscr; nova_jornada(vt,ne); rewrite(f); gravar_tabela(f,vt,ne); close(f); end;{ - - Inicia liga - -}
                    '2':begin clrscr; reset(f); ler_tabela(f,vt,ne); insere_jornada(f,vt,ne); gravar_tabela(f,vt,ne); close(f); end;
                    '3':begin clrscr; reset(f); ler_tabela(f,vt,ne); lista_tabela(f,vt,ne); close(f); end; { - - Lista Tabela - - }
                    '4':begin clrscr; reset(f); apagar_registos(f); close(f); end;{ - - Limpa dados dos fixeiros - - }
                    '5':begin clrscr; reset(f); apagar_fixeiros(f); end;{ - - Eliminas fixeiros do disco - - }
                    '6':exit;    { - - Termina o Programa - - }    
                end;
            end;
        until (op='1') or (op='2') or (op='3') or (op='4') or (op='5');
        readln;
    end.


    O programa já é executável. Ainda está incompleto (podem-me dar algumas luzes?sobre o que falta) Mas não consigo criar equipas....sai-me logo da janela....Já ouvi falar que o free pascal não é muito compativel com o Vista...será essa a razão? o programa está mal feito?
     
    Última edição pelo moderador: 17 de Dezembro de 2007
  2. ruivilela

    ruivilela Power Member

    Enquanto ao Vista procura um programa chamado Dosbox. Enquanto ao código, aconselho-te a fazer um "Debug" do programa, com os respectivos "watch's" sobre as variáveis. Ou então a fazer um "printf" ... "writeln" temporário de valores durante a execução. Não te apegues muito ao Pascal :)
     

Partilhar esta Página