39
CIn.ufpe.br Computação Eletrônica Funções e Escopo de Variáveis Prof: Luciano Barbosa

Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

ComputaçãoEletrônicaFunçõeseEscopodeVariáveis

Prof:LucianoBarbosa

Page 2: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

DividirparaConquistar

pow(base,expoente)

fatorial(número)

Page 3: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

DividirparaConquistar•  Dividirumproblemaemsubproblemasmaissimples•  Ospassosparaissosão:

1.  Divisãodoproblemaemsubproblemas;2.  Soluçãodecadaumdossubproblemas;3.  Composiçãodassoluçõesdossubproblemasparasolucionaro

problemaoriginal.

•  Chamadodeprogramaçãomodular

Page 4: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

ProgramaçãoModular•  Vantagens:

–  Módulospodemserescritosumavezapenasereutilizadossemprequenecessário

–  Módulospodemsercompostosparasolucionarproblemascadavezcomplexos

–  Facilitaamanutenção:umerrocorrigidoemummódulorefleteemtodososlugaresondeessemóduloéutilizado;

Composição

Page 5: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

MódulosemC-Funções•  Função:conjuntodeinstruçõespararealizarumaoumais

tarefasquesãoagrupadasemumamesmaunidadeequepodeserreferenciada

pow(base,expoente)

fatorial(número)

Page 6: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

FunçõesemC•  Paracriação,énecessárioinformar:

–  Tipodasentradas(parâmetros):tiposdedadosdosdadosquesãonecessáriosparaexecutarsuafunção(opcional);

–  Tipodasaída:tipodedadosdoresultadodoprocessamento(opcional);–  Processamento:transformaasentradasnasaídadesejada;–  Nome:umidentificador(seguindoasregrasparacriaçãode

identificadoresparavariáveis).

g

Entrada

Nome:g

Processamento

Saída

Page 7: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

ExemplodaSintaxe

Nomedafunção:“segundoGrau”

Tipodedadosdasaída(retorno):float

Entradaseseustipos:1ºparâmetro:floatx2ºparâmetro:floata3ºparâmetro:floatb4ºparâmetro:floatc

Processamento“corpodafunção”

Retornarparaasaídaoresultadodoprocessamento

Page 8: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

ExemplodeUtilização

Declaraçãodafunção“segundoGrau”

Chamadadafunçãocompassagemdosargumentos

Nota:argumentoéonomedadoaosvalorespassadosparaosparâmetrosdeumafunção.

Page 9: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

ExemplodeUtilização•  Oprogramaanteriorequivalea:

Note que “main” é também umafunção. Todo programa em C éumafunçãoquedeveretornarumcódigo inteiro. Valor zero paraestecódigoindicaqueoprogramaterminou sem erros, qualqueroutro valor indica um código deerrocomsignificadodefinidopeloprogramador.

Page 10: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

Ocomandoreturn•  Funçõesqueretornamvaloresdevemutilizarocomando

return:

•  Obs.:Ocomandoreturnpodeapareceremqualquerpontodocorpodafunção,eumavezatingido,aexecuçãodafunçãoéterminada:

Page 11: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

Ocomandoreturn•  Utilização:

returnexpressão;

•  Paraexecutarestecomandooprograma:–  Avaliaexpressão,obtendoumvalor.Ex.:return(a*x*x+b*x+c);

•  Umafunçãoquenãotemvalorpararetornar:void–  Usodoreturnéopcional:

Ou

Page 12: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

Variações•  Quandoomitido,otipoderetornoéassumidoint:

•  Algumasfunçõesnãoprecisamreceberparâmetros.Nestecaso,alistadeparâmetrosficavazia,masosparêntesesaindasãoobrigatórios:

(dificultaoentendimento)

Page 13: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

ChamadaouInvocaçãodeFunções

•  UmprogramaemCsempreinicianafunçãoprincipal:main();•  Apenasdeclararumafunçãonãofarácomqueelasejaexecutada•  Paraquesejaexecutadaénecessárioqueelasejachamada

(invocada)->fornecidosvaloresparaosparâmetros•  Quandochamada,ofluxodecontroledoprogramaédesviadoparaa

funçãoeocódigoqueestánelaéexecutado;•  Quandoafunçãoterminadeserexecutada,ofluxodecontroledo

programaretornaparaainstruçãologoapósachamadadafunção;•  Ovalorderetornodafunçãopodesercapturadoearmazenadoem

umavariávelutilizandoocomandodeatribuição‘=‘.

Page 14: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

Voltandoaoexemplo:

Declaraçãodafunção“segundoGrau”

Chamadadafunção

PassagemdevaloresparaosparâmetrosCapturadovalorretornadoearmazenamentodanavariávely.

Page 15: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

DesviodaExecução

intmain(){...minhaFuncao();...}

voidminhaFuncao();....return;}

Page 16: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

voidminhaFuncao2();....return;}

DesviodaExecução

intmain(){...minhaFuncao1();...}

voidminhaFuncao1();..minhaFuncao2();..return;}

Page 17: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

EscopodasVariáveis•  Defineaáreadoprogramaondeavariávelpodeser

referenciada•  Variáveisglobais:declaradasforadasfunções(inclusiveforada

funçãomain)–  Podemserreferenciadasportodasasfunçõesdoprogramaabaixodo

pontoondeforamdeclaradas

•  Variáveislocais:declaradasdentrodeumafunção(inclusivedentrodafunçãomain)–  Sopodemserreferenciadasdentrodestafunção

Page 18: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

VariáveisGlobais•  Podemserusadasemqualquerpartedocódigo;•  Existemdurantetodoociclodevidadoprograma(ocupando

memória);–  Senãoforemexplicitamenteinicializadas,sãoinicializadasparazero

pelocompilador.•  Normalmentedeclaradasnoiníciodoprogramaouemarquivos

dotipoheader(*.h)•  Declaradasumaúnicavez•  Deve-seevitarousoabusivodelas,pois:

–  Podepenalizaroconsumodememória;–  Podedificultaralegibilidadeemanutençãodocódigo(sepodeser

acessadaealteradaemqualquerlugarcomoencontrarondeestáoerro?).

Page 19: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

VariáveisGlobais

Variávelglobal:declaradaforadequalquerfunção

Acessívelemqualquerpontodocódigoapóssuadeclaração

Page 20: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

VariáveisLocais

•  Declaradasdentrodeumafunção•  Sóexistemduranteaexecuçãodafunção->sóocupama

memóriaduranteaexecuçãodafunção•  Sãovisíveisapenasdentrodafunçãoondeforamdeclaradas•  Outrasfunçõesnãopodemreferenciá-las•  Parâmetrosdefunçõespodemservistoscomovariáveislocais

Page 21: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

VariáveisLocais

Variávellocal:declaradadentrodeumafunção

Nãoéacessívelforadafunçãoondefoideclarada.

Error:'i'undeclared!

Page 22: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

ParâmetroseArgumentos•  Osparâmetrossãonomesqueaparecemnadeclaraçãodeuma

função:voidimprimir(intvalor)

•  Osargumentossãoexpressõesqueaparecemnaexpressãode

invocaçãodafunção:

imprimir(10);imprimir(8+2);Imprimir(2*5);

Page 23: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

ParâmetroseArgumentos•  Quandoumafunçãoéchamada,osargumentosdachamadasão

copiadosparaosparâmetros(formais)presentesnaassinaturadafunção:

•  Parâmetrossãocomovariáveislocaisdafunção(nãoénecessáriodeclararnovamente)

•  Nãosedevedeclararvariáveislocaiscomomesmonomedeparâmetros

Page 24: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

VariáveisLocais-static•  Casoumafunçãodeclareumavariávellocal,estaécriadaa

cadaexecuçãodafunção.

•  Casoavariávellocalvenhacomomodificadorstatic,avariávelécriadainicializadaumaúnicavez:

Sempreretorna123

Inicializaapenasumavezcom100

Naprimeiravezquefuncaoforchamadaretornará123

nasegunda,retornará146;naterceira,169;...

Page 25: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

EscopodasVariáveis•  Variáveisemescoposdiferentespodemteromesmonome,

porém,referenciamendereçosdememóriadiferentes!

Qualvalorseráimpresso?

Mesmonome,porémsãovariáveisdistintas

Page 26: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

EscopodasVariáveis•  Umavariáveldeescopolocal,comomesmonomedeuma

variávelcomescopoglobaloculta(sobrepõe)adeescopoglobal.

Quaisvaloresserãoimpressos?

Avariáveldeescopolocalnamainsobrepõeadeescopoglobal

Referênciaavariávellocal

Referênciaavariávelglobal

Page 27: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

OrdemdaDefiniçãodeFunções•  Ondeumafunçãodeveserdefinida?

–  Antesdamain;ou–  Depoisdamain,desdequesuaassinaturasejadeclaradaantesdamain.

•  Aassinaturadeumafunçãodeveindicar:–  seunome;–  Ostiposdasentradas;–  Otipodasaída.

•  Ex.:Função“segundos”:–  Transformahoraseminutosemsegundos.

•  Assinaturadafunção”segundos”:–  Onomedosparâmetroséopcional:

Page 28: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

OrdemdaDefiniçãodeFunções•  Ondeumafunçãodeveserdefinida?

–  Antesdamain:

Page 29: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

OrdemdaDefiniçãodeFunções•  Ondeumafunçãodeveserdefinida?

–  Depoisdamaincomdeclaraçãopréviadaassinatura:

Aregrabásicaéqueocompiladorprecisaencontraradefiniçãodeumafunçãoousuaassinaturaantesdeencontrarsuachamada

Assinaturadafunçãoantesdachamada

Declaraçãodafunçãoapósachamada.

Chamadadafunção

Page 30: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

UtilizaçãodeMacroscomoFunções•  Diretivasdepré-processamentodotipo#definepodemser

declaradascomparâmetros.Nessecaso,temusosemelhanteaodeumafunção:

•  Sãosubstituídasnocódigoantesdacompilação(naetapadepré-processamento);

•  Noexemploanteriorocompiladorveráafunçãomainassim:

OndeháSubstituirpor

Page 31: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

UtilizaçãodeMacroscomoFunções•  Cuidado!Definasuasmacroscomcautela!

–  Nocódigoabaixoqualvalorseráimpresso?

•  Dáaentenderqueimprimirá8,ouseja:4*(5-3):•  Porémasubstituiçãoresultaráem:

•  E,17seráimpresso!•  Parevitarisso,utilizeparênteses:

#defineDIF(a,b)(a–b)

Page 32: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

UtilizaçãodeMacroscomoFunções•  Cuidado!Definasuasmacroscomcautela!

–  Nocódigoabaixoqualvalorseráimpresso?

•  Dáaentenderqueimprimirá14,ouseja:(3+4)*2•  Porémasubstituiçãoresultaráem:

•  E,11seráimpresso!•  Parevitarisso,utilizeparênteses:

#definePROD(a,b)((a)*(b))

Page 33: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

Atividade1Atividadevistaemaulasanteriores:1.  Escrevaumalgoritmoquelê50númerosinteiroseemseguida

mostraasomadetodososímpareslidos.2.  Altereoalgoritmoanteriorparaqueeleconsidereapenasa

somadosímparesqueestejamentre100e200.3.  Construaumalgoritmoqueleiaumconjuntode20números

inteirosemostrequalfoiomaioreomenorvalorfornecido.4.  Altereoprogramaanteriorparaqueelenãopermitaaentrada

devaloresnegativos.

Page 34: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

Atividade1•  Façaumprogramaqueleiadoisvaloresinteirosxeyentre0e

1000.Encontreomaiorentreeleseimprima:–  Opercentualdomenoremrelaçãoaomaior–  Omodulodadiferençaentreomaioreomenor

•  Altereoprogramaanteriorparaqueutilizetrêsfunções:

a)scanIntIntervalo:Funçãoparalerinteirosdotecladogarantidoqueelesestejamdentrodeumintervalopré-determinado;

b)percentual:Funçãoparacalcularopercentual:100*valor/totalc)absdif:Funçãoqueretornaovalorabsolutodadiferençaentredois

númerosreais.

Page 35: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

Atividade1•  Umcentromaterno-infantildesejacriarumprogramapararecomendaraosmédicos

sobreotipodepartoaseradotado.Omecanismoderecomendaçãoutilizaopesodofetoequantidadedesemanasdegestaçãoparasugerirotipodepartomaisindicado.DesenvolvaumprogramanalinguagemC,oqualdeverá:

•  Leropesodofetoemgramaseaquantidadedesemanasdagestação.Casoopesodofetosejainferiorque100gramasouaquantidadedesemanasmenorque28,oprogramadeveráexibiramensagem"Partonãodeveráserrealizado,reavaliarclinicamente"eencerraraexecução.

•  Casocontrário,oprogramadeverácalcularaquantidadedemeses(considerar4semanasparacadamês)dofetoeexibirumadasrecomendaçõesabaixo:

–  Pesosuperiora2.500gramasecommaisde7meses:"Partonormal";–  Pesosuperiora2.500gramaseabaixooucom7meses:"PartoCesariana";–  Entre2.000gramase1.500gramaseacimade9meses:"Partonormal";–  Qualqueroutracombinação,"PartoCesariana".

Page 36: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

Atividade2•  Umnúmeroperfeitoéumnúmerointeiroparaoqualasomadetodososseus

divisorespositivospróprios(excluindoelemesmo)éigualaopróprionúmero.Porexemplo,onúmero6éumnúmeroperfeito,pois:6=1+2+3.Opróximonúmeroperfeitoéo28,pois:28=1+2+4+7+14.

•  Amatemáticaaindanãosabeseaquantidadedenúmerosperfeitospareséounãofinita.Nãosesabetambémseexistemnúmerosperfeitosímpares.EscrevaumprogramaemCquerealizeasseguintesoperações:a)  Leiaumnúmerointeiroeverifiqueseeleépar,casosejaimparobrigueousuárioadigitaroutro

númeroatéqueumnúmeroparsejadigitado;b)  Verifiqueseonúmerodigitadoéperfeitoeimprimaumamensagemtelaindicandoseonúmero

digitadoéperfeitoounão.

Page 37: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

Atividade3-Fatorial

•  Namatemática,ofatorialdeumnúmeronaturaln,representadoporn!,éoprodutodetodososinteirospositivosmenoresouiguaisan.

•  Construaumafunçãoquerecebacomoparâmetroneretorneofatorialden:

intfat(intn)//Recebencomoparâmetroeretornan!

Obs.:Utilizelaçoevariáveislocais!

Page 38: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

Atividade4-Fibonacci

•  Namatemática,asequênciadeFibonacci,éumasequênciadenúmerosinteiros,começandonormalmentepor0e1,naqual,cadatermosubsequente(numerodeFibonacci)correspondeasomadosdoisanteriores.

•  AsequênciarecebeuonomedomatemáticoitalianoLeonardodePisa,maisconhecidoporFibonacci,quedescreveu,noanode1202,ocrescimentodeumapopulaçãodecoelhos,apartirdesta.

•  Talsequênciajáeranoentanto,conhecidanaantiguidade.•  OsnúmerosdeFibonaccisão,portanto,osnúmerosque

compõemaseguintesequência:–  1,1,2,3,5,8,13,21,34,55,89,144,233,377...

Page 39: Computação Eletrônica Funções e Escopo de Variáveisluciano/cursos/ce/funcoes.pdfCIn.ufpe.br Módulos em C - Funções • Função: conjunto de instruções para realizar uma

CIn.ufpe.br

Atividade4-Fibonacci

•  Assim,onúmerodeFibonacciFnparan>0édefinidodaseguintemaneira:–  F1=1–  F2=1–  Fn=Fn-1+Fn-2paran>2.

•  EscrevaumafunçãoqueretorneonúmerorelativoaaovalornasequênciadeFibonaccinaposiçãon:

intfib(intn)//RecebencomoparâmetroeretornaFn

Obs.:Utilizelaçoevariáveislocais!