• Home
  • Chat IA
  • Guru IA
  • Tutores
  • Central de ajuda
Home
Chat IA
Guru IA
Tutores

·

Biomedicina ·

Introdução à Lógica e Programação

Envie sua pergunta para a IA e receba a resposta na hora

Recomendado para você

Técnicas de Programação - Unidade 4: Arquivos

37

Técnicas de Programação - Unidade 4: Arquivos

Introdução à Lógica e Programação

UAM

Introdução às Linguagens de Programação Estruturada

31

Introdução às Linguagens de Programação Estruturada

Introdução à Lógica e Programação

UAM

Ordenação Externa e Intercalação de Arquivos

28

Ordenação Externa e Intercalação de Arquivos

Introdução à Lógica e Programação

UAM

Pesquisa sobre Ordenação Interna e Algoritmos de Armazenamento

34

Pesquisa sobre Ordenação Interna e Algoritmos de Armazenamento

Introdução à Lógica e Programação

UAM

Pesquisa Ordenação e Técnicas de Armazenamento: Técnicas de Pesquisa Sequencial e Binária

30

Pesquisa Ordenação e Técnicas de Armazenamento: Técnicas de Pesquisa Sequencial e Binária

Introdução à Lógica e Programação

UAM

Matrizes e Sistemas Lineares em Circuitos Elétricos

1

Matrizes e Sistemas Lineares em Circuitos Elétricos

Introdução à Lógica e Programação

UAM

Traveling Salesman Problem - Discrete Optimization Assignment

4

Traveling Salesman Problem - Discrete Optimization Assignment

Introdução à Lógica e Programação

UAM

Sistema-de-Cadastro-CRUD-em-Java-com-MySQL-e-Swing

1

Sistema-de-Cadastro-CRUD-em-Java-com-MySQL-e-Swing

Introdução à Lógica e Programação

UAM

Texto de pré-visualização

21082023 1630 Técnicas de Programacgao fF TECNICAS DE PROGRAMACAO UNIDADE 2 FUNCOES Fernando Cortez Sica httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 131 21082023 1630 Técnicas de Programação httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 231 21082023 1630 Técnicas de Programacgao Introducao Iniciamos aqui mais uma unidade de nossa conversa sobre técnicas de programacdo Agora falaremos sobre fungées A primeira imagem que pode vir a sua cabeca é uma fundo matematica fx falaremos de matematica Nao propriamente dito falaremos sobre uma outra forma de estruturar um cédigo de forma a definir um bloco de instruc6es para uma certa funcionalidade Mas entdo funcées servem apenas para deixar oO programa estruturado mais facil de ser visualizado Sim um dos objetivos é este mas ha também outros motivos para elas existirem 6 0 que veremos nessa unidade Sabemos que uma funcdo encapsula um conjunto de instrugées O programa principal main é uma fundo Exato O programa principal main foi a primeira fundo que manipulamos aqui na nossa disciplina Aqui falaremos também sobre outras mas principalmente falaremos de como criar funées Mas se funcdo é um bloco de instrucées para uma certa funcionalidade entéo os blocos delimitados por e dos comandos condicionais e comandos de repetido sdo também funcées Nao funées s4o mais abrangentes elas envolvem as instrucées de forma mais ampla ou seja envolvem inclusive os comandos condicionais e os lacos de repetiao Neste capitulo abordaremos os aspectos relacionados aos conceitos e implementacdo de funcées Para tanto falaremos sobre suas nomenclaturas e funcionamento assim como os seus retornos de valores e pardmetros e e 21 Conceitos e caracteristicas de uma funcgao Fungées tem o objetivo de encapsular instrucédes de forma a possibilitar a modularizacao do cédigo Inicialmente podemos definir modularizacdo como a decomposi4o funcional de um sistema computacional Porque falamos sistema computacional e nado programa Um sistema computacional pode envolver varios programas intercambiando informacoes A figura a seguir ilustra uma abstraao de um sistema modular Sistema Instrugao Instrugao fundo s8 Programas misses mee Ue TTC E Instrugao fundo os 50 50 50 lite Te Figura 1 Sistema modular formado por varios programas que podem estar em execucdo em dispositivos distintos cada dispositivo suportado pelo seu respectivo sistema operacional Fonte Elaborada pelo autor 2019 Na figura acima o sistema é formado por varios programas que utilizam as funcionalidades exportadas pelo sistema operacional em execucdo no respectivo dispositivo computacional Tais funcionalidades sdo acessiveis por intermédio das fungdes do sistema disponibilizadas através das bibliotecas padrées Cada programa por sua vez pode ser composto por varios arquivosfonte arquivos c Em fundo da complexidade do programa é sugerivel a sua decomposido em varios arquivos de codificado separados por httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 331 21082023 1630 Técnicas de Programacgao funcionalidades Por exemplo tais funcionalidades poderao ser distinguidas entre aquelas que objetivam a interagdéo com o usuario aquelas que realizam acesso a um banco de dados e aquelas que fazem os processamentos internos do sistema Essas funcionalidades por sua vez sdo conseguidas através da codificacgao de funées especificas ee VOCE O CONHECE e A ideia de modularizacdo surgiu no final da década de 1960 na chamada crise do software Na ocasido Dijkstra ja defendia a ideia de modularizacdo tendo inclusive apresentado em 1972 na ACM Association for Computing Machinery literalmente em portugués Associagao para Maquinas de Computacao o trabalho intitulado The Humble Programmer O Humilde Programador Para saber um pouco mais sobre Dijkstra vocé podera acessar este artigo aqui httphorizontessbcorgbrindexphp20171023807 httphorizontessbcorgbrindexphp20171023807 MOCHETTI 2017 a Essa ideia de dividir o programa em func6es é um dos conceitos da modularizagdo de sistemas mais especificamente modularizaao de programas httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 431 21082023 1630 Técnicas de Programacgao ee VOCE QUER VER e A modularizacado dos programas ajuda a tornalo mais facil de escrever de testar e de reaproveitar cédigos podendo tornalo também mais eficiente O video a seguir httpswwwinfoqcombrpresentationsmodularizacaodecodigoc httpswwwinfogcombrpresentationsmodularizacaodecodigoc aborda o tema de modularizado em linguagem C LAVRATTI 2014 a Mas quais sdo as vantagens de uma programacdo modular contendo inclusive funcées em sua codificaao Modularizar nao significa apenas deixar o cddigo organizado mas sim apresenta uma série de vantagens segundo Deitel 2011 Para conhecer quais sao essas vantagens clique nas abas abaixo Implementacao Facilita o processo de criado testes e corredo de erros a implementacao testes e corregdes com o uso de médulos fica mais pontual ou seja podese focar apenas em uma funcionalidade especifica desta forma conseguese por exemplo corrigir erros mais facilmente pois a localizacado do cédigo dentre milhares de linhas de cédigo fica mais rapida Com funcées é possivel trocar toda uma fund4o por outra de versdo acima Incorporaao Possibilidade de reutilizagao do cédigo o bloco representado pela funcdo podera ser utilizado em outro projeto bastando incorporala ao cdédigo Funcao Evitar reescrita do cddigo ao longo do arquivofonte caso uma certa acdo representada por diversas linhas de cédigo seja requerida em varios momentos e em varios pontos do programa nado sera necessario reescrever 0 codigo e sim apenas chamar a fundo httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 531 21082023 1630 Técnicas de Programacgao Até entado falamos de alguns conceitos inerentes as fun6ées mas na pratica sera que ja usamos func6es nesta disciplina além da fundo mainQ A resposta é positiva por exemplo o printf é uma fundo da chamada biblioteca padrao que evoca funcionalidades do sistema operacional para intervir nas agdes que culmina na manipulado do sistema de video do dispositivo computacional Outros exemplos de fundes que ja utilizamos sao scanf strlen strcmp strcpy atoi e itoa VOCE SABIA e Vocé sabia que as funcées poderdo ser evocadas remotamente Em sistemas ditos como sistemas distribuidos um programa pode evocar uma fundo remota localizada em outro computador Essa chamada é realizada por meio de RPC Remote Procedure Call ou em portugués Chamada a Procedimentos Remotos Para ler sobre 0 assunto e inclusive ver cddigosexemplo em C vocé pode acessar este link httpwwweletricaufprbrpedroso2009TE090Aulasrpcpdf httpwwweletricaufprbrpedroso2009TE090Aulasrpcpdf Em Java existe algo semelhante chamado RMI Remote Method Invocation em portugués Invocacdo de Método Remoto PEDROSO 2006 eee eeeeeeeeeeeeeeeeeeeeeeeee ee ee neers Mas como criar funées A seguir veremos mais detalhes de como criar as func6es e como elas funcionam no escopo de sua execucdo no dispositivo computacional ww 22 Nome de uma funcgao Da mesma forma das variaveis uma funcdo deve ter um nome para que seja evocado As regras para a definiao do nome sao as mesmas em relaao as variaveis clique nos itens abaixo e confira Nao pode conter caracteres especiais como por OP exemplo e acentos httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 631 21082023 1630 Técnicas de Programacgao Deve comecar por uma letra ou com um traco underline Para facilitar a implementado 0 seu nome deve ser sugestivo ou seja ser compativel com a sua funcionalidade Para a definiado de uma funao devese seguir a seguinte sintaxe tipoderetorno nomedafuncao parametros Para exemplificar a sintaxe tomemos como exemplos Ooid ImprimeMensagenschar mensfti int Fatorialint No int main 9 Mas 0 que é tipo de retorno e 0 que sao parametros de uma funcdo Porque 0 main tem um tipo de retorno int E os parametros do main Uma fungao pode ter auséncia de parametros Antes de conversarmos sobre essas duvidas vamos falar sobre como funcionam as funcées 23 Como Funciona uma Fungao Quando uma fundo é evocada deve haver um desvio de fluxo de processamento de modo a executar as linhas de cédigo da fundo chamada A figura a seguir ilustra o processo de execucao de uma funao httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 731 21082023 1630 Técnicas de Programacgao Salvamento de contexto Instrugao Instrugao ZO Instrugao Instrugdes da ChamadaFungao fungao chamada Instrugao Instrugao Recuperacao do contexto Figura 2 Cenario criado para a chamada de uma funaAo O fluxo é desviado para que as instrucdes pertinentes a funcdo sejam executadas Fonte Elaborada pelo autor 2019 Na figura acima sdo destacados os eventos de salvamento e recuperacdo de contexto estes eventos sao responsaveis por salvar e recuperar em uma regido da memoria principal mapeada na forma de pilha de dados o valor dentre outras informacées do registrador PC program conter ou contador de programa O registrador PC também chamado de IP instruction pointer ou ponteiro de instrucdo é uma estrutura de hardware que armazena o endereo da linha a ser executada Na chamada da fun4o esse valor corresponde ao ponto que houve a evocagado da fundo esse ponto sera restaurado para que a execucao do programa continue na linha imediatamente apés a chamada da funcao Uma outra questdo para entendermos sobre o funcionamento das funcées diz respeito as variaveis declarar uma variavel dentro da funcéo é a mesma coisa que declararmos fora Para respondermos 4a tal questionamento veremos a seguir 0 corpo de uma funcao 24 O Corpo de uma fungao Um ponto que merece destaque na implementaao de uma funcdo reside no fato de que as variaveis declaradas dentro da funcdo séo denominadas como variaveis locais Varidveis locais somente sao visiveis dentro da propria fungdo enquanto que as variaveis globais sdo visiveis em toda extensdo do programa Para entendermos melhor essa diferenca tomemos por base 0 trecho de cédigo a seguir int x int funcao1 int ab ax by httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 831 21082023 1630 Técnicas de Programacgao int main int y No trecho acima encontramos a declaracdo de x fora de qualquer fundo enquanto a declaracdo de y encontrase dentro do corpo da main Podemos ver ainda uma funao funcao1 que manipula tanto x quanto y para atribuir os seus valores as variaveis a e b respectivamente Como a variavel x é global a funcao1 podera acessala em seu cédigo porém havera um erro de compilaao na linha b y do tipo varidvel y ndo declarada pois pelo fato de ser local a main nao é visivel a funcao1 Uma variavel local existe na memoria apenas durante a execucdo da fundo Quando a fundo acaba o seu processamento e o fluxo voltam para o ponto de chamada as variaveis locais sdo apagadas da memoria Caso a funcdo seja chamada localmente serdo alocadas novamente as variaveis locais sendo os seus valores iniciados novamente os valores da execudo antiga sao perdidos a menos que se use 0 modificador static por exemplo static int a Para ilustrar melhor uma funcado vamos supor o cédigo a seguir include stdioh int x void funcaoTeste int a a x printfValor de a d a X5 int main x0 funcaoTeste printfValor de x d x No exemplo acima temos a funcdo funcaoTeste que cria a variavel local a e manipula também a variavel global x A fundo funcaoTeste é evocada a partir da fundo main apos a sua finalizacdo ocorre a execucao da linha que contém o cédigo printfValor de x d x Vocé deve estar se perguntando Mas e o tipo da funcdo Para que serve por exemplo o int antes do main Veremos agora a questao de retorno das funcées 25 Fungoes que nao retornam valor Inicialmente quando pensamos em uma fundo matematica nos vem a cabeca um valor retornado por exemplo a fundo matematica seno retorna o valor do seno de um angulo Dessa forma podemos ja fazer uma analogia entre a fundo matematica e a fundo computacional o tipo associado a funcdo referese ao formato do valor retornado pela funcdo Voltando ao caso do seno o seu retorno seria 0 tipo float httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 931 21082023 1630 Técnicas de Programacgao Mas toda funcdo deve retornar um valor O retorno de valor de uma fundo nado é um item obrigatério neste caso uma funcado consiste apenas de uma sequéncia de acdes sem o retorno do resultado de seu processamento Para alguns autores como Ascencio 2012 em outras linguagens como a linguagem PASCAL diferenciase uma funcdo com retorno e uma fundo sem retorno Para se adequar a linguagem uma fundo que nada retorna é chamada de procedimento procedure Ja de acordo com Puga 2016 a diferenca basica entre procedimento e funcdo consiste no fato de que as func6es poderdo ser usadas em express6es ou seja usadas como parte geradora de um valor que sera atribuido a uma variavel No caso do procedimento como ele nao retorna valor nado sera possivel utilizalo em express6es de atribuicao eee ee rere eee e reer renee eee eee eee eee ee eee VOCE QUER LER e A funcao printf que vocé ja vem utilizando em seus programas é passivel de varias formatagoes de saida nado se limitando ao tipo de dado a ser manipulado Para saber um pouco mais a respeito do comando printf veja o material disponivel aqui httpswwwvivaolinuxcombrartigoParametrosinteressantesdoscanfedo printfemC httpswwwvivaolinuxcombrartigoParametrosinteressantesdo scanfedoprintfemC SCHLEMER 2009 errr reer rere cere e eee No caso da linguagem CC a diferenciaao se faz apenas na definiao do tipo do retorno O uso é definido pelo programador por exemplo a funao printf geralmente é usada fora de express6es porém ela retorna a quantidade de caracteres impressos e poderia ser usada da seguinte forma qtdcaracimpressos printf01a mundo Como podemos perceber pela linha de cédigo acima a linguagem CC nao faz muita distindo entre uma fungdo retornando ou nao retornando valor Mas como diferenciar na implementado Para exemplificar vamos dar uma olhada no cédigo colocado abaixo httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTTECPRO19unidade2ebookindexhtml 1031 21082023 1630 Técnicas de Programacgao Hinclude stdioh void Esperat unsigned int 186 3 forqy 1500005 i Ford 265 5SOG005 tty int maine printfcVamos esperar um poucoin Jf Esperaths printfcE esperar mais um poucoziny Esperats5 printfeTestando sua paciencia a espera derradeirain Esperats5 printfePronto Voce eh agora uma pessoa mais pacientel 1Jiny return No cédigo acima definimos como void o tipo do retorno da fundo Espera Quando se define uma fungado com o tipo void vazio nao necessitamos usar o return valor ao final de seu processamento Caso seja necessario interromper o processamento de uma funcao do tipo void basta inserir um return sem valor de retorno ou seja simplesmente return Vejamos mais um exemplo httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1131 21082023 1630 Técnicas de Programacgao include stdioh include stringh include ctyupeh fpara usar o toupperd char mensagem3 opcacey void EntradaMenut da printf Digite XX para Processar Xiny printfDigite Y para processar Yin 9 printftDigite E para encerrar4ny scanftid opcacly opGao toupperfopcacy ftoupperd transforma o pardametro em mailisculo Rahile CCopcacla x 8aCopcact8afopcaclE void ImprimirMensagemt printfMensagem Zsinmensagem int maind EntradamMenut switchtopcac case xX strcpytmensagem Proecessamento de X5 breaky case YY strcpymensagemProcessamento de YM breaky case E strcpymensagem Encerrando programa3 breakgy ImprimirmMensagemt5 return F No exemplo acima as fungées EntradaMenu e ImprimirMensagem nado possuem retorno e as informa6es sdo intercambiadas por intermédio de variaveis globais variaveis definidas fora do bloco representado pelo main Chamamos esse tipo de implementacdo de acoplamento forte pois existem as httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1231 21082023 1630 Técnicas de Programacgao fung6es que dependem da existéncia das variaveis globais Uma consequéncia deste tipo de dependéncia é a dificuldade de manutendo pois qualquer alteracdo por exemplo nas variaveis globais afetam todas as fungées delas dependentes Todas as fundes que nado possuem retorno dependem de variaveis globais para o seu funcionamento Nao a dependéncia ou nao de variaveis globais dependera exclusivamente de suas funcionalidades para as quais uma fundo é implementada Mas existem fun6es que retornam valores Sim veremos como implementar fundes que retornam valores a seguir 26 Funcoes que retornam valor Voltando a nossa abstracdo matematica a fundo seno é uma fundo que retorna valor Em C no caso de visualizarmos na funcdo uma linha com 0 comando return valor como acontece em main int main return 0 podemos dizer que a referida fundo retorna valor Mas entdao qual seria 0 retorno do mainQ Quem chamou o main para receber o valor de retorno Lembrese que 0 main é 0 ponto de partida de um programa escrito em CC portanto ele é chamado pelo sistema operacional O valor inteiro retornado pelo main ao sistema operacional representa um valor indicativo do motivo de sua finalizaao normal ou decorrente de uma falha de execucdo Esse cédigo de retorno permite ao sistema operacional realizar agdes de controle e dependendo do caso ativar agdes de interagdo com o usuario Mas como retornar um valor Creio que vocé esteja lembrado da linha do main com o cdédigo return 0 O retorno de valor é realizado através do return Para relembrar o return no main segue um trecho int main int y return 0 Podese aplicar a mesma estrutura visto na fundo main para outras funées Sim o programador pode criar funées conforme a sua necessidade o que lhe da também a possibilidade de especificar o tipo de retorno conforme a sua conveniéncia Por exemplo vamos dar uma olhada no cédigo para gerar seis dezenas para apostarmos na Megasena include stdioh paraa funcao printf include stdlibh para as funcoes srand e rand include timeh paraa funcao time int DezenaSorteada int dezena do dezena rand61 o valor 60 é valido whiledezena0 evitar retornar o valor 0 return dezena int main int i0qtd srandtimeNULL printfQuantidade de dezenas a serem sorteadas httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1331 21082023 1630 Técnicas de Programacgao scanfdqtd for i qtd i printfSorteio Yd d i1DezenaSorteada return 0 No cédigo acima temos um exemplo de uma funao que retorna um valor inteiro No caso especifico do exemplo a fundo DezenaSorteada retorna um valor entre 1 e 60 para que seja impresso na tela para o usuario por intermédio da linha printfSorteio d d it1DezenaSorteada Para tanto foram utilizadas as funcées srand que inicia o gerador de nimeros aleatérios time que retornara 0 tempo transcorrido desde 1 de janeiro de 1970 em segundos que servira como semente para a iniciacdo do gerador de numeros aleatérios e por fim a funcdo rand que retornara um valor inteiro entre 0 e a constante RANDMAX definida no arquivo header stdlibh O cédigo com return deve ser inserido apenas na Ultima linha de uma funcdo Nao necessariamente Pode se colocar return ao longo do corpo da funao para interromper a fundo e voltar ao ponto de chamada caso algum erro tenha ocorrido Um exemplo de return ao longo do corpo da fundo esta referenciado no trecho de codigo a seguir int funcao int xy ify 0 return 1 return absx y No exemplo acima temos 0 término antecipado da fundo em virtude da situacdo de erro testada no comando condicional no caso o denominador da divisdo nado pode assumir o valor 0 Ao ser verificada essa condiao de erro a fundo retorna o valor 1 Foi escolhido esse valor como retorno de erro pois em operacao normal a fundo sempre retornara um valor positivo representado pelo valor absoluto da divisado de x por y O valor absoluto é conseguido através da utilizacdo da funcdo absQ definida no arquivo header stdlibh Essa finalizacdo feita antes de se chegar ao final da funado podera ser usada também em casos normais de execucdo onde um certo objetivo ja tenha sido cumprido Vocé pode ficar a se perguntar eu ja ouvi falar em um comando chamado break usado nos lacgos de repetido e inclusive no comando switchcase O break tem a mesma funcionalidade em relado ao return Para falarmos sobre essa dtvida vamos analisar 0 cédigo abaixo httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1431 21082023 1630 Técnicas de Programação httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1531 21082023 1630 Técnicas de Programacgao No cédigo acima temos o uso de return e de break Podemos ver que ao utilizarse o return nado é colocada a parte else nos comandos condicionais pelo fato de que a execucao é interrompida retornando a posicado de chamada da funcdo no caso retornando ao main Por sua vez acontece a interrupao do laco continuando na propria funcdo quando usado o break Desta forma a fundo retornara um valor positivo indicando a posido do elemento buscado dentro do vetor ou retornara um valor negativo indicando uma operaao malsucedida Para finalizar foram sublinhadas no cdédigo todas as ocorréncias de fundes para que possamos identificar e diferenciar 0 que 6 comando e o que é funao dentro da linguagem CC Vamos entdo reescrever 0 exemplo do menu de opcodes mostrado quando estavamos falando sobre funcgées que nado retornam valor usando fundes que retornam valor include stdich include stringh Ainclude ctyupeh char mensagemE3se4 char EntradaMenut char opcaomey do prantfc41nDigite Xi para Processar xin3y prantfCDigite Y2 para processar Yin 3y praintfcDigite ES para encerrarin scanfC id opcaolf opgao toupperfopcaodyy Fahile CCopcaclaX 88Copcaclay8CopcacltsE si return opcacg ss 8 int maine char ong opzEntradamMenuty 2 Na versao do cédigo acima podemos notar que a variavel opcao desapareceu da lista de variaveis globais O intercambio referente a escolha do usuario passou a Ser por intermédio do retorno da fundo EntradaMenu Sendo assim a coesdo em relado a essa funcdo passou a ser baixa pois nao ha dependéncias de variaveis httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1631 21082023 1630 Técnicas de Programacgao globais No caso do exemplo acima a funcado retorna um tipo opcao desta forma podemos mencionar que uma funao pode retornar qualquer tipo de dados previamente definido Vamos ver um outro exemplo Para tanto suponha o cédigo abaixo de uma calculadora para realizar as quatro operac6es aritméticas basicas httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1731 21082023 1630 Técnicas de Programação httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1831 21082023 1630 Técnicas de Programação httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1931 21082023 1630 Técnicas de Programação httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2031 21082023 1630 Técnicas de Programacgao switchtop case I restsomathy breaks case E resssubt break case I resmul G35 breaks case I restdivedy breaks printfeResultada Zdin resdy return Neste cédigo cada operacao aritmética é representada por uma funcao Para simplificar o exemplo nado estado sendo tratadas condi6es de erro como por exemplo a divisdo por 0 A partir da escolha realizada pelo usuario feita por intermédio da fundo Menu a instanciacdo da variavel res é feita com o retorno da funcao correspondente httpswwwvivaolinuxcombrartigoParametrosinteressantesdoscanfedoprintfemC httpswwwvivaolinuxcombrartigoParametrosinteressantesdoscanfedoprintfemCAté 0 momento falamos apenas sobre o retorno das funcées Mas como passar valores para as funcées de modo que elas httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2131 21082023 1630 Técnicas de Programacgao possam coletar e processar valores diferentes a cada chamada Isso é 0 veremos a seguir quando conversaremos sobre pardmetros das func6es 27 Parametros Como ja antecipamos um pouco parametros servem para informar a funcdo qual deve ser o conjunto de valores que precisam ser processados Para ficar mais claro vamos voltar ao exemplo da fundo matematica seno Ao usarmos ysenox ja fica subtendido que desejamos atribuir a variavel y o valor do seno referente a x graus Desta forma podemos falar que x é 0 parametro da fundo seno Na computacao nao é diferente ou seja parametro sdo os valores passados para as funées para que elas possam realizar os seus processamentos especificos Antes de entrarmos especificamente nos parametros das fundes vamos nos prender um pouco na funao mainQ Sera que podemos passar argumentos quando evocamos o programa por intermédio da linha de comando prompt ou cmd Sim a fundo main consegue receber parametros basta implementar como sugere o trecho de cédigo a seguir int mainint arge char arqvi ifargcl printfParametros nao passados return printfCNome do programa chamado sinarqviely printfParametro passado Zsinaroqvli13 6 A funcdo mainQ admite dois pardmetros passados pela linha de comando o primeiro parametro do tipo inteiro indica a quantidade de argumentos passados Caso o usuario nado passe parametros a variavel no nosso exemplo chamada como argc tem o valor 1 O valor 1 referese ao préprio nome do programa passado como parametro pelo sistema operacional que ocupa a posicdo 0 do vetor argv que contém a lista de pardmetros Os demais pardmetros quando existirem poderdo ser acessados nas posi6ées subsequentes 4a posiao 0 Mas e 0 caso das funcées que nao sejam a funao main Como devemos passar informagées para elas Para a passagem de pardmetros em uma fundo deveremos criar uma lista de variaveis em sua interface na seguinte forma tipoderetorno NomeDaFuncao lista de parametros Sendo que a lista de pardametros se assemelha a criacdo de variaveis ou seja as variaveis deverdo ser criadas de acordo com a sintaxe tipo1 var1 tipo2 var2 Por exemplo no caso termos uma fundo que receba como parametros dois valores inteiros para seja realizada e retornado o valor de uma soma teriamos httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2231 21082023 1630 Técnicas de Programacgao unt Somaint a int Db A ordem de definicao das variaveis devera ser a mesma em relaao a chamada da funaAo ou seja o primeiro parametro passado sera associado ao primeiro parametro da interface da fundo 0 segundo da chamada ao segundo da interface e assim por diante Cada pardmetro podera ser passado por valor ou por referéncia conforme sera descrito a seguir MIZRAHI 2008 nw nw e 28 Parametros passados por valor e por referencia Como mencionado anteriormente existem duas formas de se passar um parametro por valor e por referéncia Para adiantar vamos falar genericamente que a passagem por valor é usada quando o parametro é apenas de entrada ou seja permite que a informaao seja passada apenas para dentro da fundo A passagem por referéncia autoriza que o fluxo seja bidirecional ou seja aceita que a informacao seja passada para a fundo ea partir dela Daremos sequéncia ao aprofundamento do assunto a seguir 281 Parametros passados por valor A forma mais simples de se passar parametros para a funcdo é através de passagem por valor Neste tipo de passagem o sistema realiza uma copia do valor passado em uma variavel criada localmente Para continuarmos a detalhar sobre 0 assunto tomemos como exemplo 0 cdédigo adaptado de Puga 2016 httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2331 21082023 1630 Técnicas de Programacgao include stdioh int somadobroint a int b Ata 2 be b 25 return atby int maint int xUres printfeDigite o valor de XE scanft id 5 printfeDigite o valor de YE scanfFc id 35 resssomacdobrotxUay printfCResultade do processamento de Yd e wdk d x yy resi return f No cédigo acima temos uma funao somadobro que recebe dois parametros a e b Como sabemos que os pardmetros sdo passados por valor No caso podemos verificar que cada parametro é definido pela seguinte sintaxe tiporetornodafungao nmomefungao tipo nomedoparametro Mas alterandose dentro da funcdo os valores das variaveis passadas como pardmetros a e b nado serdo alterados os valores das variaveis na origem da chamada no caso as variaveis x e y Nao ha esse perigo pois quando se passar por valor cada pardmetro origina uma variavel local que é instanciada com o valor passado pela variavel na origem da chamada Neste caso por exemplo as variaveis x e a sao totalmente distintas A figura a seguir mostra melhor o que acabamos de falar httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2431 21082023 1630 Técnicas de Programacgao Funcao main Fungao somadobro res somadobro 5 3 x 5 5 5210 8 3 326 res 16 soma 16 return soma Figura 3 Passagem de paradmetros por valor Cada parametro da funao implica na criagao de uma variavel local que recebe uma cépia do valor passado como pardmetro nao afetando a variavel que originou a informacao Fonte PUGA 2016 p 267 Para finalizar podemos falar que utilizamos passagem por valor quando desejamos manter as informacées intactas no ponto de chamada ou ainda quando a funao nao objetiva alteragdes nos valores dos pardmetros mas sim apenas usalos como fonte de dados para prosseguir 0 seu processamento 282 Parametros passados por referéncia Como mencionamos anteriormente os valores dos pardmetros passados por valor s4o mantidos intactos quando estamos nos referenciando ao ponto de chamada da funao Mas e se desejarmos por algum motivo alterar os valores das variaveis no ponto de origem Para isso temos a opcao de realizar passagem por referéncia Vamos modificar o cédigo utilizado para a passagem de paradmetros por valor e transformalo para passagem de pardmetros por referéncia httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2531 21082023 1630 Técnicas de Programacgao Hinclude stdioh int somadobroint wa int mb Sa eB M ZI ab ab m 379 return aaby int main int xUresy printfeDigite o valor de xi scanFa cl a5 printfeDigite o valor de Yr scanfFt tcl U5 resmsomacdobrotx u4 printfCResultade do processamento de d 6 ddr Yd Uy reshy return Para comecar notamos que aparece o simbolo na definicdo dos parametros da funao O simbolo int a int indica que estamos ao invés de um valor recebendo uma posiao de memoria cujo conteuido sera manipulado pela fundo Esse mesmo sinal aparece quando manipulamos as variaveis no corpo da funcao Em tal ocasido 0 sinal denota o contetido da posiao de memoria Por exemplo na linha 2 2 m 23 podemos traduzir como o contetido da posido de memoria apontada por a recebe o contetido da posido de memoria apontado por a vezes 2 Desta forma como estamos atribuindo um valor para uma posido de memoria automaticamente estamos alterando o valor da variavel que originou o parametro na chamada da fundo no caso do exemplo a variavel x Ja que estamos falando que x indica uma posido de memoria significa que temos que passar para a fundo nao um valor e sim uma posiao de memoria Este feito é conseguido utilizandose o sinal No caso do exemplo a chamada soma clobrotdxc yy pode ser traduzida como evocase a fungao somadobro passando como pardmetros a posido de memoria apontada por x e a posiao de memoria apontada por y Creio que agora vocé esta comecgando a entender sobre 0 motivo de usarmos 0 simbolo na utilizacdo da fundo scanf No caso passamos o endereco da variavel passada pela scanf para que a funcdo possa nos devolver o valor fornecido pelo usuario A figura a seguir ilustra esse processo de passagem por pardmetro tomando por base o exemplo de cédigo acima httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2631 21082023 1630 Técnicas de Programacgao Funao main 10 Funcao somasobro 800 a 800 aa2 y 3 b 300 bb2 res somadobro 800300 res 16 soma 16 return soma Figura 4 Passagem de pardmetros por referéncia Cada parametro representa uma posiado de memoria cujo endereco é 0 mesmo da variavel passada na chamada da funao desta forma qualquer alteracdo sobre os parametros afeta as variaveis que originaram a informagao Fonte PUGA 2016 p 268 No caso da figura acima esta sendo suposto que as variaveis x e y estado localizadas nas posides 800 e 300 da meméoria respectivamente Sendo assim qualquer alteracdo dentro da fundo somadobro sera realizada exatamente em tais posides de memoria modificando consequentemente os valores de x e de y 283 Arquivo de cabecalho arquivo header Ja mencionamos em diversas ocasi6es sobre os arquivos de cabecalho h arquivos header Mas qual a diferenca entre um arquivo header e um arquivo de cddigo Porque ele aparece em grande parte dos programas Os arquivos de cabecalho servem para que as definides por exemplo de constantes estruturas de dados e prototipos de funées a serem utilizadas pelo programa sejam feitas Como um arquivo c pode chamar por exemplo funées implementadas em outro arquivo c o compilador deve conhecer a estrutura da funao chamada ou seja saber o tipo de retorno e os tipos dos pardmetros para verificar durante o processo de compilaao se existe algum tipo de inconsisténcia em relaao ao uso da funao Para montar um arquivo h tomemos por exemplo o cdédigo anterior no qual colocaremos o cabecgalho da fundo soma dobro Neste caso 0 arquivo ficaria assim httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2731 21082023 1630 Técnicas de Programacgao itnder SOMADOBRO Adetine SOMADOBRO somadobroh int somadobrodint int s3j Hendit O ifndef serve para testar se ja foi definido a constante SOMADOBRO caso ja tenha sido definida aborta se a inclusdo do arquivo h especifico sendo definese a constante SOMADOBRO por intermédio do define podese colocar qualquer valor associado a esta constante e inclui o protétipo da fundo nas regras de compilacdo O ifndef evita que ocorra duplicidade de definides quando o arquivo h for referenciado por varios arquivos c Em relaao ao cédigofonte a unica diferena é que apareceria a linha Ainclude somadobroh Utilizar passagem de pardmetros nas funcdes impacta o fator de seu acoplamento Acoplamento relacionase ao grau de interdependéncia dos mddulos ou seja como os mdédulos compartilham por exemplo variaveis globais no caso alteragdes nas estruturas de tais variaveis impacta diretamente sobre os mddulos tendo que neste caso haver modificagdes em todos os médulos que as utiliza Utilizar passagem de paradmetros nas fung6es representa a construcdo de mddulos com acoplamento fraco Acoplamento fraco significa uma maior independéncia entre os médulos e consequentemente as variaveis compartilhadas globalmente httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2831 21082023 1630 Técnicas de Programacgao a Um profissional da area de computacao ao receber um projeto ficou a pensar em como organizar e estruturar o seu codigo Ao verificar o alto grau de complexidade do sistema comegou a refletir sobre a modularizacado Imediatamente ja lhe veio a cabeca os conceitos de acoplamento e de coesao acoplamento no sentido de como os méddulosfungées iriam intercambiar informa6es e coesdo no sentido de nado haver por exemplo sobreposicdo das funcionalidades Diante disso mesmo sem definir o estilo de programacao estruturada ou orientada a objetos a primeira medida que tomou foi aplicar conceitos da Engenharia de Software Para tanto ele estudou padrées e modelos como GRASP General Responsibility Assignment Software Principles Principios Gerais de Atribuicgao e de Responsabilidade do Software UML Unified Modeling Language Linguagem de Modelagem Unificada e o principio SRP do SOLID Single Responsibility Principle Principio da Responsabilidade Unica Em suma ele resolveu fazer esse exercicio de abstracdo pois um sistema deve ser otimizado bem definido e bem estruturado independentemente de qual paradigma de linguagem sera adotado a Construir uma fundo com fraco acoplamento torna o reaproveitamento do cddigo e alteracdes em seu cddigo mais faceis Tal facilidade é conseguida pois toda evocacao é baseada em passagem de paradmetros ou seja sem a necessidade de dependéncia por exemplo de variaveis globais Sintese Chegamos ao fim do nosso segundo encontro sobre técnicas de programacdo Tivemos agora a oportunidade de ampliar os conceitos e funcionalidades da programaado estruturada mais especificamente da programacao usando a linguagem C Com os pontos abordados vocé ja conseguira implementar programas mais complexos e tornalos mais eficientes e estruturados pela utilizacdo de técnicas de modularizacdo utilizando funcées Com os temas estudados até aqui esperamos que vocé continue treinando e incrementando os seus programas computacionais de forma a deixalos mais eficientes e organizados Nesta unidade vocé teve a oportunidade de e ter contato com conceitos de modularizacao de programas e definir fungdes corretamente analisando tipo de retorno e parametros a serem passados e decidir as ocasides que poderao ser alvo da modularizagao httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2931 21082023 1630 Técnicas de Programacgao Clique para baixar o contetido deste tema Bibliografia ASCENCIO A F G Fundamentos de Programacao de Computadores Algoritmos PASCAL CC Padrdo ANSI e Java 3 Ed Sao Paulo Pearson Education do Brasil 2012 Disponivel em https brasilblackboardcomhttps brasilblackboardcom https brasilblackboardcom Acesso em 08072019 ASCENCIO A F G Fundamentos de Programacao de Computadores Algoritmos PASCAL CC Padrdo ANSI e Java 3 Ed Sao Paulo Pearson Education do Brasil 2012 Disponivel em https brasilblackboardcomhttps brasilblackboardcom https brasilblackboardcom Acesso em 08072019 LAVRATTI F Modularizagado de Codigo C 30 min Sao Paulo TDC The Developers Conference 2014 Disponivel em httpswwwinfogcombrpresentations modularizacaodecodigo chttpswwwinfogcombrpresentations modularizacaodecodigoc httpswwwinfogcombrpresentations modularizacaodecodigoc Acesso em 08072019 ASCENCIO A F G Fundamentos de Programacao de Computadores Algoritmos PASCAL CC Padrdo ANSI e Java 3 Ed Sao Paulo Pearson Education do Brasil 2012 Disponivel em https brasilblackboardcomhttps brasilblackboardcom https brasilblackboardcom Acesso em 08072019 MOCHETTI K Dijkstra um Pioneiro em todas as Areas Revista digital SBC Horizontes 2017 Disponivel em httphorizontessbcorgbrindexphp20171023807 httphorizontessbcorgbrindexphp20171023807 Acesso em 08072019 PEDROSO C M Laboratério de Redes Remote Procedure Call RPC 2006 Disponivel em httpwwweletricaufprbrpedroso2009TE090Aulas rpcpdf httpwwweletricaufpr brpedroso2009TE090Aulas rpcpdf Acesso em 08072019 ASCENCIO A F G Fundamentos de Programacao de Computadores Algoritmos PASCAL CC Padrdo ANSI e Java 3 Ed Sao Paulo Pearson Education do Brasil 2012 Disponivel em https brasilblackboardcomhttps brasilblackboardcom https brasilblackboardcom Acesso em 08072019 SCHLEMER E Paradmetros Interessantes do scanf e do printf em C 2009 Disponivel em httpswwwvivaolinuxcombrartigoParametrosinteressantesdoscanfedoprintfem ChttpswwwvivaolinuxcombrartigoParametrosinteressantesdoscanfedoprintfemC httpswwwvivaolinuxcombrartigoParametrosinteressantesdoscanfedoprintfemC Acesso em 08072019 httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 3031 21082023 1630 Técnicas de Programação httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 3131

Envie sua pergunta para a IA e receba a resposta na hora

Recomendado para você

Técnicas de Programação - Unidade 4: Arquivos

37

Técnicas de Programação - Unidade 4: Arquivos

Introdução à Lógica e Programação

UAM

Introdução às Linguagens de Programação Estruturada

31

Introdução às Linguagens de Programação Estruturada

Introdução à Lógica e Programação

UAM

Ordenação Externa e Intercalação de Arquivos

28

Ordenação Externa e Intercalação de Arquivos

Introdução à Lógica e Programação

UAM

Pesquisa sobre Ordenação Interna e Algoritmos de Armazenamento

34

Pesquisa sobre Ordenação Interna e Algoritmos de Armazenamento

Introdução à Lógica e Programação

UAM

Pesquisa Ordenação e Técnicas de Armazenamento: Técnicas de Pesquisa Sequencial e Binária

30

Pesquisa Ordenação e Técnicas de Armazenamento: Técnicas de Pesquisa Sequencial e Binária

Introdução à Lógica e Programação

UAM

Matrizes e Sistemas Lineares em Circuitos Elétricos

1

Matrizes e Sistemas Lineares em Circuitos Elétricos

Introdução à Lógica e Programação

UAM

Traveling Salesman Problem - Discrete Optimization Assignment

4

Traveling Salesman Problem - Discrete Optimization Assignment

Introdução à Lógica e Programação

UAM

Sistema-de-Cadastro-CRUD-em-Java-com-MySQL-e-Swing

1

Sistema-de-Cadastro-CRUD-em-Java-com-MySQL-e-Swing

Introdução à Lógica e Programação

UAM

Texto de pré-visualização

21082023 1630 Técnicas de Programacgao fF TECNICAS DE PROGRAMACAO UNIDADE 2 FUNCOES Fernando Cortez Sica httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 131 21082023 1630 Técnicas de Programação httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 231 21082023 1630 Técnicas de Programacgao Introducao Iniciamos aqui mais uma unidade de nossa conversa sobre técnicas de programacdo Agora falaremos sobre fungées A primeira imagem que pode vir a sua cabeca é uma fundo matematica fx falaremos de matematica Nao propriamente dito falaremos sobre uma outra forma de estruturar um cédigo de forma a definir um bloco de instruc6es para uma certa funcionalidade Mas entdo funcées servem apenas para deixar oO programa estruturado mais facil de ser visualizado Sim um dos objetivos é este mas ha também outros motivos para elas existirem 6 0 que veremos nessa unidade Sabemos que uma funcdo encapsula um conjunto de instrugées O programa principal main é uma fundo Exato O programa principal main foi a primeira fundo que manipulamos aqui na nossa disciplina Aqui falaremos também sobre outras mas principalmente falaremos de como criar funées Mas se funcdo é um bloco de instrucées para uma certa funcionalidade entéo os blocos delimitados por e dos comandos condicionais e comandos de repetido sdo também funcées Nao funées s4o mais abrangentes elas envolvem as instrucées de forma mais ampla ou seja envolvem inclusive os comandos condicionais e os lacos de repetiao Neste capitulo abordaremos os aspectos relacionados aos conceitos e implementacdo de funcées Para tanto falaremos sobre suas nomenclaturas e funcionamento assim como os seus retornos de valores e pardmetros e e 21 Conceitos e caracteristicas de uma funcgao Fungées tem o objetivo de encapsular instrucédes de forma a possibilitar a modularizacao do cédigo Inicialmente podemos definir modularizacdo como a decomposi4o funcional de um sistema computacional Porque falamos sistema computacional e nado programa Um sistema computacional pode envolver varios programas intercambiando informacoes A figura a seguir ilustra uma abstraao de um sistema modular Sistema Instrugao Instrugao fundo s8 Programas misses mee Ue TTC E Instrugao fundo os 50 50 50 lite Te Figura 1 Sistema modular formado por varios programas que podem estar em execucdo em dispositivos distintos cada dispositivo suportado pelo seu respectivo sistema operacional Fonte Elaborada pelo autor 2019 Na figura acima o sistema é formado por varios programas que utilizam as funcionalidades exportadas pelo sistema operacional em execucdo no respectivo dispositivo computacional Tais funcionalidades sdo acessiveis por intermédio das fungdes do sistema disponibilizadas através das bibliotecas padrées Cada programa por sua vez pode ser composto por varios arquivosfonte arquivos c Em fundo da complexidade do programa é sugerivel a sua decomposido em varios arquivos de codificado separados por httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 331 21082023 1630 Técnicas de Programacgao funcionalidades Por exemplo tais funcionalidades poderao ser distinguidas entre aquelas que objetivam a interagdéo com o usuario aquelas que realizam acesso a um banco de dados e aquelas que fazem os processamentos internos do sistema Essas funcionalidades por sua vez sdo conseguidas através da codificacgao de funées especificas ee VOCE O CONHECE e A ideia de modularizacdo surgiu no final da década de 1960 na chamada crise do software Na ocasido Dijkstra ja defendia a ideia de modularizacdo tendo inclusive apresentado em 1972 na ACM Association for Computing Machinery literalmente em portugués Associagao para Maquinas de Computacao o trabalho intitulado The Humble Programmer O Humilde Programador Para saber um pouco mais sobre Dijkstra vocé podera acessar este artigo aqui httphorizontessbcorgbrindexphp20171023807 httphorizontessbcorgbrindexphp20171023807 MOCHETTI 2017 a Essa ideia de dividir o programa em func6es é um dos conceitos da modularizagdo de sistemas mais especificamente modularizaao de programas httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 431 21082023 1630 Técnicas de Programacgao ee VOCE QUER VER e A modularizacado dos programas ajuda a tornalo mais facil de escrever de testar e de reaproveitar cédigos podendo tornalo também mais eficiente O video a seguir httpswwwinfoqcombrpresentationsmodularizacaodecodigoc httpswwwinfogcombrpresentationsmodularizacaodecodigoc aborda o tema de modularizado em linguagem C LAVRATTI 2014 a Mas quais sdo as vantagens de uma programacdo modular contendo inclusive funcées em sua codificaao Modularizar nao significa apenas deixar o cddigo organizado mas sim apresenta uma série de vantagens segundo Deitel 2011 Para conhecer quais sao essas vantagens clique nas abas abaixo Implementacao Facilita o processo de criado testes e corredo de erros a implementacao testes e corregdes com o uso de médulos fica mais pontual ou seja podese focar apenas em uma funcionalidade especifica desta forma conseguese por exemplo corrigir erros mais facilmente pois a localizacado do cédigo dentre milhares de linhas de cédigo fica mais rapida Com funcées é possivel trocar toda uma fund4o por outra de versdo acima Incorporaao Possibilidade de reutilizagao do cédigo o bloco representado pela funcdo podera ser utilizado em outro projeto bastando incorporala ao cdédigo Funcao Evitar reescrita do cddigo ao longo do arquivofonte caso uma certa acdo representada por diversas linhas de cédigo seja requerida em varios momentos e em varios pontos do programa nado sera necessario reescrever 0 codigo e sim apenas chamar a fundo httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 531 21082023 1630 Técnicas de Programacgao Até entado falamos de alguns conceitos inerentes as fun6ées mas na pratica sera que ja usamos func6es nesta disciplina além da fundo mainQ A resposta é positiva por exemplo o printf é uma fundo da chamada biblioteca padrao que evoca funcionalidades do sistema operacional para intervir nas agdes que culmina na manipulado do sistema de video do dispositivo computacional Outros exemplos de fundes que ja utilizamos sao scanf strlen strcmp strcpy atoi e itoa VOCE SABIA e Vocé sabia que as funcées poderdo ser evocadas remotamente Em sistemas ditos como sistemas distribuidos um programa pode evocar uma fundo remota localizada em outro computador Essa chamada é realizada por meio de RPC Remote Procedure Call ou em portugués Chamada a Procedimentos Remotos Para ler sobre 0 assunto e inclusive ver cddigosexemplo em C vocé pode acessar este link httpwwweletricaufprbrpedroso2009TE090Aulasrpcpdf httpwwweletricaufprbrpedroso2009TE090Aulasrpcpdf Em Java existe algo semelhante chamado RMI Remote Method Invocation em portugués Invocacdo de Método Remoto PEDROSO 2006 eee eeeeeeeeeeeeeeeeeeeeeeeee ee ee neers Mas como criar funées A seguir veremos mais detalhes de como criar as func6es e como elas funcionam no escopo de sua execucdo no dispositivo computacional ww 22 Nome de uma funcgao Da mesma forma das variaveis uma funcdo deve ter um nome para que seja evocado As regras para a definiao do nome sao as mesmas em relaao as variaveis clique nos itens abaixo e confira Nao pode conter caracteres especiais como por OP exemplo e acentos httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 631 21082023 1630 Técnicas de Programacgao Deve comecar por uma letra ou com um traco underline Para facilitar a implementado 0 seu nome deve ser sugestivo ou seja ser compativel com a sua funcionalidade Para a definiado de uma funao devese seguir a seguinte sintaxe tipoderetorno nomedafuncao parametros Para exemplificar a sintaxe tomemos como exemplos Ooid ImprimeMensagenschar mensfti int Fatorialint No int main 9 Mas 0 que é tipo de retorno e 0 que sao parametros de uma funcdo Porque 0 main tem um tipo de retorno int E os parametros do main Uma fungao pode ter auséncia de parametros Antes de conversarmos sobre essas duvidas vamos falar sobre como funcionam as funcées 23 Como Funciona uma Fungao Quando uma fundo é evocada deve haver um desvio de fluxo de processamento de modo a executar as linhas de cédigo da fundo chamada A figura a seguir ilustra o processo de execucao de uma funao httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 731 21082023 1630 Técnicas de Programacgao Salvamento de contexto Instrugao Instrugao ZO Instrugao Instrugdes da ChamadaFungao fungao chamada Instrugao Instrugao Recuperacao do contexto Figura 2 Cenario criado para a chamada de uma funaAo O fluxo é desviado para que as instrucdes pertinentes a funcdo sejam executadas Fonte Elaborada pelo autor 2019 Na figura acima sdo destacados os eventos de salvamento e recuperacdo de contexto estes eventos sao responsaveis por salvar e recuperar em uma regido da memoria principal mapeada na forma de pilha de dados o valor dentre outras informacées do registrador PC program conter ou contador de programa O registrador PC também chamado de IP instruction pointer ou ponteiro de instrucdo é uma estrutura de hardware que armazena o endereo da linha a ser executada Na chamada da fun4o esse valor corresponde ao ponto que houve a evocagado da fundo esse ponto sera restaurado para que a execucao do programa continue na linha imediatamente apés a chamada da funcao Uma outra questdo para entendermos sobre o funcionamento das funcées diz respeito as variaveis declarar uma variavel dentro da funcéo é a mesma coisa que declararmos fora Para respondermos 4a tal questionamento veremos a seguir 0 corpo de uma funcao 24 O Corpo de uma fungao Um ponto que merece destaque na implementaao de uma funcdo reside no fato de que as variaveis declaradas dentro da funcdo séo denominadas como variaveis locais Varidveis locais somente sao visiveis dentro da propria fungdo enquanto que as variaveis globais sdo visiveis em toda extensdo do programa Para entendermos melhor essa diferenca tomemos por base 0 trecho de cédigo a seguir int x int funcao1 int ab ax by httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 831 21082023 1630 Técnicas de Programacgao int main int y No trecho acima encontramos a declaracdo de x fora de qualquer fundo enquanto a declaracdo de y encontrase dentro do corpo da main Podemos ver ainda uma funao funcao1 que manipula tanto x quanto y para atribuir os seus valores as variaveis a e b respectivamente Como a variavel x é global a funcao1 podera acessala em seu cédigo porém havera um erro de compilaao na linha b y do tipo varidvel y ndo declarada pois pelo fato de ser local a main nao é visivel a funcao1 Uma variavel local existe na memoria apenas durante a execucdo da fundo Quando a fundo acaba o seu processamento e o fluxo voltam para o ponto de chamada as variaveis locais sdo apagadas da memoria Caso a funcdo seja chamada localmente serdo alocadas novamente as variaveis locais sendo os seus valores iniciados novamente os valores da execudo antiga sao perdidos a menos que se use 0 modificador static por exemplo static int a Para ilustrar melhor uma funcado vamos supor o cédigo a seguir include stdioh int x void funcaoTeste int a a x printfValor de a d a X5 int main x0 funcaoTeste printfValor de x d x No exemplo acima temos a funcdo funcaoTeste que cria a variavel local a e manipula também a variavel global x A fundo funcaoTeste é evocada a partir da fundo main apos a sua finalizacdo ocorre a execucao da linha que contém o cédigo printfValor de x d x Vocé deve estar se perguntando Mas e o tipo da funcdo Para que serve por exemplo o int antes do main Veremos agora a questao de retorno das funcées 25 Fungoes que nao retornam valor Inicialmente quando pensamos em uma fundo matematica nos vem a cabeca um valor retornado por exemplo a fundo matematica seno retorna o valor do seno de um angulo Dessa forma podemos ja fazer uma analogia entre a fundo matematica e a fundo computacional o tipo associado a funcdo referese ao formato do valor retornado pela funcdo Voltando ao caso do seno o seu retorno seria 0 tipo float httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 931 21082023 1630 Técnicas de Programacgao Mas toda funcdo deve retornar um valor O retorno de valor de uma fundo nado é um item obrigatério neste caso uma funcado consiste apenas de uma sequéncia de acdes sem o retorno do resultado de seu processamento Para alguns autores como Ascencio 2012 em outras linguagens como a linguagem PASCAL diferenciase uma funcdo com retorno e uma fundo sem retorno Para se adequar a linguagem uma fundo que nada retorna é chamada de procedimento procedure Ja de acordo com Puga 2016 a diferenca basica entre procedimento e funcdo consiste no fato de que as func6es poderdo ser usadas em express6es ou seja usadas como parte geradora de um valor que sera atribuido a uma variavel No caso do procedimento como ele nao retorna valor nado sera possivel utilizalo em express6es de atribuicao eee ee rere eee e reer renee eee eee eee eee ee eee VOCE QUER LER e A funcao printf que vocé ja vem utilizando em seus programas é passivel de varias formatagoes de saida nado se limitando ao tipo de dado a ser manipulado Para saber um pouco mais a respeito do comando printf veja o material disponivel aqui httpswwwvivaolinuxcombrartigoParametrosinteressantesdoscanfedo printfemC httpswwwvivaolinuxcombrartigoParametrosinteressantesdo scanfedoprintfemC SCHLEMER 2009 errr reer rere cere e eee No caso da linguagem CC a diferenciaao se faz apenas na definiao do tipo do retorno O uso é definido pelo programador por exemplo a funao printf geralmente é usada fora de express6es porém ela retorna a quantidade de caracteres impressos e poderia ser usada da seguinte forma qtdcaracimpressos printf01a mundo Como podemos perceber pela linha de cédigo acima a linguagem CC nao faz muita distindo entre uma fungdo retornando ou nao retornando valor Mas como diferenciar na implementado Para exemplificar vamos dar uma olhada no cédigo colocado abaixo httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTTECPRO19unidade2ebookindexhtml 1031 21082023 1630 Técnicas de Programacgao Hinclude stdioh void Esperat unsigned int 186 3 forqy 1500005 i Ford 265 5SOG005 tty int maine printfcVamos esperar um poucoin Jf Esperaths printfcE esperar mais um poucoziny Esperats5 printfeTestando sua paciencia a espera derradeirain Esperats5 printfePronto Voce eh agora uma pessoa mais pacientel 1Jiny return No cédigo acima definimos como void o tipo do retorno da fundo Espera Quando se define uma fungado com o tipo void vazio nao necessitamos usar o return valor ao final de seu processamento Caso seja necessario interromper o processamento de uma funcao do tipo void basta inserir um return sem valor de retorno ou seja simplesmente return Vejamos mais um exemplo httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1131 21082023 1630 Técnicas de Programacgao include stdioh include stringh include ctyupeh fpara usar o toupperd char mensagem3 opcacey void EntradaMenut da printf Digite XX para Processar Xiny printfDigite Y para processar Yin 9 printftDigite E para encerrar4ny scanftid opcacly opGao toupperfopcacy ftoupperd transforma o pardametro em mailisculo Rahile CCopcacla x 8aCopcact8afopcaclE void ImprimirMensagemt printfMensagem Zsinmensagem int maind EntradamMenut switchtopcac case xX strcpytmensagem Proecessamento de X5 breaky case YY strcpymensagemProcessamento de YM breaky case E strcpymensagem Encerrando programa3 breakgy ImprimirmMensagemt5 return F No exemplo acima as fungées EntradaMenu e ImprimirMensagem nado possuem retorno e as informa6es sdo intercambiadas por intermédio de variaveis globais variaveis definidas fora do bloco representado pelo main Chamamos esse tipo de implementacdo de acoplamento forte pois existem as httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1231 21082023 1630 Técnicas de Programacgao fung6es que dependem da existéncia das variaveis globais Uma consequéncia deste tipo de dependéncia é a dificuldade de manutendo pois qualquer alteracdo por exemplo nas variaveis globais afetam todas as fungées delas dependentes Todas as fundes que nado possuem retorno dependem de variaveis globais para o seu funcionamento Nao a dependéncia ou nao de variaveis globais dependera exclusivamente de suas funcionalidades para as quais uma fundo é implementada Mas existem fun6es que retornam valores Sim veremos como implementar fundes que retornam valores a seguir 26 Funcoes que retornam valor Voltando a nossa abstracdo matematica a fundo seno é uma fundo que retorna valor Em C no caso de visualizarmos na funcdo uma linha com 0 comando return valor como acontece em main int main return 0 podemos dizer que a referida fundo retorna valor Mas entdao qual seria 0 retorno do mainQ Quem chamou o main para receber o valor de retorno Lembrese que 0 main é 0 ponto de partida de um programa escrito em CC portanto ele é chamado pelo sistema operacional O valor inteiro retornado pelo main ao sistema operacional representa um valor indicativo do motivo de sua finalizaao normal ou decorrente de uma falha de execucdo Esse cédigo de retorno permite ao sistema operacional realizar agdes de controle e dependendo do caso ativar agdes de interagdo com o usuario Mas como retornar um valor Creio que vocé esteja lembrado da linha do main com o cdédigo return 0 O retorno de valor é realizado através do return Para relembrar o return no main segue um trecho int main int y return 0 Podese aplicar a mesma estrutura visto na fundo main para outras funées Sim o programador pode criar funées conforme a sua necessidade o que lhe da também a possibilidade de especificar o tipo de retorno conforme a sua conveniéncia Por exemplo vamos dar uma olhada no cédigo para gerar seis dezenas para apostarmos na Megasena include stdioh paraa funcao printf include stdlibh para as funcoes srand e rand include timeh paraa funcao time int DezenaSorteada int dezena do dezena rand61 o valor 60 é valido whiledezena0 evitar retornar o valor 0 return dezena int main int i0qtd srandtimeNULL printfQuantidade de dezenas a serem sorteadas httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1331 21082023 1630 Técnicas de Programacgao scanfdqtd for i qtd i printfSorteio Yd d i1DezenaSorteada return 0 No cédigo acima temos um exemplo de uma funao que retorna um valor inteiro No caso especifico do exemplo a fundo DezenaSorteada retorna um valor entre 1 e 60 para que seja impresso na tela para o usuario por intermédio da linha printfSorteio d d it1DezenaSorteada Para tanto foram utilizadas as funcées srand que inicia o gerador de nimeros aleatérios time que retornara 0 tempo transcorrido desde 1 de janeiro de 1970 em segundos que servira como semente para a iniciacdo do gerador de numeros aleatérios e por fim a funcdo rand que retornara um valor inteiro entre 0 e a constante RANDMAX definida no arquivo header stdlibh O cédigo com return deve ser inserido apenas na Ultima linha de uma funcdo Nao necessariamente Pode se colocar return ao longo do corpo da funao para interromper a fundo e voltar ao ponto de chamada caso algum erro tenha ocorrido Um exemplo de return ao longo do corpo da fundo esta referenciado no trecho de codigo a seguir int funcao int xy ify 0 return 1 return absx y No exemplo acima temos 0 término antecipado da fundo em virtude da situacdo de erro testada no comando condicional no caso o denominador da divisdo nado pode assumir o valor 0 Ao ser verificada essa condiao de erro a fundo retorna o valor 1 Foi escolhido esse valor como retorno de erro pois em operacao normal a fundo sempre retornara um valor positivo representado pelo valor absoluto da divisado de x por y O valor absoluto é conseguido através da utilizacdo da funcdo absQ definida no arquivo header stdlibh Essa finalizacdo feita antes de se chegar ao final da funado podera ser usada também em casos normais de execucdo onde um certo objetivo ja tenha sido cumprido Vocé pode ficar a se perguntar eu ja ouvi falar em um comando chamado break usado nos lacgos de repetido e inclusive no comando switchcase O break tem a mesma funcionalidade em relado ao return Para falarmos sobre essa dtvida vamos analisar 0 cédigo abaixo httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1431 21082023 1630 Técnicas de Programação httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1531 21082023 1630 Técnicas de Programacgao No cédigo acima temos o uso de return e de break Podemos ver que ao utilizarse o return nado é colocada a parte else nos comandos condicionais pelo fato de que a execucao é interrompida retornando a posicado de chamada da funcdo no caso retornando ao main Por sua vez acontece a interrupao do laco continuando na propria funcdo quando usado o break Desta forma a fundo retornara um valor positivo indicando a posido do elemento buscado dentro do vetor ou retornara um valor negativo indicando uma operaao malsucedida Para finalizar foram sublinhadas no cdédigo todas as ocorréncias de fundes para que possamos identificar e diferenciar 0 que 6 comando e o que é funao dentro da linguagem CC Vamos entdo reescrever 0 exemplo do menu de opcodes mostrado quando estavamos falando sobre funcgées que nado retornam valor usando fundes que retornam valor include stdich include stringh Ainclude ctyupeh char mensagemE3se4 char EntradaMenut char opcaomey do prantfc41nDigite Xi para Processar xin3y prantfCDigite Y2 para processar Yin 3y praintfcDigite ES para encerrarin scanfC id opcaolf opgao toupperfopcaodyy Fahile CCopcaclaX 88Copcaclay8CopcacltsE si return opcacg ss 8 int maine char ong opzEntradamMenuty 2 Na versao do cédigo acima podemos notar que a variavel opcao desapareceu da lista de variaveis globais O intercambio referente a escolha do usuario passou a Ser por intermédio do retorno da fundo EntradaMenu Sendo assim a coesdo em relado a essa funcdo passou a ser baixa pois nao ha dependéncias de variaveis httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1631 21082023 1630 Técnicas de Programacgao globais No caso do exemplo acima a funcado retorna um tipo opcao desta forma podemos mencionar que uma funao pode retornar qualquer tipo de dados previamente definido Vamos ver um outro exemplo Para tanto suponha o cédigo abaixo de uma calculadora para realizar as quatro operac6es aritméticas basicas httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1731 21082023 1630 Técnicas de Programação httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1831 21082023 1630 Técnicas de Programação httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 1931 21082023 1630 Técnicas de Programação httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2031 21082023 1630 Técnicas de Programacgao switchtop case I restsomathy breaks case E resssubt break case I resmul G35 breaks case I restdivedy breaks printfeResultada Zdin resdy return Neste cédigo cada operacao aritmética é representada por uma funcao Para simplificar o exemplo nado estado sendo tratadas condi6es de erro como por exemplo a divisdo por 0 A partir da escolha realizada pelo usuario feita por intermédio da fundo Menu a instanciacdo da variavel res é feita com o retorno da funcao correspondente httpswwwvivaolinuxcombrartigoParametrosinteressantesdoscanfedoprintfemC httpswwwvivaolinuxcombrartigoParametrosinteressantesdoscanfedoprintfemCAté 0 momento falamos apenas sobre o retorno das funcées Mas como passar valores para as funcées de modo que elas httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2131 21082023 1630 Técnicas de Programacgao possam coletar e processar valores diferentes a cada chamada Isso é 0 veremos a seguir quando conversaremos sobre pardmetros das func6es 27 Parametros Como ja antecipamos um pouco parametros servem para informar a funcdo qual deve ser o conjunto de valores que precisam ser processados Para ficar mais claro vamos voltar ao exemplo da fundo matematica seno Ao usarmos ysenox ja fica subtendido que desejamos atribuir a variavel y o valor do seno referente a x graus Desta forma podemos falar que x é 0 parametro da fundo seno Na computacao nao é diferente ou seja parametro sdo os valores passados para as funées para que elas possam realizar os seus processamentos especificos Antes de entrarmos especificamente nos parametros das fundes vamos nos prender um pouco na funao mainQ Sera que podemos passar argumentos quando evocamos o programa por intermédio da linha de comando prompt ou cmd Sim a fundo main consegue receber parametros basta implementar como sugere o trecho de cédigo a seguir int mainint arge char arqvi ifargcl printfParametros nao passados return printfCNome do programa chamado sinarqviely printfParametro passado Zsinaroqvli13 6 A funcdo mainQ admite dois pardmetros passados pela linha de comando o primeiro parametro do tipo inteiro indica a quantidade de argumentos passados Caso o usuario nado passe parametros a variavel no nosso exemplo chamada como argc tem o valor 1 O valor 1 referese ao préprio nome do programa passado como parametro pelo sistema operacional que ocupa a posicdo 0 do vetor argv que contém a lista de pardmetros Os demais pardmetros quando existirem poderdo ser acessados nas posi6ées subsequentes 4a posiao 0 Mas e 0 caso das funcées que nao sejam a funao main Como devemos passar informagées para elas Para a passagem de pardmetros em uma fundo deveremos criar uma lista de variaveis em sua interface na seguinte forma tipoderetorno NomeDaFuncao lista de parametros Sendo que a lista de pardametros se assemelha a criacdo de variaveis ou seja as variaveis deverdo ser criadas de acordo com a sintaxe tipo1 var1 tipo2 var2 Por exemplo no caso termos uma fundo que receba como parametros dois valores inteiros para seja realizada e retornado o valor de uma soma teriamos httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2231 21082023 1630 Técnicas de Programacgao unt Somaint a int Db A ordem de definicao das variaveis devera ser a mesma em relaao a chamada da funaAo ou seja o primeiro parametro passado sera associado ao primeiro parametro da interface da fundo 0 segundo da chamada ao segundo da interface e assim por diante Cada pardmetro podera ser passado por valor ou por referéncia conforme sera descrito a seguir MIZRAHI 2008 nw nw e 28 Parametros passados por valor e por referencia Como mencionado anteriormente existem duas formas de se passar um parametro por valor e por referéncia Para adiantar vamos falar genericamente que a passagem por valor é usada quando o parametro é apenas de entrada ou seja permite que a informaao seja passada apenas para dentro da fundo A passagem por referéncia autoriza que o fluxo seja bidirecional ou seja aceita que a informacao seja passada para a fundo ea partir dela Daremos sequéncia ao aprofundamento do assunto a seguir 281 Parametros passados por valor A forma mais simples de se passar parametros para a funcdo é através de passagem por valor Neste tipo de passagem o sistema realiza uma copia do valor passado em uma variavel criada localmente Para continuarmos a detalhar sobre 0 assunto tomemos como exemplo 0 cdédigo adaptado de Puga 2016 httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2331 21082023 1630 Técnicas de Programacgao include stdioh int somadobroint a int b Ata 2 be b 25 return atby int maint int xUres printfeDigite o valor de XE scanft id 5 printfeDigite o valor de YE scanfFc id 35 resssomacdobrotxUay printfCResultade do processamento de Yd e wdk d x yy resi return f No cédigo acima temos uma funao somadobro que recebe dois parametros a e b Como sabemos que os pardmetros sdo passados por valor No caso podemos verificar que cada parametro é definido pela seguinte sintaxe tiporetornodafungao nmomefungao tipo nomedoparametro Mas alterandose dentro da funcdo os valores das variaveis passadas como pardmetros a e b nado serdo alterados os valores das variaveis na origem da chamada no caso as variaveis x e y Nao ha esse perigo pois quando se passar por valor cada pardmetro origina uma variavel local que é instanciada com o valor passado pela variavel na origem da chamada Neste caso por exemplo as variaveis x e a sao totalmente distintas A figura a seguir mostra melhor o que acabamos de falar httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2431 21082023 1630 Técnicas de Programacgao Funcao main Fungao somadobro res somadobro 5 3 x 5 5 5210 8 3 326 res 16 soma 16 return soma Figura 3 Passagem de paradmetros por valor Cada parametro da funao implica na criagao de uma variavel local que recebe uma cépia do valor passado como pardmetro nao afetando a variavel que originou a informacao Fonte PUGA 2016 p 267 Para finalizar podemos falar que utilizamos passagem por valor quando desejamos manter as informacées intactas no ponto de chamada ou ainda quando a funao nao objetiva alteragdes nos valores dos pardmetros mas sim apenas usalos como fonte de dados para prosseguir 0 seu processamento 282 Parametros passados por referéncia Como mencionamos anteriormente os valores dos pardmetros passados por valor s4o mantidos intactos quando estamos nos referenciando ao ponto de chamada da funao Mas e se desejarmos por algum motivo alterar os valores das variaveis no ponto de origem Para isso temos a opcao de realizar passagem por referéncia Vamos modificar o cédigo utilizado para a passagem de paradmetros por valor e transformalo para passagem de pardmetros por referéncia httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2531 21082023 1630 Técnicas de Programacgao Hinclude stdioh int somadobroint wa int mb Sa eB M ZI ab ab m 379 return aaby int main int xUresy printfeDigite o valor de xi scanFa cl a5 printfeDigite o valor de Yr scanfFt tcl U5 resmsomacdobrotx u4 printfCResultade do processamento de d 6 ddr Yd Uy reshy return Para comecar notamos que aparece o simbolo na definicdo dos parametros da funao O simbolo int a int indica que estamos ao invés de um valor recebendo uma posiao de memoria cujo conteuido sera manipulado pela fundo Esse mesmo sinal aparece quando manipulamos as variaveis no corpo da funcao Em tal ocasido 0 sinal denota o contetido da posiao de memoria Por exemplo na linha 2 2 m 23 podemos traduzir como o contetido da posido de memoria apontada por a recebe o contetido da posido de memoria apontado por a vezes 2 Desta forma como estamos atribuindo um valor para uma posido de memoria automaticamente estamos alterando o valor da variavel que originou o parametro na chamada da fundo no caso do exemplo a variavel x Ja que estamos falando que x indica uma posido de memoria significa que temos que passar para a fundo nao um valor e sim uma posiao de memoria Este feito é conseguido utilizandose o sinal No caso do exemplo a chamada soma clobrotdxc yy pode ser traduzida como evocase a fungao somadobro passando como pardmetros a posido de memoria apontada por x e a posiao de memoria apontada por y Creio que agora vocé esta comecgando a entender sobre 0 motivo de usarmos 0 simbolo na utilizacdo da fundo scanf No caso passamos o endereco da variavel passada pela scanf para que a funcdo possa nos devolver o valor fornecido pelo usuario A figura a seguir ilustra esse processo de passagem por pardmetro tomando por base o exemplo de cédigo acima httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2631 21082023 1630 Técnicas de Programacgao Funao main 10 Funcao somasobro 800 a 800 aa2 y 3 b 300 bb2 res somadobro 800300 res 16 soma 16 return soma Figura 4 Passagem de pardmetros por referéncia Cada parametro representa uma posiado de memoria cujo endereco é 0 mesmo da variavel passada na chamada da funao desta forma qualquer alteracdo sobre os parametros afeta as variaveis que originaram a informagao Fonte PUGA 2016 p 268 No caso da figura acima esta sendo suposto que as variaveis x e y estado localizadas nas posides 800 e 300 da meméoria respectivamente Sendo assim qualquer alteracdo dentro da fundo somadobro sera realizada exatamente em tais posides de memoria modificando consequentemente os valores de x e de y 283 Arquivo de cabecalho arquivo header Ja mencionamos em diversas ocasi6es sobre os arquivos de cabecalho h arquivos header Mas qual a diferenca entre um arquivo header e um arquivo de cddigo Porque ele aparece em grande parte dos programas Os arquivos de cabecalho servem para que as definides por exemplo de constantes estruturas de dados e prototipos de funées a serem utilizadas pelo programa sejam feitas Como um arquivo c pode chamar por exemplo funées implementadas em outro arquivo c o compilador deve conhecer a estrutura da funao chamada ou seja saber o tipo de retorno e os tipos dos pardmetros para verificar durante o processo de compilaao se existe algum tipo de inconsisténcia em relaao ao uso da funao Para montar um arquivo h tomemos por exemplo o cdédigo anterior no qual colocaremos o cabecgalho da fundo soma dobro Neste caso 0 arquivo ficaria assim httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2731 21082023 1630 Técnicas de Programacgao itnder SOMADOBRO Adetine SOMADOBRO somadobroh int somadobrodint int s3j Hendit O ifndef serve para testar se ja foi definido a constante SOMADOBRO caso ja tenha sido definida aborta se a inclusdo do arquivo h especifico sendo definese a constante SOMADOBRO por intermédio do define podese colocar qualquer valor associado a esta constante e inclui o protétipo da fundo nas regras de compilacdo O ifndef evita que ocorra duplicidade de definides quando o arquivo h for referenciado por varios arquivos c Em relaao ao cédigofonte a unica diferena é que apareceria a linha Ainclude somadobroh Utilizar passagem de pardmetros nas funcdes impacta o fator de seu acoplamento Acoplamento relacionase ao grau de interdependéncia dos mddulos ou seja como os mdédulos compartilham por exemplo variaveis globais no caso alteragdes nas estruturas de tais variaveis impacta diretamente sobre os mddulos tendo que neste caso haver modificagdes em todos os médulos que as utiliza Utilizar passagem de paradmetros nas fung6es representa a construcdo de mddulos com acoplamento fraco Acoplamento fraco significa uma maior independéncia entre os médulos e consequentemente as variaveis compartilhadas globalmente httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2831 21082023 1630 Técnicas de Programacgao a Um profissional da area de computacao ao receber um projeto ficou a pensar em como organizar e estruturar o seu codigo Ao verificar o alto grau de complexidade do sistema comegou a refletir sobre a modularizacado Imediatamente ja lhe veio a cabeca os conceitos de acoplamento e de coesao acoplamento no sentido de como os méddulosfungées iriam intercambiar informa6es e coesdo no sentido de nado haver por exemplo sobreposicdo das funcionalidades Diante disso mesmo sem definir o estilo de programacao estruturada ou orientada a objetos a primeira medida que tomou foi aplicar conceitos da Engenharia de Software Para tanto ele estudou padrées e modelos como GRASP General Responsibility Assignment Software Principles Principios Gerais de Atribuicgao e de Responsabilidade do Software UML Unified Modeling Language Linguagem de Modelagem Unificada e o principio SRP do SOLID Single Responsibility Principle Principio da Responsabilidade Unica Em suma ele resolveu fazer esse exercicio de abstracdo pois um sistema deve ser otimizado bem definido e bem estruturado independentemente de qual paradigma de linguagem sera adotado a Construir uma fundo com fraco acoplamento torna o reaproveitamento do cddigo e alteracdes em seu cddigo mais faceis Tal facilidade é conseguida pois toda evocacao é baseada em passagem de paradmetros ou seja sem a necessidade de dependéncia por exemplo de variaveis globais Sintese Chegamos ao fim do nosso segundo encontro sobre técnicas de programacdo Tivemos agora a oportunidade de ampliar os conceitos e funcionalidades da programaado estruturada mais especificamente da programacao usando a linguagem C Com os pontos abordados vocé ja conseguira implementar programas mais complexos e tornalos mais eficientes e estruturados pela utilizacdo de técnicas de modularizacdo utilizando funcées Com os temas estudados até aqui esperamos que vocé continue treinando e incrementando os seus programas computacionais de forma a deixalos mais eficientes e organizados Nesta unidade vocé teve a oportunidade de e ter contato com conceitos de modularizacao de programas e definir fungdes corretamente analisando tipo de retorno e parametros a serem passados e decidir as ocasides que poderao ser alvo da modularizagao httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 2931 21082023 1630 Técnicas de Programacgao Clique para baixar o contetido deste tema Bibliografia ASCENCIO A F G Fundamentos de Programacao de Computadores Algoritmos PASCAL CC Padrdo ANSI e Java 3 Ed Sao Paulo Pearson Education do Brasil 2012 Disponivel em https brasilblackboardcomhttps brasilblackboardcom https brasilblackboardcom Acesso em 08072019 ASCENCIO A F G Fundamentos de Programacao de Computadores Algoritmos PASCAL CC Padrdo ANSI e Java 3 Ed Sao Paulo Pearson Education do Brasil 2012 Disponivel em https brasilblackboardcomhttps brasilblackboardcom https brasilblackboardcom Acesso em 08072019 LAVRATTI F Modularizagado de Codigo C 30 min Sao Paulo TDC The Developers Conference 2014 Disponivel em httpswwwinfogcombrpresentations modularizacaodecodigo chttpswwwinfogcombrpresentations modularizacaodecodigoc httpswwwinfogcombrpresentations modularizacaodecodigoc Acesso em 08072019 ASCENCIO A F G Fundamentos de Programacao de Computadores Algoritmos PASCAL CC Padrdo ANSI e Java 3 Ed Sao Paulo Pearson Education do Brasil 2012 Disponivel em https brasilblackboardcomhttps brasilblackboardcom https brasilblackboardcom Acesso em 08072019 MOCHETTI K Dijkstra um Pioneiro em todas as Areas Revista digital SBC Horizontes 2017 Disponivel em httphorizontessbcorgbrindexphp20171023807 httphorizontessbcorgbrindexphp20171023807 Acesso em 08072019 PEDROSO C M Laboratério de Redes Remote Procedure Call RPC 2006 Disponivel em httpwwweletricaufprbrpedroso2009TE090Aulas rpcpdf httpwwweletricaufpr brpedroso2009TE090Aulas rpcpdf Acesso em 08072019 ASCENCIO A F G Fundamentos de Programacao de Computadores Algoritmos PASCAL CC Padrdo ANSI e Java 3 Ed Sao Paulo Pearson Education do Brasil 2012 Disponivel em https brasilblackboardcomhttps brasilblackboardcom https brasilblackboardcom Acesso em 08072019 SCHLEMER E Paradmetros Interessantes do scanf e do printf em C 2009 Disponivel em httpswwwvivaolinuxcombrartigoParametrosinteressantesdoscanfedoprintfem ChttpswwwvivaolinuxcombrartigoParametrosinteressantesdoscanfedoprintfemC httpswwwvivaolinuxcombrartigoParametrosinteressantesdoscanfedoprintfemC Acesso em 08072019 httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 3031 21082023 1630 Técnicas de Programação httpscodelyfmucontents3amazonawscomMoodleEADConteudoCTITECPRO19unidade2ebookindexhtml 3131

Sua Nova Sala de Aula

Sua Nova Sala de Aula

Empresa

Central de ajuda Contato Blog

Legal

Termos de uso Política de privacidade Política de cookies Código de honra

Baixe o app

4,8
(35.000 avaliações)
© 2025 Meu Guru®