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.
encontrado, o que, evident<strong>em</strong>ente, vai prejudicar a performance do programa. Isto pode ser contornado pois<br />
os compiladores C permit<strong>em</strong> que uma variável de controle de um comando for tenha o seu conteúdo alterado<br />
dentro do próprio comando. Com isto, o programa acima ficaria da seguinte forma.<br />
#include <br />
main()<br />
{<br />
int Num, i, Divisor;<br />
printf("Digite um número inteiro: ");<br />
scanf("%d", &Num);<br />
Divisor = 0;<br />
for (i = 2; i < Num; i = i + 1)<br />
if (Num % i == 0)<br />
{<br />
Divisor = i;<br />
i = Num;<br />
}<br />
if (Divisor != 0)<br />
printf("%d e' divisor próprio de %d \n", Divisor, Num);<br />
else<br />
printf("%d não t<strong>em</strong> divisores próprios \n", Num);<br />
}<br />
Nesta versão, quando o primeiro divisor próprio é encontrado, o comando i = Num; faz com que a<br />
execução do comando for seja interrompida. A prática de encerrar um comando for através da alteração do<br />
conteúdo da variável de controle não será aqui incentivada pelo fato de que isto desestrutura o programa,<br />
dificultando sua legibilidade. Além disso, há situações <strong>em</strong> que não se pode conhecer o número máximo de<br />
repetições de uma estrutura de repetição. Na verdade, a questão central é que o comando for deve ser<br />
utilizado quando o número de repetições de execução de uma sequência de comandos é conhecido a priori.<br />
Quando isto não acontece (que é o caso do ex<strong>em</strong>plo anterior: não se sabe a priori se e quando um divisor<br />
próprio vai ser encontrado), deve-se usar o comando while, que possui a seguinte sintaxe:<br />
while (Expressão)<br />
{<br />
Sequência de comandos<br />
}<br />
sendo os delimitadores opcionais se a sequência possui um só comando (como acontece nas outras<br />
estruturas de repetição).<br />
A s<strong>em</strong>ântica deste comando é óbvia: a sequência de comandos é executada enquanto o valor da<br />
Expressão for diferente de zero. Naturalmente, pode ocorrer que a sequência de comandos não seja<br />
executada nenhuma vez, isto ocorrendo se o valor da Expressão for igual a zero quando da "primeira"<br />
execução do comando (o teste é feito antes da execução da sequência de comandos). Por outro lado, é<br />
necessário que um dos comandos da sequência de comandos altere conteúdos de variáveis que aparec<strong>em</strong> na<br />
Expressão de modo que <strong>em</strong> algum instante ela se torne igual a zero. Do contrário, a sequência de comandos<br />
terá sua execução repetida indefinidamente, o programa nunca termina e, evident<strong>em</strong>ente, não executa a tarefa<br />
para a qual foi desenvolvido. Quando isto acontece é comum se dizer que o programa está <strong>em</strong> looping.<br />
Com o comando while as questões levantadas acima sobre o programa para determinar um divisor<br />
próprio de um inteiro dado são resolvidas e t<strong>em</strong>os o seguinte programa:<br />
/*Programa que determina o menor divisor próprio de um inteiro */<br />
#include <br />
#include <br />
main()<br />
{<br />
int Num, d, Met;<br />
printf("Digite o numero: ");<br />
scanf("%d", &Num);<br />
Met = Num/2;<br />
d = 2;