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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

5. (A, 1), (B, 0).<br />

6. (A, 0), (B, 1).<br />

7. (A, 3), (B, 1).<br />

8. (A, 0), (B, 4).<br />

Outras questões que pod<strong>em</strong> ser levantadas são: há outras soluções? Existe alguma solução que realize<br />

a mesma tarefa com uma quantidade menor de instruções? Para responder a estas questões talvez seja<br />

interessante l<strong>em</strong>brar que 4 = 5 – 1. Significa que, se conseguirmos tirar 1 litro do recipiente de 5 litros<br />

quando ele estiver cheio, resolver<strong>em</strong>os a questão. Para conseguir isto, basta que o recipiente de 3 litros<br />

contenha 2 litros. E para se obter 2 litros? Aí basta ver que 2 = 5 – 3. Pod<strong>em</strong>os então resolver a questão com<br />

o seguinte algoritmo, constituído de apenas seis instruções:<br />

1. Encha o recipiente de 5 litros.<br />

2. Com o conteúdo do recipiente de 5 litros, encha o de 3 litros.<br />

3. Esvazie o recipiente de 3 litros.<br />

4. Transfira o conteúdo do recipiente de 5 litros para o recipiente de 3 litros.<br />

5. Encha o recipiente de 5 litros.<br />

6. Com o conteúdo do recipiente de 5 litros, complete o recipiente de 3 litros.<br />

Após a execução de cada uma das instruções ter<strong>em</strong>os:<br />

1. (A, 0), (B, 5).<br />

2. (A, 3), (B, 2).<br />

3. (A, 0), (B, 2).<br />

4. (A, 2), (B, 0).<br />

5. (A, 2), (B, 5).<br />

6. (A, 3), (B, 4).<br />

Uma outra técnica bastante utilizada é se tentar raciocinar a partir de uma solução conhecida de uma<br />

outra questão. Para compreender isto considere as duas seguintes questões: imagine uma relação de n<br />

números, os quais pod<strong>em</strong> ser referenciados por a i com i = 1, 2, ..., n e queiramos somá-los com a restrição de<br />

que só sab<strong>em</strong>os efetuar somas de duas parcelas. Para resolver esta questão, pod<strong>em</strong>os pensar <strong>em</strong> casos<br />

particulares: se n = 2, basta somar os dois números; se n = 3, basta somar os dois primeiros e somar esta<br />

soma com o terceiro. Naturalmente este raciocínio pode ser reproduzido para n > 3. A questão é que a soma<br />

dos dois primeiros deve estar "guardada" para que se possa somá-la com o terceiro, obtendo-se a soma dos<br />

três primeiros; esta soma deve ser "guardada" para que seja somada com o quarto e assim sucessivamente.<br />

Para isto pod<strong>em</strong>os estabelecer uma referência à soma "atual", a qual será alterada quando a soma com o<br />

el<strong>em</strong>ento seguinte for efetuada. Até para somar os dois primeiros, pode-se pensar <strong>em</strong> somar "a soma do<br />

primeiro" com o segundo.<br />

T<strong>em</strong>os então o seguinte algoritmo:<br />

1. Faça i = 1.<br />

2. Faça Soma = a 1 .<br />

3. Repita n – 1 vezes as instruções 3.1 e 3.2.<br />

3.1. Substitua i por i + 1.<br />

3.2. Substitua Soma por Soma + a i .<br />

Por ex<strong>em</strong>plo: se n = 5 e a 1 = 8, a 2 = 4, a 3 = 9, a 4 = 13 e a 5 = 7, a execução do algoritmo resultaria nas<br />

seguintes ações:<br />

1. i = 1.<br />

2. Soma = 8.<br />

3.1.1. i = 2.<br />

3.2.1. Soma = 8 + 4 = 12<br />

3.1.2. i = 3.<br />

3.2.2. Soma = 12 + 9 = 21.<br />

3.1.3. i = 4.<br />

3.2.3. Soma = 21 + 13 = 34.<br />

3.1.4. i = 5.<br />

3.2.4. Soma = 34 + 7 = 41.<br />

Naturalmente, na execução acima estamos indicando por 3.1.x e 3.2.x a execução de ord<strong>em</strong> x das

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

Saved successfully!

Ooh no, something went wrong!