Artigos

2: Funções


  • 2.1: Introdução às funções
    Nosso desenvolvimento do conceito de função é moderno, mas bastante rápido, especialmente à luz do fato de que a definição de hoje levou mais de 300 anos para chegar ao seu estado atual. Começamos com a definição de uma relação.
  • 2.2: O gráfico de uma função
    Descartes apresenta seu sistema de coordenadas, um método para representar pontos no plano por meio de pares de números reais. Na verdade, o plano cartesiano dos dias modernos é assim chamado em homenagem a René Descartes, que alguns chamam de "Pai da Matemática Moderna". Um sistema de coordenadas cartesianas consiste em um par de eixos, geralmente desenhados em ângulos retos entre si no plano, um horizontal (rotulado como x) e um vertical (rotulado como y).
  • 2.3: Interpretando o gráfico de uma função
    Na seção anterior, começamos com uma função e, em seguida, desenhamos o gráfico da função fornecida. Nesta seção, começaremos com o gráfico de uma função e, em seguida, faremos uma série de interpretações com base no gráfico fornecido: avaliações da função, domínio e intervalo da função e resolução de equações e desigualdades.
  • 2.4: Resolvendo Equações e Desigualdades por Representação Gráfica
    Nossa ênfase neste capítulo foi sobre as funções e a interpretação de seus gráficos. Nesta seção, continuamos nessa linha e voltamos nossa exploração para a solução de equações e desigualdades por meio de gráficos. As equações terão a forma f (x) = g (x), e as desigualdades terão a forma f (x) g (x).
  • 2.5: Transformações Verticais
    Nesta seção, estudamos a arte das transformações: escalas, reflexões e traduções. Restringiremos nossa atenção às transformações na direção vertical ou y. Nosso objetivo é aplicar certas transformações à equação de uma função e, em seguida, perguntar que efeito isso tem no gráfico da função.
  • 2.6: Transformações horizontais
    Na seção anterior, apresentamos o conceito de transformações. Fizemos uma mudança na equação básica y = f (x), como y = af (x), y = −f (x), y = f (x) - c, ou y = f (x) + c , então estudou como essas mudanças afetaram a forma do gráfico de y = f (x). Nessa seção, nos concentramos estritamente nas transformações aplicadas na direção vertical. Nesta seção, estudaremos as transformações que afetarão a forma do gráfico na direção horizontal.
  • 2.7: Capítulo 2 Exercícios com Soluções

2: Funções

Uma função também pode retornar um valor (como uma saída). Por exemplo, a função max () (abreviação de máximo) retorna o maior de todos os seus argumentos, que devem ser números.
O nome valor de retorno significa o valor que uma função devolve. Por exemplo, em max (42, 17) dizemos que "a função max retornou o valor 42."

A função max tem um amigo que se comporta de forma semelhante: a função min retorna o mínimo (o menor) de seus argumentos.

As funções podem ser combinadas para criar expressões mais complicadas.

Sua resposta (digite um número):

Você não está limitado a usar funções predefinidas em Python. Em algumas lições você aprenderá como definir novas funções!


Funções em C ++

Neste artigo, aprenderemos sobre funções em C ++.

Uma função é um segmento de código que executa uma determinada tarefa. Uma função em C ++ é um conjunto de instruções com um nome que pode ser chamado de qualquer lugar no programa.

Mantendo você atualizado com as últimas tendências de tecnologia, junte-se à TechVidvan no Telegram

Por que funções em C ++?

Vamos discutir as respostas às perguntas como por que precisamos de funções ou por que as funções são tão importantes. Isso ocorre pelos seguintes motivos:

  • Legibilidade: As funções trazem modularidade aos nossos programas. Eles tornam os programas mais legíveis.
  • Ao controle: As funções permitem fácil controle de fluxo entre as diferentes partes de um programa.
  • Redundância: As funções reduzem a redundância de nossos programas. Se quisermos que uma tarefa seja realizada em vários locais do programa, podemos chamar uma função em vez de escrever o mesmo código repetidamente.
  • Reutilização: As funções aumentam a capacidade de reutilização do código.
  • Abstração: Funções suportam abstração. Podemos usar funções diretamente da biblioteca C ++ sem saber como uma função funciona.
  • Manipulação de erros: Torna-se mais fácil localizar e depurar erros.
  • Tempo: Podemos economizar muito tempo usando funções.

Tipos de funções em C ++

1. Funções de biblioteca padrão: Funções predefinidas em arquivos de cabeçalho C ++.

2. Funções definidas pelo usuário: Funções definidas pelo usuário.

Neste artigo, nosso foco será nas funções definidas pelo usuário. Aprenderemos como definir funções e usá-las em nosso programa.

Definindo uma função em C ++

Podemos definir uma função seguindo a sintaxe fornecida a seguir.

Uma função, portanto, tem as seguintes partes:

  • return_type: ele especifica o tipo de dados do resultado que a função retornará.
  • function_name: é o nome dado a uma função.
  • parâmetros: é a lista de parâmetros que a função está recebendo. Aqui, especificamos o número, tipo e ordem dos parâmetros. Uma função pode ou não ter parâmetros.
    Uma assinatura de função compreende function_name e parâmetros.
  • corpo: entre chaves, escrevemos instruções para definir a tarefa da função.

Exemplo de definição de função em C ++

  • O tipo de retorno é nulo, o que significa que a função não retorna nenhum valor
  • O nome da função é display
  • Não possui nenhum parâmetro

Chamando uma função em C ++

Precisamos chamar ou invocar uma função sempre que quisermos usá-la.

Sintaxe para chamar uma função sem tipo de retorno (void):

Sintaxe para chamar uma função com um tipo de retorno:

Aqui, 'variável' é a variável que armazenará o valor retornado. E argument1, argument2, ... são os parâmetros que passamos para a função.

Exemplo de definição e chamada de uma função em C ++

Observe que um programa C ++ sempre começa chamando a função principal, independentemente da ordem em que as funções são definidas. Na verdade, main é a única função chamada automaticamente, e o código de outras funções é executado apenas se for chamada direta ou indiretamente de main.

Parâmetros de função em C ++

Os parâmetros que passamos para uma função durante a chamada da função são chamados de argumentos ou parâmetros reais. No exemplo acima, n1 e n2 são parâmetros reais.

As variáveis ​​locais na definição da função são chamadas de parâmetros formais. No exemplo acima, aeb são parâmetros formais.

Quando chamamos uma função, os parâmetros reais são atribuídos a parâmetros formais.

Declaração de função em C ++

Também podemos dar a definição da função após a chamada da função. Mas, nesse caso, é necessário declarar a função de antemão. Também é chamado de protótipo de função.

Exemplo de declaração de função em C ++

Observe que obtemos a mesma saída em ambas as maneiras.

Passando argumentos em C ++

Ao chamar uma função, podemos passar argumentos de três maneiras.

1. Chamada por valor

Na chamada por valor (ou passagem por valor), os valores dos argumentos são passados, os quais são copiados para os parâmetros formais. Os parâmetros reais e os parâmetros formais são armazenados em diferentes locais da memória. Portanto, as modificações feitas nos parâmetros formais dentro da função não são refletidas nos parâmetros reais fora dela.

2. Chamada por referência

Na chamada por referência (ou passagem por referência), as referências dos argumentos são copiadas para os parâmetros formais. Usando essas referências, os parâmetros reais são acessados ​​de dentro da função. Assim, as modificações feitas dentro da função são refletidas nos parâmetros reais fora dela.

3. Chamada por Ponteiro

Na chamada por ponteiro (ou passagem por ponteiro), passamos endereços de variáveis. Portanto, os parâmetros reais e formais apontam para o mesmo local. Assim, as modificações feitas nos parâmetros formais dentro da função são refletidas nos parâmetros reais fora dela.

Vamos entender com exemplos:

Exemplo de chamada por valor em C ++

#include & ltiostream & gt usando namespace std void modify (int a) int main () x = 3

Observe que, neste caso, o valor de x permanece inalterado.

Exemplo de chamada por referência em C ++

#include & ltiostream & gt usando namespace std void modify (int & ampa) int main () x = 5

Agora, o valor de x mudou.

Exemplo de chamada por ponteiro em C ++

Nesse caso, também o valor de x muda.

Resumo

Abordamos as funções neste artigo. Aprendemos como definir e declarar uma função em C ++. Você deve ter observado que toda função tem um tipo de retorno. Então, aprendemos como chamar uma função. Também notamos a importância da função principal em C ++. Finalmente, aprendemos sobre os métodos chamada por valor, chamada por referência e chamada por ponteiro para passar argumentos para uma função. Fornecemos exemplos adequados para melhor compreensão dos conceitos.


Migrar de 1.x para 2.x

Esta seção descreve como migrar as Funções Duráveis ​​da versão 1.x existentes para a versão 2.x para aproveitar os novos recursos.

Atualize a extensão

Instale a versão 2.x mais recente da extensão de vinculações de funções duráveis ​​em seu projeto.

JavaScript, Python e PowerShell

O Durable Functions 2.x está disponível na versão 2.x do pacote de extensão do Azure Functions.

O suporte Python em funções duráveis ​​requer funções duráveis ​​2.x.

Para atualizar a versão do pacote de extensão em seu projeto, abra host.json e atualize a seção extensionBundle para usar a versão 2.x ([2. *, 3.0.0)).

Se o Visual Studio Code não estiver exibindo os modelos corretos após você alterar a versão do pacote de extensão, recarregue a janela executando o Desenvolvedor: Reload Window comando (Ctrl + R no Windows e Linux, Command + R no macOS).

Atualize seu projeto .NET para usar a versão mais recente da extensão de vinculações de funções duráveis.

Atualize seu código

Durable Functions 2.x apresenta várias alterações importantes. Os aplicativos de Funções Duráveis ​​1.x não são compatíveis com as Funções Duráveis ​​2.x sem alterações de código. Esta seção lista algumas das mudanças que você deve fazer ao atualizar suas funções da versão 1.x para 2.x.

Esquema Host.json

Durable Functions 2.x usa um novo esquema host.json. As principais mudanças de 1.x incluem:

  • & quotstorageProvider & quot (e a subseção & quotazureStorage & quot) para configuração específica de armazenamento.
  • & quottracing & quot para configuração de rastreamento e registro.
  • & quotnotifications & quot (e a subseção & quoteventGrid & quot) para configuração de notificação da grade de eventos.

Mudanças no nome do taskhub padrão

Na versão 1.x, se um nome de hub de tarefa não foi especificado em host.json, ele foi padronizado como & quotDurableFunctionsHub & quot. Na versão 2.x, o nome do hub de tarefas padrão agora é derivado do nome do aplicativo de funções. Por causa disso, se você não especificou um nome de hub de tarefas ao atualizar para 2.x, seu código estará operando com o novo hub de tarefas e todas as orquestrações em andamento não terão mais um aplicativo para processá-los. Para contornar isso, você pode definir explicitamente o nome do hub de tarefas para o padrão v1.x de & quotDurableFunctionsHub & quot ou pode seguir nossa orientação de implantação com tempo de inatividade zero para obter detalhes sobre como lidar com as alterações importantes para orquestrações em andamento.

Mudanças na interface pública (somente .NET)

Na versão 1.x, os vários contexto os objetos suportados por funções duráveis ​​têm classes básicas abstratas destinadas ao uso em testes de unidade. Como parte do Durable Functions 2.x, essas classes básicas abstratas são substituídas por interfaces.

A tabela a seguir representa as principais mudanças:

1.x 2.x
DurableOrchestrationClientBase IDurableOrchestrationClient ou IDurableClient
DurableOrchestrationContext ou DurableOrchestrationContextBase IDurableOrchestrationContext
DurableActivityContext ou DurableActivityContextBase IDurableActivityContext
OrchestrationClientAttribute DurableClientAttribute

No caso em que uma classe base abstrata continha métodos virtuais, esses métodos virtuais foram substituídos por métodos de extensão definidos em DurableContextExtensions.

Alterações de function.json (JavaScript e C # Script)

Em Durable Functions 1.x, a vinculação do cliente de orquestração usa um tipo de orchestrationClient. A versão 2.x usa durávelClient em vez disso.

Levantar mudanças de eventos

Em Durable Functions 1.x, chamar a API de evento de aumento e especificar uma instância que não existia resultava em uma falha silenciosa. A partir de 2.x, elevar um evento a uma orquestração inexistente resulta em uma exceção.


O que saber sobre a vitamina K-2

A vitamina K é uma vitamina essencial que auxilia na coagulação do sangue e na saúde dos ossos. Ocorre em duas formas, K-1 e K-2.

A vitamina K-1 é a forma primária e provém principalmente de vegetais de folhas verdes. A vitamina K-2 ocorre em proteínas animais e alimentos fermentados. As bactérias no intestino humano também produzem pequenas quantidades de K-2.

Neste artigo, discutimos a vitamina K-2, suas funções e como ela difere do K-1. Também descrevemos as fontes dietéticas, benefícios para a saúde, a ingestão diária recomendada, sintomas de deficiência e suplementos.

Compartilhar no Pinterest O chucrute é uma boa fonte dietética de vitamina K-2.

A vitamina K se refere a uma família de vitaminas solúveis em gordura de que o corpo precisa para produzir uma proteína chamada protrombina, que promove a coagulação do sangue e regula o metabolismo ósseo.

A vitamina vem em duas formas principais:

  • Vitamina K-1, ou filoquinona, ocorre naturalmente em vegetais de folhas verdes escuras e é a principal fonte de vitamina K.
  • Vitamina K-2, ou menaquinona, está presente em pequenas quantidades em carnes orgânicas e alimentos fermentados. As bactérias intestinais também produzem vitamina K-2.

O corpo precisa de ambos os tipos de vitamina K para produzir protrombina, uma proteína que desempenha papéis cruciais na coagulação do sangue, metabolismo ósseo e saúde cardíaca. A vitamina K também ajuda a facilitar a produção de energia na mitocôndria das células.

A vitamina K-1 está envolvida principalmente na coagulação do sangue. O K-2 pode ter uma gama mais diversificada de funções no corpo.

Em um estudo de longo prazo envolvendo 36.629 participantes, os pesquisadores observaram uma associação

entre a alta ingestão de vitamina K-2 e um risco reduzido de desenvolver doença arterial periférica (DAP), particularmente em pessoas com pressão alta. No entanto, os autores concluíram que o K-1 não teve efeito sobre o risco de PAD.

A vitamina K tem propriedades antioxidantes. Protege as membranas celulares dos danos causados ​​pelo excesso de radicais livres, em um processo conhecido como peroxidação. Medicamentos para diluir o sangue, como a varfarina, podem reduzir o potencial antioxidante da vitamina K.

As vitaminas K-1 e K-2 têm estruturas químicas diferentes. Ambos os tipos têm uma cadeia lateral de fitila, mas K-2 também possui cadeias laterais de isoprenóides.

O K-2 tem vários subtipos, chamados menaquinonas (MKs), que os cientistas numeraram de MK-4 a MK-13, com base no comprimento de suas cadeias laterais.

O K-1 é a forma primária da vitamina e está presente principalmente em vegetais de folhas verdes. No entanto, o corpo tem dificuldade em absorver a vitamina K-1 das plantas.

De acordo com uma revisão de 2019, a pesquisa sugere que o corpo absorve 10 vezes mais vitamina K-2, na forma de MK-7, do que a vitamina K-1.

A vitamina K é solúvel em gordura, portanto, comer gorduras dietéticas, como manteiga ou óleos vegetais, pode aumentar a absorção corporal da vitamina K-1 das plantas.

As bactérias no intestino podem sintetizar a vitamina K-1 em vitamina K-2. Além disso, alimentos fermentados, carne e laticínios contêm quantidades modestas de vitamina K-2.

O corpo armazena as vitaminas K-1 e K-2 de maneira diferente. O K-1 se acumula no fígado, coração e pâncreas. O K-2 ocorre em altas concentrações no cérebro e nos rins.

Vários alimentos são ricos em vitamina K-1, e a vitamina K-2 é muito menos comum. As bactérias no intestino podem converter algum K-1 em K-2.

Alimentos fermentados são uma boa fonte de vitamina K-2.

Além disso, por ser solúvel em gordura, carnes orgânicas e laticínios com alto teor de gordura contêm quantidades bastante substanciais de vitamina K-2. Por outro lado, carnes magras, como aves, não são boas fontes de K-2.

As fontes dietéticas de vitamina K-1 incluem:

  • vegetais de folhas verdes escuras, como espinafre, couve e couve
  • alface
  • nabos
  • brócolis
  • cenouras
  • óleos vegetais
  • uvas

As fontes dietéticas de vitamina K-2 incluem:

  • natto, um prato tradicional japonês de soja fermentada
  • Chucrute
  • laticínios, especialmente queijos duros
  • fígado e outras carnes orgânicas
  • carne
  • carne de porco
  • gemas de ovo
  • frango
  • peixes gordurosos, como salmão

Além de seu papel crucial na coagulação do sangue e na cicatrização de feridas, a vitamina K-2 tem uma série de outros benefícios à saúde. Discutimos alguns deles a seguir.

Saúde do coração

A vitamina K-2 pode reduzir o risco de danos cardiovasculares e melhorar a saúde geral do coração.

De acordo com um artigo de revisão de 2015, o K-2 ativa uma proteína que impede a formação de depósitos de cálcio nas paredes dos vasos sanguíneos. O autor citou descobertas que sugerem que uma dieta rica em vitamina K2 natural pode diminuir o risco de doença cardíaca coronária.

Saúde óssea

A vitamina K-2 promove a densidade mineral óssea saudável ao carboxilar a osteocalcina, uma proteína que liga o cálcio aos ossos.

Um estudo de 2019 investigou os efeitos da ingestão de suplementos de MK-4 em 29 mulheres na pós-menopausa que tiveram fraturas de quadril ou compressão vertebral.

Os pesquisadores concluíram que tomar 5 miligramas de um suplemento de MK-4 diariamente reduziu os níveis de osteocalcina subcarboxilada para o "típico de mulheres saudáveis ​​na pré-menopausa".

Um estudo de 2017 do Japão examinou se a vitamina K-2 aumenta os efeitos da medicação padrão para a osteoporose em mulheres adultas com 65 anos ou mais. De acordo com os resultados, a vitamina K-2 não pareceu aumentar os efeitos da medicação para a osteoporose.

Ansiedade e depressão

Níveis elevados de glicose no sangue podem aumentar o risco de uma pessoa desenvolver depressão, ansiedade e deficiência cognitiva.

Um estudo de 2016 investigou os efeitos da vitamina K-2 em ratos com síndrome metabólica, níveis elevados de glicose no sangue e sintomas de ansiedade, depressão e déficit de memória.

Após 10 semanas, o tratamento com vitamina K normalizou a glicose no sangue e reduziu os sintomas de ansiedade e depressão. No entanto, não melhorou o déficit de memória nos ratos.

Câncer

A vitamina K-2 tem propriedades antioxidantes que podem ajudar a proteger contra o câncer. Além disso, as descobertas sugerem que o K-2 pode suprimir os processos genéticos que levam ao crescimento do tumor.

De acordo com um estudo de 2018, a vitamina K-2 que os cientistas modificaram com um conjugado de ácido siálico-colesterol suprimiu significativamente o crescimento do tumor em células de camundongo.

Um estudo de 2019 sugere que o K-2 reduz significativamente a atividade do fator 1-alfa induzível por hipóxia (HIF-1A) em células de carcinoma hepatocelular. O HIF-1A é um alvo importante para a terapia medicamentosa contra o câncer.


2: Funções

O Spark também inclui mais funções integradas que são menos comuns e não são definidas aqui. Você ainda pode acessá-los (e todas as funções definidas aqui) usando a API functions.expr () e chamando-os por meio de uma string de expressão SQL. Você pode encontrar a lista completa de funções na documentação da API SQL.

Por exemplo, isnan é uma função definida aqui. Você pode usar isnan (col ("myCol")) para invocar a função isnan. Desta forma, o compilador da linguagem de programação garante a existência de isnan e sua forma adequada. Você também pode usar a função expr ("isnan (myCol)") para invocar a mesma função. Nesse caso, o próprio Spark garantirá a existência de isnan ao analisar a consulta.

regr_count é um exemplo de uma função embutida, mas não definida aqui, porque é menos comumente usada. Para invocá-lo, use expr ("regr_count (yCol, xCol)").

Essas APIs de função geralmente têm métodos com assinatura de coluna apenas porque podem suportar não apenas coluna, mas também outros tipos, como uma string nativa. As outras variantes existem atualmente por razões históricas.


Funções de nível de bloco

No modo estrito, a partir do ES2015, as funções dentro dos blocos agora têm como escopo esse bloco. Antes do ES2015, as funções de nível de bloco eram proibidas no modo estrito.

Funções de nível de bloco em código não estrito

Em código não estrito, as declarações de função dentro de blocos se comportam de maneira estranha. Por exemplo:

ES2015 diz que se shouldDefineZero for false, então zero nunca deve ser definido, uma vez que o bloco nunca é executado. No entanto, é uma nova parte do padrão. Historicamente, isso não foi especificado e alguns navegadores definiriam zero se o bloco fosse executado ou não.

No modo estrito, todos os navegadores que suportam ES2015 lidam com isso da mesma maneira: zero é definido apenas se shouldDefineZero for verdadeiro e apenas no escopo do if -block.

Uma maneira mais segura de definir funções condicionalmente é atribuir uma expressão de função a uma variável:


2: Funções

Operações em funções

Nesta seção, aprenderemos o que significa adicionar, subtrair, multiplicar e dividir duas funções. Aprender essas operações é importante porque quase qualquer função que você encontrar é a soma, diferença, produto ou quociente (ou qualquer combinação dessas operações) de funções mais simples. Você também aprenderá a encontrar o domínio e o alcance dessas funções.

A soma de duas funções

Suponha que temos duas funções, f(x) e g(x) Podemos definir a soma dessas duas funções por,

Onde x está no domínio de ambos f e g.

Por exemplo, podemos adicionar as funções f(x) = x 2 e menos 1 e g(x) = 2x 3 + 3 como,

O domínio de (f + g)(x) consiste em tudo x-valores que estão no domínio de ambos f e g. Neste exemplo, f e g ambos têm domínio que consiste em todos os números reais, portanto (f + g)(x) também tem domínio que consiste em todos os números reais.

A diferença de duas funções

Suponha que temos duas funções, f(x) e g(x) Podemos definir a diferença dessas duas funções por,

Onde x está no domínio de ambos f e g.

O domínio do (f &menos g)(x) consiste em tudo x-valores que estão no domínio de ambos f e g. Nesse caso, f tem domínio , e g tem domínio de todos os números reais, portanto (f &menos g)(x) tem domínio , porque esses valores de x estão no domínio de ambos f e g.

O produto de duas funções

Suponha que temos duas funções, f(x) e g(x) Podemos definir o produto dessas duas funções por,

Onde x está no domínio de ambos f e g.

Por exemplo, podemos multiplicar as funções f(x) = 1/ x e g(x) = 2 como,

O domínio do (f & middotg)(x) consiste em tudo x-valores que estão no domínio de ambos f e g. Neste exemplo, f tem domínio <x | x & ne 0>, e g tem domínio de todos os números reais, portanto (f & middot g)(x) tem domínio <x | x & ne 0>, porque esses valores de x estão no domínio de ambos f e g.

O quociente de duas funções

Suponha que temos duas funções, f(x) e g(x) Podemos definir o quociente dessas duas funções por,

Onde x está no domínio de ambos f e g. É importante especificarg(x) & ne 0 porque não podemos dividir por zero. Por exemplo, podemos dividir as funções f(x) = x & menos 7 e g(x) = x + 5 como,

O domínio de (f/g) (x) consiste em tudo x-valores que estão no domínio de ambos f e g, Onde g(x) & ne 0. Ambos f e g têm domínio todos os números reais, mas g(x) = 0 quando x = & menos5. Assim, o domínio de (f/g) (x) é <x | x & ne & minus5>.

Na próxima seção, aprenderemos como fazer a composição de duas funções.


Funções

As funções permitem estruturar programas em segmentos de código para realizar tarefas individuais.

Em C ++, uma função é um grupo de instruções que recebem um nome e que podem ser chamadas de algum ponto do programa. A sintaxe mais comum para definir uma função é:

nome do tipo (parâmetro1, parâmetro2,.)

Onde:
- tipo é o tipo do valor retornado pela função.
- name é o identificador pelo qual a função pode ser chamada.
- parâmetros (quantos forem necessários): Cada parâmetro consiste em um tipo seguido por um identificador, com cada parâmetro sendo separado do próximo por uma vírgula. Cada parâmetro se parece muito com uma declaração de variável regular (por exemplo: int x) e, de fato, atua dentro da função como uma variável regular que é local para a função. O objetivo dos parâmetros é permitir a passagem de argumentos para a função a partir do local de onde ela é chamada.
- as declarações são o corpo da função. É um bloco de instruções entre colchetes <> que especificam o que a função realmente faz.

Vamos dar uma olhada em um exemplo:

Este programa está dividido em duas funções: adição e principal. Lembre-se de que não importa a ordem em que sejam definidos, um programa C ++ sempre começa chamando main. Na verdade, main é a única função chamada automaticamente, e o código em qualquer outra função só é executado se sua função for chamada de main (direta ou indiretamente).

No exemplo acima, main começa declarando a variável z do tipo int e, em seguida, realiza a primeira chamada de função: chama a adição. A chamada para uma função segue uma estrutura muito semelhante à sua declaração. No exemplo acima, a chamada para adição pode ser comparada à sua definição apenas algumas linhas anteriores:


Os parâmetros na declaração da função têm uma correspondência clara com os argumentos passados ​​na chamada da função. A chamada passa dois valores, 5 e 3, para a função, que correspondem aos parâmetros a e b, declarados para adição da função.

No ponto em que a função é chamada de dentro de main, o controle é passado para a função de adição: aqui, a execução de main é interrompida e só será retomada quando a função de adição terminar. No momento da chamada da função, o valor de ambos os argumentos (5 e 3) são copiados para as variáveis ​​locais int a e int b dentro da função.

Então, dentro da adição, outra variável local é declarada (int r), e por meio da expressão r = a + b, o resultado de a mais b é atribuído a r que, para este caso, onde a é 5 e b é 3, significa que 8 é atribuído a r.

A declaração final dentro da função:

Termina a adição da função e retorna o controle ao ponto onde a função foi chamada neste caso: para a função principal. Neste preciso momento, o programa retoma seu curso no principal retornando exatamente no mesmo ponto em que foi interrompido pela chamada à adição. Mas, além disso, como a adição tem um tipo de retorno, a chamada é avaliada como tendo um valor, e esse valor é o valor especificado na instrução de retorno que encerrou a adição: neste caso particular, o valor da variável local r, que no momento da declaração de retorno tinha um valor de 8.


Portanto, a chamada para adição é uma expressão com o valor retornado pela função e, neste caso, esse valor, 8, é atribuído a z. É como se toda a chamada de função (adição (5,3)) fosse substituída pelo valor que ela retorna (ou seja, 8).

Em seguida, main simplesmente imprime esse valor chamando:

Na verdade, uma função pode ser chamada várias vezes em um programa, e seu argumento naturalmente não se limita apenas a literais:

Semelhante à função de adição no exemplo anterior, este exemplo define uma função de subtração, que simplesmente retorna a diferença entre seus dois parâmetros. Desta vez, main chama essa função várias vezes, demonstrando mais maneiras possíveis nas quais uma função pode ser chamada.

Vamos examinar cada uma dessas chamadas, tendo em mente que cada chamada de função é uma expressão avaliada como o valor que retorna. Novamente, você pode pensar nisso como se a chamada da função fosse substituída pelo valor retornado:

Se substituirmos a chamada de função pelo valor que ela retorna (ou seja, 5), teríamos:

Com o mesmo procedimento, podemos interpretar:

já que 5 é o valor retornado pela subtração (7,2).

Os argumentos passados ​​para a subtração são variáveis ​​em vez de literais. Isso também é válido e funciona bem. A função é chamada com os valores que xey possuem no momento da chamada: 5 e 3 respectivamente, retornando 2 como resultado.

A quarta chamada é novamente semelhante:

A única adição é que agora a chamada de função também é um operando de uma operação de adição. Novamente, o resultado é o mesmo como se a chamada de função fosse substituída por seu resultado: 6. Observe que, graças à propriedade comutativa das adições, o acima também pode ser escrito como:

Com exatamente o mesmo resultado. Observe também que o ponto-e-vírgula não necessariamente vem após a chamada da função, mas, como sempre, no final de toda a instrução. Novamente, a lógica por trás pode ser facilmente vista novamente, substituindo as chamadas de função por seus valores retornados:

Funções sem tipo. O uso do vazio

A sintaxe mostrada acima para funções:

nome do tipo (argumento1, argumento2.)

Requer que a declaração comece com um tipo. Este é o tipo de valor retornado pela função. Mas e se a função não precisar retornar um valor? Nesse caso, o tipo a ser usado é nulo, que é um tipo especial para representar a ausência de valor. Por exemplo, uma função que simplesmente imprime uma mensagem pode não precisar retornar nenhum valor:

void também pode ser usado na lista de parâmetros da função para especificar explicitamente que a função não aceita parâmetros reais quando chamada. Por exemplo, printmessage poderia ter sido declarado como:

Em C ++, uma lista de parâmetros vazia pode ser usada em vez de void com o mesmo significado, mas o uso de void na lista de argumentos foi popularizado pela linguagem C, onde isso é um requisito.

Algo que em nenhum caso é opcional são os parênteses que seguem o nome da função, nem na sua declaração nem na sua chamada. E mesmo quando a função não aceita parâmetros, pelo menos um par vazio de parênteses deve sempre ser anexado ao nome da função. Veja como printmessage foi chamado em um exemplo anterior:

Os parênteses são o que diferenciam as funções de outros tipos de declarações ou instruções. O seguinte não chamaria a função:

O valor de retorno do principal

Você deve ter notado que o tipo de retorno de main é int, mas a maioria dos exemplos neste e nos capítulos anteriores não retornou nenhum valor de main.

Bem, há um problema: se a execução de main termina normalmente sem encontrar uma instrução de retorno, o compilador assume que a função termina com uma instrução de retorno implícita:

Observe que isso se aplica apenas à função principal por motivos históricos. Todas as outras funções com um tipo de retorno devem terminar com uma instrução de retorno apropriada que inclui um valor de retorno, mesmo se este nunca for usado.

Quando main retorna zero (implícita ou explicitamente), é interpretado pelo ambiente como se o programa foi encerrado com sucesso. Outros valores podem ser retornados por main, e alguns ambientes dão acesso a esse valor para o chamador de alguma forma, embora esse comportamento não seja obrigatório nem necessariamente portátil entre plataformas. Os valores para main que têm garantia de serem interpretados da mesma maneira em todas as plataformas são:

valorDescrição
0 O programa foi bem sucedido
EXIT_SUCCESS O programa foi bem-sucedido (igual ao anterior).
Este valor é definido em header & ltcstdlib & gt.
EXIT_FAILURE O programa falhou.
Este valor é definido em header & ltcstdlib & gt.

Como a instrução return 0 implícita para main é uma exceção complicada, alguns autores consideram uma boa prática escrever explicitamente a instrução.

Argumentos passados ​​por valor e por referência

Nas funções vistas anteriormente, os argumentos sempre foram passados por valor. Isso significa que, ao chamar uma função, o que é passado para a função são os valores desses argumentos no momento da chamada, que são copiados para as variáveis ​​representadas pelos parâmetros da função. Por exemplo, pegue:

Nesse caso, a adição da função é passada 5 e 3, que são cópias dos valores de x e y, respectivamente. Esses valores (5 e 3) são usados ​​para inicializar as variáveis ​​definidas como parâmetros na definição da função, mas qualquer modificação dessas variáveis ​​dentro da função não tem efeito sobre os valores das variáveis ​​x e y fora dela, porque x e y foram eles próprios não são passados ​​para a função na chamada, mas apenas cópias de seus valores naquele momento.


Em certos casos, porém, pode ser útil acessar uma variável externa de dentro de uma função. Para fazer isso, os argumentos podem ser passados por referência, ao invés de por valor. Por exemplo, a função duplicate neste código duplica o valor de seus três argumentos, fazendo com que as variáveis ​​usadas como argumentos sejam realmente modificadas pela chamada:

To gain access to its arguments, the function declares its parameters as references. In C++, references are indicated with an ampersand ( & ) following the parameter type, as in the parameters taken by duplicate in the example above.

When a variable is passed by reference, what is passed is no longer a copy, but the variable itself, the variable identified by the function parameter, becomes somehow associated with the argument passed to the function, and any modification on their corresponding local variables within the function are reflected in the variables passed as arguments in the call.

In fact, a , b , and c become aliases of the arguments passed on the function call ( x , y , and z ) and any change on a within the function is actually modifying variable x outside the function. Any change on b modifies y , and any change on c modifies z . That is why when, in the example, function duplicate modifies the values of variables a , b , and c , the values of x , y , and z are affected.

If instead of defining duplicate as:

Was it to be defined without the ampersand signs as:

The variables would not be passed by reference, but by value, creating instead copies of their values. In this case, the output of the program would have been the values of x , y , and z without being modified (i.e., 1, 3, and 7).

Efficiency considerations and const references

Calling a function with parameters taken by value causes copies of the values to be made. This is a relatively inexpensive operation for fundamental types such as int , but if the parameter is of a large compound type, it may result on certain overhead. For example, consider the following function:

This function takes two strings as parameters (by value), and returns the result of concatenating them. By passing the arguments by value, the function forces a and b to be copies of the arguments passed to the function when it is called. And if these are long strings, it may mean copying large quantities of data just for the function call.

But this copy can be avoided altogether if both parameters are made references:

Arguments by reference do not require a copy. The function operates directly on (aliases of) the strings passed as arguments, and, at most, it might mean the transfer of certain pointers to the function. In this regard, the version of concatenate taking references is more efficient than the version taking values, since it does not need to copy expensive-to-copy strings.

On the flip side, functions with reference parameters are generally perceived as functions that modify the arguments passed, because that is why reference parameters are actually for.

The solution is for the function to guarantee that its reference parameters are not going to be modified by this function. This can be done by qualifying the parameters as constant:

By qualifying them as const , the function is forbidden to modify the values of neither a nor b , but can actually access their values as references (aliases of the arguments), without having to make actual copies of the strings.

Therefore, const references provide functionality similar to passing arguments by value, but with an increased efficiency for parameters of large types. That is why they are extremely popular in C++ for arguments of compound types. Note though, that for most fundamental types, there is no noticeable difference in efficiency, and in some cases, const references may even be less efficient!

Inline functions

Calling a function generally causes a certain overhead (stacking arguments, jumps, etc. ), and thus for very short functions, it may be more efficient to simply insert the code of the function where it is called, instead of performing the process of formally calling a function.

Preceding a function declaration with the inline specifier informs the compiler that inline expansion is preferred over the usual function call mechanism for a specific function. This does not change at all the behavior of a function, but is merely used to suggest the compiler that the code generated by the function body shall be inserted at each point the function is called, instead of being invoked with a regular function call.

For example, the concatenate function above may be declared inline as:

This informs the compiler that when concatenate is called, the program prefers the function to be expanded inline, instead of performing a regular call. inline is only specified in the function declaration, not when it is called.

Note that most compilers already optimize code to generate inline functions when they see an opportunity to improve efficiency, even if not explicitly marked with the inline specifier. Therefore, this specifier merely indicates the compiler that inline is preferred for this function, although the compiler is free to not inline it, and optimize otherwise. In C++, optimization is a task delegated to the compiler, which is free to generate any code for as long as the resulting behavior is the one specified by the code.

Default values in parameters

In C++, functions can also have optional parameters, for which no arguments are required in the call, in such a way that, for example, a function with three parameters may be called with only two. For this, the function shall include a default value for its last parameter, which is used by the function when called with fewer arguments. Por exemplo:

In this example, there are two calls to function divide . In the first one:

The call only passes one argument to the function, even though the function has two parameters. In this case, the function assumes the second parameter to be 2 (notice the function definition, which declares its second parameter as int b=2 ). Therefore, the result is 6.

The call passes two arguments to the function. Therefore, the default value for b ( int b=2 ) is ignored, and b takes the value passed as argument, that is 4, yielding a result of 5.

Declaring functions

In C++, identifiers can only be used in expressions once they have been declared. For example, some variable x cannot be used before being declared with a statement, such as:

The same applies to functions. Functions cannot be called before they are declared. That is why, in all the previous examples of functions, the functions were always defined before the main function, which is the function from where the other functions were called. If main were defined before the other functions, this would break the rule that functions shall be declared before being used, and thus would not compile.

The prototype of a function can be declared without actually defining the function completely, giving just enough details to allow the types involved in a function call to be known. Naturally, the function shall be defined somewhere else, like later in the code. But at least, once declared like this, it can already be called.

The declaration shall include all types involved (the return type and the type of its arguments), using the same syntax as used in the definition of the function, but replacing the body of the function (the block of statements) with an ending semicolon.

The parameter list does not need to include the parameter names, but only their types. Parameter names can nevertheless be specified, but they are optional, and do not need to necessarily match those in the function definition. For example, a function called protofunction with two int parameters can be declared with either of these statements:

Anyway, including a name for each parameter always improves legibility of the declaration.

This example is indeed not an example of efficiency. You can probably write yourself a version of this program with half the lines of code. Anyway, this example illustrates how functions can be declared before its definition:

Declare the prototype of the functions. They already contain all what is necessary to call them, their name, the types of their argument, and their return type ( void in this case). With these prototype declarations in place, they can be called before they are entirely defined, allowing for example, to place the function from where they are called ( main ) before the actual definition of these functions.

But declaring functions before being defined is not only useful to reorganize the order of functions within the code. In some cases, such as in this particular case, at least one of the declarations is required, because odd and even are mutually called there is a call to even in odd and a call to odd in even . And, therefore, there is no way to structure the code so that odd is defined before even , and even before odd .

Recursivity

Recursivity is the property that functions have to be called by themselves. It is useful for some tasks, such as sorting elements, or calculating the factorial of numbers. For example, in order to obtain the factorial of a number ( n! ) the mathematical formula would be:

n! = n * (n-1) * (n-2) * (n-3) . * 1
More concretely, 5! (factorial of 5) would be:

5! = 5 * 4 * 3 * 2 * 1 = 120
And a recursive function to calculate this in C++ could be:


Functions of Management

Management has been described as a social process involving responsibility for economical and effective planning & regulation of operation of an enterprise in the fulfillment of given purposes. It is a dynamic process consisting of various elements and activities. These activities are different from operative functions like marketing, finance, purchase etc. Rather these activities are common to each and every manger irrespective of his level or status.

Different experts have classified functions of management. According to George & Jerry, “There are four fundamental functions of management i.e. planning, organizing, actuating and controlling”.

According to Henry Fayol, “To manage is to forecast and plan, to organize, to command, & to control”. Whereas Luther Gullick has given a keyword ’POSDCORB’ where P stands for Planning, O for Organizing, S for Staffing, D for Directing, Co for Co-ordination, R for reporting & B for Budgeting. But the most widely accepted are functions of management given by KOONTZ and O’DONNEL i.e. Planning, Organizing, Staffing, Directing e Controlling.

For theoretical purposes, it may be convenient to separate the function of management but practically these functions are overlapping in nature i.e. they are highly inseparable. Each function blends into the other & each affects the performance of others.

Planning

It is the basic function of management. It deals with chalking out a future course of action & deciding in advance the most appropriate course of actions for achievement of pre-determined goals. According to KOONTZ, “Planning is deciding in advance - what to do, when to do & how to do. It bridges the gap from where we are & where we want to be”. A plan is a future course of actions. It is an exercise in problem solving & decision making. Planning is determination of courses of action to achieve desired goals. Thus, planning is a systematic thinking about ways & means for accomplishment of pre-determined goals. Planning is necessary to ensure proper utilization of human & non-human resources. It is all pervasive, it is an intellectual activity and it also helps in avoiding confusion, uncertainties, risks, wastages etc.

Organizing

It is the process of bringing together physical, financial and human resources and developing productive relationship amongst them for achievement of organizational goals. According to Henry Fayol, “To organize a business is to provide it with everything useful or its functioning i.e. raw material, tools, capital and personnel’s”. To organize a business involves determining & providing human and non-human resources to the organizational structure. Organizing as a process involves:

  • Identification of activities.
  • Classification of grouping of activities.
  • Assignment of duties.
  • Delegation of authority and creation of responsibility.
  • Coordinating authority and responsibility relationships.

Staffing

It is the function of manning the organization structure and keeping it manned. Staffing has assumed greater importance in the recent years due to advancement of technology, increase in size of business, complexity of human behavior etc. The main purpose o staffing is to put right man on right job i.e. square pegs in square holes and round pegs in round holes. According to Kootz & O’Donell, “Managerial function of staffing involves manning the organization structure through proper and effective selection, appraisal & development of personnel to fill the roles designed un the structure”. Staffing involves:

    (estimating man power in terms of searching, choose the person and giving the right place).
  • Recruitment, Selection & Placement. . . .
  • Promotions & Transfer.

Directing

It is that part of managerial function which actuates the organizational methods to work efficiently for achievement of organizational purposes. It is considered life-spark of the enterprise which sets it in motion the action of people because planning, organizing and staffing are the mere preparations for doing the work. Direction is that inert-personnel aspect of management which deals directly with influencing, guiding, supervising, motivating sub-ordinate for the achievement of organizational goals. Direction has following elements:

Supervision- implies overseeing the work of subordinates by their superiors. It is the act of watching & directing work & workers.

Motivation- means inspiring, stimulating or encouraging the sub-ordinates with zeal to work. Positive, negative, monetary, non-monetary incentives may be used for this purpose.

Leadership- may be defined as a process by which manager guides and influences the work of subordinates in desired direction.

Communications- is the process of passing information, experience, opinion etc from one person to another. It is a bridge of understanding.

Controlling

It implies measurement of accomplishment against the standards and correction of deviation if any to ensure achievement of organizational goals. The purpose of controlling is to ensure that everything occurs in conformities with the standards. An efficient system of control helps to predict deviations before they actually occur. According to Theo Haimann, “Controlling is the process of checking whether or not proper progress is being made towards the objectives and goals and acting if necessary, to correct any deviation”. According to Koontz & O’Donell “Controlling is the measurement & correction of performance activities of subordinates in order to make sure that the enterprise objectives and plans desired to obtain them as being accomplished”. Therefore controlling has following steps:

  1. Establishment of standard performance.
  2. Measurement of actual performance.
  3. Comparison of actual performance with the standards and finding out deviation if any.
  4. Corrective action.

Learn management concepts & skills rapidly with easy to understand, richly illustrated self-paced learning modules & downloadable powerpoint presentations.

Download DEMO Presentation Now!.

As a premium member, you get access to view complete course content online and download powerpoint presentations for more than 200 courses in management and skills area.