Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
Aprendendo a Programar Programando em Linguagem C - FSM
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
}<br />
while (Sim != 's');<br />
printf("Outro eleitor (S/N)? ");<br />
fflush(stdin);<br />
scanf("%c", &Cont);<br />
}<br />
while (toupper(Cont) == 'S');<br />
Eleitores = Alibaba + Alcapone + Brancos + Nulos;<br />
printf("Total de eleitores %d \n Alibaba %d \n Alcapone %d \n Brancos %d \n Nulos %d", Eleitores,<br />
Alibaba, Alcapone, Brancos, Nulos);<br />
}<br />
O arquivo de cabeçalhos dos.h contém as funções sound(n), nosound() e delay(n). A primeira <strong>em</strong>ite<br />
um som de frequência n hertz; a segunda interrompe a <strong>em</strong>issão de som e a terceira suspende a execução do<br />
programa por n milissegundos.<br />
A razão da chamada da função fflush() é a seguinte. Em alguns sist<strong>em</strong>as, quando algum dado de<br />
entrada é digitado para execução da função scanf(), os compiladores C não o armazena diretamente na<br />
posição de m<strong>em</strong>ória respectiva, armazenando-o inicialmente numa região chamada buffer para, ao final da<br />
execução da função de leitura transferir o conteúdo do buffer para a m<strong>em</strong>ória. Se quando da execução de<br />
uma função de leitura o conteúdo do buffer não estiver vazio, é este conteúdo (naturalmente, indesejado) que<br />
será armazenado na variável. A ativação de fflush(stdin) "descarrega" todo o buffer dos dados digitados no<br />
teclado e assim a função de leitura aguardará que o dado realmente pretendido seja digitado. É prudente,<br />
portanto, preceder leituras de caracteres e de cadeias de caracteres pela chamada de fflush(stdin).<br />
Observe que um ponteiro do tipo char é capaz de “armazenar” uma cadeia de caracteres (mais detalhes<br />
no capítulo 8). Observe também que utilizamos inicializações sucessivas no comando Alibaba = Alcapone =<br />
Nulos = Brancos = 0. Esta forma de inicializar variáveis também é válida, mas não será muito utilizada neste<br />
livro.<br />
Para concluir (por enquanto) o estudo de ponteiros, vale ressalvar que, sendo variáveis capazes de<br />
receber endereços (portanto, valores do tipo int) pode-se somar e subtrair ponteiros. No capítulo 7, ver<strong>em</strong>os<br />
um ex<strong>em</strong>plo onde isto será útil.<br />
5.7 Recursividade<br />
Algumas funções mat<strong>em</strong>áticas pod<strong>em</strong> ser estabelecidas de tal forma que as suas definições utiliz<strong>em</strong>,<br />
de modo recorrente, a própria função que se está definindo. Um ex<strong>em</strong>plo trivial (no bom sentido) de um caso<br />
como este é a função fatorial. No ensino médio aprend<strong>em</strong>os que o fatorial de um número natural n é o<br />
produto de todos os números naturais de 1 até o referido n, ou seja, n! = 1 . 2 . 3 . ... . n. Como mostra o<br />
ex<strong>em</strong>plo abaixo, é muito simples se escrever uma função (função iterativa) que calcule o fatorial de n: basta<br />
se inicializar um variável com 1 e, numa estrutura de repetição, calcular os produtos 1 x 2 = 2, 2 x 3 = 6; 6 x<br />
4 = 24; 24 x 5 = 120; ...; etc., até multiplicar todos os naturais até n.<br />
long int Fatorial(int n)<br />
{<br />
long int Fat;<br />
int i;<br />
Fat = 1;<br />
for (i = 2; i 1