Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
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;