Sei sulla pagina 1di 44

Programao de Computadores

INTRODUO AOS ALGORITMOS E PROGRAMAO


DE COMPUTADORES PARTE 1
Renato Dourado Maia
Instituto de Cincias Agrrias
Universidade Federal de Minas Gerais

Programas e Programao
Quando vocs utilizam um computador, sempre executam
um programa.
Para que um computador faa algo, ele precisa de instrues precisas.
Os humanos (apenas os humanos?) escrevem e utilizam programas para dizer ao computador exatamente o que fazer.

Algumas pessoas dizem que a programao, no futuro, ser to importante quanto ler e escrever!

18/02/14

Programao de Computadores Renato Dourado Maia

2/44

Programas e Programao

The great thing about computers is that they do exactly what you
tell them. The terrible thing about computers is that they do exactly
what you tell them.
18/02/14

Programao de Computadores Renato Dourado Maia

3/44

Programas e Programao

18/02/14

Programao de Computadores Renato Dourado Maia

4/44

Programas e Programao

18/02/14

Programao de Computadores Renato Dourado Maia

5/44

Programas e Programao
Programar basicamente construir programas, que so
formulaes concretas de algoritmos abstratos, baseados
em representaes e estruturas especficas de dados.
A programao estruturada a arte ou tcnica de construir e formular algoritmos de forma sistemtica.
Algoritmos, programas, estruturas de dados?

18/02/14

Programao de Computadores Renato Dourado Maia

6/44

O que um Programa?

18/02/14

Programao de Computadores Renato Dourado Maia

7/44

Programa
Um programa uma sequncia de instrues para o
computador, escrita em uma linguagem de programao, que normalmente similar lngua inglesa,
porm muito mais simples e muito mais rigorosa.
Programming demands significantly higher standard of accuracy.
Things dont simply have to make sense to another human being,
they must make sense to a computer. Donald Knuth

18/02/14

Programao de Computadores Renato Dourado Maia

8/44

Programas e Estruturas de Dados


As estruturas de dados podem ser entendidas como mtodo ou meio para organizar os dados de uma forma que o
seu acesso e a sua modificao sejam facilitados.
Programa = algoritmo(s) + estruturas de dados, utilizando-se uma forma de expresso que possa ser entendida por um computador.

18/02/14

Programao de Computadores Renato Dourado Maia

9/44

Algoritmo
O conceito central da programao e da computao o
de algoritmo.
A palavra algoritmo vem de algoritmi, forma latina do
nome do matemtico iraniano Abu Abdullah Mohammad
Ibn Musa al-Khawarizmi, que viveu no sculo XVII.
O termo algoritmo utilizado em diversas reas alm da
computao, tais como administrao, engenharia, dentre
outras.
Um algoritmo , essencialmente, um mtodo para a resoluo de um problema.
18/02/14

Programao de Computadores Renato Dourado Maia

10/44

Algoritmo
H diferentes definies para o que um algoritmo:
Algoritmo uma sequncia de passos que visa atingir um objetivo bem definido.
Algoritmo a descrio de uma sequncia de passos que deve
ser seguida para a realizao de uma tarefa.
Algoritmo uma sequncia finita de instrues ou operaes cuja execuo, em tempo finito, resolve um problema computacional, qualquer que seja a sua instncia.

18/02/14

Programao de Computadores Renato Dourado Maia

11/44

Algoritmo
H diferentes definies para o que um algoritmo:
Algoritmo so regras formais para a obteno de um resultado
ou da soluo de um problema, englobando formas de expresses aritmticas.
Ao um acontecimento que, a partir de um estado inicial, aps um perodo de tempo finito, produz um estado final previsvel e bem definido. Portanto, um algoritmo a descrio de um
conjunto de comandos que, obedecidos, resultam numa sucesso finita de aes.

18/02/14

Programao de Computadores Renato Dourado Maia

12/44

Exemplos de Algoritmos?

18/02/14

Programao de Computadores Renato Dourado Maia

13/44

Programas
Programas tipicamente processam dados de entrada e
produzem dados de sada.
Entrada

18/02/14

Programa

Programao de Computadores Renato Dourado Maia

Sada

14/44

Linguagens de Programao
Uma linguagem de programao uma linguagem artificial com sintaxe e semntica bem definidas que utilizada
para escrever programas.
mais tcnica do que as linguagens naturais e menos tcnica do que a linguagem nativa dos computadores (linguagem de
mquina).

18/02/14

Programao de Computadores Renato Dourado Maia

15/44

Linguagens de Programao
As linguagens de programao semelhantes linguagem
de mquina so conhecidas como linguagens de baixo nvel.
Escrever programas na linguagem de mquina uma tarefa pouco intuitiva e complicada para ser realizada por seres humanos.
Para facilitar a programao de computadores, existem
linguagens de alto nvel que relacionam a linguagem de
mquina a uma linguagem de compreenso mais simples.

18/02/14

Programao de Computadores Renato Dourado Maia

16/44

Linguagens de Programao
A linguagem de montagem (assembly) um cdigo com
instrues alfanumricas (ou mnemnicas) equivalentes a
cada instruo da linguagem de mquina.
A traduo de um programa escrito em linguagem assembly realizada por meio da utilizao de um programa chamado assembler (ou montador).
Cdigo em
linguagem de
montagem

18/02/14

Assembler

Programao de Computadores Renato Dourado Maia

Cdigo em
linguagem de
mquina

17/44

Linguagens de Programao
A linguagem de montagem uma linguagem de baixo nvel, especfica para cada processador (cada um tem o seu
repertrio de instrues), o que faz com que o cdigo no
seja portvel.
A implementao de programas em linguagem de montagem uma tarefa complexa e exige conhecimentos sobre
o processador.
As linguagens de alto nvel so independentes do processador, so mais elaboradas e contemplam operaes mais
complexas e mais prximas da lgica humana.
18/02/14

Programao de Computadores Renato Dourado Maia

18/44

Linguagens de Programao
Para serem executados por um processador, os comandos
de linguagem de alto nvel precisam ser traduzidos para a
linguagem de mquina.
Essa traduo pode ser feita por um programa compilador
ou por um programa interpretador.
A partir de um arquivo com o cdigo em linguagem de alto nvel
o cdigo-fonte, o compilador gera um arquivo contendo o cdigo
em linguagem de mquina o cdigo-objeto, que ser utilizado
para a gerao de um arquivo executvel por um link-editor.

18/02/14

Programao de Computadores Renato Dourado Maia

19/44

Linguagens de Programao
Essa traduo pode ser feita por um programa compilador
ou por um programa interpretador.
O interpretador realiza a mesma tarefa, mas a execuo no envolve a gerao de um arquivo executvel: ele traduz as instrues em linguagem de montagem em tempo de execuo.

18/02/14

Programao de Computadores Renato Dourado Maia

20/44

Compiladores
Compiladores so programas que traduzem programas escritos em linguagem de programao para programas equivalentes escritos em linguagem de mquina.

ProgramaFonte

18/02/14

Compilador

Programa-Objeto

Programao de Computadores Renato Dourado Maia

21/44

Link-Editores
O programa-objeto nem sempre est pronto para ser executado.
Pode ser necessrio incluir outros trechos de cdigo:

Bibliotecas.
Subprogramas.

O programa executvel montado por um programa chamado link-editor ou linking-loader.


O compilador normalmente chama o link-editor automaticamente.

18/02/14

Programao de Computadores Renato Dourado Maia

22/44

Link-Editores
ProgramaObjeto 1

.
.
.

Programa
Executvel

Link-Editor

ProgramaObjeto N

Biblioteca

18/02/14

Biblioteca

Programao de Computadores Renato Dourado Maia

23/44

Interpretadores
Os interpretadores simulam uma mquina virtual.
O programa-fonte lido, entendido e as instrues so executadas imediatamente.

Entrada

Interpretador

Sada

ProgramaFonte

18/02/14

Programao de Computadores Renato Dourado Maia

24/44

Compiladores e Interpretadores
Cdigo em
linguagem de
alto nvel

Cdigo em
linguagem de
alto nvel

Compilador

Cdigo em
linguagem de
mquina

Interpretador

Cdigo em
linguagem de
mquina

Traduo de cada
instruo em tempo de execuo

18/02/14

Programao de Computadores Renato Dourado Maia

25/44

Esquemas Hbridos
O compilador gera cdigo para uma mquina virtual (cdigo pseudo-executvel).
A mquina virtual executada separadamente, lendo o
pseudo-cdigo e interpretando-o.
ProgramaFonte

Entrada
Interpretador

Compilador

18/02/14

Sada

ProgramaObjeto

Programao de Computadores Renato Dourado Maia

26/44

Programas de Computador
A programao utilizando linguagens de alto nvel mais
simples, facilitando a implementao de programas mais
elaborados e capazes de atenderem a demandas mais
complexas.
Os cdigos escritos em linguagens de alto nvel so portveis, ou seja, independentes da plataforma, desde que seja
realizada uma nova compilao do cdigo-fonte (no caso
das linguagens compiladas).
Existem diversas linguagens de alto nvel:
Pascal, C, Java, Python...

18/02/14

Programao de Computadores Renato Dourado Maia

27/44

Programas de Computador
A realizao de algumas operaes em linguagem de
mquina bastante complexa.
Para facilitar essas operaes, foram criados os sistemas
operacionais.
Um sistema operacional representa uma camada entre o
hardware e o software (mquina virtual).
A mquina virtual mais simples de ser utilizada do que a mquina real.
Os sistemas operacionais gerenciam os recursos da mquina, evitando que o programador os utilize de forma indevida.

18/02/14

Programao de Computadores Renato Dourado Maia

28/44

Programas de Computador
Os sistemas operacionais fornecem uma interface (chamadas ao sistema) que pode ser utilizada pelos programas.
Os compiladores utilizam essa interface em lugar de implementarem operaes complexas.
Chamadas ao sistema encontradas pelo compilador no
cdigo-fonte em linguagem de alto nvel so transformadas em referncias no cdigo-objeto em linguagem de
mquina.

18/02/14

Programao de Computadores Renato Dourado Maia

29/44

Programas de Computador
Numa segunda etapa da compilao, o compilador liga o
cdigo do programa ao cdigo do sistema operacional (ligao de cdigo ou linking).
A integrao de compiladores e sistemas operacionais torna o cdigo-objeto portvel para qualquer mquina que
utilize o mesmo sistema operacional:
O cdigo fica dependente do sistema operacional, e no do processador!

Para executar um mesmo programa em outro sistema operacional, o cdigo-fonte deve ser compilado novamente.
18/02/14

Programao de Computadores Renato Dourado Maia

30/44

Programas de Computador
Cdigo em
linguagem de
alto nvel

Cdigo em
linguagem de
mquina

Compilador
Etapa I

Memria

Cdigo-objeto
executvel

Compilador
Etapa II

Biblioteca do
sistema
operacional

18/02/14

Programao de Computadores Renato Dourado Maia

31/44

Estruturao de Algoritmos
As linguagens de programao de alto nvel so mais simples do que a linguagem de mquina, mas ainda assim podem parecer complexas, especialmente para iniciantes.
O principal problema reside no fato de que as pessoas no
esto acostumadas a construir algoritmos, ou seja, a expressar o raciocnio de forma organizada, padronizada e
estruturada.
importante destacar que, diferentemente da linguagem
natural, as linguagens de programao so dirigidas a uma mquina, e no a pessoas.
18/02/14

Programao de Computadores Renato Dourado Maia

32/44

Estruturao de Algoritmos
Mquinas no podem tomar decises com base em premissas, no podem escolher alternativas, no podem corrigir comandos mal redigidos, etc.
As pessoas so capazes de fazer isso instintiva e intuitivamente.
Assim, a linguagem de programao deve possuir algumas
caractersticas que no so inerentes linguagem natural,
que no apropriada para a escrita de algoritmos:
Rigidez sinttica: as construes devem ser bem definidas.
Rigidez semntica: no podem existir ambiguidades.

18/02/14

Programao de Computadores Renato Dourado Maia

33/44

Linguagens de Programao

18/02/14

Programao de Computadores Renato Dourado Maia

34/44

Estruturao de Algoritmos Fluxogramas


Fluxogramas representam algoritmos de forma grfica,
sendo formados por caixas que contm as instrues a
serem executadas.
As caixas so ligadas por setas que indicam o fluxo das
aes.
Algumas caixas especializadas indicam a possibilidade de
o fluxo seguir caminhos distintos, dependendo de certas
situaes/condies que podem ocorrer durante a execuo do algoritmo.
H representaes para o incio e o fim do algoritmo.
18/02/14

Programao de Computadores Renato Dourado Maia

35/44

Estruturao de Algoritmos Fluxogramas


Fluxograma para escolher o maior entre dois nmeros inteiros distintos:
Incio
leia Num1, Num2
S

Num1 > Num2

Maior Num1

N
Maior Num2

escreva Maior
Fim
18/02/14

Programao de Computadores Renato Dourado Maia

36/44

Estruturao de Algoritmos Fluxogramas


Vantagens da representao por fluxogramas:
til para a apresentao de algoritmos considerando um alto
nvel de abstrao.
Facilita a compreenso do funcionamento do algoritmo, mesmo
para leigos.
As pessoas se adaptam bem ao desenvolvimento de algoritmos
utilizando essa representao.

Desvantagens da representao por fluxogramas:


pouco prtica, especialmente para a correo de erros.
Torna a construo de algoritmos complexos trabalhosa.

18/02/14

Programao de Computadores Renato Dourado Maia

37/44

Estruturao de Algoritmos Pseudocdigo


O pseudocdigo uma forma de representao de algoritmos que tenta eliminar as desvantagens da implementao direta em linguagem de programao.
Utilizando essa representao possvel elaborar um cdigo menos dependente das peculiaridades das linguagens
de programao e dos compiladores.

18/02/14

Programao de Computadores Renato Dourado Maia

38/44

Estruturao de Algoritmos Pseudocdigo


O grau de rigidez sinttica intermedirio entre as linguagens natural e de programao.
O pseudocdigo deve manter a rigidez semntica, funcionando como uma linguagem intermediria entre a linguagem natural e a linguagem de programao.

18/02/14

Programao de Computadores Renato Dourado Maia

39/44

Estruturao de Algoritmos Pseudocdigo


Aps a elaborao do algoritmo em pseudocdigo, necessria a sua converso para uma linguagem de programao para que ele possa ser compilado e executado, ou
interpretado.
O pseudocdigo independente do compilador e pode ser
traduzido de uma forma quase direta para diversas linguagens de programao.
No Brasil, o pseudocdigo mais conhecido o Portugol.
O Portugol bastante simples e atende s necessidades de
rigidez sinttica e semntica.
18/02/14

Programao de Computadores Renato Dourado Maia

40/44

Lembrando: Por que Python?

Quem quer tentar resumir?


18/02/14

Programao de Computadores Renato Dourado Maia

41/44

18/02/14

Programao de Computadores Renato Dourado Maia

42/44

Finalizando
Programa em Python 2 para escolher o maior entre dois
nmeros inteiros distintos:
Num1 = int(raw_input('Primeiro:'))
Num2 = int(raw_input('Segundo:'))
if Num1 > Num2:
Maior = Num1
else:
Maior = Num2
print(Maior)

Vamos testar esse programa no Idle...


18/02/14

Programao de Computadores Renato Dourado Maia

43/44

That's All Folks!

18/02/14

Programao de Computadores Renato Dourado Maia

44/44

Potrebbero piacerti anche