Escolar Documentos
Profissional Documentos
Cultura Documentos
Capítulo 1: Fundamentos.
1. Primeiros Programas.
1. Escrevemos uma linha (linha) que diz programa, seguida de um bracre de abertura:
{
2. Em seguida, os comandos: um por linha
3. E, finalmente, uma última chave que fecha a que abrimos anteriormente }
Responder:
programa {
Move (Norte)
Move (Norte)
Move (Norte)
}
Responder:
programa {
Move (Sul)
Move (Leste)
Move (Leste)
}
É por isso que existem várias maneiras de resolver o mesmo problema: podemos criar
vários programas que fazem a mesma coisa (o quê), mas fazem de forma diferente (o
como).
Responder:
programa {
Move (Leste)
Move (Norte)
}
Embora nunca queiramos que nosso programa quebre, é algo que definitivamente vai
acontecer com você muitas vezes. Mas não é motivo para se frustrar, muito menos,
garantimos que aconteceu com todo mundo em algum momento (bem, também 2, 3, 100,
800 vezes...).
Responder:
programa{
Move (Sul)
}
Além de se mover, a cabeça também pode colocar pelotas na célula atual. Para isso temos a
operação Put, que manda a cabeça depositar uma bola da cor dada:
Responder:
programa{
Put(Vermelho)
}
Responder:
programa {
Put(Vermelho)
Put(Vermelho)
Put(Azul)
Put(Verde)
Put(Vermelho)
}
Como você deve ter notado, essas placas são um pouco mágicas, podemos colocar em uma
cela quantas bolas quisermos: 2, 4, 12, 50, 1000. Não há limite!
Isso é algo muito interessante que acontece na hora de programar: podemos trabalhar com
quantidades tão grandes quanto quisermos.
Responder:
programa{
Put(Vermelho)
Put(Vermelho)
Put(Vermelho)
Put(Vermelho)
Put(Preto)
Put(Preto)
Put(Preto)
}
Da mesma forma que existe uma "bola posta" (Poner), temos uma "bolita sacar" (Sacar),
que remove exatamente uma bola da cor dada.
Responder:
programa {
Move (Sul)
Tirar (vermelho)
}
Responder:
programa{
Tirar (Verde)
}
Responder:
programa{
Takeout (Azul)
Tirar (Verde)
Puxar (preto)
Tirar (vermelho)
}
O programa seguinte coloca uma bola vermelha na posição inicial e uma bola preta na
posição leste.
Responder:
programa {
Put(Vermelho)
Move (Leste)
Put(Preto)
}
Crie um programa que coloque duas bolas na posição inicial e outras duas na célula ao lado
do Leste. Todos os pellets devem ser vermelhos.
Responder:
programa{
Put(Vermelho)
Put(Vermelho)
Move (Leste)
Put(Vermelho)
Put(Vermelho)
}
Crie um programa que, a partir de um quadro vazio com a cabeça na origem, desenhe uma
linha de quatro células para o Leste. As bolas devem ser vermelhas e você deve colocar uma
bola por célula.
Responder:
programa{
Put(Vermelho)
Move (Leste)
Put(Vermelho)
Move (Leste)
Put(Vermelho)
Move (Leste)
Put(Vermelho)
}
Usando as ferramentas que você já conhece, crie um programa que desenhe uma escada
azul como a vista na imagem. A cabeça começa na origem (isto é, na borda sudoeste) e deve
estar na extremidade inferior direita da escada.
Responder:
programa{
Put(Azul)
Move (Norte)
Put(Azul)
Move (Norte)
Put(Azul)
Move (Sul)
Move (Leste)
Put(Azul)
Move (Sul)
Put(Azul)
Move (Leste)
Put(Azul)
}
Exercício 5: Portugal.
Como não vamos ficar tão agitados, vamos pedir-lhe uma versão simplificada da bandeira
de Portugal.
Responder:
programa{
Put(Verde)
Move (Norte)
Put(Verde)
Move (Leste)
Put(Vermelho)
Move (Sul)
Put(Vermelho)
Move (Leste)
Put(Vermelho)
Move (Norte)
Put(Vermelho)
}
Responder:
programa{
Put(Azul)
Move (Leste)
Put(Azul)
Move (Leste)
Put(Azul)
Move (Leste)
Put(Azul)
Move (Leste)
Put(Azul)
Move (Norte)
Move (Norte)
Put(Azul)
Move (Oeste)
Put(Azul)
Move (Oeste)
Put(Azul)
Move (Sul)
Put(Vermelho)
Move (Norte)
Move (Oeste)
Put(Azul)
Move (Oeste)
Put(Azul)
Move (Sul)
Move (Sul)
}
Com a cabeça na fonte, crie um programa que seja responsável por "podar" o tabuleiro da
imagem: remova todas as bolinhas verdes. Após a conclusão, a cabeça deve terminar onde
começou.
Responder:
programa{
Tirar (Verde)
Move (Leste)
Tirar (Verde)
Move (Leste)
Tirar (Verde)
Move (Norte)
Tirar (Verde)
Move (Norte)
Tirar (Verde)
Move (Oeste)
Tirar (Verde)
Move (Oeste)
Tirar (Verde)
Move (Sul)
Tirar (Verde)
Move (Sul)
}
Vamos passar para algo um pouco mais difícil então. Vamos dar-lhe um tabuleiro 2x2 (ou
seja, com 4 células) onde cada um deles tem uma bola vermelha.
Sua tarefa é criar um programa que substitua todas as bolas vermelhas por bolas verdes.
Responder:
programa{
Tirar (vermelho)
Put(Verde)
Move (Leste)
Tirar (vermelho)
Put(Verde)
Move (Norte)
Tirar (vermelho)
Put(Verde)
Move (Oeste)
Tirar (vermelho)
Put(Verde)
Move (Sul)
}
3. Procedimentos.
Responder:
Responder:
Continuar
Responder:
Continuar
Como você viu no exemplo quadrado, você pode começar a diferenciar dois tipos de
comandos dentro de um programa:
aqueles que são definidos pela linguagem e nos servem para expressar operações
básicas, como Mover, Colocar e Levar. Chamaremos esses comandos primitivos, ou
simplesmente primitivos;
e aqueles que definimos, que nos servem para expressar tarefas mais complexas.
Como o nome desta lição sugere, estes são os procedimentos.
Quando definimos um procedimento estamos "ensinando" o computador a realizar uma
nova tarefa, que não foi originalmente incluída na linguagem.
Preste atenção na sintaxe do exemplo para ver bem como definimos um procedimento e
como o invocamos em um programa.
Responder:
Responder:
programa{
PonerNegroYRojo()
}
Neste ponto já sabemos que para programar sempre temos que levar em conta a sintaxe e
que para definir novos procedimentos também temos regras:
E se quisermos usá-lo, temos que invocá-lo dentro do programa, escrevendo seu nome
como ele é e sem esquecer os parênteses ( ) Preste atenção na sintaxe!
Responder:
procedimento Poner3Greens() {
Put(Verde)
Put(Verde)
Put(Verde)
}
programa{
Poner3Green()
}
Exercício 7: Procedimento, eu o invoco!
Crie um programa que faça isso invocando o procedimento Poner3Verdes. Lembre-se que
já damos para você definido na seção Biblioteca, você não precisa escrevê-lo novamente!.
Responder:
programa{
Poner3Green()
Move (Leste)
Poner3Green()
}
Crie um programa que coloque 9 bolas vermelhas na célula atual invocando o procedimento
Red3Ball quantas vezes forem necessárias.
Responder:
programa{
Poner3Rojas()
Poner3Rojas()
Poner3Rojas()
}
Defini o procedimento Poner9Rojas que, usando Poner3Rojas, coloca nove bolas vermelhas
em uma cela. Uma vez definido, chame o novo procedimento em um programa.
Responder:
procedimento Poner9Rojas(){
Poner3Rojas()
Poner3Rojas()
Poner3Rojas()
}
programa{
Poner9Rojas()
}
procedimento DrawBlackTip(){
Put(Preto)
}
programa{
DrawBlackTip()
Move (Norte)
DrawBlackTip()
Move (Sul)
Move (Leste)
DrawBlackTip()
}
Responder:
procedimento DrawTwoTips() {
DrawBlackTip()
Move (Norte)
Move (Norte)
Move (Leste)
DrawBlackTip()
}
programa{
DrawTwoTips()
}
Responder:
procedimento RedEdge() {
IrAlBorde (Norte)
IrAlBorde (Oeste)
Put(Vermelho)
}
programa{
RedEdge()
}
Defini dois procedimentos: o procedimento Put Garland que coloca 3 bolas vermelhas e 3
bolas verdes em uma cela e o procedimento DecorateBoard que usa e coloca uma guirlanda
em cada canto superior. Chame DecorateBoard no programa. Note que não sabemos a
posição inicial onde a cabeça estará.
Responder:
procedimento PonerGuirland(){
Poner3Green()
Poner3Rojas()
}
procedimento DecorateBoard(){
IrAlBorde (Norte)
IrAlBorde (Oeste)
PutGarland()
IrAlBorde (Norte)
IrAlBorde (Leste)
PutGarland()
}
programa{
DecorateBoard()
}
Responder:
procedimento Color(){
Put(Vermelho)
Put(Verde)
Put(Preto)
Put(Azul)
}
procedimento DrawColoredLine(){
Cor()
Move (Leste)
Cor()
Move (Leste)
Cor()
Move (Leste)
Cor()
IrAlBorde (Oeste)
}
programa{
DrawColorline()
}
Responder:
procedimento DrawSquareColored(){
DrawColorline()
Move (Norte)
DrawColorline()
Move (Norte)
DrawColorline()
Move (Norte)
DrawColorline()
IrAlBorde (Sul)
}
programa{
DrawSquareColorful()
}
4. Repetição simples.
Exercício 1: MoveWest10.
Vamos aquecer: defini um procedimento MoveWest10 que move a cabeça 10 vezes para o
Oeste.
Responder:
procedimento MoverOeste10(){
Move (Oeste)
Move (Oeste)
Move (Oeste)
Move (Oeste)
Move (Oeste)
Move (Oeste)
Move (Oeste)
Move (Oeste)
Move (Oeste)
Move (Oeste)
}
Quando é necessário repetir um comando (como Move, Put, DrawBlackLine, etc.) um certo
número de vezes, em vez de copiar e colar como temos feito até agora, podemos usar a
instrução repeat.
Responder:
Copie, cole e envie o código
Responder:
procedimento MoverOeste5(){
repeat(5){
Move (Oeste)
}
}
Responder:
procedimento Poner3AlNoreste(){
Move (Norte)
Move (Leste)
repetir(3){
Put(Preto)
}
}
Defini o procedimento PutBlueAway(), que coloca uma bola azul de 4 células para o Leste
Responder:
procedimento PonerAzulLejos(){
repeat(4){
Move (Leste)
}
Put(Azul)
}
Responder:
procedimento DrawBlackLine6(){
repeat(6){
Put(Preto)
Move (Leste)
}
}
Responder:
procedimento RedLine4() {
repetir(4) {
Put(Vermelho)
Move (Norte)
}
}
Responder:
procedimento Diagonal4Blue(){
repeat(4){
Put(Azul)
Move (Norte)
Move (Leste)
}
}
Responder:
procedimento Pellets(){
repeat(21){
Put(Azul)
}
}
procedimento DiagonalPesada4Blue(){
repeat(4){
Pellets()
Move (Norte)
Move (Leste)
}
}
Exercício 10: O caso de borda.
Responder:
procedimento Blackline4East(){
repetir(3){
Put(Preto)
Move (Leste)
}
Put(Preto)
}
Defini o procedimento BlackSquare4() para desenhar um quadrado 4x4 com bolas pretas.
Quando você começa, a cabeça está no canto inferior esquerdo do quadrado (não
necessariamente o quadro) e quando o programa é terminado a cabeça deve estar no canto
superior direito do quadrado. Não se esqueça de invocar BlackLine4East() que está
na seção Biblioteca.
Responder:
procedimento SquareBlack4(){
repetir(3){
BlackLine4East()
repetir(3){
Move (Oeste)
}
Move (Norte)
}
BlackLine4East()
}
5. Parâmetros.
Defini o procedimento DrawBlackLine3() que, como o nome indica, traça uma linha
colocando 3 bolas pretas consecutivas para o Leste e deixando a cabeça onde começou.
Invocalo em um programa.
Na Biblioteca você encontrará o procedimento VolverAtras. Isso significa que você pode
invocá-lo sem ter que defini-lo!
Responder:
procedimento DrawBlackLine3(){
repeat(2){
Put(Preto)
Move (Leste)
}
Put(Preto)
VolverAtras()
}
programa{
DrawBlackLine3()
}
Responder:
procedimento DrawBlackSquare3(){
repeat(2){
DrawBlackLine3()
Move (Norte)
}
DrawBlackLine3()
}
programa{
DrawBlackSquare3()
}
Responder:
procedimento DrawGreenLine3(){
repeat(2){
Put(Verde)
Move (Leste)
}
Put(Verde)
VolverAtras()
}
programa{
DrawGreenLine3()
}
Responder:
procedimento DrawRedLine3(){
repeat(2){
Put(Vermelho)
Move (Leste)
}
Put(Vermelho)
VolverAtras()
}
procedimento DrawBlueLine3(){
repeat(2){
Put(Azul)
Move (Leste)
}
Put(Azul)
VolverAtras()
}
Responder:
Crie um programa que coloque três bolas verdes passando a cor verde como parâmetro.
Responder:
programa{
Poner3 (Verde)
}
Exercício 7: DrawLine3.
Defini o procedimento DrawLine3 para receber uma cor e desenhar uma linha dessa cor.
Não se preocupe com os programas para invocá-lo com cada uma das cores, eles passam
por nós.
Responder:
procedimento DrawLine3(color){
repeat(2){
Put(cor)
Move (Leste)
}
Put(cor)
VolverAtras()
}
Exercício 8: DrawSquareOfSide3.
Responder:
procedimento DrawSquareSide3(color){
repeat(2){
DrawLine3 (cor)
Move (Norte)
}
DrawLine3 (cor)
}
Crie um programa que invoque a nova versão do DrawLine3 (você não precisa defini-lo,
basta invocá-lo) e desenhe um quadrado multicolorido, passando como parâmetros a cor e a
direção.
Responder:
programa{
DrawLine3 (verde, leste)
Move (Leste)
DrawLine3 (Vermelho, Norte)
Move (Norte)
DrawLine3 (Preto, Oeste)
Move (Oeste)
DrawLine3 (Azul, Sul)
}
Crie qualquer programa que invoque DrawLine3, mas desta vez tente invocá-lo com os
argumentos invertidos.
Responder:
programa{
DrawLine3(Norte, Sul)
}
O que você acha que vai acontecer se passarmos menos argumentos para um procedimento
do que ele precisa?
Responder:
programa{
DrawLine3 (verde)
}
Para finalizar esta lição, vamos definir um procedimento chamado Tríade, que recebe três
parâmetros!
Tríade recebe três cores por parâmetro e coloca três bolas, lado a lado voltadas para o leste,
na mesma ordem em que são recebidas. A cabeça começa na origem e deve terminar na
última bola da tríade.
Responder:
Responder:
procedimento Diagonal4BlueReturn(){
Diagonal4Blue()
repeat(4){
Move (Oeste)
Move (Sul)
}
}
Responder:
procedimento DiagonalBand4() {
repetir(3) {
Diagonal4BlueReturn()
Move (Norte)
}
IrAlBorde (Sul)
}
Responder:
Responder:
procedimento MemoryDay(){
PonerN(24, Azul)
Move (Leste)
PonerN(3, Verde)
Move (Leste)
PonerN (1976, Preto)
}
Responder:
Defini um procedimento MoveN(quantidade, endereço) que faz com que a cabeça mova o
número especificado de vezes na direção indicada.
Respirar:
Responder:
procedimento DrawClock(Radio){
MoverN (raio, norte)
PonerN(12, vermelho)
MoveN (rádio, leste)
MoverN (rádio, sul)
PonerN (3, vermelho)
MoveN (raio, oeste)
MoverN (rádio, sul)
PonerN (6, vermelho)
MoveN (raio, oeste)
MoverN (raio, norte)
PonerN (9, vermelho)
MoveN (rádio, leste)
}
Defini o procedimento LineEastPast (peso, cor, comprimento). Observe que a cabeça deve
retornar à posição inicial. Para isso, você terá que invocar o MoverN.
Responder:
Responder:
procedimento Save5(){
repeat(4){
PonerN(9, Vermelho)
PonerN(5, Preto)
PonerN(1, Verde)
Move (Leste)
}
PonerN(1, Verde)
PonerN(5, Preto)
PonerN(9, Vermelho)
}
Defini um procedimento SaveInL() que faz um save em L como mostrado na figura, mas
deixando a cabeça na posição inicial.
Respostas:
7. Expressões.
Com essa ideia e invocando o PonerN, crie um programa que coloque cinco bolas pretas,
MAS sem escrever o número 5.
Responder:
programa{
PonerN(3+2, Preto){
}
}
Responder:
Responder:
Responder:
procedimento WalkingDistrustful(steps){
MoveN(passos div 2, leste)
}
Exercício 6: Reserve.
Queremos definir um procedimento que nos ajude a colocar uma bola ao lado de onde está
a cabeça, deixando-a na posição original.
Responder:
Responder:
procedimento Linha (direção, cor, comprimento) {
repeat(comprimento) {
Put(cor)
Mover (direção)
}
MoveN(comprimento, oposto(direção))
}
Exercício 8: Desenhando um L.
Descobri qual das novas funções você tem que invocar e defini o procedimento
Ele(direction). Não se preocupe com a posição inicial da cabeça, cuidaremos de colocá-la
no local correspondente para que o L possa ser desenhado.
Responder:
procedimento Ele(endereço){
Line(sentido, Blue, 3)
Line(next(direction), Blue, 3)
}
Responder:
Responder:
Mover(next(direction))
Mover(anterior(endereço))
Mover (direção)
Put(Vermelho)
Mover(oposto(direção))
}
Exercício 11: Copiar bolas.
uma tarefa que certamente temos que fazer é colocar muitas bolas, e para isso já sabemos
que existe o procedimento PonerN que construímos vários exercícios atrás. A cor das bolas
que temos que colocar também sabemos: vermelho, mas... Como saber quantos colocar?
Responder:
procedimento CopyGreenOnRed() {
PonerN(nroBolitas(Verde), Vermelho)
}
Continuando com essa contagem das bolas, agora é preciso definir um procedimento que
sirva para retirar todas as bolas de uma cor.
Defini SacarTodas(cor), que recebe uma cor e tira todas as bolinhas que são dessa cor (você
não deve fazer nada com o resto das cores).
Responder:
procedimento SacarTodas(cor){
SacarN (nroBolitas (cor), cor)
}
8. Alternativa condicional.
Responder:
Responder:
Modifique o procedimento que lhe demos para que ele desenhe uma bola vermelha, apenas
se houver.
Responder:
procedimento PullRedWithFear() {
if(hayBalls(Red)){
Tirar (vermelho)
}
}
Para exercitar este último, vamos pedir que você defina um procedimento CompleteCell(),
se já houver uma bola preta, complete a célula colocando um vermelho, um azul e um
verde.
Responder:
procedimento CompleteCell(){
if(hayBalls(Black)){
Put(Vermelho)
Put(Azul)
Put(Verde)
}
}
Crie um programa que se mova para leste somente se possível. Lembre-se de usar
canMove(address).
Responder:
programa{
if(canMove(Leste)){
Move (Leste)
}
}
Outra coisa que pode ser feita dentro de um se é comparar números, como você
provavelmente já fez em matemática.
Felizmente, isso está escrito em Gobstones assim como na matemática tradicional, com um
< para o menor e um > para o maior. Exemplo: nroBolitas (Verde) > 5 nos diz se há mais de
5 bolas verdes.
Sabendo disso, tente criar um programa que coloque 1 bola preta somente se houver menos
de 5 bolas pretas.
Responder:
programa{
if(nroBolitas(Black) < 5){
Put(Preto)
}
}
Defini um procedimento GreenBall() que garante que haja pelo menos uma bola verde na
célula atual. Ou seja: se já existem bolas verdes você não precisa fazer nada, mas se não
houver você teria que colocar uma.
Responder:
procedure SecureAGreenBall(){
if(not hayBalls(Green)){
Put(Verde)
}
}
Responder:
Responder:
procedure PrenderOApagarLuz(){
if(hayBalls(Black)){
Puxar (preto)
Put(Verde)
} else {
Tirar (Verde)
Put(Preto)
}
}
9. Funções.
Você tem que ler por vários minutos e interpretar o código e tentar entendê-lo.
Responder:
Funções em Gobstone,
Responder:
Responder:
procedimento MoverSegunBolitas() {
if (nroBolitasTotal() > 10) {
Move (Leste)
} else {
Move (Norte)
}
}
Exercício 4: TodosExceto.
Defini a função allExcept para retornar o número de bolas que não são a cor que é passada
pelo parâmetro.
Responder:
função allExcept(color){
return (nroBolitasTotal()-nroBolitas(color))
}
Defini a função redIsDominant() que nos diz se o número de bolas vermelhas é maior do
que a soma das bolas das outras cores. Na Biblioteca está tudoExcept(color) pronto para ser
invocado.
Responder:
função redIsDominant(){
return (nroBalls(Red)>AllExcept(Red))
}
Exercício 6: Livre.
Há o operador && que serve exatamente isso: ele usa duas expressões booleanas e retorna
True somente se ambas forem verdadeiras. Se você conhece alguma lógica, isso é o que é
comumente chamado de conjunção e geralmente é representado pelo símbolo ∧.
Eu defini a função isFreeSides() para indicar se a cabeça pode se mover tanto para o leste
quanto para o oeste.
Responder:
function esLibreSideados(){
return(canMove(Leste) && canMove(Oeste))
}
Tanto && quanto | | podem ser usados várias vezes sem a necessidade de usar parênteses,
desde que tenham expressões booleanas em ambos os lados.
Eu defini a função há someBall() que responde a pergunta existem bolas na célula atual?
Responder:
função haySomeBall(){
retorno(hayBalls(Verde) || hayBalls(Azul) || hayBalls(Vermelho) ||
hayBalls(Preto))
}
Com a ajuda dessa prancha, defini a função I amOnEdge() que determina se a cabeça está
em alguma borda.
Responder:
function estoyEnUnBorde(){
return(not canMove(Norte) || not canMove(Sul) || not canMove(Leste) || not
canMove(West))
}
Vamos agora olhar para as funções que fazem as coisas antes de retornar um resultado.
Para exemplificar isso, vamos querer que você defina uma função que nos diga se há uma
bola de uma cor específica, mas na célula ao lado dela.
Defini a função hayballsAl (direção, cor) que informa se há bolas da cor especificada na
célula vizinha em direção à direção dada.
Responder:
função hayBallsAl(direção,cor){
Mover (direção)
retorno(bolas de feno (cor))
}
Vamos fazer o teste: vamos testar a função HayBolitasAl do exercício anterior com casos
em que a cabeça não pode se mover. Pressione Enviar e veja o resultado.
Responder:
Toque em Enviar
Responder:
função hayBallsAwayTo(direção,cor,distância) {
MoveN (distância, direção)
retorno(bolas de feno (cor))
}
Usando HayBallsAl, defini a função I am Surrounded By (cor) que indica se a cabeça está
cercada por bolas dessa cor.
Dizemos que a cabeça "é cercada" se houver bolas dessa cor nas quatro direções: Norte,
Leste, Sul e Oeste.
Responder:
O limite pode ser devido a um de dois fatores: porque estou em uma borda e depois não
posso me mover em nenhuma direção, ou porque estou cercado por bolas vermelhas que
me cortam. Se qualquer uma dessas duas condições ocorrer, significa que há um limite.
Responder:
função hayLimite(){
voltar || I'mSurrounded(Vermelho)
}
Responder:
função meio(número){
retorno (1/2*número)
}
Responder:
função anterior(número){
retorno(número - 1)
}
função triple(número){
retorno(número * 3)
}
função anteriorTheTriple(number){
retorno(anterior(triplo(número)))
}
4 + 5
Matemática.rodada(4.5)
funcionMisteriosa(1, 2, 3) (já declaramos para você e você pode usá-lo)
Responder:
Matemática.rodada(4.4)
Matemática.rodada(4.6)
Matemática.max(4, 7)
Matemática.min(4, 7)
Responder:
Responder:
Agora é a sua vez! Dani conta ainda que alguém lê LikeLeer, quando o número de livros
que se lembra de ler é maior que 20.
Responder:
função leLikeRead(unNumber){
return(unNumber > 20)
}
Exercício 8: Booleanos.
Entre, pegue três números e diga se o primeiro é maior que o segundo e menor que
o terceiro.
isOut of Range: pegue três números e diga se o primeiro é menor que o segundo ou
maior que o terceiro.
Responder:
Responder:
função esWeekend(day){
retorno (dia === "sábado" || dia === "domingo")
}
Vamos ver se está claro: eu escrevi uma função fullName length, que pega um nome e
sobrenome, e retorna seu comprimento total, contando um espaço extra para separar os dois.
Responder:
Escrevi a função do grito. Deixamos você usar a função convertEnShift, que, ehm... Poço...
Ele basicamente converte uma cadeia de caracteres em maiúsculas.
Responder:
função shout(word){
return("" + convertUppercase(word) + "!")
}
Nenhuma introdução à linguagem JavaScript estaria completa sem mostrar pelo menos
uma estrutura de controle que já conhecemos: a alternativa condicional.
Vamos ver se entende: escrevi uma função máxima, que funciona como Matemática.max
(não vale a pena usá-la!) e retorna o máximo entre dois números. Por exemplo, o máximo
entre 4 e 5 é 5, e o máximo entre 10 e 4 é 10.
Responder:
Responder:
Eu escrevi a função isLuckNumberThat dado um número diz se ele atende à lógica acima.
Não vale a pena usar se!
Responder:
função esLuckNumber(number) {
retorno (número)>0 && (número)<100 && (número!=15);
}
O júri de um torneio pediu-nos para desenvolver uma função de medalha SegunPuesto que
devolve a medalha que corresponde aos primeiros lugares, de acordo com a seguinte lógica:
Responder:
função medalSecondPosition(place){
if(place === 1){
retorno("ouro")
} else if(place === 2) {
Retornar
} else if(place === 3) {
Retorno ("bronze")
} else {
retorno("nada")
}
}
Além disso, existem operações que funcionam para todos os tipos de dados, por exemplo:
Responder:
Teste no console
Antes de terminar um último desafio: Qual o valor das seguintes expressões? Confira todos
os corretos!
Responder:
4 + 4 vale 8
! verdadeiro é falso
Eu escrevi uma função quanto me custa para pegar o número de polegadas do monitor e a
quantidade de memória, e calcular o custo estimado do nosso computador.
Responder:
Responder:
Exercício 3: Triângulos.
Exercício 4: Quadrados.
Responder:
função perimeterSquare(side) {
retorno (lado * 4)
}
área de funçãoSquare(side) {
retorno (lado * lado)
}
Desenvolva uma função sintonizada, que recebe a frequência (um número) da troca, e diz
se essa frequência é igual a 440Hz.
Responder:
função isTuned(frequency){
retorno (frequência === 440)
}
Agora queremos saber se o piano central está perto de estar em sintonia. Isso ocorre quando
está entre 437Hz e 443Hz, mas NÃO é exatamente 440Hz.
Responder:
função isClose(frequency){
retorno (437 <= frequência && frequência de & <= 443 &&& frequência !==
440)
}
Exercício 7: Pôsteres.
Responder:
Responder:
Agora que podemos escrever nossos sinais de identificação grandes e pequenos, queremos
uma nova função que nos dê o sinal de tamanho ideal:
Responder:
Eu escrevi uma função decisionWithCoin, que pega três parâmetros e retorna o segundo se
o primeiro for "cabeças", ou o terceiro, se "menta" sair.
Responder:
função decisãoConMoneda(moeda, pizzas, empanadas){
if(coin === "cabeça"){
devolver pizzas;
}else{
retorno empanadas;
}
}
Queremos saber o valor das cartas de truque quando jogamos inveja. Sabemos que:
Eu escrevi uma função envidovalue, que pega um número de letra e retorna seu valor de
envio.
Responder:
função valueEnvido(letter){
if(letra >= 1 && letra <= 7)
{carta de retorno}
if(letra >= 10 && letra <= 12)
{retornar 0}
}
Bem, ehm, não, pare, primeiro queremos calcular quantos pontos de inveja um jogador
marca. Sabemos que:
Se as duas cartas são do mesmo naipe, o valor da inveja é a soma de seus valores de
inveja mais 20.
Caso contrário, o valor do envio é o maior valor de envio entre eles.
Responder:
Escrevi a função valueCantoTruco, que pega a música e devolve quantos pontos ela vale.
Responder:
função valueCantoTrick(singing){
if(cantando === "truque"){
retorno(2)
}
if(cantando === "retruco"){
retorno(3)
}
if(canto === "vale cuatro"){
retorno(4)
}
}
3. Variáveis e Procedimentos.
Exercício 1: E o tabuleiro?.
Responder:
misterioso(2, 1)
Exercício 2: Serigrafia.
Responder:
Responder:
function versosMartinFierro() {
print("Aqui começo a cantar");
print("Al compás de la vigüela;");
print ("Deixe o homem que a desvenda");
print("Pena extraordinária");
retornar 0
}
Exercício 4: E os procedimentos?
Responder:
function versosMartinFierro() {
print("Aqui começo a cantar");
print("Al compás de la vigüela;");
print ("Deixe o homem que a desvenda");
print("Pena extraordinária");
}
Exercício 5: E o programa?.
Em JavaScript, tudo o que escrevemos fora de uma função será, implicitamente, esse
ponto de entrada. Por exemplo, se quisermos um programa que imprima na tela o clássico
"Olá, mundo!", podemos escrevê-lo assim:
print("Olá Mundo!");
Responder:
print("Rolando dados");
print("A primeira tiragem deu " + roll());
print("A segunda tiragem deu " + roll());
print("O terceiro rolo deu " + roll());
Exercício 6: Coerção.
Vamos ver se está claro, eu escrevi uma função elefantesEquilibristas de corda bamba, que
pega uma série de elefantes e devolve uma rima de uma conhecida música "3 elefantes
balançaram".
Responder:
Responder:
função perimeterCircle(radius){
retorno(3.14159265358979*2*radio)
}
área de funçãoCircle(radius) {
retorno(3.14159265358979 * rádio * rádio)
}
deixe pi = 3,14159265358979;
Altere os locais onde 3.14159265358979 aparece para a variável pi nas funções que
definimos.
Responder:
deixe pi = 3,14159265358979;
função perimeterCircle(radius){
Retorno (PI*2*Radio)
}
área de funçãoCircle(radius) {
return(pi * rádio * rádio)
}
À medida que você entende como as variáveis são atribuídas, trazemos algo para você
pensar: e se eu tentar usar uma variável à qual nunca atribuí um valor?
Responder:
As variáveis declaradas dentro de uma função, conhecidas como variáveis locais, não
apresentam mais mistério. No entanto, é preciso ter um cuidado especial: eles só podem ser
usados a partir da função em questão.
Responder:
Responder:
função increaseFortune(){
pesosEnMyWallet = pesosInMyWallet * 2
}
Exercício 12: E quanto vale isso?
Vimos que uma variável só pode ter um valor, então toda vez que atribuímos um novo,
perdemos o anterior.
Responder:
20
4. Lógica booleana.
Vamos começar com algo simples, você se lembra do operador! ? Chama-se negação, não
ou complemento lógico e serve para negar um valor booleano.
Defini o procedimento a ser usado para que possamos abrir e fechar o fechamento de uma
mochila.
Responder:
Agora é a sua vez! Eu defini que éAdulto, que recebe uma idade, e depois éMinorAge a
partir dele.
Responder:
função esOlder(age){
retorno (idade >= 18)
}
função esMinor(age){
return(!isAdult(age))
}
Exercício 3: Os peripatéticos.
Defini uma função peripatética que leva a profissão de uma pessoa, a nacionalidade e o
número de quilômetros que ela caminha por dia. Alguém é peripatético quando é filósofo
grego e gosta de caminhar (anda mais de 2 quilômetros por dia).
Responder:
Responder:
Teste no console:
consumoPocaEnergia(24, 5)
consumoPocaEnergia(24, 0)
consumoPocaEnergia(21, 7)
consumoPocaEnergia(18, 1)
Responder:
Teste no console:
win(falso, 20)
Responder:
Agora cabe a você definir a função areHalfBrothers. Lembre-se que meio-irmãos podem
compartilhar mãe ou pai, mas não ambos porque... Nesse caso, seriam irmãos!
Responder:
Teste sua função sonHalfBrothers com os seguintes valores e verifique se ela se comporta
como a tabela:
Responder:
sonHalfBrothers(arcadio, aurelianoJose)
sonHalfBrothers(AurelianoSegundo, remédios)
sonMediaHermanos(aurelianoJose, remédios)
Ao contrário de e, ou não, xor não é geralmente definido em línguas. No entanto, agora que
você já sabe como funciona, se precisar pode defini-lo manualmente.
Vamos ver se é entendido: defini a função genérica xor, que pega dois booleanos e retorna o
valor verdade correspondente.
Responder:
Quando uma expressão matemática tem vários operadores, sabemos que multiplicações e
divisões ocorrerão antes da adição e subtração:
5 * 3 + 8 / 4 - 3 = 14
Responder:
A idade mínima para realizar o procedimento para as mulheres é de 60 anos, enquanto para
os homens é de 65 anos. Em ambos os casos, é preciso ter pelo menos 30 anos de
contribuição.
Tente resolvê-lo em uma única função! Então vamos ver como seria se delegássemos.
Responder:
Defini a função de 3 parâmetros canRise que recebe uma altura de uma pessoa em metros,
se ela está acompanhada e se tem algum problema cardíaco.
Responder:
5. Listas.
Para representar um conjunto de strings, colocamos todas as strings que nos interessam,
entre colchetes ([ e ]) separadas por vírgulas. Fácil, não é?
Responder:
sérieFavoritosDeAna
sérieFavoritosDeHector
["Olá","Mundo!"]
["olá","olá"]
O que acabamos de ver é como modelar facilmente conjuntos de coisas. Usando [], em
JavaScript temos uma maneira simples de agrupar esses itens em listas.
Existe um número máximo de itens? Não, não há limite! As listas podem ter qualquer
número de itens.
E não só isso, mas a ordem é importante. Por exemplo, ["hello", "world"] não é o mesmo
que ["world", "hello"]: ambos têm os mesmos elementos, mas em posições diferentes.
Responder:
povo
Exercício 3: Jogo.
Também podemos representar conjuntos de números ou booleanos, da mesma forma:
escrevendo-os entre colchetes e separados por vírgulas. Podemos ter listas de números,
strings, booleanos, etc. Podemos até ter listas de listas!
Responder:
Números da loteria
SalioCara
Ótimo, parece que uma lista pode conter qualquer tipo de item! Podemos ter listas de
booleanos, números, strings, listas...
E não só isso, mas eles também podem conter qualquer número de elementos: um, dois,
quinze, centenas.
Podemos, então, ter listas vazias, ou seja, aquelas que não têm elementos? É claro!
deixe aEmptyList = []
Responder:
No momento, já sabemos o que podemos representar com listas e como fazê-lo. Mas o que
podemos fazer com eles?
Vamos começar pelo fácil: saber quantos itens estão na lista. Podemos fazer isso usando a
função length, semelhante ao que fizemos com strings.
Responder:
Execute as seguintes consultas no console:
comprimento([])
comprimento([4, 3])
As listas são muito úteis por conter vários itens. Mas há mais! Também podemos adicionar
itens a ele a qualquer momento, usando a função add, que recebe dois parâmetros: a lista e o
item.
Como podemos ver, adicionar adiciona um item à lista, o que faz com que seu tamanho
aumente. Mas onde na lista você adiciona isso? Inicialmente? No final? No meio?.
Descubra você mesmo: inspecione no console quais itens contêm pertences, adicione uma
"besta" e inspecione os pertences novamente.
Responder:
Teste no console
Exercício 7: Mova-se.
Ele declarará um procedimento para mover, que pega duas listas, tira o último elemento da
primeira e adiciona à segunda.
Responder:
Responder:
cargo(diasLaboral, "osvaldo")
Exercício 9: Contém.
Eu escrevi a função contém para nos dizer se uma lista contém um determinado item.
Se você tem prestado atenção aos exemplos de consulta, você terá notado que as listas
também podem ter elementos duplicados: [1, 2, 1], ["hello", "hello"], etc.
Responder:
Assim como existe uma função para descobrir em que posição um elemento está, também
pode acontecer de querermos saber o contrário: qual elemento está em determinada
posição.
Para descobrir, podemos usar o operador de indexação, escrevendo após a coleção e entre
colchetes [] a posição que queremos descobrir.
Responder:
lista[0]
Com isso em mente, há um desafio: escrevi a função medalha novamente, mas desta vez
usando no máximo um único se. Talvez as listas possam ser úteis aqui.
Lembramos o que a função faz: tem que devolver a medalha que corresponde às primeiras
posições de uma competição.
Responder:
função medalSecondPosition(position){
if(posição <= 3){
retorno(medalha[posição])
} else {
Retorno(medalha[0])
}
}
Vamos conhecer uma maneira de percorrer os elementos de uma lista com um novo amigo:
o loop for.
Responder:
função greet(people){
for(let persona1 de personas){
print("olá" + " " + pessoa1);
}
}
6. Registros.
Responder:
Responder:
Responder:
Desenvolva uma função planettemperature que receba um registro de planeta por parâmetro
e retorne uma string indicando seu nome e temperatura média. Tem que funcionar para
qualquer planeta!
Responder:
função temperaturadePlaneta(planeta){
return(planet.name + " tem uma temperatura média de " +
planet.temperatureAverage + " graus")
}
Exercício 5: Movendo arquivos.
Responder:
No exercício anterior, modificamos o caminho do registro, mas não usamos sua data de
criação. Vamos usá-lo! Queremos saber se um arquivo é do último milénio, o que acontece
quando o seu ano é anterior ao ano 2000.
Responder:
função enMillenniumPast(file){
return(anio(file.creation) < 2000)
}
Crie uma função difícil de cozinhar, que recebe dois registros de sobremesa por parâmetro e
retorna aquele com mais ingredientes dos dois.
Responder:
Assim como trabalhamos com listas de números, booleanos, strings ou mais listas, também
podemos listar registros. Você pode fazer tudo o que você fez antes, como mexer, saber seu
comprimento ou pedir o elemento de uma determinada posição usando os colchetes [ ].
Experimente as listas de Favoritos e Monumentos da América no seu console. Tem uma
sobremesa que a gente não mostrava antes, você percebe o que é só lendo seus
ingredientes?
Responder:
Teste no console:
sobremesasFavoritos
monumentos da América
Responder:
Responder:
Teste no console
menuInfantil.sobremesa.ingredientes
função sweetenMenu(menu){
adicionar(menu.dessert.ingredients, "açúcar")
retornar menu.sobremesa
}
7. Rotas.
O recurso Ganho Semestral que escrevemos anteriormente tem algum problema? Vai
funcionar com balanços trimestrais? E com os períodos de quatro meses?
Experimente no console!
Responder:
Teste no console:
ResultadosSemestre
Responder:
TotalProfit([
{ mês: "Janeiro", lucro: 2 },
{ mês: "Fevereiro", lucro: 3 }
])
Responder:
O que temos que fazer, então, é repetir a operação de acumular várias vezes, uma para cada
item da lista. Vamos dizer olá (novamente) para o for... de!
Como você pode ver, o... de nos permite visitar e fazer algo com cada item de uma lista;
neste caso, visitaremos cada balanço do SinglePeriod.
Responder:
TotalProfit([
{ mês: "Março", lucro: 8 },
{ mês: "Agosto", lucro: 10 }
])
Ana tem novas exigências! Agora ele nos perguntou o seguinte: "Quero saber quantos
saldos foram positivos, ou seja, aqueles em que o lucro foi maior que zero".
Conclua a função PositiveBalanceQuantity . Se você prestar atenção, notará que ele tem
uma estrutura semelhante ao problema anterior.
Responder:
Vamos ao próximo pedido de Anne. Já podemos calcular uma soma de lucros e também
criar contadores, agora vamos calcular médias.
Ana gostaria de saber, dado qualquer conjunto de saldos, qual é o seu lucro médio.
Responder:
função gainAverage(Totalgain){
Soma let = 0
for(let balance of gainTotal){
soma = (soma + saldo.lucro)
}
retorno da soma / comprimento (gainTotal)
}
Vendo que podemos fazer tudo o que pede, Ana quer saber o ganho médio dos saldos
positivos.
Defini as funções:
Responder:
ganho de funçãoPositivo(saldosDeperíodo){
Soma let = 0
for(let balance of balancesDeUnPeriodo){
if(balance.profit > 0){
soma = soma + (saldo.ganho)
}
}
Retorno de soma
}
função médiaLucrosPositivo(SaldosDeUmPeríodo){
retorno lucroPositivo(SaldosDeUm Período) / montantePositivo(saldosDeUm
Período)
}
Infelizmente, você não pode usar o recurso médio com nossa lista de registros. O que
precisamos é de uma lista que tenha apenas os lucros de cada balanço. Para fazer isso,
devemos transformar, ou mapear, cada item da lista.
Complete a função de lucro que pega uma lista de saldos e retorna uma lista que possui
apenas os lucros de cada um.
Responder:
ganhos de função(saldosOfAPeriod){
deixar ganhos = []
for(let balance of balancesDeUnPeriodo){
agregado(lucro, saldo.lucro)
}
retorno de lucros
}
Com a programação você pode fazer qualquer coisa, ou quase. Já fizemos uma função para
poder saber a quantidade de saldos positivos (amountofPositiveBalances), agora vamos ver
como podemos fazer para saber quais são esses saldos.
Conclua a função Saldos Positivos que pega os saldos de um período e retorna uma lista
daqueles cujo lucro foi maior que zero.
Responder:
saldos de funçãoPositivo(OnePeriodsbalances){
deixe saldos = []
for(let balance of balancesDeUnPeriodo){
if(balance.profit > 0){
add(saldos, saldo)
}
}
Saldos de Retorno
}
Agora que temos a função lucros e saldos positivos podemos usar a função média genérica
para saber qual é o lucro médio dos saldos positivos.
Responder:
Vamos conhecer uma nova função, maximo, que nos permite saber qual é o valor mais alto
em uma lista de números.
Usando esta nova função, defini a função maximaGain que nos diz qual é o maior lucro
entre os saldos de um período de tempo.
Responder:
Defini a função minimaPositiveGain que nos diz qual é o menor ganho de todos os saldos
positivos.
Responder:
meses, que dada uma lista com registros retorna uma lista de meses;
lucky, que filtra aqueles registros que tiveram lucro superior a R$ 1 mil;
mesesLucky, devolva aqueles meses que foram de sorte.
Responder:
Vamos ver se é entendido: agora escrevi uma função JavaScript metade, que pega um
número e retorna sua metade. Observe que o operador split em JavaScript é /.
Responder:
função meio(número){
retorno (1/2*número)
}
Responder:
função anterior(número){
retorno(número - 1)
}
função triple(número){
retorno(número * 3)
}
função anteriorTheTriple(number){
retorno(anterior(triplo(número)))
}
4 + 5
Matemática.rodada(4.5)
funcionMisteriosa(1, 2, 3) (já declaramos para você e você pode usá-lo)
Responder:
Matemática.rodada(4.4)
Matemática.rodada(4.6)
Matemática.max(4, 7)
Matemática.min(4, 7)
Responder:
Responder:
Agora é a sua vez! Dani conta ainda que alguém lê LikeLeer, quando o número de livros
que se lembra de ler é maior que 20.
Responder:
função leLikeRead(unNumber){
return(unNumber > 20)
}
Exercício 8: Booleanos.
Entre, pegue três números e diga se o primeiro é maior que o segundo e menor que
o terceiro.
isOut of Range: pegue três números e diga se o primeiro é menor que o segundo ou
maior que o terceiro.
Responder:
Vamos ver se está claro: eu escrevi a função isWeekendWeekend que pega uma string que
representa o nome de um dia da semana, e nos diz se é "sábado" ou "domingo".
Responder:
função esWeekend(day){
retorno (dia === "sábado" || dia === "domingo")
}
Vamos ver se está claro: eu escrevi uma função fullName length, que pega um nome e
sobrenome, e retorna seu comprimento total, contando um espaço extra para separar os dois.
Responder:
Escrevi a função do grito. Deixamos você usar a função convertEnShift, que, ehm... Poço...
Ele basicamente converte uma cadeia de caracteres em maiúsculas.
Responder:
função shout(word){
return("" + convertUppercase(word) + "!")
}
Nenhuma introdução à linguagem JavaScript estaria completa sem mostrar pelo menos
uma estrutura de controle que já conhecemos: a alternativa condicional.
Vamos ver se entende: escrevi uma função máxima, que funciona como Matemática.max
(não vale a pena usá-la!) e retorna o máximo entre dois números. Por exemplo, o máximo
entre 4 e 5 é 5, e o máximo entre 10 e 4 é 10.
Responder:
Responder:
Eu escrevi a função isLuckNumberThat dado um número diz se ele atende à lógica acima.
Não vale a pena usar se!
Responder:
função esLuckNumber(number) {
retorno (número)>0 && (número)<100 && (número!=15);
}
O júri de um torneio pediu-nos para desenvolver uma função de medalha SegunPuesto que
devolve a medalha que corresponde aos primeiros lugares, de acordo com a seguinte lógica:
função medalSecondPosition(place){
if(place === 1){
retorno("ouro")
} else if(place === 2) {
Retornar
} else if(place === 3) {
Retorno ("bronze")
} else {
retorno("nada")
}
}
Além disso, existem operações que funcionam para todos os tipos de dados, por exemplo:
Responder:
Teste no console
Antes de terminar um último desafio: Qual o valor das seguintes expressões? Confira todos
os corretos!
Responder:
4 + 4 vale 8
5 >= 6 é falso
! verdadeiro é falso
Eu escrevi uma função quanto me custa para pegar o número de polegadas do monitor e a
quantidade de memória, e calcular o custo estimado do nosso computador.
Responder:
Responder:
Exercício 3: Triângulos.
Responder:
Exercício 4: Quadrados.
Responder:
função perimeterSquare(side) {
retorno (lado * 4)
}
área de funçãoSquare(side) {
retorno (lado * lado)
}
Desenvolva uma função sintonizada, que recebe a frequência (um número) da troca, e diz
se essa frequência é igual a 440Hz.
Responder:
função isTuned(frequency){
retorno (frequência === 440)
}
Agora queremos saber se o piano central está perto de estar em sintonia. Isso ocorre quando
está entre 437Hz e 443Hz, mas NÃO é exatamente 440Hz.
Eu escrevi a função éPerto.
Responder:
função isClose(frequency){
retorno (437 <= frequência && frequência de & <= 443 &&& frequência !==
440)
}
Exercício 7: Pôsteres.
Responder:
Responder:
Agora que podemos escrever nossos sinais de identificação grandes e pequenos, queremos
uma nova função que nos dê o sinal de tamanho ideal:
Responder:
Responder:
Queremos saber o valor das cartas de truque quando jogamos inveja. Sabemos que:
Eu escrevi uma função envidovalue, que pega um número de letra e retorna seu valor de
envio.
Responder:
função valueEnvido(letter){
if(letra >= 1 && letra <= 7)
{carta de retorno}
if(letra >= 10 && letra <= 12)
{retornar 0}
}
Bem, ehm, não, pare, primeiro queremos calcular quantos pontos de inveja um jogador
marca. Sabemos que:
Se as duas cartas são do mesmo naipe, o valor da inveja é a soma de seus valores de
inveja mais 20.
Caso contrário, o valor do envio é o maior valor de envio entre eles.
Responder:
pontos de funçãoTotalEnvido(n1, p1, n2, p2){
if(p1 === p2){
return (EnvidoValue(n1) + EnvidoValue(n2) + 20)
}else{
retornar Matemática.max(n1, n2)
}
}
Escrevi a função valueCantoTruco, que pega a música e devolve quantos pontos ela vale.
Responder:
função valueCantoTrick(singing){
if(cantando === "truque"){
retorno(2)
}
if(cantando === "retruco"){
retorno(3)
}
if(canto === "vale cuatro"){
retorno(4)
}
}
3. Variáveis e Procedimentos.
Exercício 1: E o tabuleiro?.
Responder:
misterioso(2, 1)
Exercício 2: Serigrafia.
Responder:
Experimente o Egocentrica() no console.
Vamos ver se está ficando claro, escrevi uma função versosMartinFierro que imprime na
tela os primeiros versos de Martín Fierro:
Responder:
function versosMartinFierro() {
print("Aqui começo a cantar");
print("Al compás de la vigüela;");
print ("Deixe o homem que a desvenda");
print("Pena extraordinária");
retornar 0
}
Exercício 4: E os procedimentos?
Responder:
function versosMartinFierro() {
print("Aqui começo a cantar");
print("Al compás de la vigüela;");
print ("Deixe o homem que a desvenda");
print("Pena extraordinária");
}
Exercício 5: E o programa?.
Em JavaScript, tudo o que escrevemos fora de uma função será, implicitamente, esse
ponto de entrada. Por exemplo, se quisermos um programa que imprima na tela o clássico
"Olá, mundo!", podemos escrevê-lo assim:
print("Olá Mundo!");
Responder:
print("Rolando dados");
print("A primeira tiragem deu " + roll());
print("A segunda tiragem deu " + roll());
print("O terceiro rolo deu " + roll());
Exercício 6: Coerção.
Vamos ver se está claro, eu escrevi uma função elefantesEquilibristas de corda bamba, que
pega uma série de elefantes e devolve uma rima de uma conhecida música "3 elefantes
balançaram".
Responder:
Responder:
função perimeterCircle(radius){
retorno(3.14159265358979*2*radio)
}
área de funçãoCircle(radius) {
retorno(3.14159265358979 * rádio * rádio)
}
deixe pi = 3,14159265358979;
Altere os locais onde 3.14159265358979 aparece para a variável pi nas funções que
definimos.
Responder:
deixe pi = 3,14159265358979;
função perimeterCircle(radius){
Retorno (PI*2*Radio)
}
área de funçãoCircle(radius) {
return(pi * rádio * rádio)
}
À medida que você entende como as variáveis são atribuídas, trazemos algo para você
pensar: e se eu tentar usar uma variável à qual nunca atribuí um valor?
Responder:
As variáveis declaradas dentro de uma função, conhecidas como variáveis locais, não
apresentam mais mistério. No entanto, é preciso ter um cuidado especial: eles só podem ser
usados a partir da função em questão.
Responder:
função increaseFortune(){
pesosEnMyWallet = pesosInMyWallet * 2
}
Vimos que uma variável só pode ter um valor, então toda vez que atribuímos um novo,
perdemos o anterior.
Responder:
20
4. Lógica booleana.
Vamos começar com algo simples, você se lembra do operador! ? Chama-se negação, não
ou complemento lógico e serve para negar um valor booleano.
Defini o procedimento a ser usado para que possamos abrir e fechar o fechamento de uma
mochila.
Responder:
Agora é a sua vez! Eu defini que éAdulto, que recebe uma idade, e depois éMinorAge a
partir dele.
Responder:
função esOlder(age){
retorno (idade >= 18)
}
função esMinor(age){
return(!isAdult(age))
}
Exercício 3: Os peripatéticos.
Defini uma função peripatética que leva a profissão de uma pessoa, a nacionalidade e o
número de quilômetros que ela caminha por dia. Alguém é peripatético quando é filósofo
grego e gosta de caminhar (anda mais de 2 quilômetros por dia).
Responder:
Responder:
Teste no console:
consumoPocaEnergia(24, 5)
consumoPocaEnergia(24, 0)
consumoPocaEnergia(21, 7)
consumoPocaEnergia(18, 1)
Responder:
Teste no console:
win(falso, 20)
É um feriado, ou
É o fim de semana, ou
Não estamos dentro do horário bancário.
Responder:
Agora cabe a você definir a função areHalfBrothers. Lembre-se que meio-irmãos podem
compartilhar mãe ou pai, mas não ambos porque... Nesse caso, seriam irmãos!
Responder:
Teste sua função sonHalfBrothers com os seguintes valores e verifique se ela se comporta
como a tabela:
Responder:
sonHalfBrothers(arcadio, aurelianoJose)
sonHalfBrothers(AurelianoSegundo, remédios)
sonMediaHermanos(aurelianoJose, remédios)
Ao contrário de e, ou não, xor não é geralmente definido em línguas. No entanto, agora que
você já sabe como funciona, se precisar pode defini-lo manualmente.
Vamos ver se é entendido: defini a função genérica xor, que pega dois booleanos e retorna o
valor verdade correspondente.
Responder:
Quando uma expressão matemática tem vários operadores, sabemos que multiplicações e
divisões ocorrerão antes da adição e subtração:
5 * 3 + 8 / 4 - 3 = 14
Responder:
Escrevi a função canretire que recebe a idade e o sexo de uma pessoa, além dos anos de
contribuição previdenciária que ela tem.
A idade mínima para realizar o procedimento para as mulheres é de 60 anos, enquanto para
os homens é de 65 anos. Em ambos os casos, é preciso ter pelo menos 30 anos de
contribuição.
Tente resolvê-lo em uma única função! Então vamos ver como seria se delegássemos.
Responder:
Defini a função de 3 parâmetros canRise que recebe uma altura de uma pessoa em metros,
se ela está acompanhada e se tem algum problema cardíaco.
Responder:
5. Listas.
Para representar um conjunto de strings, colocamos todas as strings que nos interessam,
entre colchetes ([ e ]) separadas por vírgulas. Fácil, não é?
Responder:
sérieFavoritosDeAna
sérieFavoritosDeHector
["Olá","Mundo!"]
["olá","olá"]
O que acabamos de ver é como modelar facilmente conjuntos de coisas. Usando [], em
JavaScript temos uma maneira simples de agrupar esses itens em listas.
Existe um número máximo de itens? Não, não há limite! As listas podem ter qualquer
número de itens.
E não só isso, mas a ordem é importante. Por exemplo, ["hello", "world"] não é o mesmo
que ["world", "hello"]: ambos têm os mesmos elementos, mas em posições diferentes.
Responder:
povo
Exercício 3: Jogo.
Responder:
Números da loteria
SalioCara
Ótimo, parece que uma lista pode conter qualquer tipo de item! Podemos ter listas de
booleanos, números, strings, listas...
E não só isso, mas eles também podem conter qualquer número de elementos: um, dois,
quinze, centenas.
Podemos, então, ter listas vazias, ou seja, aquelas que não têm elementos? É claro!
deixe aEmptyList = []
Responder:
No momento, já sabemos o que podemos representar com listas e como fazê-lo. Mas o que
podemos fazer com eles?
Vamos começar pelo fácil: saber quantos itens estão na lista. Podemos fazer isso usando a
função length, semelhante ao que fizemos com strings.
Responder:
comprimento([])
comprimento([4, 3])
As listas são muito úteis por conter vários itens. Mas há mais! Também podemos adicionar
itens a ele a qualquer momento, usando a função add, que recebe dois parâmetros: a lista e o
item.
Como podemos ver, adicionar adiciona um item à lista, o que faz com que seu tamanho
aumente. Mas onde na lista você adiciona isso? Inicialmente? No final? No meio?.
Descubra você mesmo: inspecione no console quais itens contêm pertences, adicione uma
"besta" e inspecione os pertences novamente.
Responder:
Teste no console
Exercício 7: Mova-se.
Ele declarará um procedimento para mover, que pega duas listas, tira o último elemento da
primeira e adiciona à segunda.
Responder:
função move(oneList, anotherList){
adicionando(anotherList, removendo(aList))
}
E o que acontece se você passar por parâmetro para posicionar um elemento que não tem?
Descubra-se!
Responder:
cargo(diasLaboral, "osvaldo")
Exercício 9: Contém.
Eu escrevi a função contém para nos dizer se uma lista contém um determinado item.
Se você tem prestado atenção aos exemplos de consulta, você terá notado que as listas
também podem ter elementos duplicados: [1, 2, 1], ["hello", "hello"], etc.
Responder:
Assim como existe uma função para descobrir em que posição um elemento está, também
pode acontecer de querermos saber o contrário: qual elemento está em determinada
posição.
Para descobrir, podemos usar o operador de indexação, escrevendo após a coleção e entre
colchetes [] a posição que queremos descobrir.
Responder:
Se você pedir um item em uma posição igual ou maior que o tamanho da lista, você ficará
indefinido. Não parece uma coisa terrível, mas o problema é que com undefined você não
pode fazer nada realmente útil.
Com isso em mente, há um desafio: escrevi a função medalha novamente, mas desta vez
usando no máximo um único se. Talvez as listas possam ser úteis aqui.
Lembramos o que a função faz: tem que devolver a medalha que corresponde às primeiras
posições de uma competição.
Responder:
função medalSecondPosition(position){
if(posição <= 3){
retorno(medalha[posição])
} else {
Retorno(medalha[0])
}
}
Vamos conhecer uma maneira de percorrer os elementos de uma lista com um novo amigo:
o loop for.
Responder:
função greet(people){
for(let persona1 de personas){
print("olá" + " " + pessoa1);
}
}
6. Registros.
Responder:
Copie e cole o código no console
estátua da liberdade
Christthe Redentor
torreEiffel
tajMahal
coliseu
Responder:
Responder:
Desenvolva uma função planettemperature que receba um registro de planeta por parâmetro
e retorne uma string indicando seu nome e temperatura média. Tem que funcionar para
qualquer planeta!
Responder:
função temperaturadePlaneta(planeta){
return(planet.name + " tem uma temperatura média de " +
planet.temperatureAverage + " graus")
}
Responder:
No exercício anterior, modificamos o caminho do registro, mas não usamos sua data de
criação. Vamos usá-lo! Queremos saber se um arquivo é do último milénio, o que acontece
quando o seu ano é anterior ao ano 2000.
Responder:
função enMillenniumPast(file){
return(anio(file.creation) < 2000)
}
Crie uma função difícil de cozinhar, que recebe dois registros de sobremesa por parâmetro e
retorna aquele com mais ingredientes dos dois.
Responder:
Responder:
Teste no console:
sobremesasFavoritos
monumentos da América
Responder:
Responder:
Teste no console
menuInfantil.sobremesa.ingredientes
Responder:
função sweetenMenu(menu){
adicionar(menu.dessert.ingredients, "açúcar")
retornar menu.sobremesa
}
7. Rotas.
O recurso Ganho Semestral que escrevemos anteriormente tem algum problema? Vai
funcionar com balanços trimestrais? E com os períodos de quatro meses?
Experimente no console!
Responder:
Teste no console:
ResultadosSemestre
Responder:
TotalProfit([
{ mês: "Janeiro", lucro: 2 },
{ mês: "Fevereiro", lucro: 3 }
])
O que temos que fazer, então, é repetir a operação de acumular várias vezes, uma para cada
item da lista. Vamos dizer olá (novamente) para o for... de!
Como você pode ver, o... de nos permite visitar e fazer algo com cada item de uma lista;
neste caso, visitaremos cada balanço do SinglePeriod.
Responder:
TotalProfit([
{ mês: "Março", lucro: 8 },
{ mês: "Agosto", lucro: 10 }
])
Ana tem novas exigências! Agora ele nos perguntou o seguinte: "Quero saber quantos
saldos foram positivos, ou seja, aqueles em que o lucro foi maior que zero".
Conclua a função PositiveBalanceQuantity . Se você prestar atenção, notará que ele tem
uma estrutura semelhante ao problema anterior.
Responder:
Ana gostaria de saber, dado qualquer conjunto de saldos, qual é o seu lucro médio.
Responder:
função gainAverage(Totalgain){
Soma let = 0
for(let balance of gainTotal){
soma = (soma + saldo.lucro)
}
retorno da soma / comprimento (gainTotal)
}
Vendo que podemos fazer tudo o que pede, Ana quer saber o ganho médio dos saldos
positivos.
Defini as funções:
Responder:
ganho de funçãoPositivo(saldosDeperíodo){
Soma let = 0
for(let balance of balancesDeUnPeriodo){
if(balance.profit > 0){
soma = soma + (saldo.ganho)
}
}
Retorno de soma
}
função médiaLucrosPositivo(SaldosDeUmPeríodo){
retorno lucroPositivo(SaldosDeUm Período) / montantePositivo(saldosDeUm
Período)
}
Infelizmente, você não pode usar o recurso médio com nossa lista de registros. O que
precisamos é de uma lista que tenha apenas os lucros de cada balanço. Para fazer isso,
devemos transformar, ou mapear, cada item da lista.
Complete a função de lucro que pega uma lista de saldos e retorna uma lista que possui
apenas os lucros de cada um.
Responder:
ganhos de função(saldosOfAPeriod){
deixar ganhos = []
for(let balance of balancesDeUnPeriodo){
agregado(lucro, saldo.lucro)
}
retorno de lucros
}
Com a programação você pode fazer qualquer coisa, ou quase. Já fizemos uma função para
poder saber a quantidade de saldos positivos (amountofPositiveBalances), agora vamos ver
como podemos fazer para saber quais são esses saldos.
Conclua a função Saldos Positivos que pega os saldos de um período e retorna uma lista
daqueles cujo lucro foi maior que zero.
Responder:
saldos de funçãoPositivo(OnePeriodsbalances){
deixe saldos = []
for(let balance of balancesDeUnPeriodo){
if(balance.profit > 0){
add(saldos, saldo)
}
}
Saldos de Retorno
}
Agora que temos a função lucros e saldos positivos podemos usar a função média genérica
para saber qual é o lucro médio dos saldos positivos.
Responder:
Vamos conhecer uma nova função, maximo, que nos permite saber qual é o valor mais alto
em uma lista de números.
Usando esta nova função, defini a função maximaGain que nos diz qual é o maior lucro
entre os saldos de um período de tempo.
Responder:
Defini a função minimaPositiveGain que nos diz qual é o menor ganho de todos os saldos
positivos.
Responder:
meses, que dada uma lista com registros retorna uma lista de meses;
lucky, que filtra aqueles registros que tiveram lucro superior a R$ 1 mil;
mesesLucky, devolva aqueles meses que foram de sorte.
Responder:
meses de função(earningsPeriod){
deixe o mês = []
for(let period of earningsPeriod){
add(mês, período.mês)
}
mês de retorno
}
função fortunate(earningsPeriod){
deixe a sorte =[]
for(let period of earningsPeriod){
if(period.profit > 1000){
adicionar (sorte, ponto final);
}
}
retornos de sorte;
}
função mesesLucky(earningsPeriod){
meses de retorno (lucky(earningsPeriod));
}