Buscar

Algoritmos2_Aula2-RefinamentoDeAlgoritmo

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

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais