{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# MiniEP3 - MAC0110 - Introdução à Computação" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "NOME: insira seu nome\n", "\n", "NUSP: insira seu número USP" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Parte 0 - Testes automatizados\n", "\n", "**NÃO ALTERE O CÓDIGO ABAIXO**\n", "\n", "Rode o trecho de código abaixo após terminar a tarefa para verificar se \n", "suas funções estão funcionando como o esperado. Não é necessário \n", "entender o código abaixo, mas já é possível entender :). \n", "\n", "Lembrando que, na correção, utilizaremos também testes adicionais." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Tudo OK :)" ] } ], "source": [ "function quaseigual(v1, v2)\n", " erro = 0.0001\n", " igual = abs(v1 - v2)\n", " if igual <= erro\n", " return true\n", " else\n", " return false\n", " end\n", "end\n", "\n", "function test()\n", " if !quaseigual(soma_inversos_quadrados(0), 0.0) ||\n", " !quaseigual(soma_inversos_quadrados(1), 1.0) ||\n", " !quaseigual(soma_inversos_quadrados(5), 1.4636) || \n", " !quaseigual(soma_inversos_quadrados(10), 1.5497)\n", " return \"Erro. Verifique a função soma_inversos_quadrados\"\n", " end\n", " if !quaseigual(soma_harmonica_alternada(0), 0.0) || \n", " !quaseigual(soma_harmonica_alternada(1), 1.0) ||\n", " !quaseigual(soma_harmonica_alternada(2), 0.5) || \n", " !quaseigual(soma_harmonica_alternada(1000), 0.69264)\n", " return \"Erro. Verifique a função soma_harmonica_alternada\"\n", " end\n", "\n", " return \"Tudo OK :)\"\n", "end\n", "\n", "print(test())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Parte 1 - Função recursiva soma_inversos_quadrados(n)\n", "\n", "Crie uma função `soma_inversos_quadrados(n)` que recebe o parâmetro `n`, e devolve a soma dos `n` primeiros inversos dos quadrados. Ou seja, retorna:\n", "\n", "$$\\frac{1}{1^2} + \\frac{1}{2^2} + (...) + \\frac{1}{n^2}$$\n", "\n", "sendo\n", "\n", "$$n >= 0$$\n", "\n", "Você não precisa verificar se o valor de _n_ é válido. Ou seja, se _n_ não é negativo.\n", "\n", "**Obs:** você _DEVE_ usar recursão para resolver este exercício.\n", "\n", "**Dica:** considere que `soma_inversos_quadrados(0) = 0` e que `soma_inversos_quadrados(1) = 1`. Utilize-os como casos base." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "soma_inversos_quadrados (generic function with 1 method)" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# escreva o código da parte 1 aqui\n", "function soma_inversos_quadrados(n)\n", " if n == 0\n", " return 0\n", " elseif n == 1\n", " return 1\n", " else\n", " return 1/n^2 + soma_inversos_quadrados(n - 1)\n", " end\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Parte 2 - Função recursiva soma_harmonica_alterada (atual, n, sinal)\n", "\n", "Baseado na função recursiva `somaharmonica(atual, n)` passada em aula, crie uma função `soma_harmonica_alternada(atual, n, sinal)` que recebe os parâmetros `atual`, `n` e `sinal` e retorna o calculo dos `n` primeiros elementos da soma harmônica alternada.\n", "\n", "Crie também uma função auxiliar `soma_harmonica_alternada(n)` que apenas chama a função `soma_harmonica_alternada(atual, n, )` para garantir que o primeiro sinal seja sempre positivo.\n", "\n", "Assim como na Parte 1:\n", "* `n >= 0`\n", "* Você não precisa verificar se o valor de n é válido. Ou seja, se n não é negativo.\n", "* `soma_harmonica_alternada(0) = 0`, `soma_harmonica_alternada(1) = 1`\n", "\n", "**Obs:** A diferença entre a soma harmônica e a soma harmônica alternada é que, na alternada, os sinais se alternam, começando _SEMPRE_ como um sinal positivo. Dessa forma:\n", "\n", "$$\\frac{1}{1} - \\frac{1}{2} + \\frac{1}{3} - \\frac{1}{4} + (...)$$\n", "\n", "**Obs 2:** Para testar sua função, use sempre a função `soma_harmonica_alternada(n)`.\n", "\n", "**Dica:** A forma na qual o parâmetro `sinal` é utilizado é indiferente para a correção e pode ser feita de diversas formas. Você pode utilizar `0` para representar _positivo_ e `1` para representar o _negativo_ , por exemplo." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "soma_harmonica_alternada (generic function with 2 methods)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# escreva o código da parte 2 aqui\n", "POSITIVO = 1\n", "NEGATIVO = -1\n", "\n", "function soma_harmonica_alternada(n)\n", " soma_harmonica_alternada(1, n, POSITIVO)\n", "end\n", "\n", "function soma_harmonica_alternada(atual, n, sinal)\n", " if n == 0\n", " return 0\n", " elseif atual >= n\n", " return 1.0 / (sinal * atual)\n", " else\n", " return (1.0 / (sinal * atual)) + soma_harmonica_alternada(atual + 1, n, -sinal)\n", " end\n", "end" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Playground\n", "\n", "Utilize a área abaixo para testar suas funções, criar novas e brincar com a linguagem. Essa parte não será avaliada." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# utilize essa área como playground" ] } ], "metadata": { "kernelspec": { "display_name": "Julia 1.3.1", "language": "julia", "name": "julia-1.3" }, "language_info": { "file_extension": ".jl", "mimetype": "application/julia", "name": "julia", "version": "1.3.1" } }, "nbformat": 4, "nbformat_minor": 2 }