Algoritmos e Técnicas de Programação
Prof. Msc. Raul Benites Paradeda
Conceitu
ação
Sumário
Introdução
Arquitetu
ra do
Computa
dor
01 - Introdução
Linguage
ns
Lógica
Lógica de
Programação
Linguage
m de
Baixo
Nível
Lingu
agem
de
Progr
amaç
ão
Inter
preta
dor
Lingu
agem
Natu
ral
Trad
utor
Lingu
agen
s
Exerc
ícios
Com
pilad
or
Java
Ativi
dade
s de
Lógic
ae
Links
Sumário









Introdução;
Conceituação;
Arquitetura do computador;
Linguagens:
 Linguagens de Baixo nível;
 Linguagens de Programação;
Tradutor:
 Compilador;
 Interpretador;
SO;
Java;
Linguagem Natural;
Características da Linguagem.
Introdução
 Com o uso crescente dos recursos da Tecnologia da
Informação (TI) para resolução de problemas do dia
a dia das empresas e das pessoas, ocorreu um
crescimento nos Cursos relacionados à área.
 Para que a TI possa resolver esses problemas, é
necessário construir ALGORITMOS e transformálos em programas de computador.
Introdução
 O que significa algoritmos?
Introdução
 O que significa algoritmos?
 Um procedimento passo a passo para a solução de um
problema.
 Uma sequência detalhada de ações a serem executadas
para realizar determinada tarefa.
Introdução
 Dêem um exemplo de algoritmo?
Introdução
 Qualquer atividade do dia-a-dia pode ser um
exemplo de algoritmo.
Introdução
 Fazer um ovo frito por exemplo.
 A tarefa de fazer um ovo frito tem todas as
características de um algoritmo.
 Ela tem uma sequência detalhada de passos,
descrita no modo de preparo.
 Apresenta a tarefa a ser realizada, que é um ovo
frito. E também podemos identificar na receita
entradas (no caso o ovo, óleo, a panela, sal fino) e
uma saída, que é o ovo frito.
Introdução
 Praticamente tudo pode ser descrito em forma de
algoritmos.
 Entretanto, os algoritmos precisam ser corretos,
eficientes e elegantes.
Introdução
 Correto – deve fazer o que se espera, ou seja, executa o
que sua documentação descreve.
Introdução
 Eficiente – se não desperdiça tempo. Há a possibilidade
de haver dois algoritmos que resolvem o mesmo
problema.
Introdução
 Elegantes – ser simples, limpo, sem enfeites. Não
utilizar recursos desnecessários para sua solução.
Introdução
 Os principais problemas encontrados no desenvolvimento
de algoritmos são:
 Dificuldade na resolução de problemas;
 Dificuldade na interpretação de enunciados; e
 Dificuldade em abstrair e formalizar informações.
Introdução
 Por esse motivo, é necessário desenvolver essas
habilidades, começando pela solução de problemas sem a
necessidade do uso de ferramentas computacionais.
Introdução
 Se praticamente tudo pode ser descrito em forma
de algoritmos por que algoritmos ficou ligado a
computação ?
Conceituação
 Programa: Implementação concreta de um algoritmo. Ou
conjunto de algoritmos a serem executados pela máquina,
também podemos dizer que é um conjunto de instruções
ordenadas com um determinado fim.
◦ Estes programas podem ser escritos em Linguagem de
máquina, ou ainda em linguagens de programação tais como:
C, C++, Cobol, VB, dentre outros.
Conceituação
 Aplicação: Conjunto de rotinas para tratamento de uma
determinada necessidade, podem ser compostas de um ou
mais programas. Como Microsoft Office, dentre outros.
Conceituação
 Hardware: É o conjunto de dispositivos físicos do computador,
o equipamento.
 Software: São os programas de computadores.
Conceituação
 Firmware: Conhecido como software embarcado, trata-se de um
software que controla o hardware diretamente.
Conceituação
 Linguagem de Máquina: - é a linguagem que o computador
entende, cujo "alfabeto" é composto apenas de "1's"e "0's"
(linguagem binária).
 Linguagem de Programação: é uma linguagem formal,
utilizando termos que se aproximam da linguagem humana, que
pode ser traduzida por programas especiais para linguagem de
máquina.
Conceituação
 Algoritmo: Lógica utilizada para criação de um programa. Nela
independe de linguagem de programação, porém as linguagens
de programação precisam usar algoritmos para implementação
de uma lógica específica.
Arquitetura do computador
De acordo com Andrew Tanenbaum a arquitetura
do computador moderno é composta por:
UCP – Unidade
Central de
Processamento
Barramento
Dispositivos de
Entrada/Saída
Memória
Conexões
externas
Teclado
Mouse
Monitor
Impressora
...
Arquitetura do computador
 A parte física do computador é chamada de
hardware, e é composta por:
 Uma UCP,
 Memória,
 Dispositivos de E/S.
 O barramento faz a ligação desses componentes.
Lógica
 Lógica – modo de raciocinar: as soluções dos
problemas utilizam a lógica para serem criadas, ou
seja, elas são ordenadas de uma forma que sejam
possíveis de ser realizadas e de uma maneira que
essa forma seja a mais adequada para o que se
deseja obter.
Lógica de Programação
 Alguns procedimentos para solucionar certos problemas foram
padronizados, esses são:
 Estrutura sequencial – indica que uma operação deve ser
realizada em sequência à outra, ou seja, determina a ordem
com que as operações devam ser realizadas;
Lógica de Programação
 Estrutura de decisão – indica que, em um determinado
momento, será necessário tomar uma decisão sobre qual
operação realizar de acordo com um determinado critério;
Lógica de Programação
 Estrutura de repetição – indica que determinadas operações
devem ser repetidas uma determinada quantidade de vezes.
Linguagens
 O conjunto de instruções, que será executado pelo
processador, é chamado de linguagem de máquina.
Linguagens
 As linguagens de programação são classificadas de
acordo com a similaridade que esta linguagem tem com
a linguagem de máquina.
Mais parecida
com linguagem
de programação.
Mais parecida
com linguagem
de máquina.
Linguagens
 Um computador compreende apenas linguagens compostas
por números 0’s e 1’s.
 Então imagina criar um programa utilizando apenas esses
números, isso seria extremamente complicado.
Linguagens
 Por esse motivo foi necessário a criação de um código que
relacionasse a linguagem de máquina a uma linguagem mais
fácil de ser compreendida.
 Dessa forma, foi criada uma linguagem de montagem
(chamada Assembly) que é um código que tem uma
instrução alfanumérica para cada instrução numérica em
linguagem de máquina.
Linguagem de baixo nível
 Para que um programa criado na linguagem
Assembly possa ser entendido pelo computador, é
necessário que seu código seja traduzido para o
código de máquina.
Linguagem de baixo nível
 Esta tradução é realizada por um programa
chamado Assembler.
Código em
linguagem de
assembly.
Assembler
Código em
linguagem de
máquina.
Linguagem de baixo nível
 Exemplo 2:
;exemplo2
.model small
.stack
.code
mov ah,2h ;move o valor 2h para o registrador ah
mov dl,2ah ;move o valor 2ah para o registrador dl
;(é o valor ASCII do caractere *)
int 21h ;interrupção 21h
mov ah,4ch ;função 4ch, sai para o sistema operacional int
21h ;interrupção 21h
end ;finaliza o programa
 Este programa imprime o caracter * na tela.
Linguagem de baixo nível
 A linguagem Assembly é muito próxima da linguagem de
máquina, por esse motivo é considerada uma linguagem de
baixo nível.
 Cada processador apresenta uma linguagem de Assembly.
Dessa forma, quando for utilizado um programa em
processador não compatível com o qual foi escrito
inicialmente, é necessário que o código tenha que ser
refeito.
Linguagem de baixo nível
 Isso é chamado de portabilidade.
Linguagem de Programação
 A implementação de programas na linguagem de baixo nível
ainda é muito complexa. Então para aumentar a
produtividade dos programadores foram criadas as
linguagens de programação de alto nível.
Linguagem de Programação
 São linguagens que independem do processador,
apresentam um código mais elaborado, contemplam
operações mais complexas e mais próximas da “lógica
humana”.
 Entretanto, algumas dependem do sistema operacional a ser
executado.
Tradutor
 Para serem processadas por um processador as
linguagens fazem o uso de um tradutor para a
linguagem de máquina, chamado de COMPILADOR
ou INTERPRETADOR.
Compilador
 Como é o funcionamento do compilador?
 O compilador a partir do código em linguagem de alto nível,
chamado de código fonte, gera um arquivo com o código em
linguagem de máquina, conhecido como código-objeto.
 Esse código-objeto fica em disco e quando for o momento da
sua execução ele é carregado para a memória.
Código fonte em
linguagem de
alto nível
Compilador
Código em
linguagem de
máquina.
Compilador
 Características:
 Traduz cada instrução de uma única vez, independente de
quantas vezes o programa é executado.
 Tempo de execução mais rápido.
Interpretador
 O interpretador, diferente do compilador, não gera um
código-objeto, as instruções são traduzidas para a
linguagem de máquina em tempo de execução.
 Características:
 Maior tempo de execução.
 Não gera instruções que não serão utilizadas.
Código fonte em
linguagem de alto
nível
Interpretador
Memória
Tradução de cada
instrução na fase de
execução do programa
Linguagens de Baixo Nível
 Linguagens de baixo nível : são linguagens voltadas para a
máquina, isto é, são escritas usando as instruções do
microprocessador do computador.
 Vantagens:
maior velocidade de processamento
menor espaço de armazenamento
 Desvantagens:
pouca portabilidade
difícil programação
Linguagens de Alto Nível
 Linguagens de alto nível: são linguagens voltadas para o ser
humano.
◦ Vantagens:
 Por serem compiladas ou interpretadas, tem maior
portabilidade.
 A programação torna-se mais fácil.
◦ Desvantagens:
 Em geral, as rotinas geradas (em linguagem de máquina) são
mais genéricas e portanto mais complexas e por isso são mais
lentas e ocupam mais memória.
 Exemplos de linguagem de alto nível: Pascal, C, Cobol, Java, entre
outras. Além disso, os códigos são portáveis.
JAVA
 Como mencionado, algumas linguagens de
programação ficam dependentes ao SO em que o
código foi escrito.
 A linguagem Java permite uma portabilidade maior que
as outras linguagens de programação de alto nível.
JAVA
 Isso se deve ao fato de não gerar um código objeto
executável, em vez disso ele gera um código “pseudoexecutável”, chamado de BYTECODE.
JAVA
 Para que esse código possa ser executado em qualquer SO,
é necessário que mais uma camada de software esteja
instalada.
JAVA
 Essa camada funciona como um SO genérico, e essa
camada é chamada de Máquina Virtual Java, ou Java Virtual
Machine (JVM).
 Essa JVM faz a tradução dos bytecodes escritos em Java
para o código executável daquele SO, isso faz com que
qualquer programa escrito em Java possa ser executado em
qualquer SO que tenha a JVM devidamente instalada.
JAVA
 Máquina A
Código
fonte Java
Compilador
Bytecode
Assembly
JVM
Memória
 Máquina B
Tradução de cada
instrução na fase de
execução do programa
Linguagem Natural
 Não se pode fazer um programa para um
computador na linguagem natural, ou seja, do jeito
que escrevemos. Pois a linguagem natural é dirigida
para orientar pessoas e não máquinas, quem faz
este papel é a linguagem de programação.
 As linguagens de programação devem apresentar
algumas características, que são:
Características da Linguagem
 Rigidez sintática: Um compilador consegue fazer traduções
sobre um idioma, com construções muito bem definidas.
Características da Linguagem
 Rigidez semântica: O computador não pode lidar com
ambigüidades, dessa forma, um programador deve exprimir sua
intenção de forma exata.
◦ Exemplo: A pessoa ouviu o barulho da janela.
◦ Pode ser interpretado pelo menos de três maneiras:
 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.
 Qualquer máquina seria incapaz de interpretar o que realmente
está acontecendo, mesmo que o contexto pudesse ajudar. Por
isso, a rigidez semântica é extremamente importante.
Exercícios
O que é um algoritmo?
O que significa dizer que um algoritmo precisa ser correto, eficiente e
elegante?
3. Comente sobre os principais problemas na elaboração de um
algoritmo.
4. Qual a diferença entre programa e aplicação?
5. Como é a arquitetura do computador moderno?
6. Comente sobre lógica e os procedimentos para solucionar problemas.
7. Qual a diferença entre linguagem de baixo nível e de alto nível?
8. O que é linguagem de máquina?
9. O que é portabilidade?
10. Qual a diferença entre compilador e interpretador, cite suas vantagens
e desvantagens?
11. Qual a diferença do método de compilação Java?
12. Comente sobre as características que uma linguagem de programação
deve apresentar.
1.
2.
Atividade em grupo.
1. O grupo tem em mãos duas jarras: uma com capacidade para quatro litros; e outra,
com capacidade para três litros. As jarras não possuem marcações intermediárias, de
forma que, se qualquer uma das jarras não estiver completamente cheia, não será
possível saber quanta água haverá dentro dela. Existe uma torneira disponível para
utilização do grupo e um ralo que permite que a água seja jogada fora. As jarras
podem ser manipuladas das seguintes formas:
a. Encher completamente uma jarra, utilizando a torneira;
b. Passar a água de uma jarra para outra; e
c. Esvaziar completamente uma jarra, jogando a água que estiver dentro dela no ralo.

O objetivo do grupo é indicar como as jarras devem ser manipuladas, de modo que,
ao final da manipulação, qualquer uma das jarras contenha exatamente dois litros de
água.
Atividade em grupo.
2. Um canoeiro deseja levar seus três pertences de um lado do rio para o outro, porém
a canoa só consegue transportar o canoeiro e um pertence de cada vez. Os pertences
em questão são uma cabra, um maço de couve e um lobo. Indique como o canoeiro
pode fazer para transportar todos os seus pertences para o outro lado, levando em
consideração que:
a. Se a cabra ficar sozinha com a couve, sem o canoeiro por perto, ela come a couve;
b. Se o lobo ficar com a cabra, sem o canoeiro por perto, ele como a cabra.
Links.

Alguns sites com jogos de raciocínio lógico e que podem ser usados como apoio para
a aula:

1. Jogo de travessia do rio, disponível em
http://www.profcardy.com/desafios/aplicativos.php?id=24

2. Jogo da velha, disponível em
http://www.cardiol.br/jogos/velha/

3. Jogo de raciocínio lógico em 3D (ligar cores na superfície de um cubo), disponível
em
http://www.centrodejogos.com.br/raciocinio/logica-3d-121.html

4. Teste de Einstein (de acordo com as diretrizes, descobrir a composição correta),
disponível em
http://rachacuca.com.br/teste-de-einstein/
Download

Introdução - WordPress.com