Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
CIn.ufpe.br
ComputaçãoEletrônicaFunçõeseEscopodeVariáveis
Prof:LucianoBarbosa
CIn.ufpe.br
DividirparaConquistar
pow(base,expoente)
fatorial(número)
CIn.ufpe.br
DividirparaConquistar• Dividirumproblemaemsubproblemasmaissimples• Ospassosparaissosão:
1. Divisãodoproblemaemsubproblemas;2. Soluçãodecadaumdossubproblemas;3. Composiçãodassoluçõesdossubproblemasparasolucionaro
problemaoriginal.
• Chamadodeprogramaçãomodular
CIn.ufpe.br
ProgramaçãoModular• Vantagens:
– Módulospodemserescritosumavezapenasereutilizadossemprequenecessário
– Módulospodemsercompostosparasolucionarproblemascadavezcomplexos
– Facilitaamanutenção:umerrocorrigidoemummódulorefleteemtodososlugaresondeessemóduloéutilizado;
Composição
CIn.ufpe.br
MódulosemC-Funções• Função:conjuntodeinstruçõespararealizarumaoumais
tarefasquesãoagrupadasemumamesmaunidadeequepodeserreferenciada
pow(base,expoente)
fatorial(número)
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
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
CIn.ufpe.br
ExemplodeUtilização
Declaraçãodafunção“segundoGrau”
Chamadadafunçãocompassagemdosargumentos
Nota:argumentoéonomedadoaosvalorespassadosparaosparâmetrosdeumafunção.
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.
CIn.ufpe.br
Ocomandoreturn• Funçõesqueretornamvaloresdevemutilizarocomando
return:
• Obs.:Ocomandoreturnpodeapareceremqualquerpontodocorpodafunção,eumavezatingido,aexecuçãodafunçãoéterminada:
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
CIn.ufpe.br
Variações• Quandoomitido,otipoderetornoéassumidoint:
• Algumasfunçõesnãoprecisamreceberparâmetros.Nestecaso,alistadeparâmetrosficavazia,masosparêntesesaindasãoobrigatórios:
(dificultaoentendimento)
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‘=‘.
CIn.ufpe.br
Voltandoaoexemplo:
Declaraçãodafunção“segundoGrau”
Chamadadafunção
PassagemdevaloresparaosparâmetrosCapturadovalorretornadoearmazenamentodanavariávely.
CIn.ufpe.br
DesviodaExecução
intmain(){...minhaFuncao();...}
voidminhaFuncao();....return;}
CIn.ufpe.br
voidminhaFuncao2();....return;}
DesviodaExecução
intmain(){...minhaFuncao1();...}
voidminhaFuncao1();..minhaFuncao2();..return;}
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
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?).
CIn.ufpe.br
VariáveisGlobais
Variávelglobal:declaradaforadequalquerfunção
Acessívelemqualquerpontodocódigoapóssuadeclaração
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
CIn.ufpe.br
VariáveisLocais
Variávellocal:declaradadentrodeumafunção
Nãoéacessívelforadafunçãoondefoideclarada.
Error:'i'undeclared!
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);
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
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;...
CIn.ufpe.br
EscopodasVariáveis• Variáveisemescoposdiferentespodemteromesmonome,
porém,referenciamendereçosdememóriadiferentes!
Qualvalorseráimpresso?
Mesmonome,porémsãovariáveisdistintas
CIn.ufpe.br
EscopodasVariáveis• Umavariáveldeescopolocal,comomesmonomedeuma
variávelcomescopoglobaloculta(sobrepõe)adeescopoglobal.
Quaisvaloresserãoimpressos?
Avariáveldeescopolocalnamainsobrepõeadeescopoglobal
Referênciaavariávellocal
Referênciaavariávelglobal
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:
CIn.ufpe.br
OrdemdaDefiniçãodeFunções• Ondeumafunçãodeveserdefinida?
– Antesdamain:
CIn.ufpe.br
OrdemdaDefiniçãodeFunções• Ondeumafunçãodeveserdefinida?
– Depoisdamaincomdeclaraçãopréviadaassinatura:
Aregrabásicaéqueocompiladorprecisaencontraradefiniçãodeumafunçãoousuaassinaturaantesdeencontrarsuachamada
Assinaturadafunçãoantesdachamada
Declaraçãodafunçãoapósachamada.
Chamadadafunção
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
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)
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))
CIn.ufpe.br
Atividade1Atividadevistaemaulasanteriores:1. Escrevaumalgoritmoquelê50númerosinteiroseemseguida
mostraasomadetodososímpareslidos.2. Altereoalgoritmoanteriorparaqueeleconsidereapenasa
somadosímparesqueestejamentre100e200.3. Construaumalgoritmoqueleiaumconjuntode20números
inteirosemostrequalfoiomaioreomenorvalorfornecido.4. Altereoprogramaanteriorparaqueelenãopermitaaentrada
devaloresnegativos.
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.
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".
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.
CIn.ufpe.br
Atividade3-Fatorial
• Namatemática,ofatorialdeumnúmeronaturaln,representadoporn!,éoprodutodetodososinteirospositivosmenoresouiguaisan.
• Construaumafunçãoquerecebacomoparâmetroneretorneofatorialden:
intfat(intn)//Recebencomoparâmetroeretornan!
Obs.:Utilizelaçoevariáveislocais!
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...
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!