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.

}<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

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

Saved successfully!

Ooh no, something went wrong!