🌐 slides 📺 video-aula
🌐 slides 📺 video-aula
🌐 slides 📺 video-aula
Nesta atividade de JavaScript, vamos apresentar os resultados de cada exercício usando uma função criada
pelos professores chamada escreva(...)
. Ela mostra na página web o valor de uma determinada variável, com um
determinado rótulo (descrição) para identificá-la. Assim, essa função recebe como parâmetros: 1) o número do exercício,
2) o rótulo (que é uma descrição da variável) e 3) o valor da variável. Por exemplo, ela pode ser invocada assim:
function algumaFuncaoMinha() {
// ...
// ...
// ...
let senhaWiFi = 'scientiasalvet';
// ...
// ...
// chamando função 'escreva(...)'
// ^
// --------------------------------------------------------
escreva(1, 'A senha do WiFi na casa do Coutinho', senhaWiFi);
// - ------------------------------------- ---------
// ^ nº exercício ^ rótulo (descrição) ^ variável
// ...
// ...
}
Veja, no arquivo ex-unidade1.js, na função testeSaidas,
como a função escreva(...)
foi chamada para
imprimir a variável a. Ao invocar a função para escrever, ela
aparecerá na caixa de saída (região logo abaixo). Note que a função está apenas implementada
mas ainda não foi invocada (chamada). Você pode invocá-la no próprio arquivo (ex-unidade1.js
).
Assim que invocá-la, o valor da variável será mostrado na caixa de saída logo abaixo .
Então, invoque-a agora dentro de ex-unidade1.js e veja se aparece na saída o valor da variável a.
Para verificar se ocorreu algum erro de sintaxe (escrita) no seu código, pressione
F12 e o erro aparecerá na aba de console.
Neste exercício 0.1, você deverá continuar a implementação da função testeSaidas. Nela, você deverá chamar a função escreva mais vezes para imprimir as variáveis (i) b, (ii) a soma das variáveis a e b, (iii) d, (iv) e, da mesma forma que foi impressa a variável a. Logo após, escreva seu nome por meio da função escrevaMensagem - veja como ela foi usada no início do código da função testeSaidas.
No arquivo ex-unidade1.js, crie uma função
chamada soma que recebe dois números como parâmetros,
escreve na saída abaixo (ou seja, chama escreva(...)
)
a soma desses dois números e, por fim, retorna o resultado para quem invocou a função.
Ao invocar escreva(...),
use como rótulo (2º argumento) o texto soma.
Você pode querer criar uma variável
(mas dá para resolver sem criar também). Por fim, invoque a função criada
soma(...)
para os números 5 e -2.
Implemente no arquivo ex-unidade1.js uma função com nome calculaValoresDoNumero, que recebe como parâmetro um número qualquer e escreve: i) o quadrado deste número, ii) a sua metade e iii) a sua raiz quadrada usando os rótulos quadrado, metade e raiz, respectivamente. Faça o teste invocando esta função (calculaValoresDoNumero(...)) para, pelo menos, dois números diferentes.
Continue a implementação da função contandoElementosDoVetor
no arquivo ex-unidade2.js. Essa função recebe
como parâmetro o vetor elementos e um
elementoSendoProcurado e deverá usar o
for of
ou o for each
para contar quantas vezes que o elementoSendoProcurado
apareceu no vetor elementos. Essa quantidade deve ser retornada
pela função.
Para verificar se o elemento
atual
do vetor é igual ao elementoSendoProcurado,
você pode querer usar um if/else.
Teste a função invocando-a tanto para vetores de strings
quanto de numbers
:
contandoElementosDoVetor([1, 5, 5], 5); // retorna 2
contandoElementosDoVetor(['daniel', 'flávio'], 'joão'); // retorna 0
Na função obtemNomeDoMes
do arquivo ex-unidade2.js
,
substitua as palavras null
pelos valores corretos para
terminar de implementá-la. Ela recebe como parâmetro o número do mês (de 1 a 12) e deve retornar seu nome.
Lembre-se de como pegar o i-ésimo elemento
de um vetor. Essa função também deve verificar se o número recebido é um mês válido,
ou retornar null
(lembre-se de if/else).
Neste exercício, você não deve alterar o vetor meses
. Apenas altere os
trechos do código onde está escrito null
para valores
que façam sentido para o código executar corretamente. Faça o teste para meses válidos
e inválidos (ex: -1, 0, 13). Iremos usar esta função em outro exercício e, por isso, você deverá
escrever o mês
resultante do lado de fora da função
usando seu retorno.
Implemente a função metodosVetor no arquivo ex-unidade3.js, que recebe como parâmetro um vetor e retorna o próprio vetor mas com as seguintes modificações:
Faça o teste abaixo invocando esta função 2 vezes com vetores de tamanho diferentes
que contenham números ([4, 0, 9]
)
ou então strings.
A função vetor.sort()
sem
a função passada como parâmetro converte números para strings e só então compara. Sendo assim,
[1, 2, 3, 100].sort()
resultaria em [1, 100, 2, 3]
. Para este exercício, não é
necessário se preocupar com isso.
Implemente no arquivo ex-unidade3.js a função metodosString que recebe como parâmetro uma string qualquer e deve fazer as seguintes transformações:
Veja a documentação e 🌐 os slides, se necessário.
Em particular, a função texto.replaceAll
poderá ajudar.
Faça o teste invocando a função algumas vezes para diferentes palavras.
Diferente dos métodos de vetores, que alteram o próprio vetor, os métodos das strings não alteram a própria string, mas sim retornam uma nova string com o resultado. Ou seja, o código a seguir não está alterando o valor da variável:
let pessoa = 'Dança';
pessoa.toUpperCase(); // retorna 'DANÇA'
console.log(pessoa); // imprime 'Dança'
...mas este aqui está atualizando para onde a variável aponta:
let pessoa = 'Dança';
pessoa = pessoa.toUpperCase(); // retorna 'DANÇA'
console.log(pessoa); // imprime 'DANÇA'
Exercício adaptado de [Fundamentos da Programação de Computadores: Algoritmos, Pascal, C, C++ e Java, Holloway, 2008]
Uma bola é jogada para o alto. Neste problema, deve-se calcular a altura \(h(t)\) (em metros) desta bola em um determinado tempo \(t\) (em segundos). Considere que a pessoa lançou a bola a uma altura \(h(t)=v_0t - \frac{gt^2}{2}\), em que \(v_0\) é a velocidade inicial da bola em metros por segundo, \(t\) é o tempo em segundos e \(g\) é a gravidade.
Assim, você deverá terminar de implementar a função calculaAlturaBola
no arquivo ex-unidade1.js substituindo o valor
null
apropriadamente. Essa função recebe como parâmetro
o tempo \(t\), a velocidade inicial \(v_0\)
e a gravidade \(g\) nessa ordem
e retorne a altura da bola naquele instante.
Para testar, invoque esta função usando a gravidade da Terra (9,81 m/s²), velocidade inicial 50 e tempo 1, 5 e 10 (ou seja, invoque a função 3 vezes).
Se algo estranho (ou nada) acontecer, para verificar se o seu código tem algum erro de sintaxe (escrita), pressione F12 e o erro aparecerá na aba de console.
Escreva na saída abaixo o resultado das execuções
dessa função. Contudo, em vez de invocar escreva
dentro de calculaAlturaBola
, chame-a fora dela, após invocá-la e
receber seu valor de retorno.
Isso é necessário neste exercício porque iremos reutilizar essa função em uma próxima atividade ;)
Exercício adaptado de [Fundamentos da Programação de Computadores: Algoritmos, Pascal, C, C++ e Java, Holloway, 2008]
Podemos complementar com mais uma informação sobre o lançamento da bola: agora, dado sua velocidade inicial \(v_0\) de lançamento para cima, calcule a velocidade \(v(t)\) que ela possui no instante \(t\) após ser lançada. A função \(v(t)\) é definida da seguinte forma: \(v(t) = v_0 − gt\)
Crie no arquivo ex-unidade1.js
a função calculaVelocidadeBola
que receberá como parâmetro o tempo \(t\), a velocidade inicial
\(v_0\) e a gravidade g
exatamente nessa ordem e deve calcular e retornar o valor encontrado de velocidade.
Similar ao exercício da altura da bola, escreva
na saída abaixo o resultado das execuções dessa função. Como iremos usar essa função em um outro exercício,
você deverá escrever o resultado dele fora da função,
usando seu retorno.
Seguindo as regras de legibilidade, use variáveis com nomes legíveis (inclusive os parâmetros). Ou seja, ao invés de nomear a gravidade como g, nomeie-a como gravidade O aluno pederá ponto caso o código esteja mal indentado ou ilegível.
Para testar, invoque esta função usando a gravidade da Terra (9,81 m/s²), velocidade inicial de 50 e tempo 1, 5 e 10 (ou seja, invoque a função 3 vezes).
Implemente a função calculaVelocidadeAlturaBola que recebe como parâmetro a velocidade inicial, a gravidade e um valor inteiro n nessa ordem e exibe na saída abaixo a altura e a velocidade da bola nos tempos \(t\) de 1 até n. Neste exercício, você deve usar as funções implementadas nos exercícios 1 e 2 (apenas invocá-las -- não as recrie).
Dentro do laço, você deve invocar escreva duas vezes para (i) altura e (ii) velocidade naquele instante, usando como rótulos h(i) e v(i) em que i é o número referente ao instante (tempo) atual. Para tanto, lembre-se de como concatenar strings.
Para testar, invoque esta função usando a gravidade da Terra (9,81 m/s²), velocidade inicial de 50 e n = 20.
Implemente a função somatorio que receberá como parâmetro um valor inteiro n e fará o seguinte cálculo: \(S = \frac{1}{2}+\frac{1}{4}+\frac{1}{6}+...+\frac{1}{n}\). Logo após, escreva o resultado S na saída abaixo e o retorne. Lembre-se de como criar um laço for (tradicional).
Há exercícios semelhantes, porém mais fáceis para se elaborar um plano. Imagine se fosse pra somar os números de 2 até \(n\). Só que, em vez disso, deve-se andar de 2 em 2. E, por fim, em vez de somar \(2+4+...+n\), o correto é \(\frac{1}{2} + \frac{1}{4} + ... + \frac{1}{n}\).
Para testar, invoque esta função 3 vezes: usando n=1, n=10 e n=100.
Implemente a função obtemPosicaoDoElemento que recebe como parâmetro
um vetor e um elemento e retorna a posição da primeira ocorrência do mesmo. Caso não exista,
ele deverá retornar null
. Você deverá também
escrever na saída
abaixo esta posição.
Como esta função será reutilizada em outro exercício, ela não deve escrever nada dentro dela
(para exibir seu resultado, chame o escreva
fora da função).
Note que esta função deve funcionar para qualquer tamanho de vetor.
Por exemplo, considere o vetor let frutas = ['Pera', 'Uva', 'Abacaxi', 'Cenoura']
:
0 | 1 | 2 | 3 |
'Pera' | 'Uva' | 'Abacaxi' | 'Cenoura' |
Caso executemos obtemPosicaoDoElemento(frutas, 'Uva')
, a função deve retornar a posição 1.
Para testar, você deve criar um vetor de strings ou de números e chamar a função escreva com seu retorno para ver o resultado na página.
Neste exercício, você deve implementar a função calculaMediaEntreExtremos
, que
recebe como parâmetro um vetor de números e
retorna a seguinte conta:
\( \frac{min+max}{2} \) em que \(min\) e \(max\) são o menor e o maior valor no vetor, respectivamente.
Da mesma forma que o exercício anterior, o vetor pode ser de qualquer tamanho.
Por exemplo, para o vetor [3, -2, 12]
,
o valor de \(min\) encontrado seria \(-2\) e de \(max\) seria \(12\). Dessa forma, a função deveria
retornar \(\frac{-2+12}{2}=\frac{10}{2}=5\).
Um algoritmo para encontrar o menor elemento de um vetor, em pseudocódigo:
algoritmo "Menor valor"(valores)
menorAteAgora ← valores[0]
para cada valor de valores
se valor < menorAteAgora então
menorAteAgora ← valor
fimse
fimpara
retorna menorAteAgora
fimalgoritmo
Analogamente você pode construir outro algoritmo para achar o maior elemento.
Neste exercício, você pode usar essa lógica para achar simultaneamente o maior e o menor elementos. Em seguida, você pode calcular o valor que deve ser retornado (a média aritmética entre eles).
Após implementar, invoque a função usando um vetor que você criar e escrever na saída o resultado retornado pela função.
A sequência de Fibonacci é uma sucessão de números, começando por 0 e 1, na qual, cada termo subsequente corresponde à soma dos dois anteriores. Ex: os sete primeiros elementos da sequência Fibonacci são (0, 1, 1, 2, 3, 5, 8).
Você deve continuar a implementar a função Fibonacci
. Nela, você
não deve criar mais variáveis, apenas adicionar elementos ao vetor sequencia
.
Essa função recebe como parâmetro um número inteiro n
e retorna um vetor com os n
primeiros elementos
da sequência de Fibonacci. Por exemplo, fibonacci(7)
deve retornar o vetor: [0, 1,
1, 2, 3,
5, 8]
.
Você pode considerar que o parametro de entrada sempre será maior que 2. Lembre-se que, em JavaScript, você pode adicionar elementos em um vetor facilmente.
Logo após, realize pelo menos 3 chamadas a esta função. Só não coloque valores muito altos para
n
(use, no máximo, uns 20), porque o cálculo pode demorar.
Você irá fazer uma rede social por meio de um vetor de pessoas e matriz amizades, similar ao apresentado abaixo:
0 | 1 | 2 | 3 |
'Alice' | 'Bob' | 'Carol' | 'Daniele' |
0 | 1 | 2 | 3 | |
0 | 0 | 0 | 0 | 1 |
1 | 1 | 0 | 1 | 1 |
2 | 0 | 0 | 0 | 1 |
3 | 1 | 1 | 0 | 0 |
em que, na matriz amizades
, cada linha e coluna correspondem
a pessoas que podem manter uma relação de amizade entre si. Além disso, a pessoa da
i-ésima linha (e coluna) corresponde a mesma pessoa na posição i no
vetor pessoas
.
Por exemplo, a pessoa na linha 0 (e coluna 0) é a Alice, da mesma forma, a
pessoa na linha e coluna 2 é a Carol.
Nesta matriz o valor é 1 caso uma pessoa, representada na linha, é amiga da pessoa representada pela coluna. Por exemplo, Alice é amiga apenas de Danielle (veja a linha 0). Nesta rede social (assim como na vida 💁) pode ocorrer falta de reciprocidade entre as amizades, por exemplo: Bob é amigo de Alice mas Alice não é amiga de Bob.
Neste exercício você deverá fazer duas funções e testá-las por meio da matriz e vetor acima (e outro que desejar):
exibeAmigos
:
por meio do vetor pessoas
,
da matriz amizades
e do nome de uma pessoa (passado como parametro nessa ordem), exibe os amigos dessa pessoa.
Você deverá armazenar esta lista de amigos
em um vetor e chamar a função escreva
para exbir a saída neste vetor.
exibeAmigosEmComum
: por meio do vetor pessoas
,
da matriz amizades
e do nome de uma pessoa X
e uma pessoa Y
(passados como parametro nessa ordem), exibe os amigos entre essas duas pessoas.
Você deve armazenar essa lista de amigos em comum
em um vetor e chamar a função escreva
para exbir a saída desse vetor.
Faça a exibição dessas saídas de tal forma que fique claro
de qual entrada é a saída apresentada (use a função escrevaMensagem
).
A função obtemPosicaoDoElemento
implementada anteriormente poderá ajudar
(reutilize-a -- não implemente novamente).
Implemente a função escreveDataPorExtenso que recebe como parâmetro uma data no formato DD/MM/YYYY (ou seja, por exemplo, 31/12/2021) e retorna uma string com ela por extenso "DD de M de YYYY" (ou seja 31 de dezembro de 2021).
Para pegar o nome de um mês, dado seu número, use a função obtemNomeDoMes
implementada anteriormente. Além disso, o
método split
das strings será útil para pegar as três partes da data.
Escreva a data por extenso na saída abaixo. Faça testes com pelo menos 3 datas.
Neste exercício, você deve continuar a implementação das três funções que auxiliarão no próximo exercício a seguir. Como elas serão utilizadas no próximo exercício, utilize a função escreva fora das funções a serem implementadas.
eliminaCaracteres('correndo contra o tempo', 'coe')
deve resultar na string 'rrnd ntra tmp'
.
Você não deve alterar o for
já criado.texto.replaceAll
uma vez para cada caractere especificado (ou seja, dentro de um laço).''
(string vazia).substituiCaracteres('o sapo nao lava o pe', 'aoe', 'iiu')
deve resultar em 'i sipi nii livi i pu'
texto.replaceAll
uma vez para cada caractere especificado (ou seja, dentro de um laço).inverteTexto('roma')
deve resultar em 'amor'
Palíndromos, segundo Oxford Languages, são textos que se pode ler, indiferentemente, da esquerda para a direita ou vice-versa. São exemplos de palíndromos as palavras: "asa", "rapar", "mirim". E também as frases: "A cara rajada da jararaca", "Socorram-me, subi no ônibus em Marrocos". A música "A cara rajada da jararaca" de Manu Lafer é feita por palíndromos. Perceba que, em frases, deve-se ignorar pontuação, acentuação, espaços e maiúsculas/minúsculas.
Você deverá implementar a função verificaPalindromo em que recebe-se uma string (texto ou uma única palavra) e retorna verdadeiro (true) caso o parâmetro represente um palíndromo ou falso, caso contrário. Além disso, a função deve escrever na saída abaixo a indicação se a palavra é ou não um palíndromo.
As funções do exercício anterior poderão auxiliar no processamento da string. Apenas chame-as quando necessário - não implemente-as novamente.
Ignore as seguintes pontuações: ",-!?;"
e o espaço em branco. Além disso, os acentos agudo, til e circunflexo em vogais devem ser ignorados, além do cedilha. Você pode ignorá-los ao substituí-los por suas versões sem acento.
Em JavaScript, o valor de uma variável/parâmetro pode ser uma função. Neste exercício, entenderemos isso melhor.
Veja a função daOiPara, que "inicia um chat"
(de mentirinha) com uma determinada pessoa.
A forma de se dar oi é controlada pelo parâmetro funcaoDeDarOi
,
que é uma função que deve receber o nome da pessoa e é responsável por retornar
uma string com o "oi" devidamente escrito em seu idioma.
Além desse parâmetro, a função daOiPara
espera receber o nome da pessoa.
Veja em ex-unidade3.js a implementação dessa função além das
vezes que ela foi invocada. Perceba as três formas que ela foi invocada.
Invoque a função daOiPara em que o parâmetro funcaoDeDarOi será outras 3 funções criadas por você. Lembre-se que ela deve obrigatoriamente receber o parâmetro do nome da pessoa e retornar uma string. Crie três dessas funções, das três formas diferentes que foram apresentadas, e invoque-as como exemplificado no arquivo. Use o seu próprio nome para receber o oi.
Você deve implementar a função aplicaOperacaoEmCadaElemento
, que recebe
como parâmetros uma operacao
(que é uma função) e dois vetores com mesmo tamanho:
vetor1
e vetor2
. Então, para cada par de elementos
de mesma posição (ex: primeiro de vetor1
e primeiro de
vetor2
, depois segundo...), ela invoca a operação, retornando um novo vetor como resultado.
Essa operação é uma função que recebe dois números como parâmetro
(ex: function soma(a, b)
) e deve retornar o resultado da operação
entre os 2 elementos que foram passados como parâmetro (nesse caso, a + b
).
Caso os dois vetores sejam de tamanho diferentes, deve-se exibir uma mensagem de erro, não realizar a operação
e retornar null
.
Lembre-se que você pode acessar a propriedade length
dos vetores para
saber seu tamanho.
Veja o exemplo abaixo, considerando a operação soma
(implementada no exercício 0.2).
vetor1:
0 | 1 | 2 | 3 |
4 | 2 | -1 | 10 |
vetor2:
0 | 1 | 2 | 3 |
10 | 2 | 3 | 5 |
0 | 1 | 2 | 3 |
14 | 4 | 2 | 15 |
let vetor1 = [4, 2, -1, 10];
let vetor1 = [10, 2, 3, 5];
aplicaOperacaoEmCadaElemento(soma, vetor1, vetor2);
function soma(a, b) {
return a + b;
}
function aplicaOperacaoEmCadaElemento(operacao, vetor1, vetor2) {
// ...implementar...
// ...
// retorna vetor de resultado
}
Você deverá implementar a função aplicaOperacaoEmCadaElemento e
três operações distintas (por exemplo, soma(a, b)
,
multiplica(a, b)
e subtrai(a, b)
),
cada uma, criando uma função de forma uma diferente.