Logo Passei Direto
Buscar

Funções e Parâmetros em C

User badge image
Lucas Maciel

em

Ferramentas de estudo

Questões resolvidas

Material
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Questões resolvidas

Prévia do material em texto

11/11/2024, 13:18 Funções e Passagem de Parâmetros FUNÇÕES E PASSAGEM DE PARÂMETROS Aula 1 FUNÇÕES Funções Estudante, esta videoaula foi preparada especialmente para você. Nela, você irá aprender conteúdos importantes para a sua formação profissional. Vamos assisti-la? 1/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Ponto de Partida Olá! Até este ponto você já estudou praticamente todos os conceitos fundamentais de algoritmos e linguagem de programação, como os tipos de dados, variáveis, constantes, operadores e expressões, estruturas de controle, estruturas homogêneas e heterogêneas, além de ponteiros. Agora vamos prosseguir um pouco mais em nossos estudos e introduzir os conceitos de procedimentos e funções! Você foi recrutado por um laboratório de pesquisa que presta serviços terceirizados para colaborar com vários profissionais. Seu primeiro projeto será com departamento de engenheiros civis. Eles receberam uma solicitação da construtora local para calcular e determinar qual guindaste deve ser utilizado em uma determinada construção para erguer as colunas de concreto armado. Eles têm à disposição três tipos de guindastes: G1, G2 e G3. A seleção do guindaste a ser usado depende do peso da peça que será levantada pelo equipamento, qual é calculado pela fórmula P = VR, em que P representa peso da coluna, V é volume e R é a constante 2/7211/11/2024, 13:18 Funções e Passagem de Parâmetros utilizada, que é igual a 25 kN/m³. As diretrizes para a escolha do guindaste estão especificadas na Tabela 1. Regra Guindaste Peso 1500 Kg G3 Tabela 1 Regras para escolha do guindaste. Para automatizar processo com base nas medidas da coluna (base, largura e altura), como programa determinará e informará aos engenheiros guindaste que deve ser utilizado? Para cumprir sua missão, você irá aprender sobre a distinção entre procedimentos e funções, bem como a criação e utilização desses conceitos. Agora vamos lá, preste muita atenção e tenha um excelente estudo! Vamos Começar! Conceitos e definição de funções Até este ponto, você já desenvolveu vários algoritmos na linguagem C, correto? Nos programas que criou, mesmo sem ter um conhecimento formal sobre funções, você já as utilizou! Por exemplo, printf() e scanf() são funções incluídas nas bibliotecas da linguagem que você utiliza desde início. Mas antes mesmo 3/7211/11/2024, 13:18 Funções e Passagem de Parâmetros destas funções você já empregou uma função muito importante! Observe código apresentado no Quadro 1, que exibe uma mensagem na tela. Na linha 2 temos comando "int main()". Esse comando define uma função denominada "main" que retorna um valor inteiro, neste caso, zero. Parece complexo? Fique tranquilo! Vamos compreender adequadamente como construir e operar esse recurso fundamental. 1: #include 2: int main(){ 3: printf("Hello World!",altura[0]); 4: return 0; 5: } Quadro 1 Exemplo de programa em C. A concepção de desenvolver programas com conjuntos de funcionalidades deriva de uma estratégia de design de algoritmos conhecida como "dividir para conquistar". conceito é direto: ao enfrentar um problema, é recomendado dividi-lo em problemas menores, facilitando assim sua resolução e organização. Essa técnica compreende três etapas (Figura 1): 1. Dividir: fragmentar um problema em subproblemas menores. "Resolver problemas de menor escala, em vez de um problema único e grande, é, do ponto de vista computacional, teoricamente mais simples". 2. Conquistar: utilizar uma sequência de instruções separadas para resolver cada subproblema. 3. Combinar: integrar a solução de cada subproblema para obter a solução completa do problema original. 4/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Dividir Conquistar Combinar Subproblema 1 Solução 1 Problema Subproblema 2 Solução 2 Solução Inicial Completa Subproblema 3 Solução 3 Figura 1 Resumo da técnica dividir para conquistar. Em linguagem C, uma função é essencialmente um fragmento de código autônomo incorporado em um programa maior, designado para desempenhar uma tarefa específica com relativa independência do restante do código. Uma das vantagens fundamentais das funções é a capacidade de serem executadas repetidamente, que proporciona a reutilização eficiente do código. Em vez de repetir várias vezes um conjunto de comandos para realizar uma determinada operação, é possível simplesmente chamar a função responsável por essa tarefa em múltiplas ocasiões. Essa prática, que também pode ser chamada de modularização, não só economiza espaço e torna código mais conciso, mas também viabiliza ajustes ágeis no código associado a essa tarefa específica. A organização do código em várias funções também desempenha um papel crucial na manutenção da clareza e limpeza do programa. Ao dividir código em partes menores, cada uma focada em uma tarefa específica, a complexidade geral do programa é reduzida, tornando o código mais legível e compreensível. Esse método de divisão modular não apenas facilita a compreensão do funcionamento do programa, mas também simplifica processo de identificação e correção de possíveis erros ou problemas no código. A Figura 2 ilustra esta ideia de que as funções são blocos de construção que permitem a divisão dos programas em partes menores (Segmentar uma tarefa grande de computação em várias tarefas menores). 5/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Função Principal Função 1 Função 2 Muito grande Difícil análise Função n Função Principal Figura 2 de um programa sendo dividido em funções. Sintaxe de funções: parâmetros e retorno Agora que sabemos a motivação por trás do conceito de função, como criá-la? Para isso, utilizamos a seguinte sintaxe: () { (não obrigatório) } Cada declaração de função possui uma série de parâmetros, alguns dos quais são fundamentais, enquanto outros são opcionais. Vamos examinar cada um deles: Tipo de retorno: este parâmetro é obrigatório e indica o tipo de valor que a função retornará. Pode ser um valor inteiro (int), decimal (float ou double), caractere (char) ou outro tipo de dado. No caso de uma sub-rotina que executa um processo sem retornar um valor específico, utiliza-se parâmetro void. Nesse contexto de função sem tipo de retorno (void), a função é denominada de procedimento e uso do void pode ser omitido. 6/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Nome: outro parâmetro obrigatório que especifica identificador da função. Funciona de maneira similar ao nome de uma pessoa, em que é necessário chamá-la pelo nome para interagir. É importante ressaltar que nome não deve conter acentos, caracteres especiais ou espaços, seguindo as mesmas regras aplicadas a nomes de variáveis. Parênteses após nome: é um parâmetro obrigatório que acompanha nome da função ou procedimento. Por exemplo, temos as expressões main(), printf() e somar(). Parâmetros: este campo é opcional, e contém valores que podem ser passados para a função, sobre os quais a função deve operar. Os parâmetros das funções atuam de maneira análoga às variáveis das funções matemáticas. Por exemplo: imagine a função matemática f(x) = X + 2. Quando calculamos f(3), nós substituímos valor de X por 3, resultando em f(3) = 3 + 2 = 5. Desta forma, 3 é um parâmetro da função f, e função utiliza para realizar seu cálculo (processamento). Este campo será estudado em detalhes mais à frente. Comandos da função: são obrigatórios, pois uma função só faz sentido se houver um conjunto de comandos que ela possa executar. Retorno: quando tipo de retorno é void, esse parâmetro não precisa ser utilizado. No entanto, quando não é void, torna-se obrigatório. É importante que valor retornado seja compatível com tipo de retorno, pois, em algumas linguagens, um erro de compilação pode resultar se isso não for respeitado, enquanto em outras pode resultar em um valor impreciso. O valor de retorno pode ser qualquer expressão que seja legítima de se colocar no lado direito de uma atribuição (=), por exemplo: o valor de uma variável; uma constante numérica ou caractere; ou uma expressão aritmética. Não é possível ter mais de um retorno em uma função, isto é, somente um valor ou variável pode ser retornado. E é importante ressaltar que a instrução return também encerra a execução da função (O programador 7/7211/11/2024, 13:18 Funções e Passagem de Parâmetros deve usar esse comando somente quando não houver mais nada a fazer dentro da função). Veja agora um exemplo de função em no Quadro 2. 1: #include 2: int somar(){ 3: return 2 + 3; 4: } 5: int main(){ 6: int resultado = 0; 7: resultado = somar(); 8: printf("O resultado da função é = %d", resultado); 9: return 0; 10: } Quadro 2 Exemplo de função em C. No exemplo apresentado no Quadro 2, a função principal, chamada main(), é um elemento essencial em muitas linguagens de programação, como C, Java e C#. Ela atua como o ponto de partida da execução do programa, definindo a rotina principal que deve ser executada. Antes do main(), temos a definição da somar(). Em C, é comum criar as funções (também conhecidas como sub- rotinas) antes da função main() para facilitar desenvolvimento e a leitura do código. A função somar() começa na linha 2 e termina na linha 4, delimitada por chaves. Vamos examinar os parâmetros nesse caso específico: 8/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Tipo de retorno: a função foi especificada para retornar um valor inteiro (int). Nome: nome da função é somar. Comandos da função: nessa função, a soma de dois valores é retornada em um único comando: return 2 + 3. É importante notar que cada programador tem a liberdade de criar funções de acordo com suas preferências. Por exemplo, os comandos poderiam ter sido escritos da seguinte forma, conforme o Quadro 3: Vamos agora analisar Quadro 3, que apresenta um exemplo de função com parâmetros. 1: int somar(int X, int y){ 2: int S = 0; 3: 4: return 5: } 6: int main(){ 7: int resultado = somar(4, 5); 8: printf("O resultado da função é = %d", resultado); 9: return 10: } Quadro 3 Exemplo de função com parâmetros. A função do Quadro 3 realiza a soma de dois números inteiros passados como parâmetros, X e y, e estas duas variáveis são 9/7211/11/2024, 13:18 Funções e Passagem de Parâmetros utilizados dentro da função para realizar a soma, armazenar em e retornar seu valor. Quando a função é chamada no main() (linha 7), passamos os valores 4 e 5, que serão atribuídos aos par6ametros X e y, respectivamente. Portanto, resultado retornado pela função será Siga em Frente uso de funções na linguagem c Você pode ter observado que uma função tem a capacidade de retornar valores de diferentes tipos primitivos, como inteiros, reais e caracteres. No entanto, surge a questão sobre a possibilidade de retornar um vetor. E a resposta é afirmativa! Para alcançar esse resultado devemos utilizar os ponteiros! É importante destacar que não é possível criar funções com uma sintaxe direta como "int[10] calcular()", onde "int[10]" indica que a função retorna um vetor com 10 posições. único meio de retornar um vetor é através de um ponteiro. Como um ponteiro é um tipo especial de variável que armazena endereços de memória, podemos empregar essa abordagem para retornar endereço de um vetor. Dessa forma, a função que invocou terá acesso ao vetor que foi calculado internamente. 10/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Assim, a sintaxe apropriada para essa função é a seguinte: * (){ vetor[tamanho]; vetor; } Observa-se que mesmo ao retornar nome do vetor, ainda há a inclusão do tipo primitivo no retorno da função, que é acompanhado por um asterisco indicando retorno de um ponteiro, ou seja, um endereço. Para ilustrar uso desse método, vamos implementar uma função que cria um vetor de cinco posições, preenche-o com valores aleatórios, imprime esses valores e, em seguida, transmite vetor para chamador da função. A implementação dessa função é exibida no Quadro 4. Na linha 14, um ponteiro do tipo inteiro é criado, indicando que ele apontará para um local que contém um número inteiro. Na linha 15, uma variável de controle de loop é criada. A função gerarRandomico() é invocada na linha 16, direcionando a execução para a linha 3, em que é especificado que a função retornará um endereço para valores inteiros (int*). Um vetor de números inteiros com cinco posições é criado na linha 4 e é declarado estático, o que significa que o valor do vetor não será alterado entre diferentes chamadas da função. Um loop é estabelecido na linha 6 para percorrer as cinco posições do vetor. Em cada posição, um valor aleatório é gerado usando a função rand() na linha 7, e esse valor é impresso na linha 9 para futuras comparações. O vetor agora preenchido é retornado pela 11/7211/11/2024, 13:18 Funções e Passagem de Parâmetros função na linha 11, armazenando endereço obtido no ponteiro do programa principal. Outro loop é criado na linha 17 para percorrer o vetor acessado por seu endereço. Na linha 18, para acessar o conteúdo do vetor, comando *(p + i) é utilizado. É importante lembrar que ponteiro retorna endereço da primeira posição do vetor, por isso é adicionado valor de i para acessar as próximas posições. 1: #include 2: #include 3: int* gerarRandomico(){ 4: static int r[10]; 5: int a; 6:11/11/2024, 13:18 Funções e Passagem de Parâmetros 17: i, *(p + i)); 18: } 19: return 20: } 21: Quadro 4 Código de exemplo. código apresentado no Quadro 4 resulta na impressão de valores idênticos devido ao uso do atributo static na declaração do vetor. resultado do código do Quadro 5 pode ser verificado na Figura 3. r[0] = 7 p[0] = 7 r[1] = 49 p[1] = 49 r[2] = 73 p[2] = 73 r[3] = 58 p[3] = 58 r[4] = 30 p[4] = 30 r[5] = 72 p[5] = 72 r[6] = 44 p[6] = 44 r[7] = 78 p[7] = 78 r[8] = 23 p[8] = 23 r[9] = 9 p[9] = 9 Figura 3 Saída do programa do Quadro 5. Vamos Exercitar? Prezado estudante, é hora de aplicar todo conhecimento adquirido até aqui! Para resolver a situação, é necessário ter a fórmula para calcular peso anotada: P = VR. Além disso, será preciso criar condicionais para determinar qual guindaste deve ser utilizado. Agora, construa programa seguindo as seguintes orientações, sendo que uma sugestão é apresentada no Quadro 5: Declare uma variável para armazenar um valor real, já que o peso pode não ser um número inteiro. 13/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Armazene resultado da função na variável criada. Compare valor armazenado com a primeira condição para verificar se guindaste a ser utilizado é G1. Se for caso, imprima uma mensagem para usuário. Crie uma estrutura condicional encadeada com a primeira, comparando valor armazenado com a terceira condição, para determinar se guindaste a ser utilizado é G3. Em caso afirmativo, exiba uma mensagem para usuário. Adicione um bloco "senão" ao final, pois se peso não corresponder a nenhuma das condições anteriores, guindaste a ser utilizado será G2. Nesse caso, também emita uma mensagem para usuário. Crie uma função para calcular peso antes da função main(). Declare três variáveis para armazenar os valores da base, altura e comprimento. Solicite ao usuário que insira os valores e armazene-os nas variáveis criadas. Calcule peso da coluna usando a fórmula fornecida pelos engenheiros. 1: #include 2: int calcularPeso() { 3: float b, h = 4: printf("\n Digite valor da base: "); 5: scanf("%f", &b); 6: printf("\n Digite valor da altura: "); 7: scanf("%f", &h); 8: printf("\n Digite valor do comprimento: "); 9: scanf("%f", &c); 14/7211/11/2024, 13:18 Funções e Passagem de Parâmetros 10: return (int) (b * h * c * 25); // (int) é chamado de "cast" e é usado para garantir que valor resultante será inteiro (se não for, 11: ele converte) 12: } 13: int main() { 14: float peso; 15: peso = calcularPeso(); 16: 17: if (peso 1500) { 20: printf("\n guindaste de modelo G3 deve ser usado"); 21: 22: printf("\n O guindaste de modelo G2 deve ser usado"); 23: } 24: return 0; 25: } 26: Quadro 5 Código de resolução. Lembrando que não há uma única resposta correta. Há vários caminhos para se chegar no mesmo resultado! Modifique e tente otimizar ao máximo os seus programas. 15/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Saiba Mais Para entender melhor conceito de funções e procedimentos em C, sugerimos a leitura do Capítulo 5 Funções e Procedimentos, do livro Linguagem C, disponível na Biblioteca Virtual. DAMAS, L. Linguagem C. 10. ed. Rio de Janeiro: LTC, 2023. cap. 5, p. 104-128. Também sugerimos a leitura do Capítulo 9 Funções, do livro Linguagem C: Completa e Descomplicada, disponível na Biblioteca Virtual, para complementar os estudos sobre funções em C. BACKES, Linguagem C: completa e descomplicada. 2. ed. Rio de Janeiro: LTC, 2023. cap. 9, p. 158-193. Para auxiliar no desenvolvimento de programas na linguagem C, uma ótima prática é verificar a documentação da linguagem para entender em detalhes os principais tipos de funções e elementos utilizados. Para isso, sugerimos a constante consulta da seguinte documentação sempre que achar necessário. Nela você encontra todas as bibliotecas utilizadas na linguagem e como utilizar suas principais funções: Referência da Linguagem C. Referências Bibliográficas BACKES, A. Linguagem C: completa e descomplicada. 2. ed. Rio de Janeiro: LTC, 2023. cap. 4, p. 67-87. DAMAS, L. Linguagem C. 10. ed. Rio de Janeiro: LTC, 2023. cap. 3, p. 51-79. PIVA JUNIOR, D. Algoritmos e programação de computadores. 2. ed. Rio de Janeiro: Elsevier, 2019. 16/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Aula 2 PASSAGEM DE PARÂMETROS POR VALOR Passagem de parâmetros por valor Estudante, esta videoaula foi preparada especialmente para você. Nela, você irá aprender conteúdos importantes para a sua formação profissional. Vamos assisti-la? Ponto de Partida Olá! Vamos prosseguir nossos estudos sobre procedimentos e funções conhecendo um pouco mais sobre como trabalhar com os parâmetros de uma função! Continuando seu trabalho no laboratório de pesquisa multidisciplinar, agora é hora de colaborar com o núcleo de química. Em uma reação química, a relação entre os reagentes é crucial para determinar resultado. Dados dois componentes químicos, A e sua mistura 17/7211/11/2024, 13:18 Funções e Passagem de Parâmetros resultará em um terceiro composto (A + -> C). núcleo de química solicitou uma otimização das condições em uma reação específica denominada "proteção". Para alcançar essa otimização, é necessário variar as condições do experimento, isto é, utilizando diferentes massas dos compostos. Um mol do composto A possui uma massa de 321,43 g, enquanto um mol de tem uma massa de 150,72 g. É necessário criar uma função que facilite cálculo dos produtos químicos. Dessa forma, a partir de diferentes combinações de massa, seu programa deverá calcular a massa final do composto. Além do cálculo, programa deve exibir os resultados das combinações apresentadas na Tabela 1, uma vez que esses valores servem como referência para os químicos. Quantidade de Quantidade de Quantidade de mol de A mol de mol de 1,2 1,0 ? 1,4 1,0 ? 1,0 1,6 ? Tabela 1 Regras para escolha do guindaste. Para cumprir sua missão, você aprenderá sobre escopo de variáveis e a passagem de parâmetros por valor! Agora vamos lá, preste muita atenção e tenha um excelente estudo! Vamos Começar! Escopo de variáveis 18/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Já sabemos que as variáveis servem para armazenar temporariamente dados na memória. Porém, local em que elas são definidas no código de um programa determina seu alcance e a sua visibilidade. código apresentado no Quadro 1 ilustra esse conceito. 1: #include 2: int testar(){ 3: int X = 10; 4: return X; 5: } 6: int main(){ 7: int X = 20; 8: printf("\n Valor de X na funcao main() = %d", x); 9: printf("\n Valor de X na funcao testar() = %d", testar()); 10: return 11: } Quadro 1 Exemplo de escopo de variáveis em C. Neste exemplo, existem duas variáveis chamadas "x". Isso, no entanto, não causará nenhum problema, pois apesar de compartilharem mesmo nome, elas são definidas em locais diferentes: uma está dentro da função main() e a outra dentro da função testar(). Assim, cada função possui seu próprio espaço de memória independente. Na memória, as variáveis são identificadas 19/7211/11/2024, 13:18 Funções e Passagem de Parâmetros por seus endereços, que implica que, mesmo com mesmo nome, seus endereços são únicos. Desta forma podemos definir escopo de uma variável como a extensão do seu alcance no local no qual recurso está definido, permitindo que ele seja acessível em várias partes do código do programa. escopo é classificado em duas categorias, local ou global. No caso do Quadro 1, ambas as variáveis são locais, que significa que elas existem e são acessíveis apenas dentro do corpo da função em que foram definidas. Para criar uma variável global, é necessário declará-la fora de qualquer função, tornando-a visível para todas as funções do programa. Por convenção, optamos por declará-las logo após a inclusão das bibliotecas. No Quadro 2, é apresentado um exemplo de declaração de uma variável global na linha 2, logo após a inclusão da biblioteca padrão . É importante observar que na função principal não há nenhuma variável definida com nome "x", no entanto, é possível imprimir valor da variável global "x" na linha 7, uma vez que valor é acessado globalmente. Na linha 8, é exibido valor da variável 20/7211/11/2024, 13:18 Funções e Passagem de Parâmetros global que foi modificado pela função "dobrar()", que retorna dobro do valor. 1: #include 2: int X = 10; 3: int dobrar(){ 4: return 2 * 5: } 6: int main(){ 7: printf("\n Valor de X global = %d", x); 8: printf("\n Valor de X global alterado na função dobrar() = %d", dobrar()); 9: return 0; 10: } 11: Quadro 2 Exemplo de variável global em Uso de variáveis globais uso de variáveis globais permite otimizar a alocação de memória, já que, em muitos casos, desenvolvedor não necessita criar variáveis locais. No entanto, é fundamental ter cautela ao utilizar essa técnica, uma vez que as variáveis locais são criadas e destruídas ao final da função, enquanto as variáveis globais permanecem na memória durante todo período de execução do programa. 21/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Vamos considerar um exemplo prático que demonstra a utilização do escopo global de uma variável. No Quadro 3 temos um programa que calcula a média entre duas temperaturas distintas e que possui a declaração de duas variáveis globais na linha 2. É importante lembrar que programa começa sempre pela função principal, cuja execução tem início na linha 6. Na linha 7, usuário é solicitado a digitar duas temperaturas, que são armazenadas dentro das variáveis globais criadas. Na linha 9, a função "calcularMedia()" é chamada para realizar cálculo da média usando os valores das variáveis globais. Neste exemplo, fica evidente a utilidade dessa abordagem de programação, já que as variáveis são usadas em diferentes funções, otimizando uso da memória, uma vez que não é necessário criar mais variáveis locais em cada uma das funções. 1: #include 2: float t1, t2; 3: float calcularMedia(){ 4: return (t1 + t2) / 2; 5: } 6: int main(){ 7: printf("\n Digite as duas temperaturas: "); 8: scanf("%f %f", &t1, &t2); 9: printf("\n A temperatura média = %.2f", calcularMedia()); 10: return 11: } Quadro 3 Exemplo prático de variável global em C. 22/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Nós já vimos que é viável criar variáveis com mesmo nome em diferentes funções, visto que escopo delas é local. Entretanto, e se houver uma variável global e uma local com mesmo nome, como no exemplo a seguir? int X = 10; int main(){ int X = -1; printf("\n Valor de X = %d", x); } Qual valor será impresso na variável "x"? A variável local sempre substituirá valor da global, e, nesse caso, valor -1 será impresso na função principal. Mas e se você precisar acessar valor de uma variável global dentro de uma função que possui uma variável local com mesmo nome? Neste caso, é necessário utilizar a instrução "extern". No Quadro 4, é possível observar como usar variáveis globais e locais com mesmo nome na linguagem C. Note que foi preciso criar uma variável chamada "b", com um bloco de instruções (linhas 6 - 9), que atribui valor "externo" de "x" à nova variável. A criação do bloco é necessário para separar trecho de código do restante da 23/7211/11/2024, 13:18 Funções e Passagem de Parâmetros função main(), indicando que ali, a variável utilizada é a global (extern int x). 1: #include 2: int X = 10; 3: int main(){ 4: int X = -1; 5: int b; 6: { 7: extern int X; 8: b = X; 9: } 10: Valor de X = %d", x); 11: Valor de b (x global) = %d", b); 12: return 13: } Quadro 4 Exemplo de acesso a uma variável global com extern em C. Siga em Frente Passagem de parâmetros por valor 24/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Vamos relembrar que, ao criar funções em linguagens de programação, usamos a seguinte estrutura básica: () { (opcional) } Todos os elementos dessa estrutura já foram apresentados detalhadamente até aqui, exceto os tipos de parâmetros que uma função pode receber. Portanto, neste momento, vamos nos concentrar em compreender esse recurso fundamental. Ao definir uma função, podemos também especificar que ela receberá informações do chamador (ou seja, "de quem" a invocou). Por exemplo, ao criar uma função para calcular a média, é possível estabelecer que chamador ("quem chama") deve fornecer os valores sobre os quais cálculo será realizado. Na sintaxe de criação de uma função que recebe parâmetros, é fundamental especificar tipo de valor que será recebido. Uma função pode receber parâmetros na forma de valor ou referência. Ao passar parâmetros por valores, a função cria automaticamente variáveis locais para armazenar esses valores e, após a conclusão da função, essas variáveis são liberadas. A Figura 1 apresenta uma ilustração do processo de passagem de parâmetros por valor em uma função. 25/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Chamada da funcao ( var1 var2 ); função, onde: var1 10 var2 20 Cria uma cópia de var1 var2 10 20 A função trabalha void funcao (int n1, int n2){ com as cópias de //comandos var1 e var2, armazenadas em } n1 n2, Na função, var1 e var2 NÃO são alteradas respectivamente Figura 1 Processo de passagem de parâmetros por valor. No Quadro 5, é apresentado um exemplo de definição e chamada de função com passagem de valores. Na linha 2, a função "somar()" é definida para receber dois valores inteiros. Internamente, as variáveis locais "a" e "b" são criadas para armazenar esses valores até término da função. Na linha 7, a função "somar" é invocada/chamada, passando os dois valores inteiros que a função espera receber, e resultado do cálculo é armazenado na variável "res". 1: #include 2: int somar(int a, int b){ 3: return a + b; 4: } 5: int main(){ 6: int re; 7: res = somar(10, 15); 8: printf("\n Resultado da soma = %d", res); 9: return 10: } Quadro 5 Exemplo de passagem de parâmetros por valor. 26/7211/11/2024, 13:18 Funções e Passagem de Parâmetros A técnica de passagem de parâmetros para uma função é amplamente utilizada em todas as linguagens de programação. Ao chamar uma função que espera receber parâmetros, a omissão de qualquer argumento esperado resultará em um erro de compilação. Quando usamos variáveis como argumentos na passagem de parâmetros por valores, as variáveis originais não são modificadas, uma vez que uma cópia dos valores armazenados é fornecida à função. Para entender claramente essa definição, consideremos código apresentado no Quadro 6. A execução do programa começa na linha 9, na função principal, em que são criadas duas variáveis, "n1" e "n2". Na linha 13, comando determina a impressão dos valores das variáveis. Em seguida, na linha 14, a função "testar()" é invocada, passando as duas variáveis como parâmetros. Nesse momento, uma cópia de cada variável é criada na memória para uso da função. Dentro da função, valor das cópias das variáveis é alterado e impresso, porém essa alteração é local, ou seja, é realizada apenas nas cópias dos valores e não afetará os valores 27/7211/11/2024, 13:18 Funções e Passagem de Parâmetros iniciais das variáveis criadas na função principal. Na linha 16, os valores são impressos novamente após a chamada da função. 1: #include 2: int testar(int n1, int n2){ 3: n1 = -1; 4: n2 = -2; 5: printf("\n\n Valores dentro da função testar(): "); 6: printf("\n n1 = %d e n2 = %d", n1, n2); 7: return 8: } 9: int main(){ 10: int n1 = 10; 11: int n2 = 20; 12: printf("\n\n Valores antes de chamar a função: "); 13: printf("\n n1 = %d e n2 = %d", n1, n2); 14: testar(n1, n2); 15: printf("\n\n Valores depois de chamar a função: "); 16: printf("\n n1 = %d e n2 = %d", n1, n2); 17: return 18: } 28/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Quadro 6 Exemplo de passagem de parâmetros por valor. A seguir, a Figura 2 apresenta resultado deste programa. Valores antes de chamar a função: n1 = 10 e n2 = 20 Valores dentro da função testar() : Valores depois de chamar a função: n1 = 10 e n2 = 20 Figura 2 Resultado do programa do Quadro 6. Vamos Exercitar? Prezado estudante, é hora de aplicar todo conhecimento adquirido até aqui! Para implementar a solução para a equipe de química, é possível criar uma função que tome como entrada a quantidade em mol dos componentes A e e retorne a massa da reação. passo inicial consiste em criar a função de cálculo da massa. Ela pode ser definida da seguinte maneira: float calcularMassa(float quantidadeA, float quantidadeB) Dentro dessa função, os valores de referência devem ser exibidos de acordo com a Tabela 1. A massa deve ser calculada e resultado deve ser retornado. Em seguida, é necessário criar a função principal, na qual usuário será solicitado a fornecer as quantidades dos elementos A e Uma vez que os valores forem obtidos, a função "calcularMassa()" deve ser chamada e os valores devem ser passados como argumentos. 29/7211/11/2024, 13:18 Funções e Passagem de Parâmetros resultado da função deve ser armazenado em uma variável, da seguinte maneira: resultado = calcularMassa(quantidadeA, quantidadeB) Por último, a massa da reação deve ser exibida. 30/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Quadro 7 apresenta uma sugestão de resolução da situação. 1: #include 2: float calcularMassa(float a, float b){ 3: const float mA = 321.43; 4: const float mB = 150.72; 5: printf("\n mol A : mol "); 6: printf("\n 1,2 : 1,0 \t= + 1*mB); 7: printf("\n 1,4 : 1,0 \t= %f",1.4*mA + 1*mB); 8: printf("\n 1,6 : 1,0 \t= %f", + 1.6*mB); 9: return (a * mA + (b * mB); 10: } 11: int main(){ 12: float a = b = resultado = 0; 13: printf("\n Digite as massas dos elementos A e B: "); 14: scanf("%f %f",&a,&b); 15: resultado = calcularMassa(a,b); 16: printf("\n\n Massa final do composto = %.2f g/mol",resultado); 17: return 18: } Quadro 7 Código de resolução. 31/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Lembrando que não há uma única resposta correta. Há vários caminhos para se chegar no mesmo resultado! Modifique e tente otimizar ao máximo os seus programas. Saiba Mais Para entender melhor conceito de funções e parâmetros em C, sugerimos a leitura do Capítulo 5 funções e Procedimentos, do livro Linguagem C, disponível na Biblioteca Virtual. DAMAS, L. Linguagem 10. ed. Rio de Janeiro: LTC, 2023. cap. 5, p. 104-128. Também recomendamos a leitura do Capítulo 9 PAssagem de Parâmetors, do mesmo livro, Linguagem C, disponível na Biblioteca Virtual. Ele traz um estudo mais detalhado sobre passagem de parâmetros em C. DAMAS, L. Linguagem C. 10. ed. Rio de Janeiro: LTC, 2023. cap. 9, p. 203-227. Sugerimos a leitura do Capítulo 9 - Funções do livro Linguagem C: Completa e Descomplicada, disponível na Biblioteca Virtual, para complementar os estudos sobre funções e parâmetros em C. BACKES, Linguagem C: completa e descomplicada. 2. ed. Rio de Janeiro: LTC, 2023. cap. 9, p. 158-193. Referências Bibliográficas BACKES, Linguagem C: completa e descomplicada. 2. ed. Rio de Janeiro: LTC, 2023. cap. 4, p. 67-87. DAMAS, L. Linguagem C. 10. ed. Rio de Janeiro: LTC, 2023. cap. 3, p. 51-79. 32/7211/11/2024, 13:18 Funções e Passagem de Parâmetros PIVA JUNIOR, D. Algoritmos e programação de computadores. 2. ed. Rio de Janeiro: Elsevier, 2019. Aula 3 PASSAGEM DE PARÂMETROS POR REFERÊNCIA Passagem de parâmetros por referência Estudante, esta videoaula foi preparada especialmente para você. Nela, você irá aprender conteúdos importantes para a sua formação profissional. Vamos assisti-la? Ponto de Partida 33/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Olá! Vamos prosseguir nossos estudos sobre procedimentos e funções conhecendo um pouco mais sobre como trabalhar com passagem de parâmetros por referência! Vamos considerar que você tem um amigo que possui loja que vende diferentes tipos de produtos, e ele te pediu uma ajuda! Seu amigo precisa de um programa em para calcular preço total de uma compra, levando em consideração os preços unitários e as quantidades de cada item adquirido. programa deve usar funções para calcular preço total e passar parâmetros por referência para garantir a atualização correta das variáveis. Para cumprir sua missão, você irá aprender sobre a passagem de parâmetros por referência! Agora vamos lá, preste muita atenção e tenha um excelente estudo! Vamos Começar! Passagem por referência com ponteiros uso de funções que passam parâmetros por referência está intimamente relacionado aos conceitos de ponteiros e endereços de memória. A abordagem dessa técnica é semelhante à passagem por valor, na qual a função é definida para receber determinados parâmetros, e chamador deve fornecer esses argumentos. No entanto, comportamento e resultado diferem. Na passagem por referência, não é criada uma cópia dos argumentos passados; em vez disso, endereço da variável é passado e a função manipula diretamente os valores armazenados lá. 34/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Para utilizar essa abordagem, precisamos dos operadores * e &. Na definição da função, os parâmetros a serem recebidos devem ser declarados com *, por exemplo: int testar(int* parametro1, int* parametro2) E ao chamar a função, os parâmetros devem ser passados com &, por exemplo: resultado = testar(&n1, &n2) No exemplo apresentado no Quadro 1, temos uma função que passa variáveis por referência. Com a passagem por referência, os valores das variáveis são modificados. Nas linhas 3 e 4, asterisco é usado para acessar conteúdo armazenado dentro do endereço 35/7211/11/2024, 13:18 Funções e Passagem de Parâmetros apontado, pois se usássemos apenas n1 e n2, estaríamos acessando os endereços que eles apontam. 1: #include 2: int testar(int* n1, int* n2) { 3: *n1 = -1; // é necessário usar * para acessar conteúdo 4: *n2 = -2; 5: printf("\n\n Valores dentro da função testar(): "); 6: printf("\n n1 = %d e n2 = %d", *n1, *n2); 7: return 8: } 9: int main() { 10: int n1 = 10; 11: int n2 = 20; 12: printf("\n\n Valores antes de chamar a função: "); 13: printf("\n n1 = %d e n2 = %d", n1, n2); 14: testar(&n1, &n2); 15: printf("\n\n Valores depois de chamar a função: "); 16: printf("\n n1 = %d e n2 = %d", n1, n2); 17: return 18: } 36/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Quadro 1 Exemplo de passagem de parâmetros por referência. Neste exemplo, a função testar() recebe dois argumentos que são ponteiros para inteiros. Dentro da função, os valores apontados por esses ponteiros são alterados para -1 e -2, respectivamente. A seguir, a Figura 1 apresenta resultado deste programa, ilustrando como os valores das variáveis mudam antes e depois da chamada da função testar. Valores antes de chamar a função: n1 = 10 e n2 = 20 Valores dentro da função testar() : Valores depois de chamar a função: Figura 1 Resultado do programa do Quadro 1. A passagem de parâmetros por referência possui várias vantagens e desvantagens que afetam a eficiência e desempenho de um programa. Uma das principais vantagens é a capacidade de transmitir uma grande quantidade de dados para outras partes do programa. Em vez de fazer cópias dos dados e transmitir essas cópias, é possível passar apenas um ponteiro para esses dados, que economiza tempo, processamento e memória. Além disso, essa abordagem permite a alteração de uma variável ou um objeto externo a uma função, que possibilita que uma função gere vários valores de saída. Por outro lado, a passagem por referência pode comprometer a segurança, já que a função chamada pode corromper os dados do chamador. Assim, é essencial ter cuidado ao utilizar a passagem por referência para garantir que os dados não sejam modificados indevidamente por funções chamadas. Passagem de vetores e matrizes 37/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Agora, vamos compreender como passar um vetor para uma função, para que possamos preencher e imprimir conteúdo armazenado em um vetor, evitando a repetição de trechos de código. Na linguagem C, a passagem de um vetor é sempre realizada implicitamente por referência. Isso implica que, mesmo sem uso dos operadores e "&", quando uma função que recebe um vetor é invocada, que é realmente passado é endereço da primeira posição do vetor. Na definição da função, os vetores a serem recebidos devem ser declarados com colchetes, sem especificar tamanho, por exemplo: int testar1 (int v1[], int v2[]) Ou ainda, você pode especificar os parâmetros da função como ponteiros: int testar2(int *v1, int *v2) Ao chamar a função, independente da forma escolhida para definir os vetores nos parâmetros, estes devem ser passados como se fossem variáveis simples, por exemplo: resultado1 = testar1(n1, n2); resultado2 = testar2(n1, n2); Para ilustrar esse conceito, é apresentado um programa no Quadro 2, iniciando na linha 15. Na linha 18, a função "inserir()" é chamada, passando vetor "numeros" como parâmetro. Deliberadamente, a função é definida na linha 2, recebendo um vetor chamado "a", para demonstrar que nome da variável na função não precisa ser 38/7211/11/2024, 13:18 Funções e Passagem de Parâmetros mesmo usado na chamada. Geralmente, é uma boa prática de programação utilizar mesmo nome. Na função "inserir()", é solicitado ao usuário digitar os valores que serão armazenados no vetor "numeros" por referência. Após a conclusão dessa função, a execução continua na linha 18 e depois na 19, na qual a função "imprimir()" é invocada, passando vetor "numeros" como argumento. Mais uma vez, é definida uma função na linha 9 com nome de vetor diferente para enfatizar que não é necessário ser mesmo nome. Nessa função, vetor é percorrido e dobro de cada valor é impresso. resultado desse programa é ilustrado na Figura 2. 1: #include 2: void inserir(int a[]){ 3: int i=0; 4: for(i=0; i11/11/2024, 13:18 Funções e Passagem de Parâmetros 15: int main(){ 16: int numeros[3]; 17: printf("\n Preenchendo vetor... \n"); 18: inserir(numeros); 19: printf("\n Dobro dos valores informados:"); 20: imprimir(numeros); 21: return 22: } Quadro 2 Exemplo de passagem de vetor para uma função. Preenchendo 0 vetor... Digite o valor 0: 2 Digite valor 1: 4 Digite o valor 2: 6 Dobro dos valores informados: numeros [0] = 4 numeros [1] = 8 numeros [2] = 12 Figura 2 Resultado do programa do Quadro 2. Podemos também passar matrizes como parâmetros para funções de semelhante à passagem de vetores, mas requer um detalhe específico na sintaxe devido à natureza multidimensional das 40/7211/11/2024, 13:18 Funções e Passagem de Parâmetros matrizes. Devemos especificar suas dimensões na definição dos parâmetros da função, por exemplo: void testeMatriz(int mat[3][3]) E quando esta função for chamada, a matriz passada na função não precisa ir acompanhada de suas dimensões (já que eles já estão especificados nos parâmetros da função): testeMatriz(m); //onde m é uma matriz Alternativamente, uma matriz pode ser definida como parâmetro de uma função como "int mat[ ][3]", onde "[3]" é número de colunas e número de linhas não é especificado. Isso permite a passagem de matrizes de diferentes tamanhos como argumentos. Siga em Frente Passagem de estruturas por referência Em C, a passagem de estruturas (structs) por referência é feita usando ponteiros, da mesma forma que variáveis comuns. Ao passar uma estrutura como parâmetro para uma função, é passado endereço de memória da estrutura, permitindo que a função manipule e altere os valores dos membros da estrutura original. Isso evita a cópia desnecessária da estrutura, que pode ser útil para estruturas grandes ou complexas, economizando memória e tempo de processamento. Para passar uma estrutura por referência em C, é necessário usar um ponteiro para a estrutura como parâmetro da função. Dentro da função, os membros da estrutura podem ser acessados e modificados usando a notação de seta "->" em função de ser um ponteiro. 41/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Quadro 3 mostra um exemplo de como passar uma struct por 42/7211/11/2024, 13:18 Funções e Passagem de Parâmetros referência. 1: #include 2: struct Pessoa { 3: char nome[50]; 4: int idade; 5: 6: void Pessoa *p) { 7: p->idade = 30; 8: } 9: 10: int main() { 11: struct Pessoa pessoa1; 12: strcpy(pessoa1.nome, "João"); 13: pessoa1.idade = 25; 14: 15: modificarPessoa(&pessoa1); 16: 17: printf("Nome: %s\n", pessoa1.nome); 18: printf("Idade: %d\n", pessoa1.idade); 19: 20: return 0; 43/7211/11/2024, 13:18 Funções e Passagem de Parâmetros 21: } Quadro 3 Exemplo de passagem de struct por referência. Neste exemplo, a função "modificarPessoa" recebe um ponteiro para uma estrutura "struct Pessoa" como parâmetro. Dentro da função, valor do membro "idade" é modificado para 30. A estrutura é passada para a função usando operador de referência "&" na chamada da função. A impressão dos valores da estrutura após a modificação mostra que a estrutura original foi de fato alterada dentro da função. Vamos Exercitar? Prezado estudante, é hora de aplicar todo conhecimento adquirido até aqui! Para implementar a solução para a loja do seu amigo você 44/7211/11/2024, 13:18 Funções e Passagem de Parâmetros precisará trabalhar com a passagem de parâmetros por referência! Quadro 4 apresenta uma sugestão de resolução da situação. 1: #include 2: void int quantidade[], int numltens, float *precoTotal) { 3: *precoTotal = 4: for (int i = i11/11/2024, 13:18 Funções e Passagem de Parâmetros 21: scanf("%d", &quantidade[i]); 22: } 23: // Chamada da função para calcular preço total 24: calcularPrecoTotal(precoUnitario, quantidade, numltens, &precoTotal); 25: // Exibindo preço total da compra 26: printf("\n Preço total da compra: R$ %.2f\n\n", precoTotal); 27: 28: return 29: } 30: Quadro 4 Código de resolução. A seguir, seguem alguns detalhes da implementação do Quadro 4. A função calcularPrecoTotal é usada para calcular preço total da compra, considerando os preços unitários e as quantidades de cada item. Os vetores precoUnitario e a quantidade são passados por referência para a função para garantir a atualização correta das variáveis. programa solicita ao usuário número de itens comprados e depois solicita preço unitário e a quantidade de cada item. Em seguida, ele chama a função calcularPrecoTotal para calcular preço total da compra e, em seguida, exibe preço total na saída. A passagem de parâmetros por referência neste caso torna o programa mais eficiente, pois permite que as variáveis sejam 46/7211/11/2024, 13:18 Funções e Passagem de Parâmetros atualizadas diretamente na função chamadora sem a necessidade de retornar valores, além de possibilitar a passagem de vetores e matrizes. Lembrando que não há uma única resposta correta. Há vários caminhos para se chegar no mesmo resultado! Modifique e tente otimizar ao máximo os seus programas. Saiba Mais Para entender melhor conceito de funções e parâmetros em C, sugerimos a leitura do Capítulo 5 Funções e Procedimentos, do livro Linguagem C, disponível na Biblioteca Virtual. DAMAS, L. Linguagem 10. ed. Rio de Janeiro: LTC, 2023. cap. 5, p.104-128. Também recomendamos a leitura do Capítulo 9 Passagem de Parâmetros, do mesmo livro, Linguagem C, disponível na Biblioteca Virtual Biblioteca. Ele trás um estudo mais detalhado sobre passagem de parâmetros em C. DAMAS, L. Linguagem C. 10. ed. Rio de Janeiro: LTC, 2023. cap. 9, p. 203-227. Sugerimos a leitura do Capítulo 9 do livro Linguagem C: Completa e Descomplicada, disponível na Biblioteca Virtual, para complementar os estudos sobre funções e parâmetros em C. BACKES, Linguagem C: completa e descomplicada. 2. ed. Rio de Janeiro: LTC, 2023. cap. 9, p. 158-193. Referências Bibliográficas BACKES, Linguagem C: completa e descomplicada. 2. ed. Rio de Janeiro: LTC, 2023. cap. 4, p. 67-87. 47/7211/11/2024, 13:18 Funções e Passagem de Parâmetros DAMAS, L. Linguagem C. 10. ed. Rio de Janeiro: LTC, 2023. cap. 3, p. 51-79. PIVA JUNIOR, D. Algoritmos e programação de computadores. 2. ed. Rio de Janeiro: Elsevier, 2019. Aula 4 RECURSIVIDADE Recursividade Estudante, esta videoaula foi preparada especialmente para você. Nela, você irá aprender conteúdos importantes para a sua formação profissional. Vamos assisti-la? Ponto de Partida 48/7211/11/2024, 13:18 Funções e Passagem de Parâmetros Olá! Vamos prosseguir nossos estudos sobre procedimentos e funções conhecendo um recurso poderoso, porém que exige muita cautela: a recursividade! Após colaborar com as equipes de engenheiros civis e químicos, você está enfrentando um novo desafio ao trabalhar com a equipe de matemáticos no laboratório. Agora, foi solicitado que você desenvolva um programa para calcular a raiz quadrada de um número utilizando método de aproximações sucessivas de Newton. Os matemáticos contribuíram com a fórmula para essa tarefa: onde é a raiz quadrada desejada, é a raiz anterior calculada pelo método, e n é número para qual se deseja calcular a raiz. Seu gerente, que também é programador, especificou a utilização da técnica de recursividade na implementação, exigindo que usuário informe número para qual deseja calcular a raiz quadrada. Quais valores precisam ser informados para que programa seja executado de maneira correta? que determinará término do cálculo? Esse método exige algum tipo de valor específico? Portanto, para realizar essa missão com sucesso, é fundamental entender conceito de função recursiva, sua implementação adequada e a relação com as estruturas iterativas. Agora vamos lá, preste muita atenção e tenha um excelente estudo! Vamos Começar! que é função recursiva? Dentro do conjunto de funções, existe uma categoria especial conhecida como funções recursivas. Para adentrarmos nessa nova técnica de programação, é essencial compreender conceito de recursão. termo recursão (ou recursividade) está associado à ideia de repetição de uma situação específica. Ao aplicarmos esse 49/7211/11/2024, 13:18 Funções e Passagem de Parâmetros conceito ao contexto da programação, nos deparamos com as funções recursivas. Nessa abordagem, uma função é considerada recursiva quando ela faz referência a si mesma, ou seja, recursividade é a capacidade de uma função chamar a si mesma. A estrutura para implementação de uma função recursiva não difere significativamente das funções convencionais, pois requer um tipo de retorno, nome da função, parênteses e parâmetros, quando necessário. A diferença está no conteúdo da função, pois ela é invocada dentro de si mesma. No trecho de código abaixo temos a construção da função, bem como seu chamado, primeiro na função principal e, em seguida, dentro dela mesma. funcaoRecursiva(){ // comandos funcaoRecursiva(); // chamando a si própria // comandos } void main(){ // comandos funcaoRecursiva(); // comandos } Apesar da semelhança na estrutura entre funções recursivas e não recursivas, comportamento entre elas difere significativamente, e uso impróprio dessa técnica pode levar a problemas de consumo 50/72

Mais conteúdos dessa disciplina