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

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);

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

Saved successfully!

Ooh no, something went wrong!