Beruflich Dokumente
Kultur Dokumente
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
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
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
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
2
Captulo 3
Programar
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.
Como programar
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.
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.
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.
Programao linear
Histria da Programao
10
Captulo 7
Lgica
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.1.3 OR
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.
12
Captulo 9
Algoritmos
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.
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
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;
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
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
Operaes complexas
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.
19
20 CAPTULO 11. PSEUDO-CDIGO
Fim
Expresses em pseudo-cdigo
12.1 Introduo
Aqui sero descritas as funes e comandos usados no
pseudocdigo.
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.
22
13.2. VER TAMBM 23
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
24
25
15.1 EXERCCIO 1
15.2 Exerccio 2
27
Captulo 16
Fortran na Wikipdia
Assembly
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
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
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.
18.0.3 Pratique
Olimpada Brasileira de Informtica-Pratique
32
18.1. FONTES, CONTRIBUIDORES E LICENAS DE TEXTO E IMAGEM 33
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
18.1.3 Licena
Creative Commons Attribution-Share Alike 3.0