Jump to content
CDOSS

Problema em registos de futebol

Recommended Posts

CDOSS

Preciso de ajuda urgente :s

Como posso fazer um programa em pascal, que obedeça ao problema:

Uma equipa de futebol, que vai participar num torneio de 6 jogos e com 13 jogadores inscritos, necessita de um programa pascal que registe e contabilize os seus golos marcados, O programa deve :

- registar os golos marcados, por cada um dos 13 jogadores, em cada um dos 6 jogos;

- fazer os totais de golos marcados, por jogador, no torneio;

- fazer os totais de golos marcados, pela equipa, num jogo.

Será que alguém me pode ajudar por favor?

URGENTE

Share this post


Link to post
Share on other sites
nunopicado

Vais precisar de usar um array bidimensional (matriz).

Por exemplo:

Var
  Equipa:array[1..13,1..6] of byte;

Assim podes aceder, em cada momento, a qualquer dos valores, simplesmente usando os dois índices:

Equipa[5,3]:=2;

Diz-te que o jogador 5 marcou 2 golos no jogo 3...

  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
CDOSS

Sou aluna do 12 e tenho aplicaçoes informaticas, esta é uma das perguntas que vai estar no meu teste.. Preciso imenso de ajuda porque não percebo quase nada de Pascal..

Share this post


Link to post
Share on other sites
nunopicado

Já aprendeste os arrays?


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
CDOSS

O meu professor falou disso na aula, mas confesso que ele não nos ensinou nada, apenas mencionou.. Tenho o teste amanhã e não faço ideia de como se faz este programa

Não me consegue fazer o programa?

Acho que se pode mesmo dizer que estou desesperada....

Share this post


Link to post
Share on other sites
EMCM

Acho que se o teu professor não te ensinou então, é porque não quer que os uses.

Já imaginaste algum tipo de resolução do problema? Qualquer coisa...

Share this post


Link to post
Share on other sites
EMCM

e aceder a ficheiros ja aprendeste?

ou usar records...

Duvido... se ainda não deu arrays...

Acho que deu até aos ciclos.

Share this post


Link to post
Share on other sites
nunopicado

O programa não te podemos fazer, é contra as regras do forum, e não te ajuda a aprender.

(sim, eu sei que quando se está aflito não é esta conversa que se quer ouvir, mas passada a aflição, vais com certeza dar-me razão).

Podemos no entanto ajudar-te a fazê-lo.

Se o teu prof não ensinou arrays, acho muito estranho este exercício. O único sentido que faz é se junto com a conversa dos arrays, ele vos disse: "Agora vão descobrir por vocês como o fazer."

É que para este exercício específico, qualquer outra tecla é longe de ideal.

Deixa-me explicar-te um pouco de como funcionam os arrays, para veres se encontras o caminho:

Um array é um conjunto de valores do mesmo tipo, agrupados numa única variável.

Um array unidimensional, os mais simples, são simplesmente uma lista de valores.

Imagina que querias guardar a informação dos golos dos jogadores, mas apenas para 1 jogo.

Guardavas na lista:

-------------------
| Posicao | Valor |
-------------------
|    1    |   0   |
|    2    |   0   |
|    3    |   0   |
|    4    |   0   |
|    5    |   0   |
|    6    |   0   |
|    7    |   3   |
|    8    |   0   |
|    9    |   1   |
|   10    |   0   |
|   11    |   0   |
|   12    |   0   |
|   13    |   0   |
-------------------

Ou seja, num array unidimensional, tens apenas uma coluna com valores. Esses valores são acedidos por um índice (posição).

Neste caso, podes ver que esta equipa fez 4 golos, 3 pelo jogados da posição 7, e 1 pelo jogador da posição 9.

Fazer a soma dos golos não seria mais do que percorrer todo o array (o ciclo FOR dá muito jeito para trabalhar com arrays) e ir somando os valores numa variavel normal.

Um array unidimensional seria declarado assim:

var
  Lista:Array[1..13] of Byte;

Ou seja, a variável Lista é um array com posições de 1 a 13, e guarda valores do tipo byte (nº inteiros até 255).

Para lá gravarmos valores:

Lista[7]:=3;
Lista[9]:=1;

Ou seja, mete-se dentro de parentesis rectos a posição que queremos referir, e atribuimos o valor.

E para os leres:

Writeln('O jogador nº 7 marcou ',Lista[7],' golos.');

Da mesma forma que para escrever. Parentesis rectos e posição lá dentro.

A vantagem disto é que podes usar o array dentro de um for, e em vez de dizeres especificamente a posição que queres aceder, acedes a todas, durante o FOR:

Soma:=0;
for i:=1 to 13 do
  Soma:=Soma+Lista[i];

O que te vai somar o nº de golos de todos os jogadores, à medida que o FOR vá andando e vá alterando o valor de i.

ARRAYS Multidimensionais:

Os arrays podem ter mais do que uma dimensão, para guardar mais valores, relacionados uns com os outros.

Destes, os mais comuns são os bidimensionais, ou seja, com 2 dimensões.

Na prática, arrays bidimensionais são as vulgares tabelas, ou matrizes:

-----------------------------------------------------------
| Posicao |   1   |   2   |   3   |   4   |   5   |   6   |
-----------------------------------------------------------
|    1    |   0   |   0   |   0   |   0   |   0   |   1   |
|    2    |   0   |   0   |   0   |   0   |   0   |   0   |
|    3    |   0   |   0   |   0   |   0   |   0   |   0   |
|    4    |   0   |   0   |   0   |   0   |   0   |   0   |
|    5    |   0   |   0   |   0   |   0   |   0   |   0   |
|    6    |   0   |   0   |   0   |   0   |   0   |   0   |
|    7    |   3   |   0   |   1   |   0   |   0   |   0   |
|    8    |   0   |   0   |   0   |   0   |   0   |   0   |
|    9    |   1   |   0   |   1   |   0   |   0   |   0   |
|   10    |   0   |   1   |   1   |   0   |   0   |   0   |
|   11    |   0   |   2   |   0   |   0   |   0   |   0   |
|   12    |   0   |   0   |   0   |   0   |   1   |   0   |
|   13    |   0   |   0   |   0   |   0   |   0   |   0   |
-----------------------------------------------------------

É isto que precisas para o teu exercício. Uma tabela que te guarde os resultados dos 6 jogos para cada um dos 13 jogadores.

Para declarares um array bidimensional, farias:

var
  Equipa:Array[1..13,1..6] of Byte;

Ou seja, uma dimensão de 1 a 13 (jogadores), e outra de 1 a 6 (jogos).

Para aceder, é semelhante ao unidimensional, mas mete-se o 2º indice dentro dos parentesis rectos, separando-os por virgulas:

Equipa[7,1]:=3;  // Jogador 7, 1º jogo
Equipa[11,2]:=2; // Jogador 11, 2º jogo

Mas são muitos valores, certo? Não vais fazer um readln para cada um destes valores, seria trabalhoso, e pouco prático:

Write('Nº do jogo: ');
Readln(Jogo);

For Jogador:=1 to 13 do
  begin
     Write('Golos do ',Jogador,'º jogador: ');
     Readln(Equipa[Jogador,Jogo]);
  end;

Isto perguntava qual o jogo que se pretendia preencher, e depois lia-te os golos de todos os jogadores para esse jogo.

Para somares o número de golos por jogo, bastava criares um FOR que te percorresse todas as posições desse jogo:

Soma:=0;
for Jogador:=1 to 13 do
  Soma:=Soma+Lista[Jogador,1];

Isto somava-te todos os golos do 1º jogo.

Se fosse antes para somar todos os golos de um jogador:

Soma:=0;
for Jogo:=1 to 6 do
  Soma:=Soma+Lista[7,Jogo];

Isto somava-te todos os golos do 7º jogador.

-----------------------------

Atenções a ter: Deves ter todas as posições do array preenchidas, nem que seja com 0.

Como vais somar valores, se não tiveres lá valores, podes ficar com resultados anormais.

Assim, o que se deve fazer quando se trabalha com arrays é inicializá-los (meter todas as posições com o valor predefinido).

Neste caso, inicializar passa por dois ciclos FOR encadeados:

for Jogo:=1 to 6 do
  for Jogador:=1 to 13 do
     Equipa[Jogador,Jogo]:=0;

A inicialização deve ser feita logo ao inicio do programa, antes de começares a guardar valores no array.

Outra atenção a ter é nunca te baralhares nas dimensões do array.

No caso deste, a declaração foi [1..13,1..6], ou seja, jogador em primeiro, jogo em segundo.

Quando lhe estiveres a aceder, nunca troques as posições, porque senão vais ter erros.

Tenta agora fazer algo, e se houver mais dúvidas, avisa...

Edited by nunopicado
  • Vote 2

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
nunopicado

em var, o que significa ' of byte'? o programa parece não aceitar isso

Byte é um tipo de dados que aceita valores de 0 a 255.

Para não estar a aceitar, estás a usar o quê? PascalZIM?

Troca o byte por Word ou Integer. Qualquer um deles é compatível para o caso.


"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
thoga31

Uma array é, como disse o @nunopicado, um conjunto de valores do mesmo tipo agrupados. Portanto, tens de ter uma array com elementos de um tipo. Traduzindo do inglês array of byte, tens então "array de bytes". byte é um tipo de dados simples numérico que permite representar números positivos com 1 byte (de 0 a 255).

Se o compilador não aceita, significa que estamos perante um compilador fraco. Qual usas?

  • Vote 1

Knowledge is free!

Share this post


Link to post
Share on other sites
CDOSS
Var 
equipa: array [1..13, 1..6]of integer;
Begin
Writeln ('Nº do jogo: ') ;
Readln ( Jogo); --------- Aqui, quero que leia o jogo, como posso fazer?
 For Jogador:= 1 to 13 do
 begin
 writeln (' Golos do ', Jogador, 'º jogador:');
 Readln (Equipa [Jogador, Jogo] );
 end;
Soma:=0              ;
for Jogador:=1 to 13 do
 soma:= soma+lista [jogador,1];
Soma:=0;
for jogo:=1 to 6 do
 soma:= soma+lista [7, jogo];

Edited by thoga31
Tags code + GeSHi

Share this post


Link to post
Share on other sites
thoga31

Como lês o jogo? Usa uma variável. Declara a variável jogo.

Só um parêntesis.

No P@P não há dúvidas mais importantes ou urgentes que outras. Requere-se segundo as Regras que aceitaste ao te inscreveres que o título deverá ser objectivo e não ser do tipo "Problema em Pascal" - isto é mais que vago. Por último, utiliza as tags CODE para colocar o código, indicando qual a linguagem para que seja feito highlight ao código.


Knowledge is free!

Share this post


Link to post
Share on other sites
nunopicado

Estás a agregar o código que te dei, mas tens de o entender...

Jogo e Jogador são duas variáveis do tipo Byte (ou neste caso, Integer).

Soma também é Integer, e é usada para fazeres os cálculos, as tens e mostrar os resultados. Como tens, estás a somar o total de golos mas apagas logo a seguir para fazer outra soma...

Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites
thoga31

Sou um bocado 'naba' nisto... Como posso fazer isso? criar essa variavel?

Em 2 meses de aulas, posso pensar muita coisa acerca do que tens feito... mas adiante, este não é o local certo para isso.

Então como se declaram variáveis? Fizeste-o nesse código e dizes-nos que não o sabes fazer?


Knowledge is free!

Share this post


Link to post
Share on other sites
CDOSS

Var
equipa: array [1..13, 1..6]of integer;
jogo , jogador, soma : integer       ;
Begin
Writeln ('Nº do jogo: ') ;
Readln (Jogo);
 For Jogador:= 1 to 13 do
  begin
   writeln (' Golos do ', Jogador, 'º jogador:');
   Readln (Equipa [Jogador, Jogo] );
  end;
  For Jogador := 1 to 13 do  ;
     Begin  ;
   Writeln ('Insira o numero' ,Jogador,'º jogador e do ',jogo,' jogo) ;
      Readln [jogador, jogo]  ;
      Soma:=0     ;              
      soma:= soma+lista [jogador,jogo];
   end;
  For Jogo:=1 to 6 do   ;
  Begin       ;
 Writeln ('Insira o numero do ' , jogo, ' jogo')  ;
 Readln [ jogo]  ;
  Soma:=0;
 soma:= soma+lista [jogador, jogo];
 end;
End.

Estou a ir bem ?

Edited by thoga31
Tags code + GeSHi

Share this post


Link to post
Share on other sites
thoga31

À parte da falha na delimitação das strings, tens ; onde não devem existir, faltam parêntesis em readln's...


Knowledge is free!

Share this post


Link to post
Share on other sites
nunopicado

Estou a ir bem ?

- Para começar, como o Thoga já disse, tens de colocar o teu código dentro das tags [ CODE=Pascal ] do forum. Edita o teu último post para veres como eu to pus.

- E se o tivesses feito, tinhas visto que te falta ali uma plica, e daí que está tudo avermelhado para baixo.

- Depois, as variáveis Jogo e Jogador são indices, que usas dentro do FOR. Não tens de as ler com o readln a não ser que queiras especificamente aceder a um determinado valor de um jogador num determinado jogo.

- Soma:=0 é uma inicialização da variável de apoio. Nunca pode estar dentro do FOR, senão a cada ciclo, ela é limpa e ficas com os calculos perdidos.

- Readln não é usado com parentesis rectos.

- Depois de somares, a ideia é apresentar os valores. Se somares outra logo a seguir, para a mesma variável, o resultado perde-se sem ser usado.

- Declaraste um array chamado Equipa, e a lá para o meio usas um chamado lista: Mais uma vez, não é para passares código à toa. É mesmo por isto que não te fazemos o programa. Tens de olhar para o código e tentar perceber o que lá está, tirar dúvidas se necessário, mas nunca meter código só por meter.

- Pontos e virgula depois do DO (ciclo FOR) significa que na prática, o código desse ciclo só será executado uma única vez.

Se queres realmente fazer isto, lê correctamente o que te estamos a dizer, e ouso dizê-lo, em especial o post que te pus em cima a explicar os arrays.

Enquanto não perceberes esse post, tudo o resto é perda de tempo, teu e nosso, e não conseguirás fazer o programa.

Procura, pesquisa, vai à net, vai ao tutorial de Pascal feito pelo Thoga que está aqui no forum. Tira dúvidas, faz perguntas, mas nunca, nunca, ponhas código à toa num programa!

Edited by nunopicado
  • Vote 1

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.