[resolvido]- exercicio logica de programaÇÃo 2

4 respostas
C

Boa noite a todos,

Uma rainha requisitou os serviços de um monge e disse-lhe que pagaria qualquer preço. O
monge, necessitando de alimentos , indagou à rainha sobre o pagamento, se poderia ser
feito com grãos de trigo dispostos em um tabuleiro de xadrez, de tal forma que o primeiro
quadro deveria conter apenas um grão e os quadros subseqüentes , o dobro do quadro
anterior. A rainha achou o trabalho barato e pediu que o serviço fosse executado, sem se
dar conta de que seria impossível efetuar o pagamento. Faça um algoritmo para calcular o
número de grãos que o monge esperava receber.

OBS.: Apostila “Curso Basico Logica de Programação” de Paulo Sergio de Moraes - Unicamp, Centro de Computação

De acordo com a minha logica de programação resolvi da seguinte maneira descrita abaixo:

(Inicio)

  • Criar Q = 0 (variavel que armazenara o numrero de graos)
  • Criar i = 0 (contador)

Do While i < 65 (nao me lembro quantas casas tem o tabuleiro)
i = i + 1

If i = 1
Q = 1

Else , if i > 1
Q = i * 2

Exibir Q

(Fim)

Peço por gentileza a opiniao dos colegas e possiveis erros de logica.
Desde ja agradeço.

4 Respostas

ViniGodoy

Com I*2 você não tem o dobro do quadro anterior. Você tem o dobro do número do quadro atual.
Para obter o dobro do quadro anterior, você precisa multiplicar a quantidade de grãos do quadro anterior por 2.

Ah sim, o tabuleiro de xadrez tem 8x8 casas, num total de 64 casas.

Lembre-se também de colocar um bloco de inicio e fim no seu while.

Por fim, o exercício pede a quantidade de grãos que o monge esperava receber. Isso, na verdade, é apenas a soma de todas as casas. O seu programa mostra a quantidade de grãos por casa.

C

(Inicio)

  • Criar Q = 0 (variavel que armazenara o numero de quadros)
  • Criar i = 0 (contador)
  • Criar g = 1 (variavel que armazena o numero de graos)

(Inicio While)
Do While i <= 64
i = i + 1

If i = 1
Q = “quadro” i “tem” g “grãos”
Else , if i > 1
g = g *2
Q = “quadro” i “tem” g “grãos”
(Fim While)

Exibir Q

(Fim)

[b]Como faço pra exibir o somatorio de graos?

ViniGodoy

Crie uma variável S com valor 0.
Após calcular G, faça:
S = S + G;

Após o while, exiba S.

Você também pode tirar a atribuição de Q para fora do if. Como ela ocorre nas duas etapas, ela pode ficar de fora:

(Inicio)
   - Criar i = 0 (contador)
   - Criar g = 1 (variavel que armazena o numero de graos)
   - Criar s = 0 (variavel que armazena a soma de graos)   
   Do While i <= 64
   (Inicio While)
      i = i + 1
      if i > 1
         g = g *2
      s = s + g;
      Exibir "quadro" i "tem" g "grãos"
   (Fim While)
   Exibir "Serao pagos " + s + " graos.";
(Fim)
C

Caro ViniGodoy,

Sua logica esta correta. Muito obrigrado. Alem disso, acrescentou limpeza na logica.

Segue abaixo teste de mesa:

1  |   2   |    3   |    4  |   5  |   6  |  .....  | 64
________________________________________
i   1      2        3         4      5      6      .....  |
________________________________________
g  1      2        4         8     16     32     .....  |
________________________________________
s  1      3        7        15     31     63     .....  |

Acredito que ficou bem explicado para todos os colegas.

Desde ja agradeço.

Criado 27 de setembro de 2010
Ultima resposta 28 de set. de 2010
Respostas 4
Participantes 2