duvidas num programa em pasca

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:
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 :)
 
Back
Topo