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.

* Programa para ordenar tres numeros dados*/<br />

#include <br />

main()<br />

{<br />

float x, y, z, Aux;<br />

printf("Digite os tres numeros");<br />

scanf("%f %f %f", &x, &y, &z);<br />

printf("Numeros dados: %f , %f , %f \n", x, y, z);<br />

if ((x > y) || (x > z)) /* verifica se x não é o menor */<br />

if (y < z) /* neste caso y é o menor */<br />

{<br />

Aux = x; /* troca os conteúdos de x e de y */<br />

x = y;<br />

y = Aux;<br />

}<br />

else /* neste caso z é o menor */<br />

{<br />

Aux = x; /* troca os conteúdos de x e de z */<br />

x = z;<br />

z = Aux;<br />

}<br />

if (y > z) /* verifica se z e y ainda não estão ordenados */<br />

{<br />

Aux = y; /* troca o conteúdo de y e de z */<br />

y = z;<br />

z = Aux;<br />

}<br />

printf("Numeros ordenados: %f , %f , %f \n", x, y, z);<br />

}<br />

Observe que uma sequência de comandos com o mesmo objetivo (trocar os conteúdos de duas<br />

variáveis) se repete. Num caso como este poderíamos escrever uma função que realizasse aquela ação<br />

pretendida e, então, esta função seria utilizada para substituir a sequência referida.<br />

Por enquanto t<strong>em</strong>os o seguinte probl<strong>em</strong>a. Se definirmos a função<br />

void Troca(float x, float y)<br />

{<br />

float Aux;<br />

Aux = x;<br />

x = y;<br />

y = Aux;<br />

}<br />

e a executarmos passando as variáveis a e b, apenas os conteúdos de a e de b serão passados para x e para y e<br />

a troca realizada pela função só afeta os conteúdos de x e de y, não modificando os conteúdos de a e de b que<br />

é o que se pretendia. Ou seja, a função Troca recebe apenas os "valores" de a e de b e as ações realizadas<br />

pela função interfere apenas nos parâmetros x e y, não alterando nada <strong>em</strong> relação aos argumentos a e b.<br />

Neste caso, diz<strong>em</strong>os que os parâmetros foram passados por valor.<br />

O sist<strong>em</strong>a Turbo C++ 3.0 oferece a possibilidade de que a execução de uma função altere conteúdos<br />

de variáveis “não locais”. Para isto, no protótipo da função os parâmetros dev<strong>em</strong> ser precedidos de &. Neste<br />

caso, os argumentos para ativação da função têm que ser variáveis e qualquer alteração no conteúdo do<br />

parâmetro se reflete no conteúdo da variável argumento. Diz-se então que a passag<strong>em</strong> dos parâmetros é feita<br />

por referência.<br />

Com este tipo de passag<strong>em</strong> de parâmetro, o programa acima poderia ser escrito da seguinte<br />

forma:<br />

/* Programa para ordenar tres numeros dados*/<br />

#include <br />

void Troca(float &a, float &b)

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

Saved successfully!

Ooh no, something went wrong!