22.10.2014 Views

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

7. orig<strong>em</strong> → destino<br />

Observe que os três movimentos iniciais transfer<strong>em</strong> dois discos da torre orig<strong>em</strong> para a torre auxiliar,<br />

utilizando a torre destino como auxiliar; o quarto movimento transfere o maior dos discos da orig<strong>em</strong> para<br />

destino e os últimos movimentos transfer<strong>em</strong> os dois discos que estão na auxiliar para destino utilizando<br />

orig<strong>em</strong> como torre auxiliar.<br />

Assim, a operação Move(3, orig<strong>em</strong>, auxiliar, destino) - move três discos da orig<strong>em</strong> para destino<br />

usando auxiliar como torre auxiliar - pode ser decomposta <strong>em</strong> três etapas:<br />

1) Move(2, orig<strong>em</strong>, destino, auxiliar) - move dois discos de orig<strong>em</strong> para auxiliar usando destino<br />

como auxiliar;<br />

2) Move um disco de orig<strong>em</strong> para destino<br />

3) Move(2, auxiliar, orig<strong>em</strong>, destino) - move dois discos de auxiliar para destino usando orig<strong>em</strong> como<br />

auxiliar.<br />

O interessante é que é fácil mostrar que este raciocínio se generaliza para n discos, de modo que a<br />

operação Move(n, a, b, c) pode ser obtida com as seguintes operações:<br />

1) Move(n-1, a, c, b)<br />

2) Move um disco de a para c<br />

3) Move(n-1, b, a, c)<br />

O mais interessante ainda é que isto pode ser impl<strong>em</strong>entado <strong>em</strong> C, através do seguinte programa:<br />

/* Programa que impl<strong>em</strong>enta o jogo Torre de Hanoi*/<br />

#include <br />

void MoveDisco(char t1[10], char t2[10])<br />

{<br />

printf("%s --> %s \n", t1, t2);<br />

}<br />

void Hanoi(int x, char o[10], char a[10], char d[10])<br />

{<br />

if (x > 0)<br />

{<br />

Hanoi(x - 1, o, d, a);<br />

MoveDisco(o, d);<br />

Hanoi(x - 1, a, o, d);<br />

}<br />

}<br />

main()<br />

{<br />

int n;<br />

printf("Digite o numero de discos \n");<br />

scanf("%d", &n);<br />

Hanoi(n, "orig<strong>em</strong>", "auxiliar", "destino");<br />

}<br />

5.8 Usando funções de outros arquivos<br />

Os compiladores C permit<strong>em</strong> que um programa utilize funções definidas <strong>em</strong> outros programas. Basta<br />

que o referido programa seja incluído na instrução #include "NomeArquivo". Por ex<strong>em</strong>plo, imagine que a<br />

declaração de variáveis e a função abaixo<br />

#include <br />

int x, y;<br />

int MaxDivCom(int a, int b)<br />

{<br />

int Resto;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!