FACENS – Engenharia da Computação
Lógica Computacional II
Modelagem Abstrata de
Programas
Desenvolvimento de Software
• Níveis de abstração (mais alto para mais
baixo)
—
—
—
—
—
—
—
—
—
—
—
—
Linguagem Natural
Diagramas
Módulos
Classes
Funções (ou Métodos)
…
…
Pseudocódigo
Linguagem de Programação
Assembly
Linguagem de Máquina
Circuitos Lógicos …
Desenvolvimento de Software
• Softwares complexos devem ser
particionados (dividir para conquistar)
• É necessário um dispositivo para separar
de fato o código em módulos, por vários
motivos:
—
—
—
—
Facilidade de manutenção
Eliminição de repetições
Trabalho em equipes
Reutilização futura
• Em linguagens estruturadas, utilizam-se
funções, em orientação a objetos, classes
Funções
• Trecho de código destinado a realizar
algum processamento, que pode receber
parâmetros e prover algum retorno
• y = f(x) , y = x2
• São chamadas, realizam o processamento
e retornam para o trecho que as chamou
programa ...
...
funcao (x: numérico)
y  funcao(x)
escreva y
...
fim.
retorno  x*x
fim.
Estrutura das Funções
• A estrutura geral de uma função é:
<tipo do retorno> nome_funcao (parametros: tipos e nomes)
<variaveis>
inicio
[ comandos, enquanto, se, escreva, leia ]
< retorno  valor >
fim.
• Exemplo:
numérico quadrado (x: numérico)
y: numérico
inicio
y  x * x
retorno  y
fim
Funções e Escopo
• Cada função tem suas próprias variáveis,
chamadas de locais, que só existem dentro
da função
• Caso as funções necessitem compartilhar
variáveis, devem ser declaradas variáveis
do programa (globais)
• A melhor alternativa é fazer isto através
de passagem de parâmetros, pois as
funções ficam mais independentes do
contexto (melhor modularização do
programa)
Exemplo
•
Programa-exemplo:
Faça um programa de eleição, onde o usuário
informa o número de candidatos, e depois
informa os nomes destes candidatos. A seguir,
a votação é iniciada, até que o usuário deseje
parar. O usuário vota digitando o nome do
candidato. Finalmente, o nome do vencedor
deve ser exibido na tela. Desconsidere
situações de empate.
Exemplo
•
Primeira etapa: função principal
programa eleicao
principal()
inicio
receber_candidatos()
receber_votos()
encontrar_maior()
mostrar_vencedor()
fim.
fim.
Exemplo
•
Segunda etapa: resolvendo função
receber_candidatos
receber_candidatos ()
nomes[50]: literal
i, num_candidatos, votos[50]: numérico
inicio
leia (num_candidatos)
para i0 até num_candidatos-1 passo 1 faça
leia(nomes[i])
votos[i]  0
fim para
retorno
fim
Exemplo
•
•
Problema: nomes, votos e num_candidatos não podem
pertencer a função, pois serão utilizados em outros
pontos do programa
Solução: transformá-los em variáveis globais
programa eleicao
receber_candidatos ()
nomes[50]: literal
num_candidatos, votos[50]: numérico
principal()
i: numérico
inicio
leia (num_candidatos)
para i0 até num_candidatos-1
passo 1 faça
inicio
receber_candidatos()
leia(nomes[i])
receber_votos()
votos[i]  0
encontrar_maior()
fim para
mostrar_vencedor()
retorno
fim.
fim.
fim
Exemplo
•
Solução melhor: utilizar retorno e parâmetros,
como exemplificado com num_candidatos
programa eleicao
nomes[50]: literal
votos[50]: numérico
principal()
num_cand: numérico
inicio
numérico receber_candidatos ()
n: numérico
inicio
leia (n)
para i0 até n-1 passo 1 faça
leia(nomes[i])
num_cand = receber_candidatos()
votos[i]  0
receber_votos()
encontrar_maior()
mostrar_vencedor()
fim.
fim.
fim para
retorno  n
fim
Exemplo
•
Terceira etapa: resolvendo receber_votos.
Surge a necessidade de outra função.
receber_votos ()
nome, continuar: literal
indice: numérico
inicio
faça
leia (nome)
indice  encontre_nome(nome);
se (indice >= 0)
votos[indice]  votos[indice] + 1
fim se
leia (continuar)
enquanto (continuar = “s”)
retorno
fim
Exemplo
•
Quarta etapa: a função encontrar_maior
numérico encontrar_maior ()
indice_maximo, i: numérico
inicio
indice_maximo  0;
para i1 até num_candidatos-1 passo 1 faça
se (votos[i] > votos[indice_maximo])
indice_maximo  i
fim se
fim para
retorno  indice_maximo
fim
•
(Vamos considerar todas as variáveis globais
para simplificar)
Exemplo
•
Quinta etapa: a função mostrar_vencedor. A
função principal precisará passar o indice do
vencedor
mostrar_vencedor (indice: numérico)
inicio
escreva(“O vencedor é: ”, nomes[indice],
“ com ”, votos[indice], “ votos.”).
retorno
fim
•
Funções muito simples levantam a dúvida
quanto a necessidade da sua existência.
Exemplo
•
Final: a função principal precisa de pequenos
ajustes para trabalhar com as novas funções
programa eleicao
nomes[50]: literal
i, num_candidatos, votos[50]: numérico
principal()
indice_vencedor: numérico
inicio
receber_candidatos()
receber_votos()
indice_vencedor  encontrar_maior()
mostrar_vencedor(indice_vencedor)
fim.
fim.
Exercício
1. Escreva a função encontre_nome
2. Utilize as técnicas apresentadas no problema:
Crie um programa de loja de carros, que mostra para o
usuário um menu, para que ele escolha 0-sair, 1incluir, 2-excluir ou 3-listar os carros. As informações
do carro são: placa, ano e nome. A opção 0 sai do
programa, 1 inclui um carro na lista, 2 apaga o último
carro da lista e 3 mostra a lista de carros. Considere
que no máximo 1000 carros podem ser cadastrados.
Download

inicio - caversan.eng.br