Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Refinamento de Algoritmos Algoritmos II Prof. Thiago Meirelles Ventura UFMT – IC – 2012/2 Na vida real Dificilmente os algoritmos a serem desenvolvidos serão pequenos Na vida real O que fazemos hoje é apenas uma pequena parte de uma das muitas funcionalidades que um sistema possui Na vida real Algoritmos nas aulas atuais: ~ 20 linhas de código Jogo para iPhone ~ 13 mil linhas de código SGBD PostgreSQL ~ 570 mil linhas de código Kernel do Ubuntu ~ 13 milhões de linhas de código Na vida real Tudo isso é feito em um único algoritmo? Na vida real Tudo isso é feito em um único algoritmo? Claro que não. Um exemplo Sistema com 10 funcionalidades diferentes Um exemplo F01 F02 F03 F04 F05 F10 ... Sistema com 10 funcionalidades diferentes Um exemplo F01 F02 F03 F04 F05 F10 ... Sistema com 10 funcionalidades diferentes Algoritmo principal do F01 Um exemplo F01 F02 F03 F04 F05 F10 ... Algoritmo principal do F01 Sistema com 10 funcionalidades diferentes Sub-Rotina F01.2 Sub-Rotina F01.N ... Sub-Rotina F01.1 Um exemplo F01 F02 F03 F04 F05 F10 ... Algoritmo principal do F01 Sistema com 10 funcionalidades diferentes Sub-Rotina F01.1 Sub-Rotina F01.2 Sub-Rotina F01.N ... Algoritmo F01.1 Var a: inteiro; Início a <- 1; ... Fim Um exemplo com algoritmos Algoritmo exemplo1 Var a, b: inteiro; Início leiaValores; escrevaValores; Fim Procedimento leiaValores Início leia(a, b); Fim Procedimento escrevaValores Início escreva(“Valor de a: “, a); escreva(“Valor de b: “, b); Fim Exercício 1 Crie um algoritmo que calcule o consumo médio de um automóvel. Será fornecida a distância total percorrida e o total de combustível gasto Esse algoritmo deve possuir três procedimentos: Procedimento 1: responsável por ler todos os valores necessários Procedimento 2: responsável por fazer os cálculos Procedimento 3: responsável por escrever o resultado Dica Ao nos depararmos com um problema complexo devemos buscar visualizá-lo como um conjunto de problemas mais simples Procedimentos vs Funções As sub-rotinas podem, além de executar comandos, retornar valores. Tais sub-rotinas são chamadas de funções. Procedimentos vs Funções As sub-rotinas podem, além de executar comandos, retornar valores. Tais sub-rotinas são chamadas de funções. Algoritmo exemplo2 Var a, b: inteiro; Início leia(a); b <- aoQuadrado; escreva(“valor ao quadrado: “, b); Fim Função aoQuadrado: inteiro Início retorna a * a; Fim Exercício 2 Cada um vai criar duas funções Função funçãoInteira: inteiro Função funçãoLiteral: literal Cada função deve ter no máximo 7 comandos. As funções devem trabalhar no mínimo com duas variáveis oriundas do algoritmo principal: varInt: inteiro varLit: literal Exercício 2 Função funçãoInteira: inteiro Var a: inteiro; Início leia(a); retorna varInt * a; Fim Função funçãoLiteral: literal Início retorna varLit + “Thiago”; Fim Um exemplo... Exercício 2 Algoritmo bagunça Var varInt, i: inteiro; varLit: literal; Início leia(varInt); leia(varLit); para i <- 1 até 50 faça se i mod 2 = 0 então varInt <- funçãoInteira; senão varLit <- funçãoLiteral; fimse; fimpara escreva(varInt); escreva(varLit); Fim Parâmetros Até o momento, nenhuma variável é passada diretamente para a sub-rotina. Limita o algoritmo Força a ter variáveis “globais” É possível utilizar parâmetros para contornar esses problemas. Parâmetros Função substring (v1: literal, v2: inteiro) retorna literal Var i: inteiro; resultado: literal; Início resultado <- “”; para i <- 1 até v2 faça resultado <- resultado + v1[i]; fimpara retorna resultado; Fim Um exemplo de uma função com 2 parâmetros Exercício 3 Faça uma função chamada “potencia” que seja capaz de calcular a potência de um número. Esta função deve receber dois valores por parâmetro, ambos do tipo inteiro: base expoente Algoritmo testePotencia Var a, b, r: inteiro; Início leia (a, b); r <- potencia (a, b); escreva(“Resultado: “, r); Fim
Compartilhar