Upload
luis-carlos-machado
View
29
Download
0
Embed Size (px)
Citation preview
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 1/39
Manual de sobrevivência em
Lógica de programação
- Marcelo Garcia –
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 2/39
2
Copyright (c) 2013, Marcelo Garcia.
Todos os direitos reservados
Redistribuição e uso destes documentos, com ou sem modificações, são
permitidos desde que observadas as seguintes condições:
* Redistribuições ou modificações precisam manter a licença de copyright
mencionada acima, esta lista de condições e a isenção de responsabilidade a
seguir.
* Nem o nome de Marcelo Garcia nem o nome de seus colaboradores
podem ser usados para endossar ou promover documentos ou textos
derivados deste documento a menos que com expressa autorização por
escrito.
ESTA DOCUMENTACAO E PROVIDA PELOS DETENTORES DOS DIREITOS
AUTORAIS E COLABORADORES "COMO ESTA" E QUAISQUER GARANTIASEXPRESSAS E IMPLICITAS, INCLUINDO, MAS NAO LIMITADO A, AS
GARANTIAS IMPLICITAS DE MERCABILIDADE E AJUSTE PARA ALGUM
PROPOSITO ESPECIFICO SAO DESCARTADAS.
EM MOMENTO NENHUM DEVERAO OS DETENTORES DOS DIREITOS
AUTORAIS OU SEUS COLABORADORES SER RESPONSAVEIS POR QUAISQUER
DANOS DIRETOS, INDIRETOS, ACIDENTAIS, ESPECIAIS, EXEMPLIFICADOS OUCONSEQUENTES (INCLUINDO, MAS NAO LIMITADO A, BUSCA DE PRODUTOS
OU SERVICOS SUBSTITUTOS; PERDAS DE USO, DADOS OU RENDIMENTOS;
OU INTERRUPCAO DE NEGOCIOS) DE QUALQUER MANEIRA COMO SEJAM
CAUSADOS E POR QUAISQUER TEORIAS DE RESPONSABILIDADE, QUER EM
CONTRATO, RESPONSABILIDADE ESTRITA, OU DANOS (INCLUINDO
NEGLIGENCIA OU OUTRO QUALQUER) CAUSADOS POR INFORMACOES
PROVIDAS POR ESTA DOCUMENTACAO, MESMO SE ADVERTIDO DE TAISDANOS.
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 3/39
3
Algumas palavras
Este manual visa servir de texto base para os alunos da disciplina delógica de programação do curso técnico em Informática para Internet,
âmbito Ead / e-Tec Brasil.
Deixo aqui o meu agradecimento a duas pessoas fundamentais para
a criação desde manual. O Eduardo Wenzel Brião, coordenador do curso no
momento em que escrevo este manual. Agradeço a toda motivação e
abertura de portas na rede e-Tec.
A segunda pessoa é para outro coordenador do e-Tec, o Alexandre
Leite. Apesar de não ter muito contato com ele no curso, ele foi meu
professor de lógica de programação há uns 20 anos atrás. Então parte do
que eu escrevo aqui, aprendi com o Alexandre!
A ideia deste manual não é ser definitivo, ou uma bíblia no assunto.Até por que não sou pesquisador ou doutor no tema. A ideia é ser
minimalista. Servir de apoio para o aluno em inicio de aprendizagem, para
que possa de maneira rápida e segura entender o esqueleto logico que
precisamos ter para desenvolver qualquer programa.
Espero que seja realmente útil
E vamos aos estudos!
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 4/39
4
Sumário
1- Lógica ....................................................................................... 5
1.2-Lógica de programação ............................................................... 6
1.3-Algoritmo ..................................................................................10
1.4-Algoritmo Humanizado ..............................................................13
1.5-Algoritmo Computacional ..........................................................16
1.5.1-Anatomia básica .....................................................................16
1.5.2-Comandos de entrada e saída .................................................18
1.5.2-Comentários ...........................................................................19
1.5.3-Variaveis .................................................................................20
1.5.4-Declarando variáveis ...............................................................22
1.5.5-Tipagem de variáveis ..............................................................23
1.5.6-Constantes..............................................................................261.5.7-Nomenclatura de variáveis e constantes .................................27
1.5.8-Operações com variáveis ........................................................28
1.5.9-Variaveis Lógicas .....................................................................29
2-Fluxo de um algoritmo ..................................................................34
2.1.1-Estruturas de repetição ...........................................................36REFERENCIAS ...................................................................................39
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 5/39
5
1- Lógica
A lógica está intrinsecamente ligada ao ser humano. Filósofos
gregos já praticavam exercícios de logica. Definir lógica é algo
complexo. Os puristas e entendidos que me perdoem, mas gosto de
pensar que lógica é a capacidade de organizar o pensamento
buscando o entendimento dos fatos, da situação observada. Lógica
para mim faz parte do método cientifico. Lógica é raciocínio. Lógica é
pensar. É observar, é entender.
O bom da lógica é que podemos reproduzir resultados. Se
seguirmos os passos do que aprendemos e reproduzi-los novamente,
podemos esperar o mesmo resultado. Não acredita? Jogue um tijolo
de cima da mesa. Jogue outro. Outro. Outro. Todos caíram? Se não
caíram ou você não está neste planeta, ou esta fazendo isto muito
errado!
Ficaremos então com este conceito simplista de lógica:
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 6/39
6
1.2-Lógica de programação
Quando pensamos em programação o que nos vem à mente?
O guia de programação de sua tv a cabo? Ou a programação da festa
anual de sua cidade? Que tal a programação de cinema do mês?
Embora o leque de pensamentos possa ser imenso, temos algum
conceito pessoal para a palavra PROGRAMAÇÃO – Nos exemplos
citados podemos compreender programação como organização. No
caso de um festival, montar um programa com todos os eventos que
irão ocorrer exige alguma ou muita logística. Quem é da cidade,quem pode fazer apresentação no determinado horário, quem
precisa de transporte, como trataremos as exceções. Podemos
pensar em diversos fatores, ou (guarde esta palavra
usaremos em breve). E LOGISTICA, deve ser uma derivação sufixal de
LÓGICA (LOGOS EM GREGO)!
Vejam quantas conexões e inter-relações podem ser
estabelecidas, e às vezes não nos damos por conta! Podemos ainda
pensar em outro tipo de programação. Quando vamos ajudar o modo
desligar de nosso aparelho de TV, por exemplo, estamos
programando. E um exemplo mais interessante ainda – Micro-ondas.
Aquela caixa magica. Quando vamos descongelar algo, por exemplo,
temos que informar a /BOTÃO descongelar, e em seguida opeso do que queremos descongelar, e então apertar o start/iniciar.
Provavelmente você nunca parou para pensar que SIM, você
programa o seu micro-ondas. É algo do nosso dia a dia, tão banal que
usamos de maneira rotineira e automática, que perdemos a
contextualização do fato, perdemos a noção de quanta coisa(informação) nos usamos para programar o micro-ondas por
exemplo. Seguindo no exemplo do descongelamento, veja o
esquema a seguir:
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 7/39
7
Em uma atividade cotidiana temos envolvidos diversos
conceitos de programação. E neste momento estamos carentes de
um conceito mais “computacional” de programação, e aqui vai um
conceito pouco ortodoxo, no melhor estilo minimalista sobre
programação:
Sim programa em uma abstração é RESOLVER, SOLUCIONAR,
EQUACIONAR uma situação ou problema proposto. Seja algo simples
como calcular uma média, ou algo complexo como calcular dados
balísticos (uma das primeiras aplicações dos computadores).
Então programar é fácil?
EQUIVALE
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 8/39
8
Sim. E não. Neste momento precisamos de um conceito mais
sólido de programação. Atualmente programar é escrever um código
em uma linguagem de computador. Esta linguagem será processada
de alguma maneira por um computador. O nosso trabalho é escreverinstrução por instrução detalhadamente, pois a máquina é “burra”. E
a organização destas instruções é crucial. Aqui entra a LÓGICA.
Lembrando-se do conceito visto - OBSERVAR, ANALISAR e
DESMONTAR o processo em etapas/ações/atividades, capazes de
serem executadas, em uma sequencia logica de instruções. Portanto
programar um código para um cálculo de média aritmética é uma
tarefa trivial. Programar um código para simular projeções de
balística já é uma tarefa herculana! Quanto maior a complexidade do
cenário/problema existe mais nuances a serem identificadas e
convertidas em linhas de código.
E aqui começamos a ver conceitos recorrentes. Programação
esta intrinsecamente ligada a lógica. Programação pertence ao
mundo lógico.
Uma das linguagens que iremos trabalha no curso chama-se
PHP. E como falamos tanto que é fácil construir um código
(programar) para calculo de médias, abaixo vai um pequeno código
em PHP que resolve esta questão, e o resultado de sua execução:
Pequeno programa em PHP que calcula a média
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 9/39
9
Executando o pequeno código, temos como saída (resultado
do processamento).
Em javascript, podemos ter o seguinte código-fonte para
resolvermos o problema da média:
Embora a linguagem seja diferente, o resultado produzido
pelo nosso processamento (saída), é o mesmo!
Mas antes de entrarmos nos meandres de aprendermos uma
linguagem de programação, precisamos fortalecer a nossa lógica.
Precisamos reaprender a pensar termos domínio sobre o
pensamento, e em como pensar. Precisamos enxergar a sequencia
logica de eventos.
Papel, lápis e borracha a postos, pois iremos programar no
papel. Sim exatamente isto, no papel!
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 10/39
10
1.3-Algoritmo
Algoritmo é programar?!?!?!?
É programar “em papel”. Édeterminar a logica principal do
problema proposto. Nestamodalidade a sintaxe não é tão
importante.
Várias considerações quefaríamos em um programa
escrito em uma linguagem deprogramação, não são feitas.Não escrevemos um código
realmente e sim umpseudocódigo, de alto nível. Estecódigo pode ser traduzido para
qualquer linguagem deprogramação.
Algoritmo é por sua natureza um pseudocódigo, embora
existam softwares voltados para seu ensino, como o visualg que“executa” um algoritmo. É o registro LÓGICO e cadenciado e em
ALTO NIVEL dos passos a serem executados para resolver um
problema. Algoritmo esta intimamente ligado a programação. E
programação esta intimamente ligada a logica. Portanto podemos
entender algoritmo como:
“Uma série limitada de etapas com objetivo de executar
(Resolver) determinada tarefa. Estas etapas tem que estar
ordenadas de maneira logica.”
SIM NÃO
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 11/39
11
De maneira bem simplista, podemos pensar que o algoritmo
é uma receita de bolo. Para o mesmo problema – neste caso fazer um
bolo, podemos ter diversas maneiras ou receitas de fazê-lo. Abaixo
um exemplo de duas receitas de bolo de baunilha, retiradas dainternet.
2 xícaras de farinha de trigo
1 xícara de açúcar
1 colher fermento químico empó
4 unidades de ovo1/2 xícara de leite
1/2 colher (sopa) de essênciade baunilha
Numa tigela, misture a farinha e ofermento. No liquidificador, coloque osovos, o açúcar, a margarina, e o leite.Bata por 2 minutos e despeje sobre afarinha com fermento. Misture bem, juntea baunilha e misture mais um pouco.
Coloque a massa em fôrma de coneuntada e enfarinhada. Asse por 35minutos em forno pré-aquecido.
3 ovos grandes 1/2 xícara de óleo
1 colher (chá) de
essência de baunilha
2 xícaras de açúcar
250 ml de leite
3 xícaras de trigo
1 colher (sobremesa) de
fermento em pó
1.Em uma batedeira, bata os ovos até ficarembem clarinhos
2.Adicione o óleo sem parar de bater
3.Coloque o açúcar de uma só vez e continuebatendo
4.Adicione a baunilha
5.Aos poucos despeje o trigo e o leite
6.Depois de bem batido, adicione o fermento emisture só por alguns segundos, pois, se batermuito depois de colocar o fermento o bolo nãocrescerá
7.Despeje a mistura em uma forma média,untada com margarina e trigo
8.Asse em forno médio, por aproximadamente
40 minutos, ou até dourar
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 12/39
12
Não testei nenhuma das receitas. E NÃO é requisito para esta
disciplina que vocês as testem. Mas qual o nosso problema nesta
receita? PRODUZIR UM BOLO DE BAUNILHA. Notem que para o
mesmo PROBLEMA, temos SOLUÇÕES diferentes. Ambas as receitassão de um bolo de baunilha com ingredientes e modo de fazer
diferente. E ambas RESPONDEM ao questionamento/problema, ou
seja, produzir um bolo de baunilha.
E por que são diferentes? Talvez as pessoas que escreveram a
receita tenham experiências diferentes, ou até mesmo ingredientes
diferentes. Mas gosto de pensar que temos VISÕES diferentes domesmo assunto. E a maneira de pensar é muito individual. E isto faz
diferença para a logica. A maneira como abordamos o problema
neste momento não importa, desde que sejamos capazes de
DECOMPOR AS ETAPAS PRINCIPAIS DE UM PROCESSO, E
CANDENCIALAS DE MANEIRA QUE RESPONDAM AO QUE FOI
PERGUNTANDO! E isto é fazer um algoritmo!
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 13/39
13
1.4-Algoritmo Humanizado
Quando começamos a estudar lógica de programação e
algoritmos, usualmente usamos exemplos do cotidiano do aluno para
introduzir o assunto. Eu chamo este tipo de algoritmo de “Algoritmo
Humanizado”. De fato nunca vi este termo, então posso ter criado
um conceito para a posteridade!
Eu particularmente não gosto de trabalhar muito tempo com
algoritmos humanizados. Considero um mal necessário, e járespondo por quê. Uma das características dos algoritmos é serem
finitos, ou seja, terem cabeça, corpo e pé, como no esquema a seguir:
Esta é uma característica presente nos algoritmos e herdado
do conceito de processo que tem inicio (cabeça), meio (corpo) e fim
(pé). Um processo pode ser repetido zilhões de vezes, se mantidas as
condições inicio->meio->fim teremos sempre o mesmo resultado.Vamos tornar este conceito mais palpável. Já fizemos bolo de
baunilha neste livreto despretensioso. Para mantermos o interesse
Inicio
Meio
Fim
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 14/39
14
de quem não gosta de bolo, vamos ilustrar o conceito de processo
com um exemplo digamos mais salgado, como um extrato de tomate.
Vamos imaginar uma fabrica de extrato de tomate. De um
lado entram os tomatinhos colhidos, são lavados, esmagados e etc., e
sai uma bela latinha de extrato de tomate do outro lado. Se
repetirmos todas as tarefas na mesma sequencia, ou seja, repetirmos
este processo sob as mesmas condições nós teremos o mesmo
resultado – no nosso exemplo uma bela latinha de extrato de tomate.
Acompanhe o esquema:
Tomate Fábrica Extrato
ENTRADA PROCESSAMENTO SAIDA
E aqui temos outra característica importante que os
algoritmos e a própria logica de programação herdam do conceito de
processo: Entrada->Processamento->Saída. Este conceito confunde-
se com o Inicio->Meio->Fim. Quando escrevermos algoritmos
computacionais, será de extrema importância retomar esta trinca E-
>P->S.
Continuando o meu desencanto por algoritmos humanizados,
e respondendo o por quê do meu desencanto é que em um exemplo
de uma situação humana as possibilidades de
podem ser inúmeras. Vamos imaginar e vamos escrever umalgoritmo humanizado para que um autômato (ou robozinho) suba
em uma escada. Ele lera instrução por instrução e executara uma por
vez. Então vamos a nossa primeira tentativa de escrever um
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 15/39
15
algoritmo que comande este autômato obediente, sempre
lembrando que a responsabilidade pelo sucesso do processo é sua
(ou minha?) bem como a segurança do meu novo amigo autômato!
Tenha em mente que um autômato nada sabe, e seguira a risca asnossas instruções (algoritmo). Ai vamos a tentativa 1:
1 - Inicio
2- Pegue a escada
3- Suba na escada
4- Fim
Notem que as ações (VERBOS) PEGAR e SUBIR podem ter
algumas conotações e entendimentos possíveis. Pegar e trazer?
Pegar e largar? Ora um ser humano entenderia perfeitamente o
algoritmo acima. Mas o autônomo tem a mente vazia. Ele pode
entender por subir num sentido diferente do nosso. Veja abaixo
Algoritmo concluído. Mas não solucionou o problema certo?
Subir (e até mesmo pegar) reúne um subconjunto de instruções. Fixar
a escada, segurar ela, erguer a perna direita até a altura do outro
joelho, impulsionar para frente, fixar o pé no degrau, segurar a
escada e impulsionar a outra perna. É isto ou quase isto. E este é um
problema dos algoritmos humanizados. Podemos ter muitas etapas
em um processo simples, ou que é simples para um ser humano. Masnão para o autômato.
Chefe já subi!
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 16/39
16
1.5-Algoritmo Computacional
Felizmente o nosso objeto de estudo são os algoritmos
computacionais. São bem lógicos e com possibilidades menores em
muitos casos se comparados ao universo humano. Executar um
cálculo de média é muito mais fácil do que subir uma escada. Ao
menos o autômato acha isto!
Para escrevermos um algoritmo computacional precisamos
definir algumas regras e critérios de sintaxe, ou seja, a forma deescrita correta para algoritmos. Vamos definindo a nossa sintaxe
durante este livro. Não se preocupe se as coisas acelerarem um
pouco, mas para criarmos um algoritmo computacional, vamos
precisar sedimentar conceitos chaves como variáveis e operadores,
por exemplo. Mas vamos guia-lo de uma maneira não tão ortodoxa,
mas por um caminho que irá fazer sentido. É como o lego da capa
deste livro. No inicio as peças de lego parecem desconexos. Mas em
breve iremos sequencia-los e conecta-los criando verdadeiras
maravilhas da logica!
1.5.1-Anatomia básica
Neste momento vamos mostras como espero que vocês
escrevam um algoritmo formalmente. Não se preocupe muito com
isto agora. No momento certo vamos dissecar parte por parte de um
algoritmo!
O algoritmo não é uma linguagem de programação de fato.
Ela é comumente chamada de pseudocódigo. Portanto ela admite
diversas sintaxes. Sempre que possível eu particularmente prefiro serminimalista. Estou preocupado com a lógica em si para resolver o
problema. Mais do que com o formalismo da escrita do algoritmo.
Neste livro irei utilizar uma sintaxe objetivando num segundo
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 17/39
17
momento transcrever os nossos algoritmos em linguagem PHP. Esta
medida ira familiarizar um pouco a sintaxe da primeira linguagem de
programação que iremos trabalhar. A seguir um “corpo” de
algoritmo.
Neste momento chamo a atenção para algo importante, e
que irá melhorar a legibilidade de nossos códigos (ou
pseudocódigos). A EDENTAÇÃO. Não sei o que o dicionário diz sobre
o verbete indentação. Mas eu escreveria “ato ou efeito de edentar –produzir marcas ou retrancas dentadas.”. Com uma definição destas
pouco provavelmente irei escrever um dicionário nesta vida. Mas
edentar significa isto mesmo. Fazer dentes. Que dentes?? Olhe que
entre a declaração de inicio e fim do algoritmo acima, nos temos um
espaço nas próximas declarações. Isto ajuda na legibilidade de leitura
e depuração do código. Se não ficou claro agora não se preocupe em
breve isto fara todo o sentido!
Algoritmo <NomeDoAlgoritmo>;
Const
/* declaração das constantes */
var
/* declaração das variáveis*/
inteiro: var1, var2;
real: var3;
string: nome;
inicio
/* comandos */
comando 1;
comando 2;
..........comando n;
fim
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 18/39
18
1.5.2-Comandos de entrada e saída
Já falamos na trinca entrada -> processamento -> Saída,
conceito advindo de processos. Em algoritmos computacionais aentrada será uma informação, um DADO. No exemplo da fabrica de
extrato de tomate, a entrada eram... Tomates!
Precisamos ter um comando, uma instrução que nos permita
inserir estes dados de entrada. Vou mostrar o comando de entrada e
o de saída, e ai voltaremos a falar sobre variáveis. Para entrar com
uma informação (do teclado, por exemplo) iremos usar o poderosocomando LEIA. O comando leia lê um dado, e armazena-lo em uma
variável de memoria. Meio obvio não? O leia lê!
E para comando de saída (impressão), que é a maneira que
iremos apresentar o(s) resultado(s) de nosso processamento, iremos
usar o comanda escreva. Ou imprima se preferir. É tão simples. Mas
para fixar, vamos fazer um pequeno exemplo. Neste exemplo ireiomitir a declaração de variáveis, propositadamente.
Temos um belíssimo exemplo de um algoritmo, que lê e
escreve. Simulando o seu funcionamento teríamos um prompt
piscando. E eu digitaria o nome. Logo a seguir receberia a mensagem:
Lindo nome senhor Marcelo
início
/* declaração das constantes e variáveis*/
Leia nome;
Escreva “Lindo nome senhor - ” + nome;
fim
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 19/39
19
Isto é logica. O autômato executou o comando leia e depois o
comando imprima. E claro, qualquer autômato sabe que Marcelo é
um lindo nome!
1.5.2-Comentários
Comentários servem, pasmem - Para fazermos comentários!
A logica é infalível realmente. E para que fazer comentários? Para
chamar atenção ou documentar algo por exemplo. O comentário
inicia pela sequencia /* e termina pela sequencia invertida */
Comentários não são e nunca serão executados! Veja
exemplos abaixo?
/* Isto é um comentário */
/* Este é um bloco de comentário.
Vejam que esta linha não tem caracter especial para comentáriosEntão quando eu “abro” a marcação do comentário ele espera
encontrar seu fechamento em algum momento */
Tenha em mente que TUDO queestiver dentro de um
comentário...
NÃO SERÁ EXECUTADO
Trechos de código, mesmo que correto, estando comentado jamais
será executado!
/* Escreva “Nunca serei executado...Entendeu?”; */
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 20/39
20
1.5.3-Variaveis
Já sabemos como ler um dado, e como imprimir mensagens.
Mas antes de avançarmos é muito importante sabermos comoiremos armazenar e manipular estas informações (Dados), que serão
digitados no teclado por exemplo. Vamos criar uma abstração de
dado e da memória RAM (Random Access Memory). Vamos imaginar
que a memoria é uma forma de silicone para chocolate destas bem
bacanas que vem da China ou do mercado livre. (já temos receita de
bolo, então um bombom esta intimamente relacionada, não é
mesmo?)
ESFÉ
RICA
CUBICA
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 21/39
21
RET
ANGULAR
Olhando as formas de silicone, percebemos três formatos
distintos. A primeira pode guardar bombons esféricos, a segunda
bombons cúbicos e a terceira bombons retangulares. Simples não é
mesmo? Cada bombom em uma posição da forma. Se você observar
bem, cada forma pode armazenar 15 bombons. E cada bombompode VARIAR. Não de FORMA, mas de sabor, recheio, cor, entre
outras características. Cada bombom é OBJETO (você ainda vai ouvir
falar em objetos novamente) único, ou não. Podemos ter a forma
toda preenchida de bombons de morango por exemplo. Ou com três
bombons de canela, dois brancos, um de avela e nove de doce de
leite. Com estas observações simples do dia a dia, chamo a atenção
para três conclusões:
Cada forma é capaz de armazenar UM TIPO de bombom. Um
bombom esférico não pode ser guardado na forma
retangular. E vice e versa.
O conteúdo das formas pode ser VARIADO. Todos do mesmo
formato, mas de sabores diversos. E posso comer um, e repor
com outro bombom diferente.
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 22/39
22
Cada bombom de um RÓTULO, uma ETIQUETA, um NOME.
Este é um bombom de avelã, aquele é o bombom de
morango.
Encerrando a abstração, identificamos as algumas das
características de uma variável. Variável é uma porção de memoria
(FORMA DE BOMBOM) capaz de guardar/armazenar um DADO
(bombom). A variável pode ter o seu conteúdo acrescido, alterado,
modificado e removido, situações análogas que ocorrem com a forma
de bombom. Cada variável guarda um TIPO de dado, assim como a
forma de bombom cubica é capaz de guardar apenas bombonscúbicos. E cada variável tem um nome. Rapaz pegue o bombom de
avelã na forma esférica, por favor!
1.5.4-Declarando variáveis
Baseado nas características que levantamos sobre variáveis, o
mínimo que uma variável precisa para existir é um tipo e umnome/rotulo. O dado (bombom) pode ser armazenado depois.
Vamos usar o critério de especificar o tipo, e depois a lista de
variáveis. Há outra notação corrente, de especificar primeiro o nome
das variáveis e no final o tipo. Entretanto como algoritmo esta
associado a “papel e caneta”, é mais pratico escrever primeiro o tipo,
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 23/39
23
e depois a variável. Assim variáveis podem ser acrescidas facilmente,
caso haja a necessidade.
1.5.5-Tipagem de variáveisAlgum tempo atrás, o tipo de variáveis tinha uma relação
direta com a arquitetura do computador. Este paradigma, entretanto
foi superado e temos uma diversidade de tipos de dado. Entretanto
para escrever algoritmos, quanto mais simples melhor. Seguindo este
preceito minimalista, apresento quatro tipos de dados. E iremos
resolver uma diversidade de problemas com eles.
Tipo de variável O que armazena
String String em inglês, esta relacionado com corda.Por corda podemos entender CADEIA ouSEQUENCIA. E uma string no sentidocomputacional é exatamente isto. É um tipo dedados que guarda letras, símbolos e números.Mas entende tudo como caractere literal. Épróprio para sequencias de caracteres, comoum nome, um endereço, um telefone, porexemplo,
Inteiro Poderíamos ter um tipo numérico, quearmazenaria números em geral. Entretanto umproblema clássico em computação é armazenar
números de ponto flutuante (números reais).Então usaremos o tipo INTEIRO para armazenarnúmeros INTEIROS – ou seja, números que “nãotenham vírgula” – como 1, 2, 1024, 293092309.
Real É um tipo numérico especifico para númerosreais ou fracionários. Admite inteiros? Sim. Maseles são armazenados como se tivessem parte
decimal. Neste caso a parte decimal épreenchida com zeros
Logico Variável lógica (booleana). Admite ourepresenta dois estados. Verdadeira ou Falsa.
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 24/39
24
Agora sim conseguimos declarar variáveis. Vamos fazer um
algoritmo de exemplo. Nosso algoritmo deve ler o nome de um
aluno, e seu ano de nascimento. Em seguida deve mostrar uma
mensagem de boas vindas e dizer a sua idade. Aqui vai uma dasinúmeras possibilidades de solução deste algoritmo.
Al gor i t mo BoasVi ndas;var
i nt ei r o: i dade, ano_nasci ment o;
st r i ng: nome;
i ni ci oescr eva “Di gi t e seu nome: ”;
l ei a nome;
escr eva “Di gi t e seu ano de nasci ment o”;l ei a ano_nasci ment o;
i dade = 2014 – ano_nasci ment o;
escr eva “Ol a ” + nome + “sej a bem vi ndo! ”;
escr eva “você t em apenas “ + i dade;f i m
Opt ei por usar uma var i avel par aar mazenar a i dade. Poder i a si mpl esment e te
f ei t o assi m:
escr eva “você t em apenas “ + 2014 – ano_nasci ment o;
Mas neste momento não estamos preocupados com as
possibilidades de variações do algoritmo. Cabe aqui introduzir uma
pergunta reveladora – O algoritmo proposto RESOLVE a situação
exposta/solicitada?
Responder esta pergunta implica em outra – Como testar um
algoritmo? Simples. Vamos “executando” linha a linha. De cima para
baixo. E a cada execução vamos anotando em um cantinho da folha o
conteúdo das variáveis. Se a saída (resultado) foi o que foi pedido,
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 25/39
25
então nosso algoritmo funciona. Pode não estar otimizado, mas esta
funcional.
Algoritmo Execução
i ni ci oescreva “Di gi t e seu nome: ”;
l ei a nome;
escreva “Di gi t e seu ano de
nasci ment o: ”;
l ei a ano_nasci ment o;
i dade = 2014 – ano_nasci ment o;
escr eva “Ol a ” + nome + “sej a bem
vi ndo! ”;
escreva “voc t em apenas “ +
i dade;
f i m
Di gi t e t eu nome:
Marcel o
Di gi t e seu ano de
nasci ment o:
1973
I dade = 41
Ol a Marcel o sej a bem
vi ndo
Você t emapenas 41
Este é um algoritmo bastante simples; As variáveis acabam
não sendo alteradas após termos digitado seus valores. Mas
basicamente é assim que testamos, linha a linha, anotando as
modificações que os comandos fazem no conteúdo das variáveis. E
neste exemplo,
E vendo a sua “saída”. Imprimei uma mensagem amigável, o
nome digitado, e a idade de acordo com o ano digitado. Sim ele
funciona.
Ao menos em 2014. Já em 2015... Sei não!!!
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 26/39
26
1.5.6-Constantes
Depois de entendermos o conceito e utilidade de uma
variável, entender o conceito de constante fica bastante simplificado.Constante é um espaço de memoria alocado para guardar um
determinado tipo de dado. Até aqui nada diferente de variavel.
Exceto por um detalhe – Variável, como o próprio nome sugere,
pode, e geralmente sobre mutações em seu conteúdo. Pode ser
acessado, modificado, alterado livremente. Diferente de uma
constante que como o próprio nome sugere mantem o seu valor
inalterado durante a execução do algoritmo.
Em nossa sintaxe iremos utilizar uma área especifica para
declaração de constantes. Em algumas linguagens atuais não existe
uma área formal para declaração de constantes. Dai bate saudades
da linguagem de programação chamada Pascal. Ela tinha a sintaxe
extremamente parecida com um algoritmo, foi muito utilizada para
alunos iniciais em programação.
Antes da área das variáveis, existe a área para declaração de
constantes.
Algoritmo <NomeDoAlgoritmo>;
const
/* declaração das constantes */
var
/* declaração das variáveis*/
inicio
/* comandos */
fim
Importante frisar que ao declararmos uma constante, nos
não declaramos um tipo. Simplesmente o rotulo (nome) e fazemos a
atribuição direta do valor para a constante. O tipo sera definido pelo
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 27/39
27
tipo de informação (dado) que estamos atribuindo a constante. Veja
alguns exemplos:
Al gor i t mo Const ant es;
ConstI dade=41; / * Const ant e i nt ei r a */
Nome=”Mar cel o Gar ci a”; / * St r i ng */Sal ar i o=18976, 82; / * Real */
i ni ci o
escr eva “Est e al gor i t mo não f az nada út i l
r eal ment e! ”;
escr eva “Você t em “ + I dade + “ anos”;escr eva “Seu nome e “ + Nome;
escr eva “E você ganha apenas “ + Sal ar i o;f i m
1.5.7-Nomenclatura de variáveis e
constantes
Precisamos ter alguns critérios para dar nomes a constantes e
variáveis. É verdade que algoritmo é uma “linguagem de papel”. Mas
no mundo real usaremos alguma linguagem de programação. E ela
terá de entender o nome das variáveis. Nós fixaremos aqui as
regrinhas básicas
1 - Caracteres validos para nome de variáveis- Letras, números e _ (underline).2- JAMAIS iniciar uma variável com umnúmero. O processador sintático iraentender como uma expressão matemática3- Procure usar nomes significativos,
para melhorar a legibilidade do seu código.
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 28/39
28
Com estas regrinhas em mente vamos criar exemplos e
contraexemplos.
Exemplos
Nome1
Quatro _4QuiaboNome_Aluno _Aluno
Contraexemplos
2o_Nome4_serie
Nome-Aluno4
1.5.8-Operações com variáveis
ATRIBUIÇÃO
Atribuição: Podemos preencher o valor de umavariável, usando o operador de atribuição =Na pagina anterior já usamos este operador
Idade=41;
A variável Idade PASSAR A SER 41. O valor 41 é
atribuído a variável Idade.
Aritméticos
+Soma duas variáveis, ou números. Exemplo:Salario + Comissao
-Subtrai duas variáveis, ou números. Exemplo:AnoAtual - AnoNascimento
*
Multiplica duas variáveis, ou números. Exemplo:
Base * Altura
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 29/39
29
/
Divide uma variável ou numero pela outra. É do tipoREAL. Exemplo:
Salario / 3
DIV
Divisão INTEIRA. Retorna um tipo INTEIRO. Exemplo:
5 DIV 2
Resultado – 2
MOD
Retorna o resto da divisão INTEIRA. Retorna um tipointeiro. Exemplo
5 MOD 2Resultado - 1
%
^
Exponenciação. Ela a primeira variável ou numero aoexpoente
3 ^ 2Resultado - 9
Hierarquia de execução
Primeiro os parentesSegundo exponenciaçãoTerceiro multiplicação ou divisão
Quarto soma ou subtração
Se os operadores forem de mesma ordem serão resolvidos daesquerda para a direita.
1.5.9-Variaveis Lógicas
Variáveis logicas, ou booleanas, estão mais relacionadas a
estados do que a conteúdos. Lembramos aqui de bits. Um bit tem
dois estados possíveis – ligado ou desligado, acesso ou apagado, on
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 30/39
30
ou off, 0 ou 1, verdadeiro ou falso. E variáveis logicas tem este
mesmo sentido. Representam dois estados possíveis, basicamente
verdadeiro ou falso. Declaramos variáveis logicas da seguinte forma:
Al gor i t mo Const ant es;Var
Logi ca : St at us, st s_quebr ou;
i ni ci o
St at us = V;
St s_quebr ou = F;escr eva “Seu St at us é “ + St at us;
escr eva “Quebr ou al go? “ + st s_quebr ou;
f i m
Com o pseudocódigo acima teríamos como saída:
Seu St at us é V
Quebrou al go? F
Variáveis logicas, ou booleanas são extremamente relacionadas com
as estruturas de decisão.
1.6.0-Variaveis Contadoras
Variáveis contadoras não é um tipo especial de variável. É umconceito de uma variável do tipo inteiro que ira ser incrementada de
uma unidade a cada iteração. Esta intimamente relacionada com
estruturas de repetição, que veremos no capitulo 2.
1.6.1-Variaveis Acumuladoras
Variáveis acumuladoras devem serem encaradas comoTOTALIZADORES. São usadas para totalizar (acumular) um valor
especifico. Se quisermos saber o peso total dos alunos da turma,
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 31/39
31
precisamos TOTALIZAR os pesos individuais. É uma técnica de
programação corriqueiramente no dia a dia.
Faremos um pequeno exemplo para ilustrar o uso de
contadores e acumuladores. Neste momento este exemplo vai
parecer pouco importante. Mas acreditem quanto forem
apresentadas as estruturas de repetição, o exemplo de variáveis
contadoras e acumuladoras será muito mais rico e consistente.
Const r ua um al gor i t mo que l ei a a i dade e peso det r ês al unos. Depoi s apr esent e a medi a do peso e das
i dades. A t ur ma t em 5 al unos.
Al gor i t mo Cont aAl unosVar
I nt ei r o: Nr oAl uno, I dade, Tot al I dade;Real : Peso, Tot al Peso;
I ni ci oNr oAl uno = 0; / * Aqui i ni ci al i zamos com 0 */
Tot al Peso = 0; Tot al I dade = 0;
Nr oAl uno = Nr oAl uno + 1; / * Var i avel Cont ador –
El a cont a de 1 em 1. Como o val or ant er i or del a er a 0,passa a ser 1 */
Escr eva “Al uno” + Nr oAl uno + “, por f avor ,di gi t e ”.
Escr eva “Sua i dade : ”;Lei a I dade; Tot al I dade = Tot al I dade + I dade; / * Var i avel
Acumul ador a – Aqui el a acumul a as i dades * /
Escr eva “Seu Peso : ”;Lei a Peso;
Tot al Peso = Tot al Peso + Peso; / * Aqui acumul a o
peso */
Nr oAl uno = Nr oAl uno + 1; / * 1 + 1 */Escr eva “Al uno” + Nr oAl uno + “, por f avor ,
di gi t e ”.
Escr eva “Sua i dade : ”;
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 32/39
32
Lei a I dade;
Tot al I dade = Tot al I dade + I dade;Escr eva “Seu Peso : ”;Lei a Peso;
Tot al Peso = Tot al Peso + Peso;Nr oAl uno = Nr oAl uno + 1; / * 2 + 1 */
Escr eva “Al uno” + Nr oAl uno + “, por f avor ,di gi t e ”.
Escr eva “Sua i dade : ”;Lei a I dade; Tot al I dade = Tot al I dade + I dade;Escr eva “Seu Peso : ”;
Lei a Peso; Tot al Peso = Tot al Peso + Peso;Nr oAl uno = Nr oAl uno + 1; / * 3 + 1 */
Escr eva “Al uno” + Nr oAl uno + “, por f avor ,di gi t e ”.
Escr eva “Sua i dade : ”;Lei a I dade;
Tot al I dade = Tot al I dade + I dade;Escr eva “Seu Peso : ”;Lei a Peso; Tot al Peso = Tot al Peso + Peso;
Nr oAl uno = Nr oAl uno + 1; / * 4 + 1 */
Escr eva “Al uno” + Nr oAl uno + “, por f avor ,di gi t e ”.
Escr eva “Sua i dade : ”;
Lei a I dade; Tot al I dade = Tot al I dade + I dade;Escr eva “Seu Peso : ”;
Lei a Peso; Tot al Peso = Tot al Peso + Peso;I mpr i ma “Ti vemos “ + Nr oAl uno;
I mpr i ma “Medi a Peso” + Tot al Peso / Nr oAl uno;
I mpr i ma “Medi a I dade” + Tot al I dade /Nr oAl uno;
I mpr i ma “Peso Tot al Tur ma ” + Tot al Peso;
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 33/39
33
I mpr i ma “Tot al I dade Tur ma” + Tot al I dade;
Fi m
O algoritmo ficou extenso porquê tivemos de fazer 5 leiturasde peso e idade. E como ainda não conhecemos nenhuma estrutura
de repetição tem que resolver a situação com conhecimento que
temos até o momento. Ler e Imprimir basicamente. Entretanto estes
algoritmos têm alguns refinamentos. Ele pede o numero do aluno em
questão. E ele usa a variável contadora NroAluno para calcular as
medias. Se tivermos que ler mais informações as expressões decalculo não terão de ser modificadas. “Execute” no papel este
algoritmo, linha a linha. Faça uma tabela para as variáveis, e vá
anotando o resultado linha a linha. Entenda o funcionamento das
variáveis acumuladoras e contadoras, linha a linha!
1.6.1-Variaveis Sinalizadoras Flag
/* ADICIONAREI EM BREVE */
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 34/39
34
2-Fluxo de um algoritmo
Através dos exemplos feitos até agora inclusive com
demonstração da “execução“ do algoritmo de BoasVindas,
naturalmente você já deve ter percebido, que existe uma sequencia
de execução – “De cima para baixo”. Vamos executando linha a linha,
sem desvios ou interrupções, via de regra.
Se pararmos para pensar, será possível termos trechos de
códigos que não gostaríamos de executar em determinada condição?
Ainda em duvida? Proponho como exemplo, desenvolvermos um
algoritmo para a sentença abaixo:
“Caso esteja nublado leve o guarda-chuva!”
Sentença trivial de nosso dia a dia. Mas como escrever um
algoritmo que resolva esta situação? Sabemos comando de entrada e
saída, expressões e criarmos constantes e variáveis. Vamos tentar
então.
Al gor i t mo Guar daChuva_V1
VarSt r i ng: est achovendo;
I ni ci o
Escr eva “Est a nubl ado? ( si m/ não) ”;
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 35/39
35
Lei a est achovendo;
Escr eva “Leve o guarda- chuva”;
f i m
Observe atentamente o algoritmo GuardaChuva_V1. Ele cria
uma variável estachovendo para ler do teclado um “sim” ou “não”;
Em seguida ele imprime a mensagem “Leve o guarda-chuva”. Mas ele
imprime a mensagem eu digitando sim, ou não. O fluxo vem
executando de cima para baixo!
0 Vamos a outro exemplo mais simples de ser implementado.
Você ficou de castigo, por não ter trazido uma maça pro seu
professor. Ele mandou você fazer um algoritmo que escreva 10 vezes
a mensagem “Devo trazer uma maça para meu professor!”.
Al gor i t mo MaçaI ni ci o
Escr eva “Devo t r azer uma maça para o meu prof essor ! ”;Escr eva “Devo t r azer uma maça para o meu prof essor ! ”;
Escr eva “Devo t r azer uma maça para o meu prof essor ! ”;
Escr eva “Devo t r azer uma maça para o meu prof essor ! ”;Escr eva “Devo t r azer uma maça para o meu prof essor ! ”;
Escr eva “Devo t r azer uma maça para o meu prof essor ! ”;Escr eva “Devo t r azer uma maça para o meu prof essor ! ”;
Escr eva “Devo t r azer uma maça para o meu prof essor ! ”;Escr eva “Devo t r azer uma maça para o meu prof essor ! ”;Escr eva “Devo t r azer uma maça para o meu prof essor ! ”;
Fi m
Este foi mais fácil. Estão ai as 10 mensagem de castigo. E se o
professor pedir 20? 50? 100? 1000? Neste exemplo pode ser
absurdo. Mas imagine quando se faz o cadastro dos alunos do etec
por exemplo. Quantas vezes tem que se executar o MESMO trecho
de código?
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 36/39
36
Felizmente não somos os únicos a sofrer deste mal. Já
inventaram as soluções para nossos problemas. Temos estruturas
capazes de MODIFICAREM o fluxo de execução, conforme as
condições do problema.
2.1.1-Estruturas de decisão ou
condicional
2.1.2-Estruturas de repetição
Relembrando o algoritmo do castigo. Fazer um programa que
escreva a mesma mensagem pode ser impossível com o que sabemos
até o momento. Imagine fazer um algoritmo que imprima o seu
nome 10.000 vezes. Manualmente não é impossível. Mas é inviável.
O pseudocódigo prevê estruturas que permitem repetirmos trechos
de código de maneira controlada. Desta forma podemos dimensionar
e resolver problemas de imprimir 10.000 vezes algo, por exemplo.Vamos dar uma olhada em cada uma delas
2.1.2.1-Para/faça
Esta estrutura permite executar um trecho do código um
numero fixo de vezes. No item 1.6.1, nos criamos um algoritmo para
ler a idade e peso de 5 alunos, e depois calcular a sua media. Tivemos
de repetir o trecho do código 5 vezes. Se usarmos uma estrutura de
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 37/39
37
repetição não teremos todo aquele trabalho. Vamos começar pela
sintaxe desta estrutura de repetição.
Para <var i ável > de <val or i ni ci al > até <val or f i nal > [ Passo
<i ncr ement o>] f aça
Lista de comandos;
Fim Para
Talvez no primeiro impacto pareça um pouco complexo. Mas
acreditem é uma estrutura de fácil entendimento, e de uso comum
em qualquer algoritmo. Vamos dissecar passo a passo
<variável> - Nome da variável que ser usada no para. Na verdade é
uma variável contadora. PRECISA SER DECLARADA NA AREA DE
DECLARAÇÃO DE VARIAVEIS. É uma espécie de INDICE;
<valor inicial> - É o valor inicial dela. Geralmente 0 ou 1. Mas pode
ser qualquer valor inteiro.
<valor final> é o limite da repetição. Ele ira iniciar no valor inicial e ira
repetir até o valor final.
<incremento> - É opcional. Se não informarmos o laço será
aumentado de 1 em 1, exatamente como em um contador. Mas o
comando é flexível, e podemos modificar este valor.
Al gor i t mo Maca2Var
I nt ei r o: I ;
I ni ci o
Par a I de 1 até 10 f açaEscr eva “Devo t r azer uma maça para o meu
pr of essor ! ”;Fi m Par a
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 38/39
38
Fi m
2.1.2.2-Enquanto/façaOutra estrutura de repetição bastante interessante é a estrutura
enquanto. Ela surge naturalmente nos algoritmos humanizados -
”enquanto houver degraus suba”. Ela repete um trecho de código,
enquanto a condição especificada no teste seja falsa. Se a condição
nunca tornar-se verdadeira, o trecho de código será executado
indefinidamente em um “looping” infinito. Isto é muito importante!
A diferença básica entre o para/faça e o enquanto é que o para/faça
eu informo um numero de repetições (embora em algumas
linguagens de programação o uso de expressões no para/faça é
permitido). Já no enquanto eu colocarei uma condição que será
testada. E por condição temos vários exemplos, como “enquanto
chover”, “enquanto não passar”, “enquanto não tiver frio” e por aivai. Vamos dar uma olhada na sintaxe da estrutura enquanto/faça
Enquanto <condi ção> f aça
Lista de comandos;
Fim Enquanto
De certa feita parece uma estrutura mais simples do que o para/faça.
Mas é muito poderosa. Vamos propor um exemplo similiar ao da
maça, feito no para/faça. Mas vamos resolvê-lo usando a estrutura
enquanto faça
Al gor i t mo Maca3
Var
I nt ei r o: I ;I ni ci o
I = 1; / * I ni ci al i zo o cont ador com val or 1 */
Enquant o I <= 10 f aça
7/18/2019 Manual de Logica V1
http://slidepdf.com/reader/full/manual-de-logica-v1 39/39
Escr eva “Devo t r azer uma maça para o meu
pr of essor ! ”;I = I +1;
Fi m Enquant o
Fi m
Olhando o exemplo Maça3, o resultado é o mesmo do que o Maça2.
Notem porem que nos temos o controle da condição. Se
esquecermos de incrementar o contador I, a condição será infinita! O
Laço de repetição será executado infinitamente, pois atribuímos 1
antes da execução. Este é um dos maiores cuidados que temos queter com estruturas enquanto – A condição de saída dela.
REFERENCIAS
Lógica de programação – A construção de algoritmos e estruturas dedados – André Forbellone & Henri Eberspächer –3ª edição - 2005 -Pearson Prentice Hall
Curso essencial de lógica de programção – Marilane Almeida – 1ªEdição -2008 – Digerati Books