Sie sind auf Seite 1von 38

Introduo programao

Contedo

1 Capa 1

2 Prefcio 2

3 Programar 3
3.0.1 Motivao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.0.2 A programao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3.0.3 Um Programa de Computador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
3.1 Ver tambm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

4 Como programar 5
4.0.1 Estrutura interna de um computador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
4.0.2 Processamento de dados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
4.1 Ver tambm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

5 Denies sobre Lgica de Programao 7


5.1 Formalismo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.2 Trmino do algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
5.3 Implementao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.4 Anlise de algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.5 Classicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.5.1 Classicao por implementao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
5.5.2 Classicao por paradigma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.5.3 Classicao por campo de estudo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.5.4 Classicao por complexidade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.6 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
5.7 Bibliograa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

6 Histria da Programao 10

7 Lgica 11
7.0.1 Lgica binria . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
7.1 Operaes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
7.1.1 NOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
7.1.2 AND . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

i
ii CONTEDO

7.1.3 OR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
7.1.4 XOR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
7.1.5 Shift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
7.2 Ver tambm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

8 Aprendizagem 12
8.0.1 Como aprender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
8.0.2 O padro ecaz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

9 Algoritmos 13
9.1 Fundamentos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
9.2 Lgica de Programao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
9.3 Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
9.4 Resumo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
9.5 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
9.6 Bibliograa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

10 Estruturas de manipulao de dados 16


10.0.1 Estruturas bsicas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
10.0.2 Estruturas de controle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
10.0.3 Funes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
10.0.4 Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
10.0.5 Operaes aritmticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
10.0.6 Concluso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

11 Pseudo-cdigo 19
11.1 Constantes e variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
11.1.1 Tipos de variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
11.1.2 Modelo de pseudo-cdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
11.1.3 Exemplo de programa em pseudo-cdigo . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
11.1.4 Atribuio de valores s variveis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
11.2 Ver tambm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
11.3 Exerccios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
11.4 Bibliograa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

12 Expresses em pseudo-cdigo 21
12.1 Introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
12.2 Comandos iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
12.2.1 Comando algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
12.2.2 Comando var . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
12.2.3 Comando inicio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
12.2.4 Comando malgoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21

13 Orientao a objetos 22
CONTEDO iii

13.1 Conceitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
13.2 Ver tambm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

14 Exerccios 24
14.0.1 Exerccio 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
14.0.2 Exerccio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
14.0.3 Exerccios de introduo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
14.0.4 Exerccios de deciso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
14.0.5 Exerccios de repetio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26

15 Solues dos exerccios 27


15.1 EXERCCIO 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
15.1.1 Verdadeiro ou falso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
15.1.2 Crie algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
15.2 Exerccio 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
15.2.1 Verdadeiro ou falso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
15.2.2 Crie algoritmos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

16 Anexo: Linguagens de programao 28


16.1 Histria e evoluo das linguagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
16.2 Igualdades e diferenas nas linguagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30

17 Anexo: Passagem para a linguagem de programao escolhida 31


17.1 Referncias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

18 Bibliograa 32
18.0.1 Bibliograa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
18.0.2 Ligaes externas & mais sobre o assunto . . . . . . . . . . . . . . . . . . . . . . . . . . 32
18.0.3 Pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
18.0.4 Dvidas, esclarecimentos e sugestes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
18.1 Fontes, contribuidores e licenas de texto e imagem . . . . . . . . . . . . . . . . . . . . . . . . . 33
18.1.1 Texto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
18.1.2 Imagens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
18.1.3 Licena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
Captulo 1

Capa

1
Captulo 2

Prefcio

guagens de programao e programao bsica de algo-


ritmos.
Este guia tambm se destina aos que querem participar
na atividade comunitria de produo de software livre,
mas no receberam formao tcnica do gnero, motivos
para o fazer que no faltam.

O Morse uma sequncia lgica muito parecida com o cdigo


binrio

Com a evoluo da tecnologia, cada dia mais pessoas tm


acesso a um computador, seja em casa, na escola, no tra-
balho. E para alguns mais curiosos, surgem perguntas
como: como eles fazem isto?", ser que posso fazer ou
aprender?", como ser um computador por dentro?".
Muitos j se aventuraram na procura de respostas das suas
auto-questes, porm nem sempre fcil achar o que se
pretende. Aqui o leitor tem uma oportunidade de perce-
ber como funciona tudo isto.
O objetivo deste livro servir como base para qual-
quer pessoa que queira mergulhar, ou apenas conhecer,
o maravilhoso mundo da programao, mesmo que saiba
pouco ou nada sobre o assunto.
Este livro tambm pode servir como uma forma de en-
riquecimento cultural sobre temas j esquecidos pelo
tempo, pois ele aborda assuntos desde a arquitetura de
processadores e computadores, clculos computacionais,
lgica e matemtica at uma breve histria sobre as lin-

2
Captulo 3

Programar

3.0.1 Motivao computador, mostrar como ele deve reagir ao usurio e


como ele deve processar os dados disponveis.
Praticamente no h limite do que voc pode fazer com
Nos dias que correm, no saber trabalhar com computa-
um computador. Computadores ajudam pessoas a falar,
dores considerada iliteracia (analfabetismo) e o custo
controlam aparelhos e levaram o homem a Lua de vrias
por no saber utilizar um computador pode ser caro.
maneiras. Mesmo as coisas mais difceis, como simular
Quando usamos computadores, podemos fazer muitas um sentimento ou inteligncia, so estudadas com anco
coisas. Uma criana pode usar a Internet para passar uma em todo mundo. Alguns problemas so muito grandes e
mensagem, um estudante pode usar uma planilha eletr- exigem a construo de computadores enormes. Outros
nica para calcular uma mdia ou quantos pontos precisa so to simples que podemos resolver em computadores
para ser aprovado em cada matria, um cozinheiro pode simples, que esto dentro de equipamentos. A noo de
guardar suas receitas em software como o Word ou em poderoso tambm muda com o tempo: um chip que era
um produto especializado para receitas. Na verdade, a usado em computadores pessoais em 1988, o w:Z80, hoje
quantidade de produtos especializados to grande que, usado em aparelhos como faxes.
se voc procurar bem, certamente vai encontrar algum
Hoje difcil imaginar um domnio da atividade humana
programa que faa algo bem prximo do que voc deseja.
onde a utilizao de computadores no seja desejvel.
O problema que, s vezes, queremos fazer algo espe- Assim sendo o domnio da programao substancial-
cco: queremos um programa de computador que faa mente ditado pela imaginao e criatividade. Podemos
algo que servir de forma nica a ns ou a nossa empresa. dizer que a grande vantagem de saber programar a pos-
Nesse caso, em vez de comprar um programa pronto te- sibilidade de criar o que quiser, quando quiser. No s
mos que desenvolver o nosso prprio programa. Para para o PC, mas celulares, PDAs, entre outros. Claro que
isso necessrio dominar uma nova forma de manipu- exige um pouco de esforo, porm para muitos esse es-
lar o computador: a programao. Nosso motivo pode foro na verdade um desao cuja a recompensa ver
ser um negcio, um trabalho escolar, um hobby ou mera sua ideia transformada em realidade.
curiosidade. Hoje em dia, programar um computador
pode ser feito de vrias formas. Voc pode, por exem-
plo, modicar levemente o comportamento de aplicaes 3.0.2 A programao
por meio de macros, como permitido em programas
como Microsoft Word. Voc pode fazer ainda modi- Provavelmente voc j ouviu a palavra programao,
caes mais srias por meio de linguagens embutidas, conhece o seu signicado, mas, provavelmente, desco-
como pode ser feito tambm nos programas do Micro- nhece o que faz, como se faz e quem faz. Programar
soft Oce ou at mesmo em jogos de computador como fcil e divertido, a diculdade, para maioria dos inician-
Neverwinter Nights. Voc pode tambm pegar um pro- tes pouco persistentes, comear a perceber como um
grama j existente de cdigo aberto, ou software livre e computador funciona.
modic-lo. Ou voc pode comear do incio e progra- Bem, um computador pode ser entendido de vrias ma-
mar praticamente tudo, certamente com ajuda de biblio- neiras. Dentro dele, o que existe so sinais eletrnicos.
tecas prontas que fazem parte do trabalho. Os humanos que os projetam normalmente pensam nes-
Para programar voc tem muitas opes: pacotes que po- ses sinais como 1"s e 0"s. Em certo ponto, passamos a
dem ser estendidos com macros ou linguagens embutidas, pensar em algo conhecido como linguagem de mquina,
ambientes de programao point-and-click, linguagens ou seja, sequncias de 1"s e 0"s, normalmente escritos
mais fceis de aprender e linguagens mais difceis, mas como nmeros inteiros, que indicam um certo comporta-
que apresentam grande poder ou caractersticas apropri- mento, como somar dois nmeros. Para car mais fcil
adas para grandes sistemas. Em todo caso, o esprito por ainda, essa linguagem de mquina normalmente trans-
trs de tudo o mesmo: programar dar ordens para o crita para uma linguagem de montagem ou Assembly que

3
4 CAPTULO 3. PROGRAMAR

descreve as aes que um computador pode fazer por 3.1 Ver tambm
meio de w:mnemnicos, como ADD e MOV. Porm, j
h algum tempo, ns fazemos o computador funcionar
por meio de programas escritos em linguagens de pro-
gramao, que tentam deixar a tarefa de explicar o que
o computador tem que fazer mais fcil para os seres hu-
manos, mesmo que, por causa da alta especializao da
linguagem, apenas a alguns deles. Todas as linguagens
de programao tm essencialmente o mesmo propsito,
que permitir ao programador humano dar instrues ao
computador.
No nosso cotidiano a comunicao feita de um modo
natural e raramente temos conscincia das regras que
aplicamos na nossa linguagem. O destino da aprendiza-
gem de uma linguagem de programao exatamente a
mesma: aplicao de regras, se possvel de forma to ar-
raigada que parea ser inconsciente (abstrair). Um bom
programador entende os meandros da linguagem que
usa e pode at mesmo ver beleza, ou feiura, em um c-
digo, da mesma forma que gostamos ou no de um texto
as vezes no pelo seu contedo, mas pela forma como foi
escrito.
As linguagens so criadas com duas motivaes: lingua-
gens de uso geral, que servem para fazer qualquer coisa
e linguagens de uso especco. Se voc quer fazer pro-
gramas que tratem de problemas estatsticos, provavel-
mente linguagens como R, uma linguagem criada para
esse uso especco, so adequadas. Se voc quer fazer um
programa para calcular a folha de pagamento de uma em-
presa, provavelmente linguagens como COBOL, C, C++
ou Java, linguagens de uso geral, sero adequadas.

3.0.3 Um Programa de Computador

Um programa de computador como uma receita de co-


zinha: uma sequncia de passos a serem executados. Se
computadores cozinhassem em vez de processar dados,
um programa tpico poderia ser:
PROGRAMA FRITAR_OVO RESERVAR OVO, FRI-
GIDEIRA, SAL, MANTEIGA ; USAR FOGO;
COLOCAR FRIGIDEIRA NO FOGO; COLOCAR
MANTEIGA NA FRIGIDEIRA; LIGAR FOGO; ES-
PERAR MANTEIGA FICAR QUENTE; QUEBRAR
OVO; DERRAMAR OVO NA FRIGIDEIRA; CO-
LOCAR SAL NO OVO; ESPERAR OVO FICAR
FRITO; DESLIGAR FOGO; SERVIR OVO; FIM
PROGRAMA
Porm, programas de computador trabalham com dados,
e um programa tpico real (usando a linguagem Python)
def somar(num1, num2): return num1 + num2
Este programa (ou melhor, essa funo) retorna a soma
de dois nmeros.
Captulo 4

Como programar

4.0.1 Estrutura interna de um computa-


dor Memory
Um computador minimalista constitudo por trs uni-
dades bsicas:

Arithmetic
Processador, como o nome indica, o componente
principal do processamento; Control Logic
Unit Unit
Memria, quem mantm dados e programas;
Accumulator
Dispositivos de entrada e sada (Input/Output), tais
como teclado, monitor ou impressora.

Em um computador pessoal, esses componentes normal- Input Output


mente esto colocados em uma placa me.
importante notar que os chamados dispositivos de
memria secundria se comunicam com a parte princi- Figura 1: Esquema genrico de um computador
pal do computador por dispositivos de entrada e sada.
Assim, um disco rgido s pode ser usado se conectado
a placa me por meio de uma interface (SCSI ou SATA,
por exemplo).
Usualmente, representamos um computador de forma
abstrata por um diagrama muito simples que mostra uma
unidade de processamento capaz de usar dados que pro-
vm ou devem ser guardados tanto na memria quanto
em dispositivos de entrada e sada:
Antes de car perplexo a tentar perceber que esquema
aquele ali em cima, irei explic-lo para o leitor compre-
ender como um computador funciona no fundo.
O esquema apresenta dois dispositivos de entrada (PCI
Figura 2: Esquema genrico de uma placa me
Express - aquelas onde ns colocamos a nossa placa gr-
ca, placa de rede ou placa de som...), quatro pistas de
encaminhamento de dados (so mais, muitas mais num
computador atual), onde circulam os dados, provavel- usados e para a Cache os dados mais acessados pelo pro-
mente codicados, provenientes das entradas, diretas cessador. Os Jumpers controlam, alm da velocidade de
central de processamento (CPU ou Processador). A, os processamento, que tipo de entradas podero gerar da-
milhes de transstores existentes dentro dessa caixinha, dos, entre outras coisas. O mesmo processo se sucede aos
iro processar e criar novos dados que sero distribudos dados que retornam aos dispositivos I/O. Et voil, aqui
pela rede interna do PC, segundo a codicao apresen- est uma explicao muito, muito resumidinha de toda a
tada nos dados de entrada. O Processador pode guar- teoria de processamento de um computador.
dar dados dentro da memria RAM e na memria Ca- Alargando um pouco mais a escala, dispositivos perifri-
che, sendo que, para a memria RAM iro dados menos cos, tais como impressoras e scanners, acessam tambm

5
6 CAPTULO 4. COMO PROGRAMAR

ao processador. Atualmente os dispositivos no so con- pode existir isoladamente, logo precisa de estar ligado
trolados pelo processador, cabendo isso a uma memria por algo": os Barramentos BUS do processador so os
EEPROM chamada BIOS. caminhos por onde a informao encaminhada aos
Se quiser conhecer mais sobre este assunto sugiro que dispositivos do computador e vice-versa. Quanto maior
procure pelos excelentes tutoriais da Guia do Hardware o nmero de Bus mais rapidamente se do as transfern-
sobre o tema (que, alis, poder ser uma casa interessante cias. Existem vrias tecnologias e protocolos usados no
para quem quer aprender mais sobre hardware e Linux). BUS. Siga o link BUS para saber mais sobre isso.

4.0.2 Processamento de dados 4.1 Ver tambm


O processador a unidade central do computador, desig-
nado por CPU (Central Processing Unit). A sua funo
a de interpretar e executar instrues.
A unidade de medida da velocidade de um processador
o Hz (hertz). O hertz a unidade de medida da frequn-
cia, que, em fsica, denida como sendo o nmero de
ciclos que ocorrem por unidade de tempo - a frequncia
de um relgio 1/3600 Hz, ou seja, demora 1 hora at
se dar uma volta completa. Nos computadores mais atu-
ais, a velocidade mdia de 1 Gigahertz, ou 1 bilho de
ciclos de relgio por segundo, ou 1 bilho de hertz, ou
ainda, analogamente, 1 bilho de voltas completas no re-
lgio em 1 segundo. No nosso exemplo, 01 hertz pode
transportar no mnimo 01 bit (1 informao), para efeito
de comparao 1 bit (1 hertz) pode ser comparado a 1
letra deste texto, logo computadores que trabalham com
2 bilhes de letras por segundo (02 Gigahertz) podem
ler um livro mais rpido que outro que os que somente
leem 1 bilho de letras (01 Gigahertz).

Figura 2 - Esquema genrico de um processador

O Processador formado por milhes de transstores,


onde cada um processa um bit de cada vez, ou seja, apre-
senta ou o estado 1 ou o estado 0. Esta diversidade de
sequncias possveis cria um leque innito de instrues.
De fato as limitaes encontradas no momento da criao
de software no so encaradas pelo processador mas sim
pela estrutura da mquina. O Processador, teoricamente,
em termos de processamento de dados ilimitado, no
existe limites de processamento.
Por vezes so necessrias vrias operaes matemti-
cas complexas. Existe, dentro do prprio processador,
uma pequena seo chamada Coprocessador Matem-
tico FPU encarregada disso. Mas o processador no
Captulo 5

Denies sobre Lgica de Programao

Lgica de Programao a tcnica de desenvolver al- 5.1 Formalismo


goritmos (sequncias lgicas) para atingir determinados
objetivos dentro de certas regras baseadas na Lgica ma- Um programa de computador essencialmente um algo-
temtica e em outras teorias bsicas da Cincia da Com- ritmo que diz ao computador os passos especcos e em
putao e que depois so adaptados para a Linguagem de que ordem eles devem ser executados, como por exem-
Programao utilizada pelo programador para construir plo, os passos a serem tomados para calcular as notas que
seu software. sero impressas nos boletins dos alunos de uma escola.
Um algoritmo uma sequncia no ambgua de instru- Logo, o algoritmo pode ser considerado uma sequncia
es que executada at que determinada condio se de operaes que podem ser simuladas por uma mquina
verique. Mais especicamente, em matemtica, consti- de Turing completa.
tui o conjunto de processos (e smbolos que os represen- Quando os procedimentos de um algoritmo envolvem o
tam) para efetuar um clculo. processamento de dados, a informao lida de uma
O conceito de algoritmo frequentemente ilustrado pelo fonte de entrada, processada e retornada sob novo valor
exemplo de uma receita, embora muitos algoritmos sejam aps processamento, o que geralmente realizado com o
mais complexos. Eles podem repetir passos (fazer itera- auxlio de uma ou mais estruturas de dados.
es) ou necessitar de decises (tais como comparaes Para qualquer processo computacional terico, o algo-
ou lgica) at que a tarefa seja completada. Um algoritmo ritmo precisa estar rigorosamente denido, especicando
corretamente executado no ir resolver um problema se a maneira que ele se comportar em todas as circunstn-
estiver implementado incorretamente ou se no for apro- cias. A corretude do algoritmo pode ser provada matema-
priado ao problema. ticamente, bem como a quantidade assinttica de tempo e
Um algoritmo no representa, necessariamente, um pro- espao (complexidade) necessrios para a sua execuo.
grama de computador, e sim os passos necessrios para Estes aspectos dos algoritmos so alvo da anlise de al-
realizar uma tarefa. Sua implementao pode ser feita por goritmos. As implementaes, porm, podem se limitar
um computador, por outro tipo de autmato ou mesmo a casos especcos.
por um ser humano. Diferentes algoritmos podem reali- A maneira mais simples de se pensar um algoritmo por
zar a mesma tarefa usando um conjunto diferenciado de uma lista de procedimentos bem denida, no qual as ins-
instrues em mais ou menos tempo, espao ou esforo trues so executadas passo a passo a partir do comeo
do que outros. Tal diferena pode ser reexo da comple- da lista, uma ideia que pode ser facilmente visualizada
xidade computacional aplicada, que depende de estrutu- atravs de um uxograma. Tal formalizao adota as pre-
ras de dados adequadas ao algoritmo. Por exemplo, um missas da programao imperativa, que uma forma me-
algoritmo para se vestir pode especicar que voc vista cnica para visualizar e desenvolver um algoritmo. Con-
primeiro as meias e os sapatos antes de vestir a cala en- cepes alternativas para algoritmos variam em progra-
quanto outro algoritmo especica que voc deve primeiro mao funcional e programao lgica.
vestir a cala e depois as meias e os sapatos. Fica claro
que o primeiro algoritmo mais difcil de executar que o
segundo apesar de ambos levarem ao mesmo resultado.
5.2 Trmino do algoritmo
O conceito de um algoritmo foi formalizado em 1936 pela
Mquina de Turing de Alan Turing e pelo clculo lambda
Alguns autores restringem a denio de algoritmo para
de Alonzo Church, que formaram as primeiras fundaes
procedimentos que eventualmente terminam. Minksy
da Cincia da Computao.
constatou que se o tamanho de um procedimento no co-
nhecido de antemo, tentar descobri-lo problema inde-
cidvel j que o procedimento pode ser executado in-
nitamente, de forma que nunca se ter a resposta. Alan

7
8 CAPTULO 5. DEFINIES SOBRE LGICA DE PROGRAMAO

Turing provou em 1936 que no existe mquina de Tu- inicio declare SOMA numrico SOMA <-- A + B retorne
ring para realizar tal anlise para todos os casos, logo no (SOMA) m
h algoritmo para realizar tal tarefa para todos os casos.
Tal condio conhecida atualmente como problema da
parada. Basicamente, isto quer dizer que no existe um 5.5 Classicao
programa de computador que possa antever, de forma ge-
ral, se um outro programa de computador vai parar algum
dia. 5.5.1 Classicao por implementao
Para algoritmos interminveis o sucesso no pode ser de- Pode-se classicar algoritmos pela maneira pelo qual fo-
terminado pela interpretao da resposta e sim por con- ram implementados.
dies impostas pelo prprio desenvolvedor do algoritmo
durante sua execuo. Por exemplo, podemos querer um
Recursivo ou iterativo - um algoritmo recursivo
algoritmo interminvel para controlar um sinal de trn-
possui a caracterstica de invocar a si mesmo repeti-
sito.
damente at que certa condio seja satisfeita e ele
terminado, que um mtodo comum em programa-
o funcional. Algoritmos iterativo usam estrutu-
5.3 Implementao ras de repetio tais como laos, ou ainda estruturas
de dados adicionais tais como pilhas, para resolver
A maioria dos algoritmos desenvolvida para ser imple- problemas. Cada algoritmo recursivo possui um al-
mentada em um programa de computador. Apesar disso goritmo iterativo equivalente e vice versa, mas que
eles tambm podem ser implementados por outros modos pode ter mais ou menos complexidade em sua cons-
tais como uma rede neural biolgica (tal como no cre- truo. possvel construir algoritmos que sejam ao
bro quando efetuamos operaes aritmticas) em circui- mesmo tempo iterativo e recursivo, provavelmente
tos eltricos ou at mesmo em dispositivos mecnicos. para aproveitar alguma otimizao de tempo ou es-
Para programas de computador existem uma grande vari- pao que isso permita.
edade de linguagens de programao, cada uma com ca-
ractersticas especcas que podem facilitar a implemen- Lgico - um algoritmo pode ser visto como uma de-
tao de determinados algoritmos ou atender a propsitos duo lgica controlada. O componente lgico ex-
mais gerais. pressa os axiomas usados na computao e o com-
ponente de controle determina a maneira como a de-
duo aplicada aos axiomas. Tal conceito base
5.4 Anlise de algoritmos para a programao lgica.

A anlise de algoritmos um ramo da cincia da compu- Serial ou paralelo - algoritmos so geralmente as-
tao que estuda as tcnicas de projeto de algoritmos e sumidos por serem executados instruo instru-
os algoritmos de forma abstrata, sem estarem implemen- o individualmente, como uma lista de execuo,
tados em uma linguagem de programao em particular o que constitui um algoritmo serial. Tal conceito
ou implementadas de algum outro modo. Ela preocupa- base para a programao imperativa. Por outro lado
se com os recursos necessrios para a execuo do algo- existem algoritmos executados paralelamente, que
ritmo tais como o tempo de execuo e o espao de ar- levam em conta arquiteturas de computadores com
mazenamento de dados. Deve-se perceber que para um mais de um processador para executar mais de uma
dado algoritmo pode-se ter diferentes quantidades de re- instruo ao mesmo tempo. Tais algoritmos divi-
cursos alocados de acordo com os parmetros passados dem os problemas em sub-problemas e o delegam a
na entrada. Por exemplo, se denirmos que o fatorial de quantos processadores estiverem disponveis, agru-
um nmero natural igual ao fatorial de seu antecessor pando no nal o resultado dos sub-problemas em
multiplicado pelo prprio nmero, ca claro que a execu- um resultado nal ao algoritmo. Tal conceito base
o de fatorial(10) consome mais tempo que a execuo para a programao paralela. De forma geral, algo-
de fatorial(5). ritmos iterativos so paralelizveis; por outro lado
existem algoritmos que no so paralelizveis, cha-
Um meio de exibir um algoritmo a m de analis-lo mados ento problemas inerentemente seriais.
atravs da implementao por pseudocdigo em portu-
gus estruturado. O exemplo a seguir um algoritmo em Determinstico ou no-determinstico - algorit-
portugus estruturado que retorna (valor de sada) a soma mos determinsticos resolvem o problema com uma
de dois valores (tambm conhecidos como parmetros ou deciso exata a cada passo enquanto algoritmos no-
argumentos, valores de entrada) que so introduzidos na determinsticos resolvem o problema ao deduzir os
chamada da funo: melhores passos atravs de estimativas sob forma de
funo SomaDeDoisValores (A numrico, B numrico) heursticas.
5.6. RESUMO 9

Exato ou aproximado - enquanto alguns algorit- 5.5.3 Classicao por campo de estudo
mos encontram uma resposta exata, algoritmos de
aproximao procuram uma resposta prxima a ver- Cada campo da cincia possui seus prprios proble-
dadeira soluo, seja atravs de estratgia determi- mas e respectivos algoritmos, adequados para resolv-los.
nstica ou aleatria. Possuem aplicaes prticas so- Exemplos clssicos so algoritmos de busca, de ordena-
bretudo para problemas muito complexos, do qual o, de anlise numrica, de teoria de grafos, de manipu-
uma resposta correta invivel devido sua com- lao de cadeias de texto, de geometria computacional,
plexidade computacional. de anlise combinatria, de aprendizagem de mquina,
de criptograa, de compresso de dados e de interpreta-
o de texto.
5.5.2 Classicao por paradigma

Pode-se classicar algoritmos pela metodologia ou para- 5.5.4 Classicao por complexidade
digma de seu desenvolvimento, tais como:
Ver artigo principal: Complexidade computacional. Al-
guns algoritmos so executados em tempo linear, de
Diviso e conquista - algoritmos de diviso e con- acordo com a entrada, enquanto outros so executados
quista reduzem repetidamente o problema em sub- em tempo exponencial ou at mesmo nunca terminam de
problemas, geralmente de forma recursiva, at que serem executados. Alguns problemas possuem mltiplos
o sub-problema pequeno o suciente para ser re- algoritmos enquanto outros no possuem algoritmos para
solvido. Um exemplo prtico o algoritmo de or- resoluo.
denao merge sort. Uma variante dessa metodo-
logia o decremento e conquista, que resolve um
sub-problema e utilizao a soluo para resolver 5.6 Resumo
um problema maior. Um exemplo prtico o al-
goritmo para pesquisa binria.
5.7 Bibliograa
Programao dinmica - pode-se utilizar a pro-
gramao dinmica para evitar o re-clculo de solu-
o j resolvidas anteriormente.

Algoritmo ganancioso - um algoritmo ganancioso


similar programao dinmica, mas difere na
medida que as solues dos sub-problemas no pre-
cisam ser conhecidas a cada passo, uma escolha ga-
nanciosa pode ser feita a cada momento com o que
at ento parece ser mais adequado.

Programao linear

Reduo - a reduo resolve o problema ao


transform-lo em outro problema. chamado tam-
bm transformao e conquista.

Busca e enumerao - vrios problemas podem ser


modelados atravs de grafos. Um algoritmo de ex-
plorao de grafo pode ser usado para caminhar pela
estrutura e retornam informaes teis para a reso-
luo do problema. Esta categoria inclui algoritmos
de busca e backtracking.

Paradigma heurstico e probabilstico - algo-


ritmos probabilsticos realizam escolhas aleatoria-
mente. Algoritmos genticos tentam encontrar a so-
luo atravs de ciclos de mutaes evolucionrias
entre geraes de passos, tendendo para a soluo
exata do problema. Algoritmos heursticos encon-
tram uma soluo aproximada para o problema.
Captulo 6

Histria da Programao

A mais antiga programadora de computadores de que


se tem notcia Ada Lovelace, que descreveu o funci-
onamento da mquina analtica de Charles Babbage, que
nunca cou pronta. O primeiro programador que com-
pletou todos os passos para a computao, incluindo a
compilao e o teste, foi Wallace Eckert. Ele usou lin-
guagem matemtica para resolver problemas astronmi-
cos na dcada de 1930. Alan Turing elaborou e progra-
mou um computador destinado a quebrar o cdigo ale-
mo ENIGMA na Segunda Guerra Mundial.

10
Captulo 7

Lgica

7.0.1 Lgica binria 7.1.4 XOR

A lgica binria, ou bitwise operation a base de todo o O operador binrio XOR, ou disjuno binria exclu-
clculo computacional. Na verdade, so estas operaes siva devolve um bit 1 sempre que apenas um dos ope-
mais bsicas que constituem todo o poderio dos compu- randos seja '1', conforme podemos conrmar pela tabela
tadores. Qualquer operao, por mais complexa que pa- de verdade:
rea, traduzida internamente pelo processador para es- Implementao:
tas operaes.
isto XOR aquilo, Fazer assim

7.1.5 Shift
7.1 Operaes
O operador unrio de bit shifting, ou deslocamento bit-
a-bit, equivale multiplicao ou diviso por 2 do ope-
7.1.1 NOT rando que, ao contrrio dos casos anteriores, um grupo
de bits, e consiste no deslocamento para a esquerda ou
O operador unrio NOT, ou negao binria resulta no para a direita do grupo de bits. O bit inserido sempre 0,
complemento do operando, i.e., ser um bit '1' se o ope- e o bit eliminado pode ser opcionalmente utilizado (ag
rando for '0', e ser '0' caso contrrio, conforme podemos CF dos registradores do processador).
conrmar pela tabela de verdade:
( 101011(43) >> 1 ) = 010101[1] ( 101011(43) << 1 ) =
Implementao: [1]010110
Se isto NOT aquilo

7.2 Ver tambm


7.1.2 AND Lgica

O operador binrio AND, ou conjuno binria devolve


um bit 1 sempre que ambos operandos sejam '1', con-
forme podemos conrmar pela tabela de verdade:
Implementao:
Se isto AND aquilo, Fazer assim

7.1.3 OR

O operador binrio OR, ou disjuno binria devolve


um bit 1 sempre que pelo menos um dos operandos seja
'1', conforme podemos conrmar pela tabela de verdade:
Implementao:
Se isto OR aquilo, Fazer assim

11
Captulo 8

Aprendizagem

8.0.1 Como aprender 3 - Fazer algo que vai realmente torn-lo um bom
programador dessa linguagem: Ler cdigo j feito.
necessria muita persistncia para aprender a progra-
mar. Para isso precisamos de um pouco de tempo e de- 4 - Comear a escrever os seus prprios programas.
dicao linguagem. Tente acompanhar os estudos em
horrios e dias denidos, 1 hora por dia, nas teras, quin- preciso ter em ateno estes passos que so fundamen-
tas e sbados, por exemplo. Sugiro que comece por estu- tais. Assim, se no souber o que determinada funo,
dar uma linguagem simples e direta, e medida que for sempre pode ir ao manual e procurar. No se prenda ao
conhecendo novas regras de programao, procure evo- marrano do livro porque isso no o leva a nada.
luir para outras linguagens. Alguns programadores dizem Este padro ecaz porque, para um iniciante, poss-
que para qualquer programador o auge da sua carreira vel aprender-se uma linguagem em pouco mais de 5 ou
conhecer profundamente as linguagens denidas como as 6 meses. Para um programador experiente basta apenas
mais prestigiadas, tais como a Linguagem C, C++ e As- uma a duas semanas para cessar a aprendizagem de uma
sembly. Uma possvel sequncia lgica de aprendizagem nova linguagem.
seria:
Aps a passagem por essa linguagem, inscreva-se numa
Como podemos ver, aprender a programar leva tempo, das centenas de listas existentes na internet e aperfeioe
h os que dizem ser difcil, e os que dizem ser divertido. os seus conhecimentos ajudando outros usurios a criar
Seja tambm criativo enquanto escreve algoritmos, use programas open source. Ver que se sentir feliz por ter
novos conceitos e no tenha receio de experimentar novas chegado to longe! necessrio ter em mente que se
ideias. seguir estas regras aprender a ser um bom programador.

8.0.2 O padro ecaz


O Padro Ecaz algo que existe empiricamente num
programador, quando este pretende estudar uma nova lin-
guagem. O conceito est aqui apenas formalizado e de-
nominado por Padro Ecaz.
Mas o que o Padro Ecaz?
Quando se pretende estudar uma linguagem, no se pode
estar espera que lendo determinado livro ou frequen-
tando determinado curso caremos a sab-la perfeita-
mente. A verdade que no necessitamos do livro para
aprender a programar bem e o curso, para alguns, s
uma perda de tempo. A grande maioria dos livros serve
como um auxilio ao estudo e no como um suporte base
do estudo. Assim, o que a maior parte dos programadores
fazem para aprender uma nova linguagem :

1 - Estudar a sintaxe da linguagem atravs de um


livro ou manual.

2 - Entender as diferenas desta linguagem para ou-


tras que j saibam - Isto muito importante!

12
Captulo 9

Algoritmos

Um algoritmo um esquema de resoluo de um pro- Linguagem humana:


blema. Pode ser implementado com qualquer sequncia Se for verdade isso, acontece isto, seno acon-
de valores ou objetos que tenham uma lgica innita (por tece aquilo
exemplo, a lngua portuguesa, a linguagem Pascal, a lin-
guagem C, uma sequncia numrica, um conjunto de ob- Linguagem de mquina:
jetos tais como lpis e borracha), ou seja, qualquer coisa IF isso; THEN isto; ELSE aquilo;
que possa fornecer uma sequncia lgica. Em baixo po-
demos ver um algoritmo implementado num uxograma, O contedo escrito em cima est formalizado numa lin-
sobre o estado de uma lmpada: guagem de algoritmos chamada Portugol pela maior parte
dos programadores e professores que trabalham em insti-
tuies de ensinamento das linguagens de programao.
Como pode visualizar, um algoritmo pode ser escrito de
vrias maneiras, de cima para baixo, da esquerda para a
direita, na diagonal, em rabe, em russo... preciso
que o escreva!

9.1 Fundamentos
Uma mquina computacional qualquer mquina (geral-
mente de origem eletro-eletrnica) com capacidade de re-
ceber dados, executar operaes sobre estes dados e re-
tornar os dados transformados por estas operaes.

Figura 3 - Algoritmo num uxograma


As mquinas computacionais eletro-eletrnicas possuem
Seguindo o raciocnio em cima, ento um programa de geralmente dois componentes bsicos: software e hard-
computador j por si um algoritmo? Sim, ver- ware. Chamamos de Hardware sua parte fsica, e soft-
dade. Embora tenhamos que usar um algoritmo prvio, ware os programas que tratam os dados imputados.
na nossa lngua (como apresentado na imagem acima) Quando inserimos algum dado em um computador, os
para escrever um programa com lgica, o prprio pro- dados inseridos so transformados em sinais eltricos
grama que provm desse algoritmo j um algoritmo. (chamados de bits). O bit (do ingls binary digit) repre-
At um esquema mental um algoritmo. senta os dois estados (ligado ou desligado) que o sinal
Ok, j percebi o que um algoritmo. Mas porque que eltrico pode assumir. Para trabalhar com estes dados,
isso interessa ao estudo da programao? podemos associar estes estados de ligado e desligado a 0
A verdade que, antes de escrevermos um programa em e 1. Quando utilizamos um computador, h um uxo de
qualquer outra linguagem necessrio escrever um es- sinais eltricos, que representam os dados inseridos, pro-
quema em papel para evitar erros, por exemplo, na nossa cessados e retornados. Um conjunto de oito bits formam
lngua, segundo o programa que queremos fazer. Com um byte, que uma unidade completa de informao.
isto no esquecemos a lgica que queremos dar ao pro- Dentro do byte, o estado de cada um dos oito bits, as-
grama e ser menos comum o aparecimento de erros. Por sim como sua posio relativa um ao outro, faz com que
exemplo: o byte assuma um valor especco (no necessariamente

13
14 CAPTULO 9. ALGORITMOS

numrico), que serve para estrutur-lo em relao a ou- formaes que sero imputadas e os passos a serem efe-
tros bytes e criar um sistema de dados que sirva ao usurio tuados para atingir-se um m especco. Por exemplo,
externo. vamos ver um algoritmo sobre tomar banho":
Para organizar as possibilidades de variaes destes bits
dentro de um byte, podemos visualizar uma tabela ASCII: 1.Tirar a roupa.
2.Abrir o registro.
3.Ensaboar-se.
4.Enxaguar o corpo.
9.2 Lgica de Programao 5.Passar shampoo nos cabelos.
6.Enxaguar o cabelo.
Logicamente torna-se trabalhoso trabalhar com dados de
computador bit-a-bit. Como forma de manipular este 7.Fechar o registro.
uxo de estados eltricos e estrutur-lo de forma a per-
mitir operaes mais simplicadas e otimizadas sobre os Vimos ento um problema proposto (tomar banho) e os
bytes, surgiu o conceito de programao. As linguagens passos para solucionar o problema. Logicamente, que h
de programao so geralmente em dois nveis: outras formas de estruturarmos este algoritmo de forma
a adapt-lo a atingir o mesmo m. No entanto, o impor-
Linguagens de Baixo Nvel: so linguagens de tante estrutur-lo de forma coerente, ecaz e simples,
programao que tratam a informao na linguagem ou como muitos dizem de forma elegante. Veremos
de mquina. na prxima lio que podemos desenhar este algoritmo
e aplicar conectivos lgicos que permitam manipular as
Linguagens de Alto Nvel: so linguagens de pro- informaes necessrias.
gramao modeladas quase como a linguagem co- O exemplo abaixo, usar o orelho, apresenta condies
mum humana, que quando compiladas so conver- para tomar deciso.
tidas para linguagem de mquina. Cada linguagem
deste tipo possui uma sintaxe prpria, que deve ser
1. Retirar o fone do gancho;
respeitada e aprendida para que possa ser correta-
mente processada por seu compilador. Compilador 2. Colocar o carto telefnico;
um programa que permite que determinada pro-
gramao em uma linguagem especca seja adap- 3. Esperar o rudo de discar;
tada para linguagem de mquina.
4. Com rudo de discar, disque o nmero desejado;
No entanto, no necessrio que o programador aprenda
5. Se sinal de ocupado, faa:
todas as diversas linguagens disponveis no mercado.
Cada linguagem recomendada para determinadas apli- (a) Colocar fone no gancho e voltar ao passo 1;
caes, assim como possuem suas sintaxes prprias, mas
todas so estruturadas logicamente. Com aprendizado da 6. Se sinal de chamada, faa:
Lgica de Programao o aluno entender os conceitos
bsicos da programao poder com menor ou maior di- (a) Esperar atender ao telefone;
culdade, dependendo da linguagem escolhida, aprender (b) Conversar;
a linguagem que quiser.
(c) Colocar fone no gancho;
(d) Retirar o carto;
9.3 Algoritmo
Algoritmos tambm podem ter condies para repetio.
As linguagens de programao tratam os dados de um
computador atravs do uso de algoritmos. Um algoritmo
uma estruturao passo-a-passo de como um determi- 9.4 Resumo
nado problema deve ser resolvido de forma no-ambigua
(ou como muitos comparam uma receita de bolo) .
Desta forma, para realizar esta estruturao necessrio 9.5 Exerccios
o uso de ferramentas e operaes oriundas da Lgica, e
principalmente da Lgica Matemtica. Para complementar os estudos baixe alguns exerccios de
Antes de estruturar-se de forma lgica para programao, algoritmos. Faa esses exerccios at sua lgica de pro-
devemos saber qual o tipo de problema proposto, as in- gramao car bem aada.
9.6. BIBLIOGRAFIA 15

9.6 Bibliograa
Algoritmo, artigo na Wikipdia em portugus

Bit, artigo na Wikipdia em portugus


Captulo 10

Estruturas de manipulao de dados

Como j foi referido e lgico, as linguagens de progra- Variveis e constantes


mao tm coisas em comum. Uma delas so as estru-
turas de controle. Estruturas de Controle so denidas Uma varivel uma expresso que varia e normalmente
como sendo a base da lgica da programao e podem representado por uma incgnita X, e uma constante
ser de dois nveis: direto ou indireto (complexo). Para uma expresso que no se altera (o nmero de Avogadro,
termos uma ideia da diferena entre um controle direto o pi, o nmero de Neper) que pode ser representado por
e um controle indireto, apresento a seguir dois dilogos uma letra.
representativos de duas situaes do cotidiano:
Nos programas, variveis so todas as expresses que po-
Pedro - Onde foste Miguel?" Miguel - Fui loja com- dem ou no variar, assim como tambm podem ser cons-
prar roupa. Indivduo - Onde posso arranjar uma cer- tantes. Uma coisa bvia: Constantes no podem ser
tido A-R53?" Inspetor - Tem que levar a sua identi- variveis!
cao ao guich, pedir um impresso GHA NORMAL
Na funo seguinte Y assume o dobro de todos os valores
carimbado para 3 meses. Aps a concluso da escritura
de X: Y = 2X --> Nesta funo, X varia por isso Y uma
ter que aguardar at que seja chamado pela sua vez.
varivel Na seguinte funo Y assume sempre o valor 2:
Analisando os dois casos, rapidamente conclumos que a Y = 2 --> Nesta funo Y no varia e por isso constante.
resposta obtida no primeiro direta e bem mais simples Aqui est patente a diferena de uma funo varivel e
que no segundo. Ora, se quisesse converter estas situa- uma funo constante em matemtica.
es para uma situao parecida no computador, podera-
Transportando a noo de Varivel e Constante para a
mos constatar que bastava-nos uma pgina de um cdigo
programao, apresento agora dois trechos de cdigo em
sequenciado para o computador proceder a recriao do
PHP e C++:
contedo da primeira situao. O mesmo j no se veri-
ca no segundo. Normalmente para este tipo de casos, o //Vamos representar um texto como uma varivel
programador utiliza peas fundamentais chamadas fun- representada por p (sintaxe de PHP): <?php $p = Ol
es (do ingls function) que retratam cada um nico Mundo!"; //Agora vou apresent-la na tela echo $p; ?>
acontecimento da situao, havendo assim ligaes en-
tre eles dependendo dos resultados obtidos. Funes so No caso acima, uma varivel um texto que foi guardado
retratadas mais frente. em memria, representado por p.
Penso que com estes dois exemplos o leitor j entende //Represento agora um Ol Mundo!" como uma cons-
bem o que um Algoritmo direto e um Algoritmo com- tante (sintaxe do C++): #include <iostream.h>; int
plexo. main() { cout << Ol Mundo!"; return 0; }

10.0.1 Estruturas bsicas No se assuste se no entendeu nada do que se passou


ali em cima. Aqui Ol Mundo!" foi uma constante e no
Qualquer programa tem que fazer alguma coisa (nem que uma varivel, pois ela no foi guardada em memria, mas
seja enviar um sinal bip) seno no um programa, ou imposta pela instruo cout diretamente.
seja, ele tem que apresentar contedo. Assim, como apre-
senta contedo, vai alterar estados dentro do computa-
dor, sendo que, o estado de uma das peas que vai ine- Instrues
vitavelmente se alterar a memria interna. inevitvel
um programa no se alojar na memria do computador, As instrues so pequenos comandos que ditam ao pro-
assim, o programa precisa de um espao fsico na mem- grama o que fazer com determinado dado. Elas podem
ria e para isso ter que o requisitar. disso que iremos guardar informao, apresentar informao, aguardar um
falar a seguir. input, etc.

16
17

Aqui apresentamos algumas instrues que so mais co- while (x <> z) do begin writeln ('Qual o valor de Z?')
muns assim como a sua implementao no C++ e PHP: readln (z) end;

No cdigo acima, enquanto o valor de Z for diferente do


10.0.2 Estruturas de controle estabelecido para X, ser pedido ao usurio que entre com
o valor de Z.
IF

IF o mesmo que SE e usado por todas as linguagens de


programao por ser a estrutura mais simples que existe. 10.0.3 Funes
A sua implantao representa o lanamento de um boo-
leano Verdadeiro ou Falso. Funes so pequenos trechos de cdigo independentes
IF isto DO aquilo que so especializados a tratar determinado tipo de da-
dos dentro de um programa. H linguagens, como o C ou
o C++, que s trabalham com Funes, outras, como as
ELSE linguagens de script (PHP, Python, Perl, etc) , que traba-
lham com funes e com cdigo solto em sequncia.
ELSE usado como um acrscimo de IF, levando a que Exemplo de implementao de funes:
todos os dados retornados como FALSO em IF sejam
controlados por este ELSE. FUNCTION nome_da_funo (argumento 1, argumento
2, argumento x,...) Cdigo RETURN dados a serem re-
IF isto DO aquilo ELSE outra coisa tornados ao cdigo principal
Exemplo da implementao de funes num cdigo:
SWITCH FUNCTION multiplicador (numero) X = 10E21 Y = nu-
mero * X RETURN Y END-FUNCION GET numero
O SWITCH visto como uma substituio de IF-ELSE IF numero >= 1 GOTO multiplicador SHOW Y END-IF
quando existem mais de 2 opes a serem controladas. ELSE SHOW No nmero inteiro END-ELSE
SWITCH varivel CASE argumento 1: cdigo corres- Neste cdigo, ns conhecemos o poder das funes. No
pondente CASE argumento 2: cdigo correspondente caso acima, pedido ao utilizador a introduo de um
CASE argumento 3: cdigo correspondente nmero. Depois disso, o computador analisa se o n-
Neste caso, SWITCH ir procurar qual o argumento que mero inteiro, e se for, ele chama a funo multiplica-
varivel contm e assim escolher qual dos CASE correr. dor, retornando uma varivel Y contendo o nmero in-
troduzido anteriormente multiplicado pelo expoente 22.
Se pelo contrrio, o nmero introduzido no for inteiro, o
FOR computador lana uma mensagem de erro No nmero
inteiro.
FOR um loop que acontece enquanto determinado ar-
gumento no se tornar verdadeiro.
X = 1 FOR X <= 10 X = X + 1 10.0.4 Arrays
Pode ser mais difcil desvendar este cdigo (principal-
mente se o leitor for matemtico e car perplexo com a Os Arrays so simples estruturas de dados, denominadas
linha X = X + 1), mas o que est escrito ali em cima como vector ou lista se forem arrays uni-dimensionais, ou
que enquanto X no for igual a 10, a instruo FOR vai matriz se forem poli-dimensionais. O que acontece que
sempre voltar ao incio e somar/incrementar 1 ao valor de numa Array os dados so listados e ordenados segundo
X. propriedades ou variveis que tentamos dominar.
A sada no processamento a seguinte: No caso seguinte apresentamos uma array ordenada com
dados sobre o estado de um programa open-source:
X=1X=2X=3X=4X=5X=6X=7X=8X=9
X = 10 ARRAY (verso => ARRAY (alpha => 0.1 beta
=> 0.5 nal => 0.9 ) FIM-ARRAY; SO => ARRAY
(win => Windows uni => UNIX-Like mac =>
While Mac-OS ) FIM-ARRAY; ) FIM-ARRAY;

WHILE, estrutura utilizada em grande parte das lin- Aos dados descritos como verso e SO chamamos
guagens de programao atuais, especica uma ao en- Chave e todos os outros so Valores. Ento a todo um
quanto determinada condio for verdadeira. Observe o valor aponta uma chave.
exemplo escrito em pascal. ARRAY (Chave => Valor);
18 CAPTULO 10. ESTRUTURAS DE MANIPULAO DE DADOS

10.0.5 Operaes aritmticas 10.0.6 Concluso

Em qualquer linguagem, existe a possibilidade de se cal- Estas so as instrues mais bsicas usadas por todas as
cularem expresses algbricas aritmticas, segundo os si- linguagens de programao existentes, exatamente por
nais convencionais (+, -, *, e /), logo qualquer expresso serem bsicas e simples. Sem elas, uma linguagem no
que seja numrica se comporta como dada na matem- era creditada e apresenta demasiados limites para ser
tica elementar. Porm, possvel usar-se expresses alfa- considerada uma linguagem de programao racional.
numricas para se proceder a clculos mais complexos
(matria em que no iremos entrar pois aqui as lingua-
gens diferem no seu comportamento - algumas aceitam,
outras calculam o valor hexadecimal ou ASCII do carac-
ter, outras formam strings (frases), etc - levando assim a
um leque innito de possibilidades de programao, de-
pendendo das necessidades previstas por cada tipo de lin-
guagens).

Operaes aritmticas

Podemos somar qualquer expresso algbrica do seguinte


modo:
2 + 2 = A MOSTRAR A
Obviamente que iramos obter 4 como resultado mos-
trado.
Analogamente, possvel calcular com qualquer calcula-
dor matemtica bsica:
4 * 5 = B MOSTRAR B //resultado de 20 2 / 3 = C MOS-
TRAR C //resultado de 0,(6)
Uma vez visto isto, poderamos pensar que seria possvel
calcular expresses complexas
3 * 5 + 2 / 3 - 5 = D MOSTRAR D
O que obtemos acima pode ser ambguo, resultado da ma-
neira como as linguagens de programao interpretam a
expresso - calcular a expresso por sequncia lgica ma-
temtica ou por sequncia apresentada. Atualmente to-
das as linguagens mais comuns seguem a sequncia l-
gica matemtica para calcularem a expresso e assim o
resultado obtido ser 10,(6) e no 0,(6).

Operaes complexas

Como ser que o computador se comporta com os cl-


culos que usam nmeros de ponto utuante ou nmeros
exponenciais?
Da mesma maneira como na matemtica, o computador
tratar de arredondar casas decimais (algumas linguagens
como PHP necessitam da funo round() para arredon-
dar bem matematicamente) e de calcular potncias, tudo
isto para chegar a um resultado com um nmero real apro-
ximado ao que se diz matematicamente verdadeiro.
Ponto utuante: 0,512 + 2/3 = 1,178(6) //com quantas
casas decimais o leitor quiser e o computador permitir
Captulo 11

Pseudo-cdigo

Pseudocdigo uma forma genrica de escrever um Caracter: varivel que armazena dados do jeito que
algoritmo, utilizando uma linguagem simples (nativa a so digitados- assim podem alocar letras, letras e n-
quem o escreve, de forma a ser entendido por qualquer meros ou somente nmeros, mas tratando estes n-
pessoa) sem necessidade de conhecer a sintaxe de ne- meros como texto e no como nmeros em si mes-
nhuma linguagem de programao. , como o nome in- mos.
dica, um pseudo-cdigo e, portanto, no pode ser execu-
tado num sistema real (computador) de outra forma Lgico: varivel que pode assumir apenas dois va-
deixaria de ser pseudo. lores Verdadeiro ou Falso.

Os livros sobre a cincia de computao utilizam fre-


quentemente o pseudocdigo para ilustrar os seus exem- 11.1.2 Modelo de pseudo-cdigo
plos, de forma que todos os programadores possam en-
tender as lgicas dos programas (independentemente da Utilizaremos como padro o seguinte modelo de pseudo-
linguagem que utilizem). Entendendo-se os conceitos cdigo:
facilita-se depois a converso para qualquer linguagem
de programao. Aprenderemos neste curso de Lgica Todo programa deve ser iniciado com programa
de Programao os elementos mais essenciais da progra- SeuNome
mao utilizando o que conhecemos como Portugus Es-
truturado, isto , um pseudo-cdigo em portugus. O Incio e Fim do programa sero limitados pelos
marcadores Inicio e Fim

As variveis sero declaradas no incio do programa


11.1 Constantes e variveis como NomeVarivel:tipo da varivel

Variveis no podem ter espao em branco e no po-


Uma mquina computacional essencialmente uma m- dem ter seu nome iniciada por nmero
quina de entrada/sada de dados. Podemos denir dois
tipos de dados : constante, que um determinado valor Caracteres especiais no devem ser utilizadas nos
xo que no se altera at o trmino do programa e vari- nomes das variveis (,`, ~, ,- e ans)
vel que corresponde a uma posio na memria do com-
putador que armazena um determinado dado que pode Deve-se evitar o uso de palavras-reservadas (i.e.
ser modicado ao longo do programa. aquelas utilizadas pelo programa para funes es-
peccas como o caso de Inicio e Fim at agora).
Para facilitar ao estudante colocaremos estas pala-
vras em negrito
11.1.1 Tipos de variveis
Consideraremos que os nomes das variveis so case
Ao determinarmos uma varivel ela aloca uma determi- sensitive, i.e. diferencia maisculas e minsculas.
nada posio na memria do computador. Assim h a ne- Desta forma, o nome declarado de uma varivel deve
cessidade de determinarmos o tipo da varivel de modo ser exatamente o mesmo, incluindo maisculas e mi-
a se ter espao suciente para a alocao de qualquer dado nsculas at o nal.
do tipo declarado.
Usaremos os comandos leia para receber dados do
usurio e escreva para exibir dados ao usurio.
Numrico: varivel que armazena dados de nme-
ros. Alguns pseudo-cdigos segmentam este tipo de Os textos a serem exibidos na tela ou que tenham
varivel em real e inteiro, i.e. dados numricos re- de ser inseridos como caracter sero colocados entre
ais (com casas decimais) e inteiros. aspas.

19
20 CAPTULO 11. PSEUDO-CDIGO

Os comentrios sobre o cdigo podem ser inseridos CODIGODOLIVRO:inteiro


{entre chaves} servindo apenas para efeito de infor- TITULO, AUTOR, EDI-
mao, mas no alterando o cdigo. TORA:caracter {declarao
de variveis}
11.1.3 Exemplo de programa em pseudo-
escreva Este um programa em
cdigo pseudo-cdigo que exibe na tela os
dados de um livro
Vamos agora criar um programa em pseudo-cdigo que
dena os tipos de variveis relacionadas ao cadastro de CODIGODOLIVRO <- 1
um livro e receba estes dados do usurio e imprima na TITULO <- O Senhor dos Anis
tela. AUTOR <- J.R.R.Tolkien
EDITORA <- " Editora Tralal"
programa Livro {denio do nome do pro- escreva O cdigo do livro ", CO-
grama} DIGODOLIVRO {ir exibir 1}
Inicio escreva O ttulo do livro ", TI-
TULO {ir exibir O Senhor dos
CODIGODOLIVRO:inteiro Anis}
TITULO, AUTOR, EDI- escreva O autor do livro ", AU-
TORA:caracter {declarao TOR {ir exibir J.R.R.Tolkien}
de variveis} escreva A Editora do livro ",
EDITORA {ir exibir Editora Tra-
escreva Este um programa em lal}
pseudo-cdigo que exibe na tela os
dados de um livro Fim
escreva Digite o cdigo do livro
leia CODIGODOLIVRO
escreva Digite o ttulo do livro 11.2 Ver tambm
leia TITULO
escreva Digite o autor do livro
leia AUTOR
11.3 Exerccios
escreva Digite a editora do livro
programa Habilitacao var idade:numerico inicio escreva
leia EDITORA
(informe idade:") leia(idade) se idade >= 18 entao
escreva O cdigo do livro ", CO- escreva(pode tirar a carteira) senao escreva(no pode
DIGODOLIVRO tirar a carteira) mse malgoritmo
escreva O ttulo do livro ", TI-
TULO
escreva O autor do livro ", AU-
TOR 11.4 Bibliograa
escreva A Editora do livro ",
EDITORA

Fim

11.1.4 Atribuio de valores s variveis


As variveis recebem valores do mesmo tipo de sua de-
clarao no processamento do programa. No exemplo
anterior associamos o valor digitado pelo usurio s va-
riveis. Se quisermos associar valores podemos utilizar
<- que associa um valor a um identicador.

programa Livro {denio do nome do pro-


grama}
Inicio
Captulo 12

Expresses em pseudo-cdigo

12.1 Introduo
Aqui sero descritas as funes e comandos usados no
pseudocdigo.

12.2 Comandos iniciais


Esses comandos sempre estaro no pseudocdigo para
ns de organizao e no possuem nenhuma execuo
atribuda, cam na seguinte ordem estrutural:
algoritmo nome do algoritmo {onde o que h em ""
uma varivel literal} var {Seo de declarao de vari-
veis} inicio {Seo de incio de comandos} malgoritmo
{Indicao m do algoritmo}

12.2.1 Comando algoritmo


S serve para indicar o nome do algoritmo, onde o nome
deve vir entre aspas por ser uma varivel literal, obri-
gatrio. Ex.:
algoritmo teste

12.2.2 Comando var


Indica onde as variveis sero declaradas, opcional, pois
alguns algoritmos apenas imprimem instrues. Ex.:
var n1, n2 : inteiro n3, n4 : real nome, cep : literal

12.2.3 Comando inicio


Indica onde comearo as instrues, obrigatrio. Ex.:
inicio Escreva(Isto um algoritmo)

12.2.4 Comando malgoritmo


Serve apenas para indicar que o algoritmo est terminado,
obrigatrio.

21
Captulo 13

Orientao a objetos

A Orientao a Objeto um paradigma de Anlise ori- capaz de armazenar estados atravs de seus atributos
entada ao objeto, Projeto orientado ao objeto e Lingua- e reagir a mensagens enviadas a ele, assim como se
gem de programao de sistemas de software baseado na relacionar e enviar mensagens a outros objetos.
composio e interao entre diversas unidades de soft-
ware chamadas objetos. Exemplo de objetos da classe Humanos:
Em alguns contextos, prefere-se usar Modelagem de da- JOO um objeto da classe HUMANOS, apresentando
dos orientada ao objeto, em vez de Projeto orientado ao todos os atributos dessa classe mas com a sua individua-
objeto. lidade.
A anlise e projeto orientados a objetos tm como meta
identicar o melhor conjunto de objetos para descrever Objeto portanto uma discriminao da classe, sendo
um sistema de software. O funcionamento deste sistema a classe uma generalizao de um conjunto de objetos
se d atravs do relacionamento e troca de mensagens en- idnticos ou com a mesma base.
tre estes objetos.
Hoje existem duas vertentes no projeto de sistemas ori- Mensagem uma chamada a um objeto para in-
entados a objetos. O projeto formal, normalmente utili- vocar um de seus mtodos, ativando um comporta-
zando tcnicas como a notao UML e processos de de- mento descrito por sua classe.
senvolvimento como o RUP; e a programao extrema,
que utiliza pouca documentao, programao em pares Herana o mecanismo pelo qual uma classe (sub-
e testes unitrios. classe) pode estender outra classe (superclasse),
Na programao orientada a objetos, implementa-se um aproveitando seus comportamentos (mtodos) e es-
conjunto de classes que denem os objetos presentes no tados possveis (atributos). H herana mltipla
sistema de software. Cada classe determina o comporta- quando uma subclasse possui mais de uma super-
mento (denidos nos mtodos) e estados possveis (atri- classe. Essa relao normalmente chamada de re-
butos) de seus objetos, assim como o relacionamento lao " um. Um exemplo de herana: Mamfero
com outros objetos. superclasse de Humano. Ou seja, um Humano
um mamfero.
Smalltalk, Modula, Eiel, Perl, Python, Ruby, PHP,
C++, Java, D e Vala so as linguagens de programao
mais importantes com suporte a orientao a objetos. Associao o mecanismo pelo qual um objeto uti-
liza os recursos de outro. Pode tratar-se de uma as-
sociao simples usa um ou de um acoplamento
parte de. Por exemplo: Um humano usa um tele-
13.1 Conceitos fone. A tecla 1 parte de um telefone.

Classe representa um conjunto de objetos com ca-


Encapsulamento consiste na separao de aspectos
ractersticas ans. Uma classe dene o comporta-
internos e externos de um objeto. Este mecanismo
mento dos objetos, atravs de mtodos, e quais es-
utilizado amplamente para impedir o acesso direto
tados ele capaz de manter, atravs de atributos.
ao estado de um objeto (seus atributos), disponibili-
zando externamente apenas os mtodos que alteram
Exemplo de classe: estes estados. Exemplo:
HUMANO uma classe e tem como atributos: 2 BRA-
OS, 2 PERNAS, 1 CABEA, etc... Voc no precisa conhecer os detalhes dos circuitos
de um telefone para utiliz-lo. A carcaa do telefone
Objeto uma instncia de uma classe. Um objeto encapsula esses detalhes, provendo a voc uma interface

22
13.2. VER TAMBM 23

mais amigvel (os botes, o monofone e os sinais de tom).

Abstrao a habilidade de concentrar nos as-


pectos essenciais de um contexto qualquer, igno-
rando caractersticas menos importantes ou aciden-
tais. Em modelagem orientada a objetos, uma classe
uma abstrao de entidades existentes no domnio
do sistema de software.

Polimorsmo permite que uma referncia de um


tipo de uma superclasse tenha seu comportamento
alterado de acordo com a instncia da classe lha
a ela associada. O polimorsmo permite a criao
de superclasses abstratas, ou seja, com mtodos de-
nidos (declarados) e no implementados, onde a
implementao ocorre somente nas subclasses no
abstratas.

13.2 Ver tambm


Livro Programao orientada a objetos
Captulo 14

Exerccios

14.0.1 Exerccio 1

Verdadeiro ou falso
Crie algoritmos
1. No preciso de um outro programa quando da nali-
zao do meu cdigo em C++. Basta-me rod-lo direc- 1. Crie um algoritmo para esta situao da empresa
tamente na mquina. Pacheco-Car":
2. O Assembly uma linguagem muito acessvel ao usu- O problema encontrado pelos nossos funcionrios que
rio nal. ao encomendar-se uma pea de automvel, inserir-se a
marca e requisitar o endereo, o programa no detecta se
3. Os scripts so linguagens dinmicas e usadas em inter- o registo termina em X ou em Y. que se terminar em
venes pequenas, para no se ter que usar o compilador. Y no podemos encomendar directamente. Temos que
4. Sempre preciso escrever um algoritmo antes de iniciar inserir o cdigo de escape (que termina ou em 00 ou em
a escrita de um programa em uma linguagem. 01 ou em 02) para o programa enviar a encomenda para
os endereos A, B ou C, respectivamente.
Sua pontuao 0 / 0
2. Decifre o algoritmo apresentado em baixo:
Y = " polgono E = " no " GET X IF X=0 MOS-
TRAR No posso aceitar o nmero!" END-IF ELSE
Crie algoritmos
SWITCH X CASE 1: Eu sou Y CASE 2: Eu E
sou Y CASE 3: Como podes aceitar Y aqui?" END-
1. Crie um algoritmo prximo ao de mquina para a se-
SWITCH END-ELSE
guinte frase:
Solues dos exerccios
Se estiveres no estado A tens que decifrar o cdigo B e
somar 2 ao resultado de B. Se no estiveres no estado A
passa para o estado C e pra.
14.0.3 Exerccios de introduo
2. Decifre para o portugus o seguinte algoritmo:
IF Livro 1 GOTO Page 251 SOMA 2 NA Page = VAR 1) Faa um programa que mostre na tela a frase Ol
SADA VAR ELSE Livro 2 GOTO Page 23 SUBTRAI Mundo!".
2 NA Page = VAR SADA VAR uses crt; begin writeln(Ol Mundo!); end

2) Faa um programa que pea para o usurio digitar seu


14.0.2 Exerccio 2 nome e, em seguida, escreva seu nome na tela.
Verdadeiro ou falso uses crt; var nome:string; begin writeln(Escreva seu
nome: ); readln(nome); writeln(Seu nome : ,nome);
1. Uma instruo FOR uma instruo bsica. end
2. exclusivamente necessrio incluir-se a instruo
ELSE numa IF. 3) Faa um programa que leia nome e idade e mostre na
tela.
3. SWITCH bom para loops.
uses crt; var nome:string; idade:integer; begin
4. Variveis guardam dados na memria do computador writeln(Escreva seu nome: ); readln(nome); wri-
e podem ser manipuladas. teln(Escreva sua idade: ); readln(idade); writeln(Seu
Sua pontuao 0 / 0 nome ,nome, e voc tem ,idade, anos.); end

24
25

writeln(O valor da hipotenusa : ,H:2:2); end


4) Faa um programa que leia nome, idade e altura e mos-
tre na tela as informaes. 8) Faa um programa que leia a durao de uma tarefa
uses crt; var nome:string; idade:integer; altura:real; em segundos e transforme para hora, minuto e segundo.
begin write(Escreva seu nome: ); readln(nome); uses crt; var s,m,h:longint; begin writeln(Entre com
write(Escreva sua idade: ); readln(idade); write(Entre o tempo em segundos: ); readln(s); h:=(s)div(3600);
com sua altura: ); readln(altura); writeln(Seu nome m:=((s)mod(3600))div(60); s:=((s)mod(3600))mod(60);
,nome,, voc tem ,idade, anos e ,altura:4:2,m de writeln(s, segundos : ,h, hora(s) ,m, minutos e ,s,
altura.); end segundos); end

5) Fazer um programa que leia o nome e duas notas de


um aluno, e em seguida calcule a sua mdia.
14.0.4 Exerccios de deciso
Algoritmo:
1) Faa um programa que leia dois nmeros inteiros dis-
1. Ler o nome; tintos e diga qual desses dois nmeros o maior.
2. Ler as duas notas; uses crt; var a,b:longint; begin writeln(Entre com dois
nmeros inteiros distintos: ); readln(a,b); if a>b then
3. Calcular a media:
writeln(a,>,b) else writeln(b,>,a); end
(a) Somar as duas notas;
(b) Dividir a soma por dois; 2) Faa um programa que leia trs nmeros distintos e
mostre o maior dos 3.
4. Exibir a media;
uses crt; var a,b,c:longint; begin writeln(Escreva
trs nmeros inteiros e distintos: ); readln(a,b,c); if
uses crt; var nome:string; n1,n2,m:real; begin wri-
(a>b)and(a>c) then writeln(O maior nmero ,a);
teln(Entre com o nome: ); readln(nome); writeln(Entre
if (b>c)and(b>a) then writeln(O maior nmero ,b);
com as duas notas: ); readln(n1,n2); m:=(n1+n2)/2;
if (c>a)and(c>b) then writeln(O maior nmero ,c); end
writeln(A mdia : ,m:4:2); end

3) Faa um programa que leia os coecientes de uma


6) Trs massas m1, m2, m3 esto separadas por distncias
equao do 2 grau e calcule suas razes. O programa deve
r12, r13 e r23, como mostra a gura:
mostrar, quando possvel, o valor das razes calculadas e
Se G a constante de gravitao universal, a fora de co- a classicao das razes (imaginrias, nica, distintas)
eso mantendo a massa das partculas juntas dada pela
uses crt; var a,b,c,d:real; begin writeln(Toda equao
formula:
do 2 grau do tipo: ax + bx +c); writeln(Atribua
( ) valores a: a, b, c: ); readln(a,b,c); d:=(sqr(b))-(4*a*c);
F = G MR12M2 + MR12M3 + MR22M3 if d<0 then begin writeln(Razes Imaginrias); if d=0
12 13 23

then begin x1:=(-b)/(2*a); writeln(A raiz nica e :


Fazer um programa para ler os valores de m1, m2, m3, x1); end; if d>0 then begin x1:=((-b)+sqrt(d))/(2*a);
r12, r13, r23; calcular e imprimir a fora de coeso. Para x2:=((-b)-sqrt(d))/(2*a); writeln(As razes so distintas
massa em quilogramas e distncia em metros, G = 6,67 e so: ,x1, e ,x2); end; end; end
1011 Nm2 /kg2 . Assumir que todos os valores so reais.
uses crt; const G=6.67E-11; var 4) Dados 3 valores x, y e z, vericar se eles podem ser
F,m1,m2,m3,r12,r13,r23:real; begin writeln(Entre os comprimentos dos lados de um tringulo e, se forem,
com as trs massas: ); readln(m1,m2,m3); wri- vericar se um tringulo eqiltero, issceles ou esca-
teln(Entre com as trs distncias: ); readln(r12,r13,r23); leno.
F:=G*((m1*m2/r12*r12)+(m1*m3/r13*r13)+(m2*m3/r23*r23)); uses crt; var a,b,c:real; begin writeln(Entre com os 3 la-
writeln(A fora de coeso : ,F:4:15, N.); end dos: ); readln(a,b,c); if (a+b>c)and(a+c>b)and(b+c>a)
then begin if (a=b)and(b=c) then writeln(Tringulo
7) Dados os comprimentos dos lados de um tringulo Equiltero) else if (a=b)or(a=c)or(b=c) then wri-
(lado1 e lado2), fazer um programa para calcular a hi- teln(Tringulo Issceles) else writeln(Tringulo
potenusa. Escaleno); end else writeln(Este tringulo no existe!);
uses crt; var L1,L2,H:real; begin writeln(Escreva o valor end
de um lado: ); readln(L1); writeln(Escreva o valor do
outro lado: ); readln(L2); H:=sqrt(sqr(L1)+sqr(L2)); 5) Faa um programa para vericar se o nmero par.
26 CAPTULO 14. EXERCCIOS

uses crt; var a:integer; begin writeln(Entre com um


nmero inteiro: ); readln(a); if ((a)mod(2)=0) then
writeln(Par) else writeln(mpar); end

14.0.5 Exerccios de repetio


1) Faa um programa que leia dois nmeros inteiros e faa
a multiplicao sem utilizar o operador de multiplicao
*.
uses crt; var a,b,i,n:longint; begin writeln('Entre com
dois valores positivos: '); readln(a,b); if (a>0)and(b>0)
then begin n:=0; i:=0; {Se i:=1, i<b} while (i<=b) do
begin n:=a+n; i:=i+1; end; writeln(a,' x ',b,' = ',n); end
else writeln('Valor(es) Incorreto(s)'); end

2) Faa um programa que leia dois nmeros inteiros e faa


a multiplicao sem utilizar o operador *.
uses crt; var a,b,i,n:longint; begin writeln('Entre com dois
valores: '); readln(a,b); if (a>=0)and(b>=0) then begin
n:=0; i:=1; repeat n:=n+a; i:=i+1; until i>b; writeln(a,' x
',b,' = ',n); end else writeln('Valor(es) Incorreto(s)!'); end
Captulo 15

Solues dos exerccios

15.1 EXERCCIO 1

15.1.1 Verdadeiro ou falso


1. Falso | 2. Falso | 3. Verdadeiro | 4. Falso

15.1.2 Crie algoritmos


1.
IF A DECIFRAR B + 2 = VAR ELSE C STOP
2.
Se tiveres o Livro 1, vai para a pgina 251, e mostra o
valor da soma entre pgina e 2. Se tiveres o Livro 2, vai
para a pgina 23, e mostra o valor da subtrao entre a
pgina e 2.

15.2 Exerccio 2

15.2.1 Verdadeiro ou falso


1. Verdadeiro | 2. Falso | 3. Falso | 4. Verdadeiro

15.2.2 Crie algoritmos


1.
GET REGISTO IF REGISTO=Y GET ESCAPE
SWITCH ESCAPE CASE 00": A CASE 01": B
CASE 02": C END-SWITCH END-IF
2.
O programa vai pedir X e se este for igual a zero ele vai
dizer que no pode aceitar esse nmero. Se X for um ele
vai-me responder que polgono, se for igual a dois vai
dizer que no e se for igual a trs vai perguntar como
poderia aceitar um polgono ali
Voltar

27
Captulo 16

Anexo: Linguagens de programao

16.1 Histria e evoluo das lin- Vantagens:


guagens Desvantagens:

Este captulo apresentar uma breve discusso sobre a


Sobre Fortran:
histria e evoluo das linguagens de programao.

Fortran na Wikipdia
Assembly

Criada na dcada de 50, o Assembly foi das pri- Pascal


meiras linguagens de programao a aparecer. Ela
usa uma sintaxe complicada e exageradamente Outra linguagem de Alto nvel dos anos 60, bem estru-
difcil, isto porque, antes da dcada de 50 os pro- turada, mas com regras rgidas, o que a torna difcil de
gramadores de mquinas tinham que escrever ins- modelar, para se criar novas ideias. a tpica linguagem
trues em cdigo binrio, qualquer coisa como: usada para iniciar os cursos de Programao. Atualmente
0110010110011011010110011010111010110101 ... ambientes de desenvolvimento (IDE) como o FreePascal,
Para escrever uma instruo. Na verdade, o Assem- o Kylix e o Delphi so timas opes para se programar
bly foi criado para facilitar o uso dessa tarefa, mas em Pascal.
considerado uma linguagem de baixo nvel, pois tudo o
que o processador interpreta tem que ser descrito pelo
programador. Assim o cdigo acima seria add EAX Vantagens: fortemente tipada (boa para inician-
em Assembly. Bastava apenas, depois de estar concluda tes,os quais no tem muita familiaridade com a pro-
a escrita do cdigo, rodar o compilador e tnhamos o gramao)
programa.
Desvantagens: por ser fortemente tipada, prende
programadores mais veteranos
Vantagens: programas extremamente rpidos e pe-
quenos.
Sobre Pascal:
Desvantagens: tempo de desenvolvimento lento e
sujeito a erros; cdigo preso a uma arquitetura
Pascal na Wikipdia
Sobre Assembly:
Pascal aqui na Biblioteca
Assembly na Wikipdia

Cobol
Fortran
Foi uma linguagem usada para a criao e estruturao de
Esta linguagem Fortran (Formula Translator) uma lin- bancos de dados nanceiros nos anos 60 que ainda hoje
guagem de Alto nvel, que foi criada partindo do pro- usada por este tipo de servios. Comparada com o Pascal
blema e da diculdade apresentadas pelo Assembly. e o Assembly, esta linguagem bem amigvel e bastante
Apareceu tambm na dcada de 50 e foi considerada uma acessvel e atualmente serve para vrias tarefas.
das melhores linguagens da poca. Aqui temos vrias
funes e instrues pr-denidas que nos permite pou- Sobre Cobol:
par tempo na datilograa de instrues base do processa-
dor, ao contrrio da linguagem Assembly. Cobol na Wikipdia

28
16.1. HISTRIA E EVOLUO DAS LINGUAGENS 29

Linguagem C Sobre C++:

Pode-se dizer que o C uma das maravilhas das lingua- Wikilivro Programar em C++
gens de programao. Muitos dos programas existentes
hoje foram escritos nesta linguagem. O C foi desenvol- C++ na Wikipdia
vido nos laboratrios Bell na dcada de 70, e possui as
seguintes caractersticas:
Java, C#
Portabilidade entre mquinas e sistemas operacio- As linguagens em ascenso no m dos anos 90 e comeo
nais do ano 2000, so linguagens de alto poder de abstrao e
Dados compostos em forma estruturada com boas capacidades de virtualizao, o que lhes confe-
rem boas possibilidades de independncia de plataforma,
Total interao tanto com o SO como com a m- embora estas caractersticas ainda esto sendo melhora-
quina das.
Cdigo compacto e rpido.
Vantagens: uma maior facilidade que em C/C++ e
vnculos de patentes com as empresas que as desen-
Nos anos 80, C era a linguagem mais utilizada por progra-
volveram.
madores, por permitir a escrita intensiva de todas as ca-
ractersticas das linguagens anteriores. O Prprio UNIX
e Linux foram escritos em C, assim como o front-end PHP
do MS-DOS, Windows e as aplicaes Oce mais usa-
das no mundo (OpenOce.org, Microsoft Oce, em- O PHP apareceu em 1994 e pretendeu revolucionar o
bora cada uma delas inclusse suas prprias linguagens mercado de linguagens na criao de scripts para a in-
de script), sendo tambm utilizada em aplicaes gr- ternet. Realmente uma linguagem excepcional onde
cas e criao de efeitos especiais nos lmes Strar Trek e permitido fazer tudo o que os CGIs faziam inclusive mais
Star Wars. coisas ainda. Para quem quer seguir programao para
aplicaes web uma linguagem a estudar, assim como
Vantagens: programas extremamente rpidos e pe- o Perl, usado tambm na criao de ferramentas em sites.
quenos.
Link Para o Curso de PHP no Wikilivros
Desvantagens: tempo de desenvolvimento lento e
sujeito a erros
Vantagens: facilidade de implementao e execu-
o.
Sobre C:
Desvantagens: certa lentido, que depende do am-
Wikilivro Programar em C biente onde foi instalado o servidor.

C na Wikipdia
Perl, Python, Ruby
Aprendendo a Linguagem C
Ciclos de processamento e tempo de computador so
O C++ cada vez mais baratos; tempo de programador e criativi-
dade so cada vez mais caros. Por isso, a tendncia atual
Uma linguagem que adiciona ao C um conjunto de re- no mercado favorecer linguagens de alto nvel, menos
cursos a mais, como o prprio nome sugere. O C++ o otimizadas para a mquina, e mais otimizadas para o pro-
C orientado a objetos. Avanando nos 90, passou por di- gramador: linguagens como Perl, Python e Ruby, consi-
versas atualizaes e padronizaes nesta poca, o padro deradas linguagens de programao de alto nvel, com um
do C++ foi exaustivamente trabalhado pelos desenvolve- nvel de abstrao relativamente elevado, longe do cdigo
dores durante oito anos, quando nalmente foi aprovado de mquina e mais prximo linguagem humana.
pelo ANSI. Vrios projetos como o KDE (front-end para
UNIX, Linux, BSD e recentemente para Windows) so Linguagem Python desenvolvida no Wikilivros
escritos em C++.
Vantagens: maior facilidade de implementao e
Vantagens: programas extremamente rpidos e pe- execuo em relao ao Java e ao C#
quenos; proteo contra alguns erros comuns em C
Desvantagens: programas mais lentos do que em
Desvantagens: tempo de desenvolvimento lento C/C++
30 CAPTULO 16. ANEXO: LINGUAGENS DE PROGRAMAO

Mais sobre o assunto

Lista de linguagens de programao existentes


Exemplos de Algoritmos em vrias linguagens de
programao
O que so linguagens de programao

16.2 Igualdades e diferenas nas


linguagens
As igualdades entre as vrias linguagens so bvias: A
Lgica binrias, as instrues if, else, goto, switch, etc...
Entre outros processos. Porm necessrio notar-se que
a sintaxe bsica dessas linguagens modica-se e neces-
sria a sua aprendizagem. Para isso o melhor local para
aprender e se aperfeioar so os livros sobre a matria.
O problema mais importante, hoje, na rea de Linguagens
de Programao, o desenvolvimento de linguagens que
aumentem a produtividade do programador. Linguagens
que permitam escrever programas corretamente, esta a
razo do rpido crescimento de linguagens como Java, C#
e Ruby.
Por enquanto j pode encontrar Manuais de PHP, C++,
C, Python e Javascript aqui na Wikibooks.
Captulo 17

Anexo: Passagem para a linguagem de


programao escolhida

O objetivo deste livro e dos cursos de Cincia da


Computao[1] ensinar os conceitos mais genricos pos-
sveis em todos os segmentos, e tambm em Programa-
o. Isto signica que nenhuma linguagem ser privile-
giada em prejuzo de outra, j que entendemos que cada
linguagem apropriada para determinados tipos de apli-
caes e problemas. Nesta lio veremos no entanto algu-
mas das principais linguagens, e como aplicar o conceito
de Lgica de Programao a estas linguagens.

17.1 Referncias
[1] Veja os cursos do Departamento de Computao e Infor-
mtica Bsica, na Wikiversidade

31
Captulo 18

Bibliograa

18.0.1 Bibliograa
Downey, Allen B.. How To Think Like A Computer
Scientist: Learning with C++. Acesso em: 23 Julho
2005.

Walnum, Clayton. O mais completo guia sobre prin-


cpios de programao. So Paulo: Berkeley, 2002.
304 p. ISBN 8572516255
Hickson, Rosangela. C++ Tcnicas Avanadas.
1.ed. Rio de Janeiro: Campus, 2003. 452 p. ISBN
8535212752

Morimoto, Carlos. Guia do Hardware. Acesso em


7 de Abril de 2006.
Programao de Sistemas - por Ivan Luiz Marques
Ricarte

18.0.2 Ligaes externas & mais sobre o


assunto
Guia do Hardware - O mais completo portal com
manuais, tutorias, referncias, testes e notcias rela-
cionadas com hardware e Linux. tambm a atual
casa do prezado Kurumin Linux.

18.0.3 Pratique
Olimpada Brasileira de Informtica-Pratique

18.0.4 Dvidas, esclarecimentos e suges-


tes
Envie um mail para: lightningspirit*gmail.com

32
18.1. FONTES, CONTRIBUIDORES E LICENAS DE TEXTO E IMAGEM 33

18.1 Fontes, contribuidores e licenas de texto e imagem


18.1.1 Texto
Introduo programao/Capa Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_programa%C3%A7%
C3%A3o/Capa?oldid=227717 Contribuidores: Lightningspirit, Jorge Morais, Wbrito, Voz da Verdade e He7d3r.bot
Introduo programao/Prefcio Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_programa%C3%
A7%C3%A3o/Pref%C3%A1cio?oldid=419760 Contribuidores: Lightningspirit, Jorge Morais, Wbrito, Albmont, He7d3r, He7d3r.bot,
JackPotte, Fabiobasso e Annimo: 2
Introduo programao/Programar Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_programa%C3%
A7%C3%A3o/Programar?oldid=418560 Contribuidores: Joo Jernimo, LeonardoG, Marcos Antnio Nunes de Moura, R, Lightnings-
pirit, Jorge Morais, Wbrito, He7d3r, He7d3r.bot, Xexeo e Annimo: 12
Introduo programao/Como programar Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_
programa%C3%A7%C3%A3o/Como_programar?oldid=271489 Contribuidores: Marcos Antnio Nunes de Moura, Lightningspirit,
Jorge Morais, Wbrito, He7d3r, Atoj, Raylton P. Sousa, He7d3r.bot, Xexeo, Abacaxi, Luciadasilveiras e Annimo: 7
Introduo programao/Denies sobre Lgica de Programao Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%
A3o_%C3%A0_programa%C3%A7%C3%A3o/Defini%C3%A7%C3%B5es_sobre_L%C3%B3gica_de_Programa%C3%A7%C3%
A3o?oldid=422502 Contribuidores: Marcos Antnio Nunes de Moura, Ozymandias, Jorge Morais, Master, He7d3r.bot, Defender, Hoo
man, Savh, Xexeo, Abacaxi e Annimo: 13
Introduo programao/Histria da Programao Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_
programa%C3%A7%C3%A3o/Hist%C3%B3ria_da_Programa%C3%A7%C3%A3o?oldid=204910 Contribuidores: He7d3r.bot, Ri-
cardo Augustinis e Annimo: 1
Introduo programao/Lgica Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_programa%C3%
A7%C3%A3o/L%C3%B3gica?oldid=266646 Contribuidores: Marcos Antnio Nunes de Moura, Dante Cardoso Pinto de Almeida, Light-
ningspirit, Jorge Morais, Raylton P. Sousa, He7d3r.bot e Abacaxi
Introduo programao/Aprendizagem Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_programa%
C3%A7%C3%A3o/Aprendizagem?oldid=267438 Contribuidores: Lightningspirit, Jorge Morais, Wbrito, He7d3r, He7d3r.bot, Algum,
Abacaxi e Annimo: 3
Introduo programao/Algoritmos Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_programa%C3%
A7%C3%A3o/Algoritmos?oldid=436405 Contribuidores: Marcos Antnio Nunes de Moura, Jorge Morais, Wbrito, Master, Albmont,
He7d3r, MGFE Jnior, He7d3r.bot, Defender, Pedro Mendes, Frigotoni, Abacaxi e Annimo: 25
Introduo programao/Estruturas de manipulao de dados Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%
A3o_%C3%A0_programa%C3%A7%C3%A3o/Estruturas_de_manipula%C3%A7%C3%A3o_de_dados?oldid=423460 Contribuidores:
Marcos Antnio Nunes de Moura, Lightningspirit, Jorge Morais, SallesNeto BR, Edudobay, Clauix, He7d3r, Atoj, MGFE Jnior, Raylton
P. Sousa, He7d3r.bot, Algum, Hycesar, Abacaxi e Annimo: 10
Introduo programao/Pseudo-cdigo Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_programa%
C3%A7%C3%A3o/Pseudo-c%C3%B3digo?oldid=436450 Contribuidores: Marcos Antnio Nunes de Moura, Ozymandias, Jorge Morais,
Master, Albmont, He7d3r, He7d3r.bot, Teles, Manequinho, Abacaxi, Alan, Henriquetfw, Eurodyne, Pedro.urucui e Annimo: 17
Introduo programao/Expresses em pseudo-cdigo Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%
A0_programa%C3%A7%C3%A3o/Express%C3%B5es_em_pseudo-c%C3%B3digo?oldid=233405 Contribuidores: Marcos Antnio
Nunes de Moura, Jorge Morais, Master, Albmont, Typeyotta, He7d3r.bot e Annimo: 3
Introduo programao/Orientao a objetos Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_
programa%C3%A7%C3%A3o/Orienta%C3%A7%C3%A3o_a_objetos?oldid=266615 Contribuidores: Lightningspirit, Jorge Morais,
Albmont, He7d3r, Atoj, He7d3r.bot, Abacaxi e Annimo: 1
Introduo programao/Exerccios Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_programa%C3%
A7%C3%A3o/Exerc%C3%ADcios?oldid=291997 Contribuidores: Marcos Antnio Nunes de Moura, Lightningspirit, Jorge Morais, Alb-
mont, He7d3r, He7d3r.bot, Abacaxi e Annimo: 5
Introduo programao/Solues dos exerccios Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%
A0_programa%C3%A7%C3%A3o/Solu%C3%A7%C3%B5es_dos_exerc%C3%ADcios?oldid=252989 Contribuidores: Lightningspirit,
Jorge Morais, He7d3r, Atoj, He7d3r.bot, Algum e Annimo: 1
Introduo programao/Linguagens de programao Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%
A0_programa%C3%A7%C3%A3o/Linguagens_de_programa%C3%A7%C3%A3o?oldid=288329 Contribuidores: Marcos Antnio Nu-
nes de Moura, Lightningspirit, Jorge Morais, Albmont, Jocile, He7d3r, Atoj, Raylton P. Sousa, He7d3r.bot, Cristovaopb, Abacaxi e An-
nimo: 11
Introduo programao/Passagem para a linguagem de programao escolhida Fonte: https://pt.wikibooks.org/wiki/Introdu%
C3%A7%C3%A3o_%C3%A0_programa%C3%A7%C3%A3o/Passagem_para_a_linguagem_de_programa%C3%A7%C3%A3o_
escolhida?oldid=247272 Contribuidores: Ozymandias, Jorge Morais, Master, He7d3r, He7d3r.bot e Diego Queiroz
Introduo programao/Bibliograa Fonte: https://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_programa%
C3%A7%C3%A3o/Bibliografia?oldid=268324 Contribuidores: LeonardoG, R, Lightningspirit, Jorge Morais, He7d3r, Raylton P. Sousa,
He7d3r.bot, Algum, Abacaxi e Annimo: 2

18.1.2 Imagens
Ficheiro:Crystal_Clear_app_kaddressbook.png Fonte: https://upload.wikimedia.org/wikipedia/commons/7/74/Crystal_Clear_app_
kaddressbook.png Licena: LGPL Contribuidores: All Crystal Clear icons were posted by the author as LGPL on kde-look; Artista original:
Everaldo Coelho and YellowIcon;
34 CAPTULO 18. BIBLIOGRAFIA

Ficheiro:Introducao_programacao_cover.png Fonte: https://upload.wikimedia.org/wikibooks/pt/8/81/Introducao_programacao_


cover.png Licena: ? Contribuidores: ? Artista original: ?
Ficheiro:Introducao_programacao_esquema_pc.png Fonte: https://upload.wikimedia.org/wikibooks/pt/3/3a/Introducao_
programacao_esquema_pc.png Licena: ? Contribuidores: ? Artista original: ?
Ficheiro:Introducao_programacao_esquema_processador.png Fonte: https://upload.wikimedia.org/wikibooks/pt/0/0c/Introducao_
programacao_esquema_processador.png Licena: ? Contribuidores: ? Artista original: ?
Ficheiro:Introducao_programacao_fluxograma.png Fonte: https://upload.wikimedia.org/wikibooks/pt/3/39/Introducao_
programacao_fluxograma.png Licena: ? Contribuidores: ? Artista original: ?
Ficheiro:Nuvola_apps_konsole.png Fonte: https://upload.wikimedia.org/wikipedia/commons/2/24/Nuvola_apps_konsole.png Licena:
LGPL Contribuidores: http://icon-king.com Artista original: David Vignoni / ICON KING
Ficheiro:Seaman_send_Morse_code_signals.jpg Fonte: https://upload.wikimedia.org/wikipedia/commons/8/8d/Seaman_send_
Morse_code_signals.jpg Licena: Public domain Contribuidores: http://www.navy.mil/view_image.asp?id=22943 Artista original: Tucker
M. Yates
Ficheiro:Von_Neumann_architecture.svg Fonte: https://upload.wikimedia.org/wikipedia/commons/8/84/Von_Neumann_
architecture.svg Licena: CC-BY-SA-3.0 Contribuidores: ? Artista original: ?
Ficheiro:Wikipedia-logo.png Fonte: https://upload.wikimedia.org/wikipedia/commons/6/63/Wikipedia-logo.png Licena: GFDL Con-
tribuidores: based on the rst version of the Wikipedia logo, by Nohat. Artista original: version 1 by Nohat (concept by Paullusmagnus);

18.1.3 Licena
Creative Commons Attribution-Share Alike 3.0

Das könnte Ihnen auch gefallen