-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #9 from santanche/development
feat (notebook/loan): new version improving instructions
- Loading branch information
Showing
2 changed files
with
3 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
2 changes: 1 addition & 1 deletion
2
notebook/pt/c51oo/s01emprestimo/s01exercicios/emprestimo01.ipynb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1 @@ | ||
{"metadata":{"kernelspec":{"display_name":"C","language":"c","name":"c"},"language_info":{"file_extension":".c","mimetype":"text/plain","name":"c"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Memória, Variáveis, Comunicação e Estado de um Programa\n\nHá várias possíveis estratégias para usar a memória de um computador para se realizar a comunicação entre partes dele -- por exemplo, entre duas funções -- e para se manter o **estado atual** de execução de um programa. Dentre elas, podemos destacar o uso de variáveis locais, globais e parâmetros entre funções.\n\nVamos fazer aqui um exercício nesse contexto e você será conduzido a experimentar cada uma dessas estratégias, mesmo que em algumas ocasiões não seja a forma recomendada de se desenvolver um programa.\n\n\n# Exercício do Empréstimo\n\nEm um financiamento com juros compostos e número de parcelas fixas parte-se dos seguintes parâmetros:\n* `S` - valor da primeira parcela\n* `N` - número de parcelas\n* `J` - percentual de juros mensal\n\nA primeira parcela a ser paga do financiamento é sempre igual a `S`. A partir daí é feita uma atualização mensal da parcela, em que cada nova parcela é calculada a partir da parcela do mês anterior, conforme a fórmula:\n\n> Parcela<sub>mês</sub> = Parcela<sub>mês-1</sub> * (1 + `J` / 100)\n\nO financiamento encerra quando as `N` parcelas são pagas.\n\nExemplo:\n* `S`: 200\n* `N`: 5\n* `J`: 1%\n\nParcelas do financiamento:\n`200`; `202`; `204.02`; `206.06`; `208.12`","metadata":{}},{"cell_type":"markdown","source":"## Exercício Parte 1 - Escrevendo um Programa\n\nDado o problema descrito, escreva um programa que calcule as parcelas de um empréstimo para os seguintes valores:\n* `S`: 200\n* `N`: 5\n* `J`: 1%","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Exercício Parte 2 - Escrevendo um Módulo (Função)\n\nReescreva o código acima de forma que seu programa faça uso de uma função `proximaParcela` que seja responsável pelo cálculo de uma única parcela X do empréstimo. Utilize as boas práticas de modularização que você aprendeu, evitando dependências do módulo com o programa principal. A função deve apenas calcular uma única parcela, portanto, ficará a cargo da função principal que chama `proximaParcela` realizar o restante do processo, para que sejam apresentadas todas as parcelas do financiamento.","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Exercício Parte 3 - Mantendo o Estado\n\nModifique a função (módulo) `proximaParcela` acima de modo que ela tenha uma memória da situação em que estão as coisas, sem que o `main` precise ficar informando novamente coisas que já informou no início. Para isso serão permitidas as seguintes modificações:\n\n1. você pode desmembrar a função em mais de uma, por exemplo, uma você chama no começo do empréstimo e outra a cada parcela;\n\n2. você pode usar técnicas de uso de variáveis não recomendadas que geram dependência dos módulos com o programa principal.\n\nVocê deve organizar o código de tal maneira que o `main` informe para as funções os dados do financiamento apenas uma única vez e depois possa solicitar o cálculo da parcela subsequente sem informar tudo novamente.","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Exercício Parte 4 - Minimizando os Parâmetros\n\nRetomando a solução da `Parte 2`, em que a função `main` deve ter usado vários parâmetros para a comunicação com a função `proximaParcela`, modifique a forma como você representa o empréstimo, de forma que a função `proximaParcela` receba sempre um único parâmetro capaz de representar o estado completo do empréstimo.","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Exercício Parte 5 - Múltiplos Empréstimos\n\nConsidere que há múltiplos empréstimos que podem ser controlados em paralelo. A sua função `main` deve ser capaz de apresentar no console as parcelas de mais de um empréstimo de modo paralelo, mantendo um controle para cada empréstimo separadamente. Você deve decidir qual das soluções tomará como ponto de partida, se deve modificar a função `main`, a função `proximaParcela` ou ambas para atender esse requisito da melhor forma possível.\n\nAdote uma solução compacta e generalizável, de tal modo que, cada novo empréstimo só exija a informação dos parâmetros de partida, sem expansão do código.\n\nPor exemplo, suponha os seguintes dois empréstimos em paralelo:\n\n### Empréstimo 1\n* `S`: 200\n* `N`: 5\n* `J`: 1%\n\n### Empréstimo 2\n* `S`: 500\n* `N`: 7\n* `J`: 2%\n\nA saída esperada é:\n~~~\nEmprestimo 1: parcela 1 eh 200.00\nEmprestimo 2: parcela 1 eh 500.00\nEmprestimo 1: parcela 2 eh 202.00\nEmprestimo 2: parcela 2 eh 510.00\nEmprestimo 1: parcela 3 eh 204.02\nEmprestimo 2: parcela 3 eh 520.20\nEmprestimo 1: parcela 4 eh 206.06\nEmprestimo 2: parcela 4 eh 530.60\nEmprestimo 1: parcela 5 eh 208.12\nEmprestimo 2: parcela 5 eh 541.22\nEmprestimo 2: parcela 6 eh 552.04\nEmprestimo 2: parcela 7 eh 563.08\n~~~\n\nO exemplo mostra dois empréstimos, mas a estrutura deve ser genérica o suficiente para controlar N empréstimos em paralelo.","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]} | ||
{"metadata":{"kernelspec":{"display_name":"C","language":"c","name":"c"},"language_info":{"file_extension":".c","mimetype":"text/plain","name":"c"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Memória, Variáveis, Comunicação e Estado de um Programa\n\nHá várias possíveis estratégias para usar a memória de um computador para se realizar a comunicação entre partes dele -- por exemplo, entre duas funções -- e para se manter o **estado atual** de execução de um programa. Dentre elas, podemos destacar o uso de variáveis locais, globais e parâmetros entre funções.\n\nVamos fazer aqui um exercício nesse contexto e você será conduzido a experimentar cada uma dessas estratégias, mesmo que em algumas ocasiões não seja a forma recomendada de se desenvolver um programa.\n\n\n# Exercício do Empréstimo\n\nEm um financiamento com juros compostos e número de parcelas fixas parte-se dos seguintes parâmetros:\n* `S` - valor da primeira parcela\n* `N` - número de parcelas\n* `J` - percentual de juros mensal\n\nA primeira parcela a ser paga do financiamento é sempre igual a `S`. A partir daí é feita uma atualização mensal da parcela, em que cada nova parcela é calculada a partir da parcela do mês anterior, conforme a fórmula:\n\n> Parcela<sub>mês</sub> = Parcela<sub>mês-1</sub> * (1 + `J` / 100)\n\nO financiamento encerra quando as `N` parcelas são pagas.\n\nExemplo:\n* `S`: 200\n* `N`: 5\n* `J`: 1%\n\nParcelas do financiamento:\n`200`; `202`; `204.02`; `206.06`; `208.12`","metadata":{}},{"cell_type":"markdown","source":"## Exercício Parte 1 - Escrevendo um Programa\n\nDado o problema descrito, escreva um programa que calcule as parcelas de um empréstimo para os seguintes valores:\n* `S`: 200\n* `N`: 5\n* `J`: 1%\n\nEsses valores podem ser atribuídos na função `main`, não é necessária leitura pelo teclado. Entretanto, o programa deve ser genérico, ou seja, funcionará para qualquer outro valor atribuído às 3 variáveis.","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Exercício Parte 2 - Escrevendo um Módulo (Função)\n\nReescreva o código acima de forma que seu programa faça uso de uma função `proximaParcela` que seja responsável pelo cálculo de cada parcela X do empréstimo.\n\nUtilize as boas práticas de modularização que você aprendeu, evitando dependências do módulo com o programa em que está inserida. Considere que esta função poderia ser eventualmente reusada em outro programa e deveria ser possível fazê-lo sem que ela dependa de nada do programa em que irá se inserir.\n\nA função deve apenas calcular uma única parcela em cada chamada, portanto, ficará a cargo da função principal que chama `proximaParcela` realizar o restante do processo, para que sejam apresentadas todas as parcelas do financiamento.","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Exercício Parte 3 - Minimizando os Parâmetros\n\nNa solução anterior, você deve ter usado vários parâmetros para a comunicação entre o `main` com a função `proximaParcela`, evitando usar variáveis globais. Modifique a forma como você representa o empréstimo, de forma que a função `proximaParcela` receba sempre um único parâmetro capaz de representar todos os valores que estejam relacionados a um empréstimo.","metadata":{"tags":[]}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Exercício Parte 4 - Mantendo o Estado\n\nA função que você codificou na solução anterior provavelmente não é capaz de manter o controle do que chamaremos de **estado do empréstimo**, ou seja, dados de qual a parcela corrente ou da última parcela calculada.\n\nModifique a função (módulo) `proximaParcela` acima de modo que ela seja capaz de guardar o **estado do empréstimo** por sua conta, sem que o `main` precise ficar informando este estado por parâmetros (por exemplo). Para isso serão permitidas as seguintes modificações:\n\n1. você pode desmembrar a função em mais de uma, por exemplo, uma você chama no começo do empréstimo e outra a cada parcela;\n\n2. você pode usar técnicas de uso de variáveis não recomendadas que geram dependência das funções com o programa em que ela está inserida.\n\nVocê deve organizar o código de tal maneira que o `main` informe para as funções os dados do financiamento apenas uma única vez e depois possa solicitar o cálculo da parcela subsequente sem informar tudo novamente. O ideal é que o main não tenha acesso ao modo como as funções vão representar o **estado do empréstimo**, para que toda a lógica do empréstimo fique dentro das funções.","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## Exercício Parte 5 - Múltiplos Empréstimos\n\nConsidere que há múltiplos empréstimos que podem ser controlados em paralelo. A sua função `main` deve ser capaz de apresentar no console as parcelas de mais de um empréstimo de modo paralelo, mantendo um controle para cada **estado de empréstimo** separadamente. Você deve decidir qual das soluções tomará como ponto de partida, se deve modificar a função `main`, as funções de cálculo do empréstimo ou ambas para atender esse requisito da melhor forma possível.\n\nAdote uma solução compacta e generalizável, de tal modo que comporte até 100 empréstimo e, cada novo empréstimo, só exija a informação dos parâmetros de partida, sem expansão do código.\n\nPor exemplo, suponha os seguintes dois empréstimos em paralelo:\n\n### Empréstimo 1\n* `S`: 200\n* `N`: 5\n* `J`: 1%\n\n### Empréstimo 2\n* `S`: 500\n* `N`: 7\n* `J`: 2%\n\nA saída esperada é:\n~~~\nEmprestimo 1: parcela 1 eh 200.00\nEmprestimo 2: parcela 1 eh 500.00\nEmprestimo 1: parcela 2 eh 202.00\nEmprestimo 2: parcela 2 eh 510.00\nEmprestimo 1: parcela 3 eh 204.02\nEmprestimo 2: parcela 3 eh 520.20\nEmprestimo 1: parcela 4 eh 206.06\nEmprestimo 2: parcela 4 eh 530.60\nEmprestimo 1: parcela 5 eh 208.12\nEmprestimo 2: parcela 5 eh 541.22\nEmprestimo 2: parcela 6 eh 552.04\nEmprestimo 2: parcela 7 eh 563.08\n~~~\n\nO exemplo mostra dois empréstimos, mas a estrutura deve ser genérica o suficiente para controlar N empréstimos em paralelo (até o limite de 100).\n\nO seu programa deve apresentar o exemplo acima como teste.","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]} |