Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

Algoritmos Computacionais

No description
by

Onezimo Cardoso

on 6 October 2014

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of Algoritmos Computacionais

Algoritmos Computacionais
Aula 07



Professor Onézimo Cardoso
Objetivos
Funções e procedimentos em C;
Cabeçalho e corpo de uma função;
Parâmetro;
Passagem de parâmetros de tipos básicos;
Valor de retorno (
return
);
O "tipo" void
Protótipos de funções
Variáveis Locais;
Utilizamos constantemente funções
printf, scanf, getchar
, as quais fazem parte da biblioteca standard de C;

Nesta aula veremos a escrita de funções, passagem de parâmetros e retornos;

A declaração de diversar funções em C, denomina-se
modularização
ou
programação modular
;
Exemplo
Escreva um programa que coloque na tela a saida a seguir, escrevendo a linha de 20 asteriscos através de um laço for:
Como se pode observar, o conjunto de código utilizado para escrever uma linha de asteriscos na tela, aparece três vezes;
O ideal seria escrever esse trecho de código apenas uma única vez e invocá-lo sempre que necessário;
Solução

MODULARIZAÇÃO
Exemplo
Escreva um programa que coloque uma linha com 20 asteriscos na tela;
O programa anterior coloca na tela uma linha com 20 asteriscos;

Foi implementado como sendo a função
main
vamos chamá-lo
linha
;
Se tentarmos criar um executável com esse código, vamos obter um erro de
linkagem
;

Note que a função
main
não se encontra presente no programa;
O que fizemos foi escrever o código responsável pela colocação de uma linha na tela;

O fato da função existir, não quer dizer que ela venha a ser executada;

Um paralelo é o fato de um restaurante que possui um cardápio, embora só sirva os pratos solicitados pelos clientes;
É a função
main
ou qualquer função por ela invocada que terá que solicitar os serviços dessa função;

Isso é realizado escrevendo o nome da função com os respectivos parênteses, tal como faríamos para a função
printf, scanf
ou qualquer outra;
Dessa forma o programa anterior pode ser escrito da seguinte forma:

Pelo código apresentado, o programa possui duas funções escritas no mesmo arquivo;

A função
main
é responsável por iniciar o programa e executar todas as instruções presentes no seu interior;

A função linha é responsável por escrever uma linha na tela;

Assim, sempre que pretendermos escrever uma linha na tela bastará invocar a função linha, evitando escrever sempre todo o código que esta executa;
Esse tipo de abordagem tem muitas vantagens;

Uma das principais é que se por algum motivo for necessário alterar a linha da tela (substituir '*' por '-' ou escrever 30 caracteres em vez de 20), bastará alterar apenas uma vez o código respectivo na função
linha
;
OBSERVAÇÃO
As variáveis declaradas dentro de um Bloco são locais a esse Bloco, não sendo conhecidas fora dele;

Notar que a variável
i
declarada em ambas as funções é local a cada uma das funções;

Isso quer dizer que são variáveis diferentes que se encontram escritas na função
main
e na função
linha
, embora o nome da variável seja igual;
EXEMPLO
Escreva um programa que, recorrendo a três funções distinas escreva na tela a seguinte saída:

***
*****
*******
*****
***
Para a realização do programa anterior, escrevemos quatro funções:

linha3x
: escreve três asteriscos na tela;

linha 5x
: escreve cinco asteriscos na tela;

linha 7x
: escreve sete asteriscos na tela;

main
: função que invoca as funções;
Se olharmos com alguma atenção para o código das três funções, verificaremos que eles são iguais, exceto nas seguintes linhas:
Que correspondem ao número de asteriscos a serem apresentados na tela;
O ideal seria escrever uma única função
linha
, responsável pela escreita de uma linha na tela, com um número de asteriscos específicos em cada chamada;

linha(3)
: Escreve três asteriscos;

linha(5)
: Escreve cinco asteriscos;

linha(7)
: Escreve sete asteriscos;

A função é sempre a mesma (
linha
), o que muda é o número de caracteres para serem colocados na tela
No programa anterior, a
main
passaria a ser:
Como seria então escrita a função
linha
A função linha recebe dentro de parênteses um valor do tipo inteiro, o qual terá que ser colocado numa variável;

Depois de armazenado o valor, o laço da função linha terá que executar o número de vezes que está armazenado nessa variável
Parâmetros
A comunicação com uma função se faz através dos
argumentos
que lhe são enviados e dos
parâmetros
presentes na função que os recebe;

O número de parâmetros de uma função pode variar de acordo com as necessidades do programador;

Cada função necessita, no entanto, saber qual o tipo de cada um dos parâmetros;
Parâmetros
Os parâmetros de uma função são separados por vírgula, e é absolutamente necessário que para cada um deles seja indicado o seu tipo;
No exemplo seguinte, a
funcao
recebe três parâmetros que ela armazena em três variáveis denominadas
ch
(do tipo
char
),
n
(do tipo
int
) e
x
(do tipo
float
);
OBSERVAÇÃO
O número de parâmetros enviados para uma função deve ser igual ao número de parâmetros existente no cabeçalho da função;

O tipo dos parâmetros deve igualmente corresponder, parâmetros a parâmetro;
EXERCÍCIO
Altere o programa anterior de forma que a função linha escreva qualquer caractere, e não apenas o caractere asterísco;
Adicionar um novo parâmetro à função permite-nos escrever uma linha com qualquer caractere que teremos de passar a adicionar na chamada da função;

O nome das variáveis (parâmetros) presentes no cabeçalho de uma função é totalmente independente do nome das variáveis que lhe serão enviadas pelo programa que a invoca;
Sempre que uma função é invocada pelo programa, o corpo da função é executado, instrução a instrução, até terminar o corpo da função ou até encontrar a instrução
return
, voltando imediantamente ao programa em que foi invocada;
Return
A função return permite terminar a execução de uma função e voltar ao programa que a invocou;

A execução da instrução return na função main faz com que o programa termine
É possível que uma função seja responsável por realizar uma determinada tarefa e que, uma vez terminada essa tarefa, devolva
UM ÚNICO
resultado;

A devolução de um resultado é feita através da instrução
return
;








A devolução desse resultado é feita através da instrução
return
;
Exemplo
Escreva um programa modularizado que solicite dois números ao usuário e apresente na tela o resultado da sua soma e o dobro de cada um deles;
O tipo
void
Em C existe uma palavra reservada -
void
- que permite indicar que uma função não devolve qualquer tipo;

Poderíamos então termos escritos a função linha anterior como:
É habitual também encontrarmos a palavra reservada void para indicar que uma função não recebe qualquer parâmetro;

Os dois trechos a seguir, são portanto equivalentes:








Uma função que retorna
void
é chamada normalmente de procedimento;
Onde Colocar as Funções
Em C, as funções podem ser colocadas em qualquer local do arquivo, antes ou depois de serem invocadas, antes ou depois da função
main
;

Existe entretanto uma restrição que deve ser levada em conta;

Para analisá-la, vamos observar o seguinte programa:
Embora o código esteja formalmente bem escrito, vamos obter um erro de compilação semelhante a "
function linha: redefinition
";

Como será possível que a função linha esteja redefinida, se ela é escrita apenas uma vez (linhas 10 a 16)?

Estando a função
linha
, definida após a função main, o compilador só sabe qual é o seu cabeçalho quando a compila;

A função linha é invocada pela função
main
. Como no momento em que a função
main
é compilada o compilador ainda não a conhece, este cria um protótipo (cabeçalho) para a função
linha
semelhante a
int linha
();

Sempre que no cabeçalho de uma função não é colocado o tipo de retorno, este é substituído pelo tipo
int
;

Quando a função
linha
( com cabeçalho
void linha
()

) é encontrada pelo compilador, este deduz que se tratam de de duas funções distinas (pois devolvem tipos diferentes) mas com o mesmo nome, por isso apresenta o erro;
Como resolver esse problema
A solução é indicar ao compilador qual o cabeçalho da função, fazendo a declaração da mesma forma que se declaram as variáveis;

A declaração da função consiste então na escrita do seu cabeçalho seguida de um ponto-e-vírgula (;), e deve ser realizada antes da utilização da função que se quer declarar;

Tradicionalmente, a declaração é realizada imediatamente após os
#includes
;
Variáveis Locais
As variáveis podem ser declaradas dentro do corpo da função;

Nesse caso, essas variáveis são
visíveis
(conhecidas) apenas dentro da própria função, por isso são denominadas
variáveis locais
.

Se uma mesma variável for declarada em duas funções distintas, não haverá problema, pois o compilador sabe qual utilizar em cada uma delas;

Apesar de terem o mesmo nome, são variáveis distintas sem qualquer relação, já que depois de terminada a execução de uma determinada função, todas as suas variáveis locais são apagadas;
Full transcript