Você está na página 1de 43

Apostila

Algoritmos e Programao
- Parte 1 -





Profa. Flvia Pereira de Carvalho












Fevereiro de 2013

Sumrio
Pgina
1 INTRODUO................................................................................................................................................................... 4
2 FORMAS DE REPRESENTAO DE ALGORITMOS ............................................................................................... 6
2.1 DIAGRAMA NASSI-SHNEIDERMAN ................................................................................................................................. 6
2.2 FLUXOGRAMA ................................................................................................................................................................ 7
2.3 PORTUGUS ESTRUTURADO ........................................................................................................................................... 7
3 CONCEITOS IMPORTANTES ........................................................................................................................................ 9
3.1 CONSTANTES .................................................................................................................................................................. 9
3.2 VARIVEIS ..................................................................................................................................................................... 9
3.3 ATRIBUIO ................................................................................................................................................................. 10
4 INSTRUO ESCREVER .............................................................................................................................................. 11
5 OPERADORES ARITMTICOS ................................................................................................................................... 12
6 PROGRAMAS E PROGRAMAO ............................................................................................................................. 13
7 LINGUAGEM DO COMPUTADOR ............................................................................................................................. 14
8 LINGUAGENS DE ALTO NVEL ................................................................................................................................. 15
8.1 LINGUAGEM PYTHON ................................................................................................................................................... 16
9 INSTALANDO PYTHON ................................................................................................................................................ 17
9.1 USANDO O INTERPRETADOR PYTHON ........................................................................................................................... 18
10 CONVERSO DO PROGRAMA-FONTE .................................................................................................................. 20
10.1 PROGRAMA COMPILADO ............................................................................................................................................ 20
10.2 PROGRAMA INTERPRETADO ....................................................................................................................................... 20
11 SOFTWARES QUE VOC PRECISA TER OU CONHECER ................................................................................. 21
11.1 SISTEMA OPERACIONAL ............................................................................................................................................. 21
11.2 EDITOR DE TEXTOS .................................................................................................................................................... 21
11.3 COMPILADOR/INTERPRETADOR .................................................................................................................................. 21
12 CUIDADOS AO DIGITAR PROGRAMAS EM PYTHON ....................................................................................... 22
13 COMENTRIOS EM PYTHON .................................................................................................................................. 22
13.1 COMENTRIO DE UMA LINHA .................................................................................................................................... 23
13.2 COMENTRIO DE VRIAS LINHAS .............................................................................................................................. 23
14 TIPOS DE DADOS ......................................................................................................................................................... 24
14.1 CONVERSO DE TIPOS NUMRICOS ............................................................................................................................ 25
14.2 MARCADORES E FORMATAO DE NMEROS ............................................................................................................ 26
15 INSTRUO LER ......................................................................................................................................................... 28
16 HORIZONTALIZAO DE FRMULAS (LINEARIZAO) .............................................................................. 28
17 FUNES NUMRICAS PREDEFINIDAS ............................................................................................................... 29
17.1 FUNES MATEMTICAS ........................................................................................................................................... 29
17.2 FUNES DE NMEROS RANDMICOS ....................................................................................................................... 30
18 EXPRESSES ARITMTICAS ................................................................................................................................... 31
19 ALGORITMOS COM SELEO ................................................................................................................................ 31
19.1 ESTRUTURA DE SELEO ANINHADA......................................................................................................................... 32
19.2 ESTRUTURA DE SELEO CONCATENADA.................................................................................................................. 33
20 OPERADORES RELACIONAIS .................................................................................................................................. 34
21 SELEO EM PYTHON .............................................................................................................................................. 35
21.1 FORMA SIMPLES: IF .................................................................................................................................................... 35
21.2 FORMA COMPOSTA: IF - ELSE ..................................................................................................................................... 36
22 OPERADORES LGICOS ........................................................................................................................................... 37
Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
3
22.1 EXPRESSES LGICAS E PRIORIDADES DAS OPERAES ............................................................................................ 38
23 RESPOSTAS DOS EXEMPLOS DESTA APOSTILA ............................................................................................... 40

Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
4
1 Introduo
Nesta apostila apresentado o estudo de Lgica de Programao e, para isto, importante ter uma
viso geral do processo de desenvolvimento de programas (softwares), visto que o objetivo final ter
um bom embasamento para a prtica da programao de computadores [MAR03].
So apresentados contedos tericos com exemplos e exerccios que tambm so executados na
prtica utilizando a Linguagem de Programao Python.
Para o desenvolvimento de qualquer programa, deve-se seguir basicamente as seguintes etapas,
conhecidas como Ciclo de Vida do Sistema [BUF03]:

1) Estudo da viabilidade do software (Estudos Iniciais)
2) Anlise detalhada do sistema (Projeto Lgico)
3) Projeto preliminar do sistema (Projeto Fsico)
4) Projeto detalhado do sistema (Algoritmo)
5) Implementao ou Codificao do Sistema (na Linguagem de Programao escolhida)
6) Testes do sistema
7) Instalao e Manuteno do Sistema

No desenvolvimento de um sistema, quanto mais tarde um erro detectado, mais dinheiro e
tempo se gasta para repar-lo. Assim, a responsabilidade do programador maior na criao dos
algoritmos do que na sua prpria implementao, pois quando bem projetados no se perde tempo
tendo que refaz-los, reimplant-los e retest-los, assegurando assim um final feliz e no prazo previsto
para o projeto [BUF03].
Pode-se encontrar, na literatura em informtica, vrias formas de representao das etapas que
compem o ciclo de vida de um sistema. Essas formas de representao podem variar tanto na
quantidade de etapas quanto nas atividades a serem realizadas em cada fase [MAR03].
Como pode-se observar, nesse exemplo de ciclo de vida de um sistema (com sete fases)
apresentado acima, os algoritmos fazem parte da quarta etapa do desenvolvimento de um programa.
Na verdade, os algoritmos esto presentes no nosso dia-a-dia sem que saibamos, pois uma receita
culinria, as instrues de uso de um equipamento ou as indicaes de um instrutor sobre como
estacionar um carro, por exemplo, nada mais so do que algoritmos.
Um algoritmo pode ser definido como um conjunto de regras (instrues), bem definidas, para
soluo de um determinado problema. Segundo o dicionrio Michaelis, o conceito de algoritmo a
"utilizao de regras para definir ou executar uma tarefa especfica ou para resolver um
problema especfico".
A partir desses conceitos de algoritmos, pode-se perceber que a palavra algoritmo no um
termo computacional, ou seja, no se refere apenas rea de informtica. uma definio ampla que
agora que voc j sabe o que significa, talvez a utilize no seu cotidiano naturalmente.
Na informtica, o algoritmo o "projeto do programa", ou seja, antes de se fazer um programa
(software) na Linguagem de Programao desejada (Python, C, Java etc.) deve-se fazer o algoritmo do
programa. Ento um programa, um algoritmo escrito numa forma compreensvel pelo computador
(atravs de uma Linguagem de Programao), onde todas as aes a serem executadas devem ser
especificadas nos mnimos detalhes e de acordo com as regras de sintaxe
1
da linguagem escolhida.

1
Sintaxe: segundo o dicionrio Aurlio, a parte da gramtica que estuda a disposio das palavras na frase e a das frases
no discurso, bem como a relao lgica das frases entre si. Cada Linguagem de Programao tem a sua sintaxe (forma de
escrever as instrues, os comandos) que deve ser seguida corretamente para que o programa funcione. O conjunto de
palavras e regras que definem o formato das sentenas vlidas chama-se de sintaxe da linguagem.
Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
5
Um algoritmo no a soluo de um problema, pois, se assim fosse, cada problema teria
apenas um algoritmo possvel. Um algoritmo um 'caminho' para a soluo de um problema e, em
geral, existem muitos caminhos que levam a uma soluo satisfatria, ou seja, para resolver o mesmo
problema pode-se obter vrios algoritmos diferentes.
Nesta apostila so apresentados os passos bsicos e as tcnicas para a construo de algoritmos
atravs de trs mtodos para sua representao, que so alguns dos mais conhecidos. O objetivo ao
final da apostila, que voc tenha adquirido capacidade de transformar qualquer problema em um
algoritmo de boa qualidade, ou seja, a inteno que voc aprenda a Lgica de Programao dando
uma base terica e prtica suficientemente boa, para que voc domine os algoritmos e esteja habilitado
a aprender uma Linguagem de Programao posteriormente [BUF03].
Para resolver um problema no computador necessrio que seja primeiramente encontrada uma
maneira de descrever este problema de uma forma clara e precisa. preciso encontrar uma sequncia
de passos que permitam que o problema possa ser resolvido de maneira automtica e repetitiva. Esta
sequncia de passos chamada de algoritmo [GOM04].
A noo de algoritmo central para toda a computao. A criao de algoritmos para resolver
os problemas uma das maiores dificuldades dos iniciantes em programao em computadores
[GOM04].
Uma das formas mais eficazes de aprender algoritmos atravs da execuo de muitos
exerccios. Veja na Tabela 1 algumas dicas de como aprender e como no aprender algoritmos:

Algoritmos no se aprende Algoritmos se aprende
Copiando algoritmos Construindo algoritmos
Estudando algoritmos prontos Testando algoritmos
Tabela 1: Dicas de como aprender e como no aprender algoritmos


O aprendizado da Lgica essencial para a formao de um bom programador, servindo como
base para o aprendizado de todas as Linguagens de Programao, estruturadas ou no. De um modo
geral esses conhecimentos sero de supra importncia, pois ajudaro no cotidiano, desenvolvendo um
raciocnio rpido [COS04].

Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
6
2 Formas de Representao de Algoritmos
Os algoritmos podem ser representados de vrias formas, como por exemplo:

a) Atravs de uma lngua (portugus, ingls etc.): forma utilizada nos manuais de instrues, nas
receitas culinrias, bulas de medicamentos etc.
b) Atravs de uma linguagem de programao (Python, C, Delphi etc.): esta forma utilizada por
alguns programadores experientes, que "pulam" a etapa do projeto do programa (algoritmo) e passam
direto para a programao em si.
c) Atravs de representaes grficas: so bastante recomendveis, j que um "desenho" (diagrama,
fluxograma etc.) muitas vezes substitui, com vantagem, vrias palavras.

Cada uma dessas formas de representar um algoritmo tem vantagens e desvantagens, cabe
pessoa escolher a forma que melhor lhe convir. Nesta disciplina sero apresentadas trs formas de
representao de algoritmos (que so algumas das mais utilizadas), so elas:

- Diagrama de Nassi-Shneiderman (Diagrama de Chapin)
- Fluxograma (Diagrama de Fluxo)
- Portugus Estruturado (Pseudocdigo, Portugol ou Pseudolinguagem)

No existe consenso entre os especialistas sobre qual a melhor maneira de representar um
algoritmo. Nesta apostila ser incentivada a utilizao do Diagrama Nassi-Shneiderman, mais
conhecido como Diagrama de Chapin (l-se chapn), por ser uma das formas mais didticas de
aprender e representar a lgica dos problemas. Mas, fica a critrio de cada um escolher a forma que
achar mais conveniente ou mais fcil de entender. Nos prximos captulos so apresentadas breves
explicaes sobre cada uma dessas trs formas de representar algoritmos e alguns exemplos.


2.1 Diagrama Nassi-Shneiderman

Os Diagramas Nassi-Shneiderman, tambm conhecidos como Diagramas de Chapin, surgiram nos
anos 70 [YOU04] [SHN03] [CHA02] [NAS04] como uma maneira de ajudar nos esforos da
abordagem de programao estruturada. Um tpico diagrama Nassi-Shneiderman apresentado na
Figura 1 abaixo. Como pode-se observar, o diagrama fcil de ler e de entender, cada "desenho"
representa uma ao (instruo) diferente.


Figura 1: Exemplo de Diagrama Nassi-Shneiderman
Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
7
A ideia bsica deste diagrama representar as aes de um algoritmo dentro de um nico
retngulo, subdividindo-o em retngulos menores, que representam os diferentes blocos de seqncia
de aes do algoritmo. Para saber mais sobre o histrico desses diagramas e conhecer os seus criadores
acesse o site: http://www.cs.umd.edu/hcil/members/bshneiderman/nsd/. Para ter acesso ao primeiro
artigo elaborado pelos autores do Diagrama de Chapin, escrito em 1973, acesse o seguinte endereo
onde voc pode fazer o download do artigo: http://fit.faccat.br/~fpereira/p12-nassi.pdf.


2.2 Fluxograma

Os Fluxogramas ou Diagramas de Fluxo so uma representao grfica que utilizam formas
geomtricas padronizadas ligadas por setas de fluxo, para indicar as diversas aes (instrues) e
decises que devem ser seguidas para resolver o problema em questo.
Eles permitem visualizar os caminhos (fluxos) e as etapas de processamento de dados possveis
e, dentro destas, os passos para a resoluo do problema. A seguir, na Figura 2, apresentado um
exemplo de fluxograma [GOM04] [MAR03].



Figura 2: Exemplo de Fluxograma



2.3 Portugus Estruturado

O Portugus Estruturado uma forma especial de linguagem bem mais restrita que a Lngua
Portuguesa e com significados bem definidos para todos os termos utilizados nas instrues
(comandos).
Essa linguagem tambm conhecida como Portugol (juno de Portugus com Algol [ALG96]
[PRO04]), Pseudocdigo ou Pseudolinguagem. O Portugus Estruturado na verdade uma
simplificao extrema da lngua portuguesa, limitada a pouqussimas palavras e estruturas que tm
significado pr-definido, pois deve-se seguir um padro de escrita. Emprega uma linguagem
intermediria entre a linguagem natural e uma linguagem de programao, para descrever os
algoritmos.
A sintaxe do Portugus Estruturado no precisa ser seguida to rigorosamente quanto a sintaxe
de uma linguagem de programao, j que o algoritmo no ser executado como um programa
[TON04].

Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
8
Embora o Portugus Estruturado seja uma linguagem bastante simplificada, ela possui todos os
elementos bsicos e uma estrutura semelhante de uma linguagem de programao de computadores.
Portanto, resolver problemas com portugus estruturado pode ser uma tarefa to complexa quanto a de
escrever um programa em uma linguagem de programao qualquer s no to rgida quanto a sua
sintaxe, ou seja, o algoritmo no deixa de funcionar porque esquecemos de colocar um ';' (ponto-e-
vrgula) por exemplo, j um programa no funcionaria. A Figura 3 apresenta um exemplo de algoritmo
na forma de representao de portugus estruturado.



Figura 3: Exemplo de Portugus Estruturado



Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
9
3 Conceitos Importantes
Neste captulo so apresentados e explicados trs conceitos fundamentais para a construo de
algoritmos, so eles: Constante, Varivel e Atribuio.


3.1 Constantes

So chamadas de constantes, as informaes (os dados) que no variam com o tempo, ou seja,
permanecem sempre com o mesmo contedo, um valor fixo (invarivel). Como exemplos de
constantes pode-se citar: nmeros, letras, palavras, frases.


3.2 Variveis

O bom entendimento do conceito de varivel fundamental para elaborao de algoritmos e,
consequentemente de programas. Uma varivel um espao da memria do computador que se
"reserva" para guardar informaes (dados). Como o prprio nome sugere, as variveis, podem
conter valores diferentes a cada instante de tempo, ou seja, seu contedo pode variar de acordo com as
instrues do algoritmo.
As variveis so referenciadas atravs de um nome (identificador) criado pelo prprio
programador durante o desenvolvimento do algoritmo. Exemplos de nomes de variveis: produto,
idade, a, x, nota1, peso, n1. O contedo de uma varivel pode ser alterado, consultado ou apagado
quantas vezes forem necessrias durante o algoritmo. Mas, ao alterar o contedo da varivel, a
informao anterior perdida, ou seja, sempre "vale" a ltima informao armazenada na varivel.
Uma varivel armazena 'apenas' um contedo de cada vez.
Uma varivel pode ser vista como uma caixa com um rtulo (nome) colado nela, que em um
dado momento guarda um determinado objeto. O contedo desta caixa no algo fixo, permanente. Na
verdade, essa caixa pode ter seu contedo alterado diversas vezes. No exemplo abaixo, a caixa
(varivel) rotulada como FATOR, contm o valor 5. Em outro momento essa caixa poder conter
qualquer outro valor numrico. Entretanto, a cada instante, ela conter um, e somente um valor
[TON04].

Figura 4: Ilustrao de Varivel [TON04]

Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
10
3.3 Atribuio

A atribuio uma notao utilizada para atribuir um valor a uma varivel, ou seja, para armazenar um
determinado contedo em uma varivel. A operao de atribuio, normalmente, representada por
uma seta apontando para a esquerda (), mas existem outros smbolos para representar a atribuio,
como o sinal de igualdade ( = ), por exemplo. A notao a ser usada para representar a atribuio,
depende da forma de representao do algoritmo escolhida. J, nas linguagens de programao, cada
uma tem a sua notao descrita pelas regras de sintaxe da linguagem. Em Python o sinal de igualdade
que representa a atribuio. Na Tabela 2 a seguir, so apresentados alguns exemplos de atribuies
possveis:


Atribuies Possveis Exemplos
varivel constante idade 12 (l-se: idade recebe12)
varivel varivel peso valor
varivel expresso A B + C
Tabela 2: Exemplos de Atribuies



Uma observao importante a ser feita em relao a atribuies que na parte esquerda (a
que vai "receber" algo) no pode haver nada alm da varivel, ou seja, s varivel que "recebe"
algum contedo, no possvel ter um clculo, por exemplo, ou uma constante, recebendo alguma
coisa. Veja por exemplo, esta notao:

nota1 + nota2 valor (notao ERRADA!!!)

Ateno: Esta operao apresentada acima no possvel, no est correta esta atribuio!


Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
11
4 Instruo Escrever
Existem basicamente duas instrues principais em algoritmos (e em programao em geral) que so:
Escrever e Ler. Ou seja, cada Linguagem de Programao tem um comando para representar a Entrada
de Dados (leitura) e outro para a Sada de Dados (escrita). Neste captulo ser apresentada a instruo
Escrever.
A instruo Escrever utilizada quando deseja-se mostrar informaes na tela do
computador, ou seja, um comando de Sada de Dados. Resumindo: usa-se a instruo Escrever,
quando necessita-se que o algoritmo (programa) mostre alguma informao para o usurio, pois o
comando Escrever para escrever na tela do computador.
Tanto no Diagrama de Chapin quanto em Portugus Estruturado representa-se a sada de dados
atravs da prpria palavra Escrever (ou Escreva). J em Fluxogramas, a representao da sada de
dados feita atravs de uma forma geomtrica especfica [GOM04] [MAR03]. Na Linguagem Python
o comando para escrever na tela do computador o print.



Exemplos Prticos:


1) Escreva um algoritmo para armazenar o valor 20 em uma varivel X e o valor 5 em uma varivel Y.
A seguir, armazenar a soma do valor de X com o de Y em uma varivel Z. Escrever (na tela) o valor
armazenado em X, em Y e em Z. (Captulo 23: Respostas dos Exemplos Pg.40).


2) Escreva um algoritmo para armazenar o valor 4 em uma varivel A e o valor 3 em uma varivel B.
A seguir, armazenar a soma de A com B em uma varivel C e a subtrao de A com B em uma
varivel D. Escrever o valor de A, B, C e D e tambm escrever a mensagem Fim do Algoritmo.



Observao:

Note que quando deseja-se escrever alguma mensagem literalmente na tela (letra, frase, nmero
etc.), deve-se utilizar aspas para identificar o que ser escrito, pois o que estiver entre aspas no
programa, ser exatamente o que aparecer na tela do computador. Diferente de quando necessita-se
escrever o contedo de uma varivel, pois neste caso no utiliza-se aspas. Veja os exemplos abaixo:


Escrever A
Esta instruo faz com que o algoritmo escreva o contedo da varivel A na tela


Escrever A
Esta instruo faz com que o algoritmo escreva a letra A na tela


Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
12
5 Operadores Aritmticos
Muitas vezes, ao desenvolver algoritmos, comum utilizar expresses matemticas para a resoluo
de clculos. Neste captulo so apresentados os operadores aritmticos necessrios para determinadas
expresses. Veja a Tabela 3 a seguir.


Operao Smbolo Prioridade de Execuo
Multiplicao (Produto) * 1.
Diviso / 1.
Adio (Soma) + 2.
Subtrao (Diferena)
-
2.
Tabela 3: Operadores Aritmticos e Prioridades de Execuo


Nas linguagens de programao e, portanto, nos exerccios de algoritmos, as expresses
matemticas sempre obedecem s regras matemticas comuns, ou seja:
As expresses dentro de parnteses so sempre resolvidas antes das expresses fora dos
parnteses. Quando existem vrios nveis de parnteses, ou seja, um parntese dentro de outro,
a soluo sempre inicia do parntese mais interno at o mais externo (de dentro para fora).
Quando duas ou mais expresses tiverem a mesma prioridade, a soluo sempre iniciada da
expresso mais esquerda at a mais direita (da esquerda para a direita).
Desta forma, veja os seguintes exemplos e os respectivos resultados:

ExemploA: 2 + (6 * (3 + 2)) = 32

ExemploB: 2 + 6 * (3 + 2) = 32


Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
13
6 Programas e Programao
O hardware do computador, constitudo de placas e dispositivos mecnicos e eletrnicos, precisa do
software para lhe dar vida: programas, com finalidades bem determinadas, que faam o que os
usurios querem ou precisam. H programas para editar textos, para fazer clculos, jogos e milhares de
outras finalidades. Alguns programas maiores, como processadores de texto, planilhas eletrnicas e
navegadores da Internet, so de fato agrupamentos de dezenas de programas relacionados entre si.
Programas so constitudos de instrues e comandos que o processador do computador
entende, do tipo: faa isso, faa aquilo. Esses comandos devem estar representados em uma linguagem.
Talvez voc no esteja ciente de que est familiarizado com vrios tipos de linguagem. Alm do
Portugus, h linguagens para inmeras finalidades: sinais, faixas e placas de trnsito, gestos com a
mo e com a cabea, o Braille, a linguagem dos surdos-mudos etc. At para falar com bebs temos
formas especficas! Tambm h formas de linguagem mais simples para nos comunicarmos com
mquinas, como a televiso, o videocassete, a calculadora. Ningum "chama" verbalmente um
elevador, nem "diz" TV qual canal sintonizar; se voc no fizer algo que os aparelhos entendam, no
vai conseguir o que quer. Assim o computador: voc deve comand-lo de uma forma que ele entenda
e faa o que voc est solicitando.
Para que algo acontea no computador, no basta um programa; os comandos do programa
devem ser executados. Programas de computador so como filmes: uma coisa a pelcula em um rolo,
contendo uma sequncia de imagens. Outra coisa colocar o filme em um projetor e assisti-lo na
telona. Os programas ficam guardados em arquivos no Disco Rgido ou CD, DVD, enfim, at que seja
comandada (acionada) sua execuo. So ento carregados pelo Sistema Operacional para a memria e
s ento acontece (exatamente) o que foi programado, e voc pode perceber o que o programa faz.
Uma diferena entre mquinas em geral e o computador que este pode fazer muito mais
coisas, portanto precisa de uma variedade maior de comandos. E outra diferena fundamental: o
computador pode armazenar os comandos, agrupados em programas, para execuo posterior.
Programar um computador , portanto, produzir comandos agrupados em programas, em uma
linguagem que o computador entenda e que, quando executados, faam o computador produzir algum
resultado desejado. Um bom programador treinado em algumas habilidades, sendo o objetivo desta
apostila desenvolver na prtica essas habilidades, para isso usando uma linguagem de programao de
computadores chamada Python.
Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
14
7 Linguagem do Computador
A atividade bsica de um computador consiste em executar instrues, atravs de um
microprocessador ou simplesmente processador, s vezes tambm chamado de CPU (Central
Processing Unit Unidade Central de Processamento). O processador, em ltima anlise, recebe
instrues na forma de impulsos eltricos: em um determinado circuito, pode estar ou no fluindo
corrente. Representa-se cada impulso por 1 ou 0, conforme passe corrente ou no. Esta a menor
unidade de informao que pode ser representada em um computador, e chamada bit.
A CPU recebe instrues e dados na forma de bits agrupados de 8 em 8; cada conjunto de 8 bits
chamado byte. De uma forma simplificada, um byte, ou seja, um conjunto de 8 impulsos eltricos
(ou sua ausncia), constitui uma instruo ou um dado (na verdade, uma instruo pode ocupar mais de
um byte). Essa unidade de informao representada pelo nmero correspondente no sistema decimal.
Dessa forma, ao byte 00000001 associa-se o nmero 1, ao byte 00000011 associa-se o nmero 3, ao
00000100 o nmero 4 e assim por diante. Um byte pode armazenar, portanto, um nmero de 0 a 255
(11111111).
A memria RAM (Random Access Memory - Memria de Acesso Aleatrio) de um
computador constituda de uma sequncia de milhares ou milhes de bytes, cada um identificado por
um nmero que constitui o seu endereo (veja a Tabela 4). O processador tem a capacidade de buscar
o contedo da memria e executar instrues ali armazenadas. A CPU tambm contm algumas
unidades de memria, chamados registradores, identificados por nomes como AX, CS e IP, que
tambm armazenam nmeros e servem a vrias funes.

1 2 3 4 5 6 ...
56 23 0 247 154 87 ...
Tabela 4: Esquema Simplificado da Memria RAM - endereos e respectivos valores.

Os nmeros armazenados na memria podem representar dados ou instrues. Quando
representando instrues, tm significados especficos para a CPU. Por exemplo, a CPU em geral
recebe comandos do tipo (mas no na forma):

Armazene 9 no registrador DS
Armazene 204 no endereo de memria 1.234.244
Some 5 ao contedo do registrador AL
Se a ltima instruo deu resultado 0, passe a executar as instrues a partir do endereo de
memria 457.552


Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
15
8 Linguagens de Alto Nvel
Escrever programas de computador em linguagem de mquina, apesar de os programas produzidos
serem rpidos, pode ser muito difcil e trabalhoso, alm de exigir conhecimentos profundos sobre o
computador.
Para no ter que programar nessa linguagem difcil, foram desenvolvidas as linguagens de alto
nvel. Estas permitem descrever o que deseja-se que o computador faa utilizando instrues mais
prximas da linguagem humana. Alm de facilitarem as descries dos processos a serem executados,
as linguagens de alto nvel simplificam a utilizao da memria do computador, diminuindo a
quantidade de detalhes com os quais deve ocupar-se o programador. Assim, ao invs de lidar com bits,
bytes, endereos de memria e uma infinidade de outros detalhes, o programador pode pensar em
"limpar a tela", "escrever uma linha de texto", somar e subtrair variveis como na matemtica e tomar
uma deciso na forma "se...ento".
Veja um exemplo especfico as instrues abaixo, escritas na linguagem Python, determinam
que seja escrito na tela a palavra Ol! e, logo aps, uma soma seja efetuada e o resultado desta tambm
mostrado na tela:

print(Ol!)
print(23+44+6)

O resultado na tela seria o seguinte (usando IDLE
2
que a IDE bsica do Python):

Figura 5: Tela da IDE bsica do Interpretador Python


Uma linguagem de programao de alto nvel possui vrias caractersticas em comum com a
linguagem humana. Elas possuem um alfabeto (letras, nmeros e outros smbolos) e palavras. Frases
podem ser construdas com as palavras, respeitando-se certas regras. O conjunto de regras de
construo de palavras e frases numa linguagem de alto nvel, assim como nas linguagens comuns,
chama-se sintaxe. Cada Linguagem de Programao tem a sua sintaxe que deve ser seguida para que
os programas sejam executados corretamente.


2
IDLE: um ambiente de desenvolvimento integrado (IDE - Integrated Development Environment) para a Linguagem de
Programao Python.
Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
16
8.1 Linguagem Python

Porque foi escolhida a Linguagem Python para ensinar programao de computadores nesta apostila?
Toda programao de computadores feita atravs de uma ou mais linguagens de programao,
portanto para aprender a programar necessrio aprender ao menos uma linguagem de programao.
O objetivo desta apostila no ensinar uma linguagem especfica, mas sim ensinar a programar de
uma forma geral. Ou seja, a linguagem apenas uma ferramenta para esse aprendizado. O mais
importante aprender a lgica de programao.
Existem vrias linguagens de programao, como C, C++ e Java, por exemplo. Essas
linguagens so mais complexas, ento, por isso, optou-se pelo uso de Python, devido sua
simplicidade e clareza.
A linguagem Python foi escolhida por ser uma linguagem muito verstil, usada no s no
desenvolvimento Web, mas em muitos outros tipos de aplicaes. Embora simples, tambm uma
linguagem poderosa, podendo ser usada para administrar sistemas e desenvolver grandes projetos.
uma linguagem clara e objetiva, pois vai direto ao ponto, sem rodeios. Na pgina oficial do Python no
Brasil (http://www.python.org.br/wiki/EmpresasPython), possvel verificar algumas empresas que
utilizam a linguagem. Ento o leitor desta apostila estar aprendendo a programar em uma linguagem
que poder utilizar na prtica e no ficar apenas na teoria.
O nome Python uma homenagem ao grupo humorstico ingls Monty Python, adorado por
geeks (nerds) de todo o mundo.
Apesar de sua sintaxe simples e clara, Python oferece muitos recursos disponveis tambm em
linguagens mais complexas como Java e C++, como por exemplo: programao orientada a objetos,
recursos avanados de manipulao de textos, listas e outras estruturas de dados, possibilidade de
executar o mesmo programa sem modificaes em vrias plataformas de hardware e sistemas
operacionais.
Em resumo, Python oferece uma sintaxe to simples quanto a linguagem PHP, por exemplo,
mas mais verstil. Permite explorar vrios recursos de Java e C++ de uma forma mais acessvel. Por
esses motivos acredita-se que seja a melhor escolha para quem quer comear a programar hoje
(http://www.python.org.br/wiki/AprendaProgramar).
Python software livre, ou seja, pode ser utilizada gratuitamente, graas ao trabalho da Python
Foundation (http://www.python.org/) e de inmeros colaboradores. Python pode ser utilizada em
praticamente qualquer arquitetura de computadores ou sistema operacional, como Linux, FreeBSD,
Microsoft Windows ou Mac OS X.

Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
17
9 Instalando Python
necessrio instalar o Interpretador da Linguagem Python. O interpretador Python no vem
instalado com o Microsoft Windows, ou seja, deve-se fazer download da Internet. No Mac OS X ou no
Linux, provavelmente j esteja instalado juntamente com o Sistema Operacional.
Como Python Software Livre, pode ser baixado tranquilamente e gratuitamente no site
http://www.python.org. Na Figura 6 pode ser observada a opo DOWNLOAD na coluna da esquerda
na pgina web.


Figura 6: Site da Python Foundation


A seguir, na Figura 7, aparecem as opes para download, de acordo com o Sistema
Operacional utilizado. No esquea tambm, de verificar se seu sistema 32 ou 64 bits.

Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
18

Figura 7: Pgina de Download do Python



9.1 Usando o Interpretador Python

O IDLE uma interface grfica para o interpretador Python que permite tambm a edio e execuo
dos programas.
No Windows, deve ter uma pasta no menu Iniciar > Programas > Python 3.3 > IDLE
No Linux, abra o terminal e digite: idle-python3.3 &
No Mac OS X, abra o terminal e digite: IDLE3.3 &
A janela inicial do IDLE, no Windows 7, mostrada na Figura 8. No Mac OS X, no Linux ou
em outra verso do Windows, talvez no seja igual a janela da figura, mas ser parecida.


Figura 8: Janela Inicial IDLE Python

Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
19

possvel usar qualquer Editor de Textos para fazer um programa na Linguagem Python e
depois apenas usar o Interpretador para Executar o programa, ou ento, pode-se usar o prprio Editor
do Interpretador, da seguinte forma: na janela do Interpretador, conforme Figura 8 (pgina anterior),
clique no menu File > New Window. Aparecer a janela a seguir:


Figura 9: Janela do Editor de Textos do IDLE


Essa janela do Editor de Textos parecida com a do Interpretador, mas tem alguns menus
diferentes. Neste ambiente sero digitados os cdigos-fontes dos programas e, depois de Salvar, sero
executados atravs da opo Run (ou F5) do menu. Ao salvar um arquivo estando neste editor, deve-se
escolher apenas o nome do arquivo, pois a extenso aparecer automaticamente. Os programas em
Python tem a extenso .py

Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
20
10 Converso do Programa-Fonte

Como o computador no entende as instrues de um programa-fonte (ou cdigo-fonte), para que este
possa ser executado, precisa ser convertido para a linguagem que o computador reconhece, a
linguagem de mquina. Uma instruo em uma linguagem de alto nvel pode corresponder a centenas
ou at milhares de instrues em linguagem de mquina. A converso feita por programas
apropriados, e pode ser feita antes ou durante a execuo do programa.


10.1 Programa Compilado

Quando o programa-fonte todo convertido em linguagem de mquina antes da execuo,
esse processo chamado de compilao, e os programas que o fazem so chamados compiladores. O
programa resultante chamado programa-objeto (ou cdigo-objeto), que contm instrues em
linguagem de mquina, mas ainda no pode ser executado; para que isso ocorra, necessria outra
etapa chamada "linkedio" ou ligao, efetuada tambm por um programa apropriado chamado
"linkeditor" ou ligador. Na linkedio, so juntados ao cdigo-objeto do programa outros cdigos-
objeto necessrios sua execuo. Aps esta etapa, a converso est completa e produz finalmente um
programa executvel pelo computador, observe a Figura 10.


Figura 10: Etapas para Construo de um Programa Executvel pelo Computador



10.2 Programa Interpretado

Quando a converso feita durante a execuo, o processo chamado de interpretao, e o
programa conversor, interpretador. Neste caso, o interpretador permanece na memria, junto com o
programa-fonte, e converte cada instruo e a executa, antes de converter a prxima, ou seja, vai
interpretando e executando linha a linha do programa.
A Linguagem Python interpretada, mas tambm pode ser compilada, se necessrio. Como
visto no captulo 9.1, a IDLE a interface grfica do interpretador Python.
Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
21
11 Softwares que voc precisa ter ou conhecer

Alguns programas so necessrios s atividades de um programador. Abaixo so citados e explicados
brevemente alguns dos principais softwares necessrios para o programador desenvolver seus
programas:


11.1 Sistema Operacional

Como programador, necessrio ter um mnimo de informaes sobre o sistema ou ambiente
operacional em que vai trabalhar, como por exemplo:

a) Como executar programas
b) Os nomes que pode dar aos arquivos
c) Como organizar seus arquivos em pastas ou subdiretrios
d) Como listar, excluir, renomear e copiar arquivos


11.2 Editor de Textos

Um programa em Python (ou em qualquer outra linguagem de programao) um texto simples, sem
caracteres de controle do tipo negrito, tamanho de fonte, paginao etc. Voc vai precisar de um editor
de textos para digitar seu programa no computador. Editores que produzem tais textos so o Edit, que
vem com o MS-DOS, o Bloco de Notas (NotePad), que vem com o Windows, e vrios outros. Textos
formatados pelo Word ou WordPad, por exemplo, no servem. Os compiladores e interpretadores
comerciais normalmente trazem um editor; us-los ser normalmente mais prtico.


11.3 Compilador/Interpretador

Uma vez digitado o texto do programa (no editor de textos), na linguagem de programao escolhida,
preciso convert-lo para linguagem de mquina. Para isso, necessita-se de um compilador ou um
interpretador (depende da linguagem usada, como visto em captulos anteriores). Para a linguagem
Python que a apresentada nesta apostila, existem vrias IDEs para desenvolvimento. Na pgina
oficial do Python no Brasil encontra-se uma lista com breves explicaes sobre cada uma para poder
escolher: http://www.python.org.br/wiki/IdesPython.

Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
22
12 Cuidados ao Digitar Programas em Python

Em Python, deve-se tomar cuidado com os seguintes itens:

1. Letras maisculas e minsculas so diferentes. Assim, print e Print so completamente
diferentes, causando um erro caso digite o P maisculo. Quando isso acontece, diz-se que a
linguagem case sensitive
3
, ou em portugus, sensvel caixa (com relao caixa baixa e
caixa alta, para minsculas e maisculas).
2. Aspas so muito importantes e no devem ser esquecidas. Toda vez que abrir aspas, no
esquea de fech-las. Se esquecer, o programa no funcionar. Observe que o IDLE muda a cor
do texto que est entre aspas, facilitando essa verificao.
3. Parnteses no so opcionais em Python. No remova os parnteses dos programas e preste a
mesma ateno dada s aspas para abri-los e fech-los. Todo parntese aberto deve ser fechado.
4. Espaos so muito importantes. A linguagem Python se baseia na quantidade de espaos em
branco antes do incio de cada linha para realizar diversas operaes. O IDLE tambm ajuda
nesses casos, avisando sobre problemas de alinhamento (recuo).




13 Comentrios em Python
Nas linguagens de programao, normalmente existe alguma forma de comentar uma linha ou um
conjunto de linhas de cdigo para documentar o programa em questo. importante documentar o
cdigo-fonte dos programas, pois assim facilita o entendimento caso outra pessoa precise estudar esse
cdigo ou at mesmo se o prprio programador, algum tempo depois, necessitar entender ou lembrar
do programa. Normalmente usa-se comentrios ao longo do cdigo para explicar o que tal comando ou
conjunto de comandos faz, para que serve, o que est acontecendo no programa naquele instante,
enfim, documentar o que o programa faz e como funciona.
Em Python, tem duas maneiras de incluir comentrios ao longo dos programas: pode-se usar
trs apstrofos ( ''' ) ou o caractere sustenido ( # ). Uma observao importante: os comentrios
usados nos cdigos de programas, s so vistos por quem analisar o cdigo-fonte daquele programa,
ou seja, ao executar o programa no se v os comentrios!


3
Python case sensitive, ou seja, faz diferena entre maisculas e minsculas!
Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
23
13.1 Comentrio de Uma Linha

Para fazer comentrio de apenas uma linha na Linguagem Python, inicia-se com o caractere #
(sustenido, tambm conhecido como cerquinha). Ento, tudo que estiver depois do caractere # ser
ignorado pelo interpretador, portanto considerado como comentrio do cdigo-fonte do programa (o
contedo que estiver logo aps o caractere # no ser executado no programa). O fechamento do
comentrio acaba quando acabar a linha do interpretador, ou seja, no necessrio fechar o
comentrio de uma linha, ele fechado automaticamente com a quebra de linha (ao mudar de linha no
interpretador). Com isso, cada linha nova de comentrio deve-se indicar novamente o caractere #.
Abaixo, exemplo de cdigo-fonte com comentrios de uma linha na linguagem Python:
#comentrio de uma linha pode ser usado no incio da linha
print ("Ol Mundo!") #mas tambm pode ser acrescentado depois de um comando


Figura 11: Resultado da Execuo Exemplo Comentrio de Uma Linha

13.2 Comentrio de Vrias Linhas

Na linguagem Python, tambm possvel fazer comentrios no cdigo-fonte, usando vrias linhas, ou
seja, um comentrio longo, para isso usa-se trs apstrofos para iniciar o comentrio e mais trs
apstrofos para fechar, finalizar o comentrio. Com isso, tudo que estiver entre esse conjunto de
apstrofos, no ser executado no programa (no ser interpretado pelo interpretador Python), ser
ignorado.
Abaixo, exemplo de cdigo-fonte com comentrios de uma linha na linguagem Python:
'''
Comentrio usando vrias linhas em Python, pode-se escrever o que
quiser e utilizar quantas linhas forem necessrias.
'''
print ("Ol Mundo!")


Figura 12: Resultado da Execuo Exemplo Comentrio de Vrias Linhas
Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
24
14 Tipos de Dados
Em muitas linguagens de programao necessrio saber e se preocupar com os tipos de dados
existentes. J em Python, no necessrio se preocupar tanto com os tipos de dados, pois no
preciso declarar os tipos juntamente com as variveis. Em Python as variveis so implicitamente
declaradas, ou seja, o tipo delas o tipo do valor que esto recebendo.
As linguagens de programao mais populares tm diversos tipos de dados integrados e Python
no diferente em relao a isso. Por exemplo, a linguagem de programao C possui tipos de nmero
inteiro e ponto flutuante. Considerando a linhagem das mesmas, no surpreendente que a linguagem
Java e C# tambm possuam. Isso significa que em um programa em C, possvel escrever int i =
100 para criar e inicializar uma varivel de nmero inteiro. O mesmo possvel na linguagem Java e
C#. J em Python faz-se isso de forma mais direta: i =100.
A seguir apresentada uma tabela com alguns tipos bsicos de dados nativos de Python:

Tipo de Dado Descrio Exemplo da Sintaxe
NMEROS
Int
Inteiros: nmeros inteiros de preciso fixa. So
positivos ou negativos sem ponto decimal.
10, 100, -786, 48
Float
Ponto flutuante (tem parte fracionria): decimal.
Valores de ponto flutuante reais, representam
nmeros reais e so escritos com um ponto decimal
dividindo as partes inteira e fracionria. Podem
tambm estar na notao cientfica, com E ou e
indicando a potncia de 10 (2.5e2 = 2.5 x 10
2
= 250).
3.1415927, -10.5, 0.0, 15.20
Long
Inteiros Longos: so inteiros de tamanho ilimitado,
escritos como nmeros inteiros e seguido pela letra
L, maiscula ou minscula.
10897, 51924361L, -122l
complex
Nmeros complexos: so da forma de a + bj, onde
a e b so floats e J (ou j) representa a raiz quadrada
de -1 (que um nmero imaginrio). a a parte real
do nmero, e b a parte imaginria. Os nmeros
complexos no so muito utilizados na programao
Python.
3+2j, 20J, 3.14j
CARACTERES
str
String: uma cadeia de caracteres imutvel (palavra,
frase etc.) entre aspas.
frase ou palavra
BOOLEAN
bool
Booleano: um tipo de dado primitivo
4
que possui
dois valores, que podem ser considerados como 0 ou
1, verdadeiro ou falso.
True ou False
Tabela 5: Alguns Tipos Bsicos de Dados Nativos de Python
Fonte: http://www.tutorialspoint.com/python/python_numbers.htm

Ateno: em Python, necessrio declarar o tipo, quando se l do teclado alguma informao!

4
Tipos Primitivos: so aqueles j embutidos no ncleo da linguagem.
Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
25
O tipo de uma varivel pode mudar conforme o valor atribudo a ela (int, float, string etc.). Exemplo:

>>> a ="1"
>>> b = 1
>>> a+b
Traceback (most recent call last):
File "<stdin>", line 1, in ?
TypeError: cannot concatenate 'str' and 'int' objects

Observao importante: a linguagem Python permite usar L minsculo com os nmeros do tipo long,
mas recomendado usar apenas L maisculo para evitar confuso com o nmero 1. Python exibe os
inteiros longos com L maisculo.


14.1 Converso de Tipos Numricos
Python converte nmeros internamente em uma expresso contendo tipos mistos para um tipo comum.
Mas, s vezes, necessrio converter um nmero explicitamente de um tipo para outro, para satisfazer
as exigncias de um parmetro de operador ou funo. Abaixo esto alguns exemplos de converses:
int (x)
Converte x para um inteiro
long (x)
Converte x para um inteiro longo
float (x)
Converte x para um ponto flutuante
complex (x)
Converte x para um nmero complexo, com x
sendo a parte real e 0 a parte imaginria
complex(x,y)
Converte x e y para nmero complexo, sendo x a
parte real e y a parte imaginria
Tabela 6: Exemplos de Converses de Tipos Numricos em Python



Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
26
14.2 Marcadores e Formatao de Nmeros
Python suporta diversas operaes com marcadores. A tabela 7 apresenta os principais tipos de
marcadores. Veja que os marcadores so diferentes de acordo com o tipo de varivel que est sendo
utilizada.
Marcador em Python Tipo de Dado
%d Nmeros Inteiros
%f Nmeros Decimais
5
(Float)
%s Strings
Tabela 7: Marcadores em Python


Alm desse uso, % um marcador de posio, ou seja, serve para sinalizar onde Python dever
inserir um nmero quando deseja-se imprimir uma mensagem na tela que contenha nmeros ou
variveis numricas.
Exemplos:
val = 8.5
msg = "voce tirou %f na prova"
print(val)
print(msg)







print(msg % val)





5
Nmeros Decimais: indicam os nmeros que no so inteiros. Geralmente aps o algarismo das unidades, usa-se uma
vrgula (em Python usa-se ponto), indicando que o algarismo a seguir pertence ordem das casas decimais (parte
fracionria).
Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
27

Entendendo o que aconteceu nesses dois exemplos citados (pgina 26): Python substituiu a
marca %f pelo valor da varivel val. assim que funciona: a partir de uma string (mensagem: frase,
palavra) com marcas de posio e um ou mais valores, o operador % produz uma nova string com os
valores inseridos nas respectivas posies. Veja agora um exemplo com dois valores:


valor = 3.50
frase = "Uma laranja custa %f e 12 laranjas custam %f"
print (frase % (valor, valor*12))




Note que os valores valor e valor*12 esto entre parnteses. Isso obrigatrio quando
deseja-se passar mais de um valor para o operador %. O smbolo %f serve para informar ao Python
que o valor a ser inserido naquela posio um float. Se quiser limitar o nmero de casas aps o ponto
decimal, basta usar um formato, ou seja, tem que formatar o nmero, da seguinte maneira:


valor = 3.50
frase = "Uma laranja custa %.2f e 12 laranjas custam %.1f"
print (frase % (valor, valor*12))




Aps o primeiro marcador %, a indicao .2 determina que devem aparecer duas casas
decimais aps o ponto, bem como o .1, aps o segundo marcador %, determina apenas uma casa
decimal.

Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
28
15 Instruo Ler
Como visto no captulo 4 Instruo Escrever, existem basicamente duas instrues principais em
algoritmos (e em programao em geral) que so: Escrever e Ler. No captulo 4, foi apresentada a
instruo Escrever. Agora, neste captulo, ser apresentado o funcionamento da instruo Ler.
A instruo Ler utilizada quando deseja-se obter informaes do teclado do computador,
ou seja, um comando de Entrada de Dados. Resumindo: usa-se a instruo Ler, quando necessita-se
que o usurio do programa digite alguma informao (e posteriormente do programa). O comando
Ler para ler do teclado do computador.
Tanto no Diagrama de Chapin quanto em Portugus Estruturado representa-se a entrada de
dados atravs da palavra Ler (ou Leia). J em Fluxogramas a representao da entrada de dados feita
atravs de uma forma geomtrica especfica [GOM04] [MAR03].

Exemplo Prtico 3:

Escreva um algoritmo para ler dois valores e armazenar cada um em uma varivel. A seguir,
armazenar a soma dos dois valores lidos em uma terceira varivel. Escrever o resultado da soma
efetuada.





16 Horizontalizao de Frmulas (Linearizao)
Para o desenvolvimento de algoritmos que possuam clculos matemticos, as expresses aritmticas
devem estar horizontalizadas, ou seja, linearizadas e, para isso, deve-se utilizar os operadores
corretamente. Na Tabela 8 a seguir, apresentado um exemplo de uma expresso aritmtica na forma
tradicional e como deve ser utilizada nos algoritmos e em programao em geral (linearmente).

Matemtica Tradicional Algoritmo (ou Programa)

M (N1 + N2) / 2

Tabela 8: Exemplo de Horizontalizao de Expresses Aritmticas


As expresses matemticas na forma horizontalizada no so apenas utilizadas em algoritmos,
mas tambm na maioria das linguages de programao.




Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
29
17 Funes Numricas Predefinidas
A Linguagem de Programao Python (o interpretador Python) oferece vrias funes predefinidas,
como funes numricas, matemticas, de converso etc. que facilitam e colaboram com o
desenvolvimento de programas. Em ingls, so chamadas de built-in functions.



17.1 Funes Matemticas

Python inclui as seguintes funes que executam clculos matemticos (alguns exemplos):


Funo em Python Descrio do Retorno (resposta da funo)
abs(x) O valor absoluto de x: a distncia (positiva) entre x e zero
exp(x) O exponencial de x: e
x

log(x) O logaritmo natural de x, para x > 0
log10(x) O logaritmo base 10 de x, para x > 0
max(x1, x2,...) O maior dos seus argumentos: o valor mais prximo de infinito positivo
min(x1, x2,...) O menor dos seus argumentos: o valor mais prximo de infinito negativo
pow(x, y) O valor de x**y, ou seja: x
y

round(x [,n])
x arredondado para n dgitos a partir do ponto decimal. Python arredonda
longe do zero como um tie-breaker (desempate): round (0.5) 1.0 e
round (-0.5) -1.0
sqrt(x) Raiz quadrada de x, para x > 0
Tabela 9: Exemplos de Funes Matemticas em Python


Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
30

17.2 Funes de Nmeros Randmicos

Nmeros randmicos so usados para jogos, simulaes, testes etc. Python inclui algumas funes
comumente usadas, tais como:


Funo em Python Descrio do Retorno (resposta da funo)
choice(seq) Um item aleatrio de uma lista, tupla ou string
randrange ([start,] stop [,step])
Um elemento selecionado aleatoriamente a partir de
um intervalo (iniciar, parar, passo)
random()
Um float aleatrio r, tal que 0 menor ou igual a r e
r menor que 1
shuffle(lst)
Randomiza os itens de uma lista (no lugar). No tem
retorno.
uniform(x, y)
Um float aleatrio r, de tal modo que x menor ou
igual a r e r menor que y
Tabela 10: Exemplos de Funes de Nmeros Randmicos em Python



Na pgina oficial do Python encontra-se uma lista completa das funes predefinidas da
linguagem com explicaes detalhadas e exemplos: http://docs.python.org/2/library/functions.html.




Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
31
18 Expresses Aritmticas

As expresses aritmticas so escritas linearmente, usando-se a notao matemtica. A Tabela 11
apresenta dois exemplos de representao de expresses aritmticas em Python:

Expresso Aritmtica Representao em Python
Px(P-A)x(P-B)x(P-C)
sqrt(P*(P-A)*(P-B)*(P-C))
A-Bx (C+
D
E-1
-F) +G
A-B*(C+D/(E-1)-F)+G
Tabela 11: Exemplo de Representao de Expresso Aritmtica em Python
(Horizontalizao)





19 Algoritmos com Seleo
Os exemplos vistos at agora, nesta apostila, eram puramente sequenciais, ou seja, todas as instrues
eram executadas seguindo a ordem do algoritmo (normalmente, de cima para baixo). Neste captulo,
sero apresentadas algumas estruturas de seleo.
Uma estrutura de seleo, como o prprio nome j diz, permite que determinadas instrues
sejam executadas ou no, dependendo do resultado de uma condio (de um teste), ou seja, o
algoritmo ter mais de uma sada, mais de uma opo que ser executada de acordo com o teste
realizado.

Exemplo Prtico 4:

Escreva um algoritmo para ler um valor. Se o valor lido for igual a 6, escrever a mensagem Valor
lido o 6, caso contrrio escrever a mensagem Valor lido no o 6.




Quando se est utilizando algoritmos com seleo, pode-se utilizar dois tipos de estruturas diferentes,
dependendo do objetivo do algoritmo, chamadas de "Seleo Mltipla", cujos tipos so: Estrutura
Aninhada e Estrutura Concatenada. Os captulos 18.1 e 18.2 a seguir, apresentam essas duas estruturas
com suas respectivas caractersticas.



Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
32

19.1 Estrutura de Seleo Aninhada

A estrutura de Seleo Aninhada normalmente utilizada quando necessrio fazer vrias
comparaes (testes) sempre com a mesma varivel. Esta estrutura chamada de aninhada porque na
sua representao (tanto em Chapin quanto em Portugus Estruturado) fica uma seleo dentro de
outra seleo.
Como exemplo destes dois tipos de estruturas, ser utilizado o exerccio nmero 35 da lista de
exerccios da Apostila de Exerccios de Algoritmos e Programao Parte 1 (pg.8). Abaixo
apresentada a resposta do exerccio 35, representado em Diagrama de Chapin, utilizando a estrutura
Aninhada:


Figura 13: Exemplo de Estrutura de Seleo Aninhada - Resposta do Exerccio 35



Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
33

19.2 Estrutura de Seleo Concatenada

A estrutura de Seleo Concatenada normalmente utilizada quando se est comparando (testando)
variveis diferentes, ou seja, independentes entre si. Esta estrutura chamada de concatenada porque
na sua representao (tanto em Chapin quanto em Portugus Estruturado) as selees ficam separadas
uma da outra, e nesse caso, no existe o lado "falso" do Chapin, ou o "Seno" do Portugus.
Abaixo apresentada a resposta do exerccio nmero 35 da lista de exerccios da Apostila de
Exerccios de Algoritmos e Programao Parte 1, representada em Diagrama de Chapin, utilizando a
estrutura de seleo Concatenada:


Figura 14: Exemplo de Estrutura de Seleo Concatenada - Resposta do Exerccio 35



Como pode ser observado nessas duas respostas apresentadas para o exerccio 35 (estrutura
aninhada e estrutura concatenada), existe uma grande diferena entre as duas estruturas, ou seja, uma
caracterstica de execuo do algoritmo. Voc saberia dizer qual esta diferena?
6




6
Resposta: A execuo da estrutura aninhada mais rpida que a concatenada, ou seja, mais eficaz. Pois a estrutura
concatenada, segue sendo executada mesmo depois de ter encontrado a resposta. A forma aninhada mais otimizada!

Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
34
20 Operadores Relacionais
Operaes relacionais so as comparaes permitidas entres valores, variveis, expresses e
constantes. A Tabela 12 a seguir, apresenta os operadores relacionais utilizados nos algoritmos e na
programao em geral:


Smbolo do Operador Significado da Operao
Smbolo Matemtico
> maior que >
< menor que <
==
Igual =
>=
maior ou igual
<=
menor ou igual
!= Diferente
Tabela 12: Operadores Relacionais



A seguir, na Tabela 13, so apresentados alguns exemplos de comparaes vlidas, ou seja,
possveis testes utilizando os operadores relacionais:


Comparaes Vlidas Exemplos
varivel e constante X == 3
varivel e varivel A != B
varivel e expresso
Y == W + J
expresso e expresso (X + 1) < (Y + 4)
Tabela 13: Exemplos de Comparaes Vlidas




Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
35
21 Seleo em Python
Estrutura de seleo (ou estrutura condicional) uma estrutura de desvio do fluxo de controle, presente
em linguagens de programao, que realiza diferentes aes dependendo se a seleo (ou condio)
verdadeira ou falsa. Ou seja, nem sempre deseja-se que todas as linhas de cdigo de um programa
sejam executadas. Muitas vezes necessrio decidir quais partes do programa devem ser executadas,
ou no, dependendo do resultado de uma condio (um teste).
Na linguagem Python, a estrutura de deciso o if, sendo que a pode-se apresentar de duas
formas: simples ou composta. Nos captulos a seguir a estrutura apresentada em detalhes.



21.1 Forma Simples: if

O formato da estrutura condicional if e a sintaxe em Python :

if condio:
bloco de cdigo verdadeiro

O comando if, significa se, traduzindo para o portugus, ento as linhas de cdigo descritas
acima devem ser lidas da seguinte forma: se a condio for verdadeira, faa os seguintes comandos
(se o teste for verdadeiro, execute os comandos a seguir). Se o teste for falso, os comandos sero
ignorados. Para a condio (teste) usa-se os Operadores Relacionais (captulo 19).
Os dois-pontos ( : ), aps a condio, indicam que um bloco de linhas de cdigo vir a seguir
(pode ser apenas uma linha ou vrias linhas de cdigo). Em Python, um bloco representado
deslocando-se o incio da linha para a direita. O bloco continua at a primeira linha com deslocamento
diferente, ou seja, todos os comandos que estiverem com o mesmo deslocamento para a direita, fazem
parte do mesmo bloco de cdigo. O bloco s ser finalizado, quando houver uma linha com
deslocamento diferente. Veja o exemplo a seguir:

a = int(input("Digite um valor: "))
b = int(input("Digite outro valor: "))
if a < b :
print ("O primeiro valor menor que o segundo valor digitado")
print ("Tchau!")

O deslocamento necessrio para delimitar um bloco de cdigo em Python, feito atravs da
endentao
7
das linhas de cdigo, ou seja, todos os comandos que fazem parte do mesmo bloco, devem
estar com o mesmo recuo da margem.
Python uma das poucas linguagens de programao que utiliza o deslocamento do texto
direita (recuo) para marcar o incio e o fim de um bloco de comandos. Outras linguagens utilizam
palavras ou caracteres especiais para isso como begin e end, em Pascal ou as famosas chaves ({ }),
em C e em Java.




7
O recuo de uma ou vrias linhas de cdigo, serve para delimitar um bloco de cdigo, na linguagem de programao
Python. Esse recuo denominado indentation, em ingls. Em portugus alguns descrevem como indentao, outros como
endentao, que significa entalhe, recorte dentado.
Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
36


21.2 Forma Composta: if - else

Quando h uma situao em que deseja-se que o programa faa tal coisa, se o teste for verdadeiro, mas
seno, se o teste for falso, deve fazer outra coisa, ento usa-se o comando else, como apresentado no
exemplo a seguir:

a = int(input("Digite um valor: "))
b = int(input("Digite outro valor: "))
if a < b :
print ("O primeiro valor menor que o segundo valor digitado")
else:
print ("Tchau!")


Nesse exemplo acima, l-se: se a menor que b ento escreve na tela "O primeiro valor
menor..., seno, escreve na tela Tchau!. Else significa seno, em portugus.

Quando forem necessrios vrios ifs, Python apresenta duas maneiras de us-los,
apresentadas a seguir (resposta do exerccio 35).



21.2.1 Usando if else de forma aninhada:

numero = int(input("Digite um nmero: "))
if numero < 0:
print("O nmero digitado Negativo")
else:
if numero > 0:
print("O nmero digitado Positivo")
else:
print ("O nmero digitado o Zero")



21.2.2 Usando o comando elif:

numero = int(input("Digite um nmero: "))
if numero < 0:
print("O nmero digitado Negativo")
elif numero > 0:
print("O nmero digitado Positivo")
elif numero == 0:
print ("O nmero digitado o Zero")






Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
37
22 Operadores Lgicos
Os operadores lgicos permitem que mais de uma condio seja testada em uma nica expresso, ou
seja, pode-se fazer mais de uma comparao (mais de um teste) ao mesmo tempo. A Tabela 14 a
seguir, apresenta os operadores lgicos utilizados na construo de algoritmos e na programao em
geral:


Operao
Operador no Algoritmo
Operador em Python
Negao No
not
Conjuno E
and
Disjuno (no-exclusiva) Ou
or
Tabela 14: Operadores Lgicos


Note que a Tabela 14 acima, apresenta os operadores lgicos j ordenados de acordo com suas
prioridades, ou seja, se na mesma expresso tiver o operador ou e o operador no, por exemplo,
primeiro deve-se executar o no e depois o ou.
De uma forma geral, os resultados possveis para os operadores lgicos podem ser vistos na
Tabela 15 abaixo, conhecida como Tabela Verdade:

Variveis Operaes Lgicas
A B A e B A ou B no A
F F F F V
F V F V V
V F F V F
V V V V F
Tabela 15: Possveis Resultados dos Testes Lgicos - Tabela Verdade


Exemplos de Testes utilizando Operadores Lgicos:

Exemplos usando operadores lgicos [KOZ06]: exemplos em portugus, usados no dia-a-dia.

Expresso Quando eu no saio?
Se chover e relampejar, eu no saio.
Somente quando chover e relampejar ao mesmo
tempo (apenas 1 possibilidade).
Se chover ou relampejar, eu no saio.
Somente quando chover, somente quando
relampejar ou quando chover e relampejar ao
mesmo tempo (3 possibilidades).

Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
38
Exemplos A, B e C abaixo so apresentados em Portugus Estruturado:

A) Se (salario > 180) e (salrio < 800) Ento
Escrever Salrio vlido para financiamento
Seno
Escrever Salrio fora da faixa permitida para financiamento
FimSe


B) Se (idade < 18) ou (idade > 95) Ento
Escrever Voc no pode fazer carteira de motorista
Seno
Escrever Voc pode possuir carteira de motorista
FimSe


C) Se (idade >= 18) e (idade <= 95) e (aprovado_exame == sim) Ento
Escrever Sua carteira de motorista estar pronta em uma semana
Seno
Escrever Voc no possui idade permitida ou no passou no exame
FimSe




22.1 Expresses Lgicas e Prioridades das Operaes

Os operadores lgicos podem ser combinados em expresses lgicas mais complexas. Quando uma
expresso tiver mais de um operador lgico, avalia-se o operador not (no) primeiramente, seguido
do operador and (e) e finalmente or (ou). Ou seja, existe uma prioridade de execuo entre os
operadores lgicos, como mostrado na Tabela 16 a seguir:


Operador Lgico no Algoritmo Operador Lgico em Python Prioridade de Execuo
no not 1.
e and 2.
or or 3.
Tabela 16: Prioridades das Operaes Lgicas


Ateno: Vrios nveis de parnteses tambm podem ser usados em expresses lgicas para fixar
entre os operadores uma ordem de execuo, diferente da indicada pela prioridade dada na Tabela 16.
Lembrando que as operaes entre parnteses sempre tm prioridade mxima. Ento, se quiser uma
sugesto: use parnteses para definir a ordem de execuo das operaes e durma tranquilo!




Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
39
A seguir so apresentados mais alguns exemplos de expresses lgicas.

Para A = V, B = F e C = F, as expresses abaixo fornecem os seguintes resultados:

Expresses Resultados
a) no A no V = F
b) A e B V e F = F
c) no (B ou C) no (F ou F) = no F = V
d) no B ou C (no F) ou F = V ou F = V


Exemplo Prtico utilizando Operadores Lgicos para ser resolvido em Chapin:

5) Escreva um algoritmo para ler um valor e escrever se ele est entre os nmeros 1 e 10, ou no est.


Ao verificar as respostas (errada e correta) do exemplo nmero 5 acima, pode-se constatar que
quando necessita-se fazer mais de um teste ao mesmo tempo, deve-se utilizar os operadores lgicos
apresentados neste captulo na Tabela 14.


Resumo das Prioridades de Operaes: se houver vrios tipos de operadores em uma mesma
expresso, a ordem de execuo a descrita na Tabela 17 a seguir.

Prioridades de Execuo
Tipos de Operaes Operadores em Python
1. Aritmticas
* / + -
2. Relacionais
> < == >= <= !=
3. Lgicas not and or
Tabela 17: Resumo das Prioridades de Operaes


Exemplo:

Supondo que salario = 100 e idade = 20, resolvendo a expresso abaixo:

salario > 1000 and idade > 18


Como resultado tem-se:
100 > 1000 and 20 > 18
False and True
False

A resposta final desse exemplo False, pois executa-se primeiramente as operaes relacionais
(sublinhadas apenas para destacar a prioridade de execuo), ou seja, os dois testes de maior ( > ) para,
depois, executar a operao lgica, and ( e ).
Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
40
23 Respostas dos Exemplos Prticos desta Apostila

Neste captulo so apresentadas as respostas de todos os exemplos encontrados no decorrer desta
apostila.


Exemplo 1:




Exemplo 2:

A = 4
B = 3
C = A + B
D = A - B
Escrever A, B, C, D
Escrever Fim do Algoritmo


Exemplo 3:

Resposta em Chapin:

Resposta em Portugus Estruturado:




Resposta em Fluxograma:



Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
41
Exemplo 4:

Resposta em Chapin:



Resposta em Portugus Estruturado:






Exemplo 5:

Resposta Errada:




Resposta Correta:






Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
42
Referncias

Para elaborao e construo desta apostila foram consultados vrios tipos de materiais, como por
exemplo: livros, outras apostilas, pginas web etc. Algumas das referncias consultadas esto
apresentadas neste captulo, mas grande parte do material disponibilizado na apostila, como exemplos
e exerccios foram utilizados das aulas da disciplina de Algoritmos e Programao da faculdade de
Anlise de Sistemas, da UCPel - Universidade Catlica de Pelotas, com o Prof. Ricardo Andrade
Cava (http://lp.ucpel.tche.br, http://cpu.ucpel.tche.br, http://graphs.ucpel.tche.br).

[ALG96] The ALGOL Programming Language. Disponvel em:
http://www.engin.umd.umich.edu/CIS/course.des/cis400/algol/algol.html. Acesso em: Jun.
2006.
[BUF03] BUFFONI, Salete. Apostila de Algoritmo Estruturado - 4 edio. Disponvel em:
http://www.saletebuffoni.hpg.ig.com.br/algoritmos/Algoritmos.pdf. Acesso em: Mar. 2004.
[CHA70] CHAPIN, Ned. Flowcharting with the ANSI Standard: A Tutorial. ACM Computing
Surveys, Volume 2, Number 2 (June 1970), pp. 119-146.
[CHA74] CHAPIN, Ned. New Format for Flowcharts, Software - Practice and Experience.
Volume 4, Number 4 (October-December 1974), pp. 341-357.
[CHA02] CHAPIN, Ned. Maintenance of Information Systems. Disponvel em:
http://www.iceis.org/iceis2002/tutorials.htm. Acesso em: Jun. 2006.
[COS04] COSTA, Renato. Apostila de Lgica de Programao - Criao de Algoritmos e
Programas. Disponvel em: http://www.meusite.pro.br/apostilas2.htm. Acesso em: Jun.
2006.
[GOM04] GOMES, Abel. Algoritmos, Fluxogramas e Pseudo-cdigo - Design de Algoritmos.
Disponvel em: http://mail.di.ubi.pt/~programacao/capitulo6.pdf. Acesso em: Jun. 2006.
[KOZ06] KOZAK, Dalton V. Tcnicas de Construo de Algoritmos. Disponvel em:
http://minerva.ufpel.edu.br/~rossato/ipd/apostila_algoritmos.pdf. Acesso em: Jun. 2006.
[MAR03] MARTINS, Luiz E. G.; ZLIO, Valria M. D. Apostila da Disciplina Introduo
Programao. Disponvel em: http://www.unimep.br/~vmdzilio/apostila00.doc. Acesso em:
Jun. 2006.
[MEN00] MENEZES, Nilo N. C. Introduo Programao com Python: Algoritmos e Lgica de
Programao para Iniciantes. So Paulo, Novatec Editora, 2010.
[NAS73] NASSI, Ike; SHNEIDERMAN, Ben. Flowchart Techniques for Structured
Programming. ACM SIGPLAN Notices, Volume 8, Number 8 (August 1973), pp.12-26.
[NAS04] NASSI, Ike. Ike Nassi's Home Page. Disponvel em: http://www.nassi.com/ike.htm . Acesso
em: Jun. 2006.
[PRO04] Programming Languages. Disponvel em:
http://www.famed.ufrgs.br/disciplinas/inf_med/prog_ling.htm. Acesso em: Mar.2004.
[SAN04] SANTANA, Joo. Algoritmos & Programao. Disponvel em:
http://www.iesam.com.br/paginas/cursos/ec/1ano/aulas/08/joao/APunidade-1.pdf. Acesso
em: Mar. 2004.
[SHN03] SHNEIDERMAN, Ben. A short history of structured flowcharts (Nassi-Shneiderman
Diagrams). Disponvel em: http://www.cs.umd.edu/~ben/ Acesso em: Jun. 2006.
Apostila de Algoritmos e Programao Parte 1
Profa. Flvia Pereira de Carvalho fpereira@faccat.br - http://fit.faccat.br/~fpereira
43
[TON04] TONET, Bruno; KOLIVER, Cristian. Introduo aos Algoritmos. Disponvel em:
http://dein.ucs.br/napro/Algoritmo/manuais/Manual 20Visualg.pdf. Acesso em: Mar. 2004.
[YOU04] YOURDON, Ed. Ed Yourdon's Web Site. Disponvel em:
http://www.yourdon.com/books/msa2e/CH15/CH15.html. Acesso em: Mar. 2004.