professor: rogériorogério rodrigues de vargasrogerio/material_auxiliar/notas_aula_3a_unidad… ·...

27
U id d Unidade3 Professor: Rogério Rodrigues de Vargas Rogério Rodrigues de Vargas

Upload: others

Post on 16-Aug-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

U id d  Unidade 3Professor: Rogério Rodrigues de Vargas Rogério Rodrigues de Vargas 

Page 2: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Noção de FunçõesA Linguagem C permite que um programa seja escrito como

um conjunto de funções que são executadas a partir de umafunção principal denominada main()função principal denominada main().

Cada função pode conter declarações de variáveis, instruções,ativações de funções de bibliotecas do sistema e ativações deç ç çoutras funções definidas pelo programador.

O objetivo de uma função deve ser a realização de alguma “sub-

Logo, pode-se escrever função para a leitura dos dados deentrada para a saída do programa para a determinação da média

tarefa” específica da tarefa que o programa pretende realizar.

entrada, para a saída do programa, para a determinação da médiade vários elementos, para a troca dos conteúdos de uma variável,para o cálculo do MMC, MDC de dois números.

Normalmente, a realização da “sub-tarefa” para a qual a função foiescrita é chamada de retorno da função.

Page 3: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Noção de FunçõesEntão, pode-se dizer que uma função é uma unidade de

código de programa autônoma criada para cumprir umatarefa específica particulartarefa específica, particular.

Uma das razões principais da existência de funções éimpedir que o programador tenha que escrever o mesmop q p g qcódigo várias vezes, logo pode-se reutilizar funções jáescritas, otimiza-se tarefas, ganha-se tempo.

P f ã é i i i d l á l d iPara usar uma função é preciso primeiro declará-la e depoisdefini-la.

Nenhuma função pode ser chamada por outra função se nãoNenhuma função pode ser chamada por outra função se nãotiver sido primeiro declarada (criada).

A declaração, denominada protótipo da função, informa aocompilador qual o seu tipo de retorno, seu nome e os seusparâmetros, enquanto que a sua definição diz o que ela executa(faz)(faz).

Page 4: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Noção de FunçõesO tóti d f ã é i t ã i ifi lO protótipo da função é uma instrução, o que significa que ele

é encerrado com um ‘;’.Sintaxe:Sintaxe:

<tipo de dado retornado> <identificador> (lista parâmetros);{{

Declaração de variáveis;Seqüência de instruções;return (valor);

}Onde:• o conjunto tipo de dado retornado, identificador da função (listade parâmetros) é chamado protótipo da função;de parâmetros) é chamado protótipo da função;•<Tipo de dado> é int, char, float ou um dos seus “múltiplos”quando a função deve retornar um valor específico e void se aq ç pfunção deve realizar uma ação genérica sem retornar um valordefinido;

Page 5: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Noção de Funções•<identificador> é o nome dado a função pelo programador,sempre relacionado ao que ela faz para facilitar suas atribuições;•A <lista parâmetros> é um conjunto de variáveis utilizadas paraa função receber os valores para os quais a função deve serexecutada; estes valores são chamados argumentos queexecutada; estes valores são chamados argumentos, que,comparando uma função com um programa, constituem dadosde entrada da função; uma lista de todos os parâmetros e seusrespectivos tipos separados por ‘,’. Entre os parâmetros, o nomee o tipo de retorno devem ter compatibilidade entre a definição ea declaração da funçãoa declaração da função.•Na declaração de variáveis são declaradas as variáveis que asintruções da função vão manipular internamente. Estas variáveis(e os parâmetros) da função só são acessíveis pelas instruções dafunção e, por esta razão, são chamadas variáveis locais.

Page 6: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

f i b d

Desenvolvimento de FunçõesUma função consiste em um subprograma que pode atuar

sobre dados e retornar um valor. Todo programa em C tem pelomenos uma função (a main) que pode chamar outras funções,menos uma função (a main) que pode chamar outras funções,algumas das quais, podem ainda chamar outras e assim pordiante.

Toda função tem seu próprio nome, e quando este nome éencontrado a execução do programa é desviado para o corpo daf ã Q d l t ã li hfunção. Quando ela retorna, a execução recomeça na linhaseguinte a chamada da função.

main( ){

função1{ função2

f 3{instrução;função1( );instrução;

instrução;return;

}

{instrução;função3( );

função3{

instrução;tinstrução;

função2( );}

return;}

return;}

Page 7: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Desenvolvimento de FUNÇÕESA definição de uma função é iniciada pelo seu cabeçalho,

que consiste no protótipo da função, com nome(s),q p p ç , ( ),obrigatoriamente, para o(s) parâmetro(s) e sem o ‘;’ no final.Iniciasse o corpo da função com a abertura de ‘{‘ e encerrassecom o fechamento ‘}’com o fechamento } .

Não é necessário que uma função apresente parâmetros,porém os parênteses tem que existirem – ‘(‘ e ‘)’.p p q ( )

Exemplo: Tem que ter ‘;’

long int Area (int largura, int altura); // protótipo (declaração)long int Area (int lagura int altura) // definição (corpo)long int Area (int lagura, int altura) // definição (corpo){

return (largura * altura);}

Page 8: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Desenvolvimento de FUNÇÕES

FUNÇÃO main – (revisão)( )

Por ser também uma função main deve atender asPor ser também uma função, main deve atender asespecificações de sua representação, onde ela especifica umtipo de valor de retorno, um nome e uma “lista det po de va o de eto o, u o e e u a sta deparâmetros”.

A ausência do tipo de retorno configura que o retorno édo tipo padrão, ou seja, inteiro (int) e nela pode existir umcomando return que a encerra.

Page 9: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Declaração de Variáveis

• Variáveis locais são internas as funções ou blocos• Variáveis locais são internas as funções ou blocos.• Parâmetros formais são parâmetros de funções.• Variáveis globais estão fora de todas as funçõesVariáveis globais estão fora de todas as funções.

Variáveis LocaisVariáveis Locais

• Só podem ser referenciadas dentro da função ou nobloco onde foram declaradasbloco onde foram declaradas

• Só existem dentro do bloco de instrução onde foramdeclaradas quando este estiver sendo executado (pilha)declaradas, quando este estiver sendo executado (pilha)

• Elas podem ser declaradas no início de qualquer blocode instrução e não somente no início das funções

Page 10: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

TIPOS DE OBJETOSParâmetros Formais

Sã iá i b l d t• São variáveis que recebem os valores dos argumentosdas funções e devem ser do mesmo tipo.

• Comportam-se como qualquer outra variável localComportam-se como qualquer outra variável localdentro de uma função.

Variáveis Globais

• São reconhecidas dentro de todo o contexto onde• São reconhecidas dentro de todo o contexto ondeforam declaradas.

• Estão declaradas fora das funções.Estão declaradas fora das funções.• São armazenadas em área específica da memória

(devendo ser evitadas).

Page 11: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Desenvolvimento de FUNÇÕESTarefas complicadas devem ser divididas em múltiplas

funções para que possam ser chamadas uma a uma. Isso torna ocódigo mais fácil de entender e mantercódigo mais fácil de entender e manter.

parâmetros – argumentos formaisargumentos – argumentos reais }programadores usam estes

termos indistintamenteargumentos argumentos reais

Variáveis Globais

}As variáveis definidas fora das funções tem um escopo

global e portanto podem ser acessadas a partir de qualquerf ã d (i l i i ) E C ++ t ti dfunção do programa (inclusive a main). Em C ++ este tipo devariável é evitada pelo fato de que tornam o código confuso e dedifícil manutenção.ç

As variáveis globais, quando forem extremamentenecessárias, devem ser declaradas em apenas um arquivo ( .cpp)

d t ( t ) te usadas como externas (extern) nos outros.

Page 12: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Desenvolvimento de FUNÇÕESCOMANDO return

As funções retornam um valor ou void (nenhum valorç (definido). Para que elas retornem um valor, insira a palavrareservada return seguida pelo valor que se deseja retornar, sendoele do mesmo tipo definido na funçãoele do mesmo tipo definido na função.

Exemplo:5return 5;

return (X > 5);return (Outra( ) );

É sempre interessante retornar um valorcompatível para uma função que não sejado tipo void, que na linguagem C caractereturn (Outra( ) );

Com return a execução do programa retorna imediatamentef l l h d l i

p , q g griza um procedimento (função sem retorno)

para a função responsável pela chamada, e qualquer instruçãoque esteja após o return não é executada.

ÉTadeu Freire Pontes 12

É permitido mais que um return em uma função, mas uma vezque um deles seja executado a função é encerrada.

Page 13: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Primeiro Exemplo de Funções•Veja o exemplo para calcular a raiz quadrada de umnúmero(sem utilizar função).#include<stdio.h>#include<conio.h>#include<math h>#include<math.h>main(){float x, result;

i tf("Di it ")printf("Digite os numeros:");scanf("%f",&x);result=sqrt(x);printf("A raiz e %.2f\n",result);

Sub-tarefa

getch();}

Tadeu Freire PontesTadeu Freire Pontes 13

2º sem/05 Tadeu Freire Pontes

Page 14: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Exemplos de Funções•Veja o exemplo para calcular a raiz quadrada de umnúmero(utilizando função).#i l d di h#include<stdio.h>#include<conio.h>#include<math.h>float raiz( float num) /* definção da função*/{float res; /* declaração de variável local da função*/res=sqrt(num); /* calculo da raiz - sub-tarefa*/return res; /* retorno da função*/return res; / retorno da função /

}

i ()main(){float x,result;printf("Digite os numeros:");p ( g )scanf("%f",&x);result=raiz(x);printf("A raiz e %.2f\n",result);

getch();getch();}

Page 15: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Exemplos de Funções

#include<stdio h>#include<stdio.h>#include<conio.h>#include<math.h>float raiz( float num){{float res;res=sqrt(num);return res;

Há um desvio do função principal paraa função específica, quando o MAINencontra a função raiz passa o valor de

}

main(){

x para a posição de memória que num(variável de entrada da função) ocupaquando foi criada. – ISSO É QUE SECHAMA PASSAGEM DE

Â{float x,result;printf("Digite os numeros:");scanf("%f",&x);

l i ( )

PARÂMETROS.

result=raiz(x);printf("A raiz e %.2f\n",result);

getch();}

Page 16: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Exemplos de Funções•Veja o exemplo para calcular o máximo divisor comum entredois números (sem utilizar função).#include<stdio.h>#include<conio.h>main(){{

int x,y,a,b,mdc,resto;printf("Digite os dois inteiros:");

f("%d%d" & & )scanf("%d%d",&x,&y);a=x; b=y; resto = a % b;resto = x % y;while(resto !=0){a=b;b=resto;resto= a % b;resto a % b;

}mdc=b;printf("mde(%d,%d) = %d\n",x,y,mdc);

h()getch();}

Page 17: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Exemplo com Funçõesint maxdivcom(int x, int y) /* prototipo da funcao*/{int resto; /* variaveis locais da funcao*/resto = x % y;resto x % y;while(resto !=0) /*estrutura de repeticao*/{ /*inicio do bloco da estrutura*/x=y;y=resto;resto= x % y;

} /*fim do bloco da estrutura*/return(y);return(y);

}#include<stdio.h>#include<conio.h>main(){int mde,a,b;printf("Digite os dois inteiros:");printf( Digite os dois inteiros: );scanf("%d%d",&a,&b);mde=maxdivcom(a,b);printf("mde(%d,%d)=%d\n",a,b,mde);

h()getch();}

Page 18: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Exemplosint soma(int x, int y) /* prototipo da funcao*/{i t /* i i l i d f */int res; /* variaveis locais da funcao*/res = x + y;return res;

}#include<stdio.h>#include<conio.h>main(){int resp,a,b;int resp,a,b;printf("Digite os dois inteiros:");scanf("%d%d",&a,&b);resp=soma(a b);resp=soma(a,b);printf("A soma de %d e %d = %d\n",a,b,resp);

getch();}}

Page 19: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Exemplosfloat funcmedia(float x, float y, float z) /* prototipo da funcao*/{float media; /* variaveis locais da funcao*/;

media=(x+y+z)/3;return media;return media;

}#include<stdio.h>#include<conio h>#include<conio.h>

main(){{float resp,a,b,c;printf("Digite as tres notas:");scanf("%f%f%f",&a,&b,&c);resp=funcmedia(a,b,c);printf("A media entre %0.f , %0.f e %0.f = %0.f\n",a,b,c,resp);p ( p)

getch();}

Page 20: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

d i i f i bDesenvolvimento de FUNÇÕES

Pode-se passar variáveis para a função, assim como tambémpode-se declarar variáveis locais dentro do corpo da função.Estas variáveis recebem esta denominação porque só existemEstas variáveis recebem esta denominação porque só existemdentro da função, pois quando a função retorna (ou termina) elasdeixam de estar disponíveis.

Os parâmetros passados para a função também sãoconsiderados variáveis locais. Por exemplo:

#include<stdio.h>float Converter(float TEMPFAR); // protótipoint main( )

// Definição do corpo da funçãofloat Converter(float TEMPFAR){a ( )

{ float TEMPFAR,TEMPCEL;printf(“Temp.em Fahrenheit: ”);

f(“%f” &TEMPFAR)

{float TEMPCEL;TEMPCEL=((TEMPFAR–32)*5)/9;

scanf(“%f”,&TEMPFAR);TEMPCEL = Converter(TEMPFAR);printf(“Em Celsius %f”, TEMPCEL);

(( ) ) ;return TEMPCEL;

}p ( , );return 0;

}

Page 21: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Desenvolvimento de FUNÇÕESExemplo:/* Síntese ... */#i l d < tdi h>

float Converter(float F){

#include<stdio.h>

// declarações

{float CEL;CEL = ((F – 32) *5) 9;return CEL;

float Converter(float F); // protótipo

int main( )

return CEL;}

• A variável passada por parâmetroint main( ){

float TEMPFAR;

• A variável passada por parâmetropossui um endereço diferente esomente vai existir enquanto af ã ti d t d Éfloat TEMPCEL;

printf(“Temp.em Fahrenheit: ”);scanf(“%f” &TEMPFAR);

função estiver sendo executada. Éfeita uma cópia da variável e a cópiaé usada pela função;scanf( %f ,&TEMPFAR);

TEMPCEL=Converter(TEMPFAR);printf(“Em Celsius %f”,TEMPCEL);

• F poderia ter ainda outro nome,FAR por exemplo, alterando toda af ãreturn 0;

}função.

Page 22: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Desenvolvimento de FUNÇÕESFunção como parâmetro de outra Função

Embora seja possível, isto pode dificultar a leitura e aj p , pdepuração do código. Por exemplo:

RESPOSTA = (Dobro(Quadrado(Raiz(VALOR)));

Mudanças feitas nos argumentos não afetam os valores dafunção de chamada, pois é feita uma cópia local para cadaargumento. Essa cópia é tratada como uma outra variávelqualquer. Esta forma de passagem de parâmetro recebe o nomede “argumento por valor” (ou passagem por valor).de argumento por valor (ou passagem por valor).

O argumento por referência acontece quando é copiado oendereço do argumento para o parâmetro (passando um ponteiroendereço do argumento para o parâmetro (passando um ponteiropara o argumento). Com isso, as alterações efetuadas sobre oparâmetro afetaram também o valor da variável usada nah d d f ã S á i t i f t t i ãchamada da função. Será visto mais a frente que os ponteiros são

passados para as funções como qualquer outra variável.

Page 23: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Desenvolvimento de FUNÇÕESPARÂMETROS PADRÃO

Quando uma função possui algum parâmetro (na suadefinição ou no protótipo) a função de chamada deve passar umdefinição ou no protótipo) a função de chamada deve passar umvalor quando a chamar, a menos que ela tenha um valor padrão.Um valor padrão é um valor a ser usado caso nenhum valor sejaf id (i f d )fornecido (informado).Exemplo: long int Testar(int X = 10); // protótipo

O cabeçalho da função não é alterado pela definição padrão.Exemplo: long int Testar(int X)

{ ...

}

Page 24: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Desenvolvimento de FUNÇÕESQuando uma função possui um valor padrão todos os

parâmetros posteriores desta função deverão ter parâmetrosp p ç ppadrões definidos.

Exemplo: long int Testar(int PAR1, int PAR2=9, int PAR3=7);

long int Testar(int PAR1 int PAR2 int PAR3 5);long int Testar(int PAR1, int PAR2, int PAR3=5);

long int Testar(int PAR1=3, int PAR2=5, int PAR3=7);

Só poderá ser atribuído um parâmetro padrão a PAR2 sep p patribuir a PAR3 e a atribuição poderá ser feita a PAR1 se foratribuído a PAR2 e PAR3.

Page 25: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Desenvolvimento de FUNÇÕESSOBRECARREGANDO FUNÇÕES

Em C++ é permitido criar uma função com o mesmo nome,sobrecarregando-a. Isto é permitido diferenciando a lista deg pparâmetros em relação aos seus tipos ou quantidades (ou ambos).

Exemplo: int Testar(int int);Exemplo: int Testar(int , int);

int Testar(long , long);

int Testar(long);

Os tipos de retorno podem ser iguais ou diferentes em umafunção sobrecarregada, desde que a lista de parâmetros sejadiferentediferente.

Page 26: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Exercício PropostoElabore um programa que acione uma função que apresente asopções de menu com as seguintes concessionárias de veículos:FIAT CHEVROLET e FORD Solicite ao usuário qual dasFIAT, CHEVROLET e FORD. Solicite ao usuário qual dasopções ele deseja verificar os carros disponíveis. Identifique quala opção escolhida e apresente as respectivas opções dos carrosdisponíveis, conforme as listas descritas abaixo. A concessionáriaescolhida deverá acionar outra função que apresentará somente osveículos disponíveis da marca especificada. Para cadaveículos disponíveis da marca especificada. Para cadaconcessionária deverá existir uma função específica com os carrosdisponíveis. Após identificar o carro escolhido pelo usuário,

t t d j l li dapresente no centro de uma janela limpa uma mensagem deagradecimento e o nome do carro escolhido.

FIAT CHEVROLET FORDFIAT CHEVROLET FORDUno Vectra Escort EsquemaTempra Astra Pampa de funçõesp p

- Silverado Ranger

Page 27: Professor: RogérioRogério Rodrigues de Vargasrogerio/material_auxiliar/notas_aula_3a_unidad… · função1( ); instrução; instrução; return;} {instrução; função3( ); função3

Referências Bibliográficas

Apresentação extraída e modificada de:Apresentação extraída e modificada de:

www.cepceilandia.df.gov.br/sites/200/296/00000561.ppt

Junho de 2008 Rogério Rodrigues de Vargas 27