Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

CDOSS

Problema em registos de futebol

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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..

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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....

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...

Editado por nunopicado
  • Voto 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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?

  • Voto 1

Knowledge is free! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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];

Editado por thoga31
Tags code + GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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...

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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! | Occasional Fortnite player

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 ?

Editado por thoga31
Tags code + GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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!

Editado por nunopicado
  • Voto 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.