Exercícios Javascript

Funções geradoras


Funções que geram coleções de valores.

Uma coleção é uma estrutura de dados que armazena ou produz valores, como arrays ou listas.

Por exemplo:

const numbers = [1, 2, 3, 4];

  1. Escreva uma função repete(x, n) que devolve um array com n cópias de x.
  2. Escreva uma função aleatorios(n) que devolve um array com n números aleatórios.
  3. Escreva uma função intervalo(a, b) que devolve um array com os números inteiros entre a e b incluindo ambos os extremos. Se b < a o resultado deve ser a lista vazia [].
  4. Escreva uma função linspace(a, b, n) que enche um array com n números reais (float) entre a e b, igualmente espaçados.
    • Por exemplo linspace(0, 1, 3) devolve [0.0, 0.5, 1.0].

Filtros


Funções que selecionam elementos de uma coleção.

Em geral, a seleção pode ser feita por meio de condições booleanas.

Por exemplo:

const even_numbers = numbers.filter(x => x % 2 === 0);
// [2, 4]

  1. Escreva uma função pares(x) que tem como argumento um array x de números inteiros e que devolve um array apenas com os números pares.
    • Por exemplo pares([1, 2, 4, 5, 2, 3]) devolve [2, 4, 2].
  2. Escreva uma função positivos(x) que tem como argumento um array x de números reais e que devolve um array apenas com os números positivos.
    • Por exemplo positivos([1, -2.5, 0.4, 0.0, -1.5, 2, 2.3]) devolve [1, 0.4, 2, 2.3].
  3. Escreva uma função limite_sup(x, a) que tem como argumentos um array x de números reais e um valor a e que devolve um array apenas com os números menores ou iguais que o valor a.
    • Por exemplo limite_sup([1, -2.5, 0.4, 0.0, -1.5, 2, 2.3], 0.4) devolve [-2.5, 0.4, 0.0, -1.5].
  4. Escreva uma função filtro(f, x) que tem como argumentos uma função f: float -> boolean e um array x de números reais e que devolve um array apenas com os números xi de x tais que f(xi) === true.
    • Por exemplo filtro(x => x % 2 === 0, [1, 2, 4, 5, 2, 3]) devolve [2, 4, 2]. Quais das alíneas acima consegue tornar a resolver usando esta função?

Mapas


Funções que transformam elementos de uma coleção.

Em geral, a transformação pode ser feita por uma função que aplica um valor num outro valor.

Por exemplo:

const square_numbers = numbers.map(x => x ** 2);
// [1, 4, 8, 16]

  1. Escreva uma função dobro(x) que tem como argumento um array x de números reais e que devolve um array com os dobros desses números.
    • Por exemplo dobro([1, 2.1, 4, 5, -2, 3]) devolve [2, 4.2, 8, 10, -4, 6].
  2. Escreva uma função quadrado(x) que tem como argumento um array x de números reais e que devolve um array com os quadrados desses números.
    • Por exemplo quadrado([1, -2.5, 0.4]) devolve [1, 6.25, 0.16].
  3. Escreva uma função unicos(x) que tem como argumento um array x de números reais e que devolve um array sem valores repetidos.
    • Por exemplo quadrado([1, -2.5, 1]) devolve [1, -2.5].
  4. Escreva uma função crescente(x) que tem como argumento um array x de números reais e que devolve um array com os valores por ordem crescente.
    • Por exemplo crescente([1, -2.5, 1]) devolve [-2.5, 1, 1].
  5. Escreva uma função estender(x, n) que tem como argumento um array x de números reais e um valor inteiro n e que devolve um array exatamente de comprimento n. Se o comprimento de x for menor que n devem ser acrescentados zeros suficientes. Se o comprimento de x for maior que n os valores a mais são descartados.
    • Por exemplo estender([1, -2.5], 4) devolve [1, -2.5, 0, 0], e estender([1, 6.25, 0.16], 2) devolve [1, 6.25].
  6. Escreva uma função mapa(f, x) que tem como argumentos uma função f: float -> float e um array x de números reais e que devolve um array com números yi = f(xi) em que x = [ ..., xi, ...].
    • Por exemplo mapa(x => 2 * x, [1, 2.1, 4, 5, -2, 3]) devolve [2, 4.2, 8, 10, -4, 6]. Quais das alíneas acima consegue tornar a resolver usando esta função?

Combinações


Funções que combinam uma ou várias coleções numa coleção nova.

Por exemplo:

const descending_numbers = numbers.reverse();
// [4, 3, 2, 1]
const seesaw = numbers.concat(descending_numbers);
// [1, 2, 3, 4, 4, 3, 2, 1]

  1. Escreva uma função inverte(x) que tem como argumentos o array x de números reais e que devolve um array com os valores de x por ordem inversa (do último para o primeiro).

  2. Assegure-se que x = cadeia(cabeca(n, x), cauda(n, x)) para qualquer x e qualquer n, em que:

    1. A função cadeia(x, y) tem como argumentos dois array x, y de números reais e devolve um array com os valores de x seguidos pelos valores de y.
      • Por exemplo cadeia([1, 2.1, 4], [5, -2, 3]) devolve [1, 2.1, 4, 5, -2, 3].
    2. A função cabeca(n, x) tem como argumentos o int n e o array x de números reais e devolve o array dos primeiros n valores de x.
    3. A função cauda(n, x) tem como argumentos o int n e o array x de números reais e devolve o array com os valores de x a partir do n-ésimo elemento.
  3. Escreva uma função somar(x, y) que tem como argumentos dois array x, y de números reais e que devolve um array com os valores de x somados aos valores de y pela mesma ordem. Se os argumentos tiverem comprimentos diferentes o resultado deve ser a lista vazia: [].

    • Por exemplo somar([1, 2.1, 4], [5, -2, 3]) devolve [6, 0.1, 7] e somar([1, 2], [3]) devolve [].
  4. Escreva uma função emparelhar(x, y) que tem como argumentos dois array x, y de números reais e que devolve um array com objetos {x: xi, y: yi} onde xi, yi estão nas mesmas posições de x, y. Se os argumentos tiverem comprimentos diferentes o resultado deve ser a lista vazia: [].

    • Por exemplo emparelhar([1, 2.1, 4], [5, -2, 3]) devolve [{x: 1, y: 5}, {x: 2.1, y: -2}, {x: 4, y: 3}] e emparelhar([1, 2], [3]) devolve []. Consegue usar a função mapa do exercício anterior para resolver esta alínea?

Reduções


Funções que reduzem uma coleção a um valor.

Por exemplo:

const numbers_count = numbers.length;
// 4
Math.min(...numbers);
// 1

  1. Escreva uma função conta(x) que tem como argumento um array x de números reais e que devolve o comprimento do array.
    • Por exemplo conta([1, 2, 3, 4]) devolve 4.
  2. Escreva uma função soma(x) que tem como argumento um array x de números reais e que devolve a soma desses números.
    • Por exemplo soma([1, 2, 3, 4]) devolve 10.
  3. Escreva uma função media(x) que tem como argumento um array x de números reais e que devolve a média desses números.
    • Por exemplo media([1, 2, 3, 4]) devolve 2.5.
  4. Escreva uma função max(x) que tem como argumento um array x de números reais e que devolve o maior desses números.
    • Por exemplo max([1, 2, 3, 4]) devolve 4.
  5. Escreva uma função min(x) que tem como argumento um array x de números reais e que devolve o menor desses números.
    • Por exemplo min([1, 2, 3, 4]) devolve 1.
  6. Escreva uma função stats(x) que tem como argumento um array x de números reais e que devolve um sumário estatístico desses valores: um objeto com atributos count, mean, stdev, min, max. O atributo count é o comprimento de x, os valores de mean, min, max resultam das alíneas anteriores e stdev (o desvio padrão) pode ser calculado pela fórmula onde é a dimensão do vetor e a sua média.
    • Por exemplo stats([1, 2, 3, 4]) devolve {count: 4, mean: 2.5, stdev: 1.291, min: 1, max: 4}.

Álgebra Linear


Métodos numéricos fundamentais para a computação gráfica.

Por exemplo:

Um segmento pode ser definida por dois pontos, e . O comprimento deste segmento resulta do produto interno através da fórmula


  1. Escreva uma função dot(x, y) que tem como argumentos dois array x, y de números reais e que devolve o produto interno dos vetores e . O produto interno de e é Se os argumentos tiverem comprimentos diferentes o resultado deve ser a lista vazia: [].
    • Por exemplo dot([1, 2, 3], [4, 5, 6]) devolve 32. Torne a resolver esta alínea usando as alíneas e exercícios anteriores.
  2. Escreva uma função norma(x) que tem como argumento um array x de números reais e que devolve a norma do vetor .
    • Por exemplo norma([1, 1]) devolve 1.4142135624. Lembre-se que a norma de um vetor é