Algoritmos - WordPress.com

Propaganda
Professor Fernando Luís
[email protected]
ALGORITMOS
Introdução e objetivos
 Introdução geral sobre Algoritmos;
 Diferenças entre Algoritmos e Programas;
 Compiladores e Montadores;
 Formas populares de estruturação de
Algoritmos;
 Notações.
1.1 Conceituação
 Algoritmos
 É bastante associada à informática, porém não é
restrito apenas a ela.
 É usada também em outras áreas como
administração e engenharias.
 Vem do nome do matemático iraniano alKhawarizmi.
1.1 Conceituação
 Com isso definimos o termo como
sendo:
 Um procedimento passo a passo
para a solução de um problema.
 Uma sequência detalhada de ações
a serem executadas para realizar
uma tarefa.
1.2 Programas de computador
 Processo necessário para
criação de programas de
computador.
1.2.1 O que é um programa?
 Os computadores, independentemente de sua
arquitetura, têm funcionamento similar.
UCP – Unidade Central
de Processamento
Memória
Dispositivos
Entrada/Saída
...continuando
 A UCP (unidade central de processamento)
contém um pequeno conjunto de instruções.
 Estas instruções que o processador executa
são buscadas na memória e podem ser:
 Operações matemáticas;
 Interações com dispositivos de entrada e saída.
... Concluindo!
 Programas de computadores são conjuntos
de instruções executadas pelos
processadores em uma determinada
seqüência.
 Esse programa fará com que o computador
execute uma tarefa!
Programas x Algoritmos
 Fica claro que:
 Um programa nada mais é que um tipo de
algoritmo onde suas operações são específicas
para o computador.
 Atenção: é preciso ressaltar que tais operações
são restritas ao conjunto de instruções (linguagem
de máquina) que o processador pode executar!
Linguagens de programação
 Existem atualmente centenas de linguagens.
 Elas são classificadas de acordo com o
“distanciamento” em relação à linguagem de
máquina. Ou seja:
 Quanto mais semelhante com a linguagem de
máquina, mais baixo é o nível da linguagem.
Linguagens de baixo e alto
nível
 Baixo Nível:
 São aquelas mais semelhantes à linguagem de
máquina.
 Alto Nível:
 São aquelas mais distantes da linguagem de
máquina.
 Estão mais próximas à linguagem natural.
 Guardam pouca similaridade à ling máquina.
Como ocorre a tradução
Código
em
linguagem
de
máquina
Código
em
linguagem
Tradutor
(compiladores ou
interpretadores)
1.2.2 Executando um programa
 Compilador (compilação):
 É aquele que faz a tradução do código de alto nível
(código-fonte) para a linguagem de máquina (códigoobjeto).
 Esse código-objeto fica armazenado em disco e só é
carregado em memória durante a execução.
Código-fonte
(linguagem de alto
nível)
Compilador
Código –objeto
(linguagem de
máquina)
1.2.2 Executando um programa
 Interpretador (interpretação):
 Faz o mesmo trabalho (final) que o compilador,
entretanto não gera nenhum código-objeto.
 A tradução do código-fonte (linguagem de alto
nível) é executada em tempo de instrução, ou
seja: instrução por instrução diretamente na
memória.
Tradução
Código-fonte
(linguagem de alto
nível)
de cada
instrução
Interpretador
Memória
1.2.3 Linguagens de programação
e sistemas operacionais
 É muito complexo, até mesmo para
programadores experientes, a realização de
determinadas operações usando linguagem
de máquina.
 Essa não é apenas importante aos
programadores, é também uma das funções
do sistema operacional.
1.2.3 Linguagens de programação
e sistemas operacionais
 Máquina real:
 É a máquina propriamente dita, física.
 Operada pela linguagem de máquina (complicada).
 Máquina virtual:
 É uma camada que está entre o sistema operacional e
a estrutura física do computador.
 Facilita para o usuário a utilização dos recursos.
 Exemplo: arquivos (manipulação dos dados).
1.2.3 Linguagens de programação
e sistemas operacionais
 Além disso, os sistemas operacionais,
fornecem interfaces para que outros
programas possam ser executados.
 Essas interfaces são conhecidas como system
calls (chamadas de sistema) e o conjunto de
operações disponibilizadas são as bibliotecas
do sistema.
1.2.3 Linguagens de programação
e sistemas operacionais
 Durante a compilação de um programa, o
compilador encontra no código-fonte as
chamadas de sistema e as transforma em
referências no código-objeto (linguagem de
máquina).
 Para ser executado, esse código precisa ser
“ligado” ao sistema operacional (que é quem
efetivamente “faz o trabalho”). Esse processo
se chama ligação do código ou linking.
Código-fonte
Memória
Compilador
(ETAPA I)
Código-objeto
Código-objeto
(executável)
Compilador
(ETAPA II)
Biblioteca do
sistema
operacional
Portabilidade
 A relação entre o compilador e o sistema
operacional faz com que o programa
independa da arquitetura física do
computador (processador).
 Assim, programas executados em LINUX
dificilmente poderão ser executados em um
sistema operacional da família MICROSOFT.
1.3 Estruturação de
algoritmos
 Com o passar do tempo, as linguagens de
programação acabaram se distanciando da
linguagem de máquina e se aproximando da
“lógica humana”.
 Mesmo assim, linguagens de alto nível
podem ser MUITO complexas para quem não
é acostumado a fazer ALGORITMOS.
Diferenças entre linguagem
humana e computacional
 As máquinas:
 Não podem tomar decisões com base em
premissas;
 Não podem escolher alternativas;
 Não podem corrigir comandos mal redigidos;
 Não podem descobrir a intenção do programador;
Rigidez (regras)
 Sintática:
 A tradução no computador é bastante limitada
devido seu idioma também ser limitado.
 “Se sei poucas palavras, me comunico com
dificuldade”
 Semântica:
 Não podem existir ambigüidades.
 O computador é, portanto, um ótimo cumpridor
de ordens.
Exemplos
 A velhinha ouviu o barulho da
janela
 Interpretações
 A velhinha ouviu o barulho produzido
pela janela.
 A velhinha estava junto à janela e ouviu
o barulho.
 A velhinha ouviu o barulho que veio
através da janela.
Dilema!
 A linguagem natural (humana) não é
adequada porque não tem rigidez
semântica e sintática e a linguagem
de programação não é adequada
justamente por ter essas
características que dificultam o
desenvolvimento por sua
complexidade.
Como resolver?
 Na realidade, já existem
algumas alternativas.
 Apresento duas delas:
 FLUXOGRAMA
 PSEUDO-CÓDIGO
1.3.2 Fluxograma
 Apresentam os ALGORITMOS de
forma gráfica.
 São formados por CAIXAS que
contém as instruções.
 As CAIXAS são ligadas por SETAS que
indicam o FLUXO.
CAIXAS
 Algumas caixas especiais indicam a
possibilidade de o FLUXO seguir caminhos
diferentes.
 Para isso acontecer, precisamos de
CONDIÇÕES e DECISÕES.
VANTAGENS
 Facilidade para o
desenvolvimento e
compreensão do
funcionamento do
ALGORITMO.
DESVANTAGEM
 Não é prática.
 A correção de uma linha do pensamento
pode implicar na reconstrução de muitas
instruções.
 A construção de ALGORITMOS mais
complexos pode se torna demasiadamente
trabalhoso.
Exemplo
 Façamos um ALGORITMO,
usando a notação de
FLUXOGRAMAS, para a
escolha do maior de dois
números distintos.
Raciocínio
Início
Leia num1, num2
Num1 > num2
Maior  num1
Maior  num2
Escreva Maior
Fim
1.3.3 Pseudo-código
 Visa trazer ao código a rigidez semântica e
sintática sempre tentando reduzir a
dificuldade de uma linguagem de
programação.
 Será intermediária entre a linguagem natural
e a linguagem de programação.
PORTUGOL
 É um Pseudo-código muito popular no
BRASIL.
 É bastante simples e atende as características
básicas da rigidez semântica e sintática.
 Nas próximas aulas estudaremos a fundo a
linguagem PORTUGOL e facilitaremos o
estudo das linguagens de maior nível.
 Algoritmo MAIOR
 Var num1, num2, maior : inteiro;
 Início
 Leia(num1, num2);
 Se (num1 > num2) então
 Maior  num1;
 Se não
 Maior  num2;
 Escreva (Maior);
 Fim
Exercícios
 Defina o que é ALGORITMO.
 Diferencie um ALGORITMO de um PROGRAMA.
 Explique como um programa é executado em um
computador.
 Defina o que é uma linguagem de programação de
alto nível e uma linguagem de baixo nível.
 Porque a linguagem natural não é adequada para a
construção de ALGORITMOS para computador?
 Quais as vantagens e desvantagens da utilização de
FLUXOGRAMA e de PSEUDOCÓDIGO na
construção de ALGORITMOS?
Download