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.
T<strong>em</strong>os então um programa - certamente um pouco sofisticado - para permutar os conteúdos de duas<br />
variáveis.<br />
Qualquer que seja o tipo de variável apontada por um ponteiro, pode-se "atribuir-lhe" a constante 0<br />
(zero) e pode-se comparar um ponteiro com esta constante. O sist<strong>em</strong>a oferece uma constante simbólica<br />
NULL que pode (e normalmente o é) ser utilizado no lugar do zero para, mn<strong>em</strong>onicamente, indicar mais<br />
claramente que este é um valor especial para um ponteiro. Como ver<strong>em</strong>os daqui por diante, este valor<br />
especial de ponteiro será utilizado para inicializações de ponteiros, para valores de escape de estruturas de<br />
repetição e para retorno de funções quando alguma ação pretendida não é conseguida.<br />
5.5 Passag<strong>em</strong> de parâmetros por referência no Turbo C 2.01<br />
A utilização de ponteiros como parâmetros de funções permite a passag<strong>em</strong> de parâmetros por<br />
referência no Turbo C 2.01. Considere um parâmetro p do tipo ponteiro. Como p armazenará um endereço,<br />
se for passado para p o endereço de uma variável que possa ser apontada por ele, qualquer ação realizada no<br />
ponteiro afetará o conteúdo da variável.<br />
O caso da função Troca(), comentada na seção anterior, poderia ser definida da seguinte forma:<br />
void troca(float *a, float *b)<br />
{<br />
float Aux;<br />
Aux = *a;<br />
*a = *b;<br />
*b = Aux;<br />
}<br />
e suas ativações deveriam ser feitas através de Troca(&x, &y).<br />
5.6 Uma urna eletrônica<br />
A passag<strong>em</strong> de parâmetros por referência também é muito útil quando se pretende que uma função<br />
retorne mais de um valor. Um destes valores pode ser retornado pelo comando return() e os d<strong>em</strong>ais pod<strong>em</strong><br />
ser retornados para variáveis que foram passadas por referência para parâmetros da função.<br />
O ex<strong>em</strong>plo abaixo, uma melhor resposta de um exercício proposto no capítulo anterior, transforma um<br />
computador numa urna eletrônica para a eleição, <strong>em</strong> segundo turno, para a presidência de um certo país, às<br />
quais concorr<strong>em</strong> dois candidatos Alibabá, de número 89, e Alcapone, de número 93, sendo permitido ainda<br />
o voto <strong>em</strong> branco (número 99) e considerando como voto nulo qualquer voto diferente dos anteriores.<br />
A função Confirma() deve retornar dois valores: o primeiro para, no caso de confirmação do voto,<br />
permitir sua contabilização e o segundo para, ainda no caso de confirmação do voto, interromper a estrutura<br />
do while, o que permitirá a recepção do voto seguinte. Observe também a passag<strong>em</strong> por referência do<br />
parâmetro da função ComputaVoto(). Há necessidade de que seja desta forma, pelo fato de que esta função<br />
alterará conteúdos de variáveis diferentes.<br />
#include <br />
#include <br />
#include <br />
#include <br />
/*Função para confirmação do voto*/<br />
int Confirma(char *s, char *p)<br />
{<br />
int r;<br />
char Conf;<br />
printf("Voce votou <strong>em</strong> %s! Confirma seu voto (SN)? ", s);<br />
fflush(stdin);