Instituto Federal de Mato Grosso do SulSetembro/2024

IFMS marca

01. Subprogramas

Algoritmos 2

Prof. Rodrigo Duran

Nesta aula vamos:


  • Aprender como usar e definir subprogramas

    Usar subprogramas tem inúmeras vantagens (e alguns dizem que seu uso é até obrigatório): ajuda a organizar o código e nos permite conter possíveis efeitos colaterais, ajuda no processo de debug do código, permite o reaproveitamento de código e torna o código mais legível.

USANDO SUBPROGRAMAS

Por que reinventar a roda?

O que são subprogramas?


Um subprograma (ou função) é uma implementação de uma funcionalidade específica. Por exemplo, um subprograma pode calcular um resultado, registrar alguns dados úteis na memória do computador ou imprimir uma mensagem. Ou pode executar uma combinação específica de tais tarefas.

Os programadores podem criar subprogramas e, em seguida, usar o que criaram. Eles também podem usar subprogramas criados por outros programadores. Em geral, um programa completo contém muitos subprogramas.

Regra #24: Uma função é um componente do programa que se encarrega de uma tarefa específica.


Regra #25: Você não precisa saber como uma função foi implementada (seu código fonte) para utiliza-la. Você pode executar funções de bibliotecas, que podem fazer parte do sistema ou serem fornecidas por outras pessoas.

Exemplos de funções


Na verdade, nós já utilizamos certas funções há um certo tempo...

Por exemplo, onde está o código fonte do Math.floor()?

O que nós sabemos sobre o Math.floor()?

  • Ela retorna um resultado. Esse resultado é um número. Esse número é um Inteiro
  • Ela aceita um parâmetro: Um número qualquer, Inteiro ou Real
  • "Alguma coisa" é calculada quando ela é executada, e posteriormente nos retorna o resultado
  • Nós não sabemos, nem precisamos saber, como ela é executada: só precisamos fornecer o parâmetro de forma correta e entender que tipo de resultado ela retorna. Os detalhes ficam ocultos.

  • examplo do math.floor

Regra #26: Uma função é um componente do programa que se encarrega de uma tarefa específica.



Regra #27: Você não precisa saber como uma função foi implementada (seu código fonte) para utiliza-la. Você pode executar funções de bibliotecas, que podem fazer parte do sistema ou serem fornecidas por outras pessoas.

Tipos de Funções


Não é sempre que uma função retorna um resultado. Existem algumas funções que só realizam uma determinada tarefa e não retornam um valor -- muitas vezes essas funções são chamadas de procedimentos. Por exemplo, nós já utilizamos o procedimento console.log() há algum tempo...

O que nós sabemos sobre o console.log()?

  • Ela não retorna um resultado. Isso não quer dizer que ela não faça nada!
  • Retornar um resultado significa apenas que um valor (String, Number) pode ser usado como uma expressão de retorno da função.
  • Por exemplo, a funcionalidade do console.log() é mostrar uma expressão no console.
  • Nós não precisamos saber como a função faz isso. Apenas saber o que ela faz
  • Devemos saber também que tipo de parâmetros ela "precisa": nesse caso, uma expressão de qualquer tipo

  • examplo do console.log

Regra #28: Para executar uma função, escreva seu nome para "chamá-la"

Regra #29: A chamada de uma função possui zero ou mais argumentos (parâmetros)

Regra #30: Argumentos são expressões

Regra #31: Se a função retornar um algo, ela também retorna uma expressão

Exemplos de funções "prontas" em JavaScript (bibliotecas)


Math.round(Number): retorna Number arredondado ao inteiro mais próximo

let n = Math.round(4.9)
5
let n = Math.round(4.4)
4

Math.abs(Number): retorna o valor absoluto de Number

let n = Math.abs(2)
2
let n = Math.abs(-2)
2

Math.random(): retorna um número aleatório entre 0 e 1

let dado = Math.random()
?

Math.pow(NumberX, NumberY): retorna o valor de NumberXNumberY

let n = Math.pow(3,2)
9
let n = Math.pow(2,4)
16

Math.sqrt(Number): retorna a raiz quadrada de Number

let n = Math.sqrt(9)
3

Math.min(Number1, Number2, ..., NumberN): retorna o menor de uma série de numeros

let menor = Math.min(0, 9, 3 , 44, -1, 3, -5)
-5

Math.max(Number1, Number2, ..., NumberN): retorna o maior de uma série de numeros

let maior = Math.min(0, 9, 3 , 44, -1, 3, -5)
44

Funções como expressões


As funções que retornam um valor podem ser usadas normalmente como expressões, inclusive como argumentos de outras funções!

let resultado = Math.sqrt(16) + 4
8
let valor1 = 10
let valor2 = 20
let diff = Math.abs(valor1-valor2)
10
diff = Math.abs(valor2-valor1)
10
let a = 10
let b = -15
let c = Math.min(a, Math.abs(b))
console.log(c)

CRIANDO NOSSOS PRÓPRIOS SUBPROGRAMAS

Para quando precisarmos criar a roda. E para que outros usem a roda que criamos. E para ter certeza que a roda funciona...

Criando funções customizadas


Até agora, vimos como utilizar funções em bibliotecas. Elas são muito úteis e fáceis de usar. Mas nem sempre atendem às nossas necessidades. Por exemplo, imagine que precisemos calcular a média de cada aluno na disciplina de Algoritmos I (vide atividade anterior):

let media = (0.5*notaTrabalho)+(0.3*notaAtividade)+(0.2*notaPresenca)

Você pode imaginar que devemos calcular essa média para centenas de alunos, logo seria prático ter um subprograma para isso. Subprogramas tem várias vantagens:

  1. Nos permite isolar a funcionalidade. Se em algum momento algo estiver errado com o cálculo nós sabemos exatamente onde procurar.
  2. Algo errado com o cálculo da média não influi em nada no resto do código do programa
  3. Nós podemos compartilhar esse método de cálculo com outras pessoas (e em outros programas nossos também)
  4. Se algum dia precisarmos modificar a forma como a média é calculada, não impacta em outras partes do programa e nos permite testar facilmente essa alteração
  5. Como fica mais fácil isolar a funcionalidade, o nosso programa fica mais organizado e mais fácil de ser lido.

Para criar uma função customizada, basta utilizar a palavra function, especificar os parâmetros que a função aceita e escrever o código que ela deve executar (bloco). Caso a função retorne um resultado, a palavra return especifica qual a expressão será retornada.

let calcularMedia = function(notaTrabalho, notaAtividade, notaParticipacao) {
  let mediaAtividade = 0.3 * notaAtividade
  let mediaParticipacao = 0.2 * notaParticipacao
  let mediaTrabalho = 0.5 * notaTrabalho

  return mediaTrabalho + mediaAtividade + mediaParticipacao
}

let minhaMedia = calcularMedia(10, 7, 6.5)
console.log(minhaMedia)

função

Criando funções customizadas


Vocês devem ter calculado as raízes de equações algumas vezes utilizando a fórmula de Bhaskara. Como fazer subprogramas para calcular as raízes?

  1. O primeiro passo é entender quais são as etapas no cálculo: calcular o Delta, a raiz positiva e a raiz negativa
  2. Quais são os parâmetros? O que deve ser fornecido para o cálculo das raízes ? Os fatores que acompanham as variáveis X: a, b e c.
  3. Qual o processo? O processo será o corpo do nosso subprograma: é a própria formula de Bhaskara.
peças de lego

Criando funções customizadas


Utilizando funções de bibliotecas para criar as nossas próprias funções


Crie uma função que sorteie um número aleatório entre 0 e 100 para o nosso torneio de Bingo!