Copyright (c) 2013, Marcelo Garcia. Todos os direitos reservados
Redistribuio e uso destes documentos, com ou sem modificaes, so permitidos desde que observadas as seguintes condies:
* Redistribuies ou modificaes precisam manter a licena de copyright mencionada acima, esta lista de condies e a iseno 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 autorizao por escrito.
ESTA DOCUMENTACAO E PROVIDA PELOS DETENTORES DOS DIREITOS AUTORAIS E COLABORADORES "COMO ESTA" E QUAISQUER GARANTIAS EXPRESSAS 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 OU CONSEQUENTES (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 TAIS DANOS.
3 Algumas palavras
Este manual visa servir de texto base para os alunos da disciplina de lgica de programao do curso tcnico em Informtica para Internet, mbito Ead / e-Tec Brasil.
Deixo aqui o meu agradecimento a duas pessoas fundamentais para a criao desde manual. O Eduardo Wenzel Brio, coordenador do curso no momento em que escrevo este manual. Agradeo a toda motivao e abertura de portas na rede e-Tec.
A segunda pessoa para outro coordenador do e-Tec, o Alexandre Leite. Apesar de no ter muito contato com ele no curso, ele foi meu professor de lgica de programao h uns 20 anos atrs. Ento parte do que eu escrevo aqui, aprendi com o Alexandre!
A ideia deste manual no ser definitivo, ou uma bblia no assunto. At por que no 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 rpida e segura entender o esqueleto logico que precisamos ter para desenvolver qualquer programa.
Espero que seja realmente til
E vamos aos estudos!
4 Sumrio 1- Lgica ....................................................................................... 5 1.2-Lgica de programao ............................................................... 6 1.3-Algoritmo ..................................................................................10 1.4-Algoritmo Humanizado ..............................................................13 1.5-Algoritmo Computacional ..........................................................16 1.5.1-Anatomia bsica .....................................................................16 1.5.2-Comandos de entrada e sada .................................................18 1.5.2-Comentrios ...........................................................................19 1.5.3-Variaveis .................................................................................20 1.5.4-Declarando variveis ...............................................................22 1.5.5-Tipagem de variveis ..............................................................23 1.5.6-Constantes..............................................................................26 1.5.7-Nomenclatura de variveis e constantes .................................27 1.5.8-Operaes com variveis ........................................................28 1.5.9-Variaveis Lgicas .....................................................................29 2-Fluxo de um algoritmo ..................................................................34 2.1.1-Estruturas de repetio ...........................................................36 REFERENCIAS ...................................................................................39
5 1- Lgi c a
A lgica est intrinsecamente ligada ao ser humano. Filsofos gregos j praticavam exerccios de logica. Definir lgica algo complexo. Os puristas e entendidos que me perdoem, mas gosto de pensar que lgica a capacidade de organizar o pensamento buscando o entendimento dos fatos, da situao observada. Lgica para mim faz parte do mtodo cientifico. Lgica raciocnio. Lgica pensar. observar, entender.
O bom da lgica que podemos reproduzir resultados. Se seguirmos os passos do que aprendemos e reproduzi-los novamente, podemos esperar o mesmo resultado. No acredita? Jogue um tijolo de cima da mesa. Jogue outro. Outro. Outro. Todos caram? Se no caram ou voc no est neste planeta, ou esta fazendo isto muito errado!
Ficaremos ento com este conceito simplista de lgica:
6 1.2-Lgi c a de pr ogr ama o
Quando pensamos em programao o que nos vem mente? O guia de programao de sua tv a cabo? Ou a programao da festa anual de sua cidade? Que tal a programao de cinema do ms? Embora o leque de pensamentos possa ser imenso, temos algum conceito pessoal para a palavra PROGRAMAO Nos exemplos citados podemos compreender programao como organizao. No caso de um festival, montar um programa com todos os eventos que iro ocorrer exige alguma ou muita logstica. Quem da cidade, quem pode fazer apresentao no determinado horrio, quem precisa de transporte, como trataremos as excees. Podemos pensar em diversos fatores, ou (guarde esta palavra usaremos em breve). E LOGISTICA, deve ser uma derivao sufixal de LGICA (LOGOS EM GREGO)!
Vejam quantas conexes e inter-relaes podem ser estabelecidas, e s vezes no nos damos por conta! Podemos ainda pensar em outro tipo de programao. 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 /BOTO descongelar, e em seguida o peso do que queremos descongelar, e ento apertar o start/iniciar.
Provavelmente voc nunca parou para pensar que SIM, voc programa o seu micro-ondas. algo do nosso dia a dia, to banal que usamos de maneira rotineira e automtica, que perdemos a contextualizao do fato, perdemos a noo de quanta coisa (informao) nos usamos para programar o micro-ondas por exemplo. Seguindo no exemplo do descongelamento, veja o esquema a seguir:
7
Em uma atividade cotidiana temos envolvidos diversos conceitos de programao. E neste momento estamos carentes de um conceito mais computacional de programao, e aqui vai um conceito pouco ortodoxo, no melhor estilo minimalista sobre programao:
Sim programa em uma abstrao RESOLVER, SOLUCIONAR, EQUACIONAR uma situao ou problema proposto. Seja algo simples como calcular uma mdia, ou algo complexo como calcular dados balsticos (uma das primeiras aplicaes dos computadores).
Ent o pr ogr amar f c i l ? EQUIVALE
8 Sim. E no. Neste momento precisamos de um conceito mais slido de programao. Atualmente programar escrever um cdigo em uma linguagem de computador. Esta linguagem ser processada de alguma maneira por um computador. O nosso trabalho escrever instruo por instruo detalhadamente, pois a mquina burra. E a organizao destas instrues crucial. Aqui entra a LGICA. Lembrando-se do conceito visto - OBSERVAR, ANALISAR e DESMONTAR o processo em etapas/aes/atividades, capazes de serem executadas, em uma sequencia logica de instrues. Portanto programar um cdigo para um clculo de mdia aritmtica uma tarefa trivial. Programar um cdigo para simular projees de balstica j uma tarefa herculana! Quanto maior a complexidade do cenrio/problema existe mais nuances a serem identificadas e convertidas em linhas de cdigo. E aqui comeamos a ver conceitos recorrentes. Programao esta intrinsecamente ligada a lgica. Programao pertence ao mundo lgico.
Uma das linguagens que iremos trabalha no curso chama-se PHP. E como falamos tanto que fcil construir um cdigo (programar) para calculo de mdias, abaixo vai um pequeno cdigo em PHP que resolve esta questo, e o resultado de sua execuo:
Pequeno programa em PHP que calcula a mdia
9 Executando o pequeno cdigo, temos como sada (resultado do processamento).
Em javascript, podemos ter o seguinte cdigo-fonte para resolvermos o problema da mdia:
Embora a linguagem seja diferente, o resultado produzido pelo nosso processamento (sada), o mesmo! Mas antes de entrarmos nos meandres de aprendermos uma linguagem de programao, precisamos fortalecer a nossa lgica. Precisamos reaprender a pensar termos domnio sobre o pensamento, e em como pensar. Precisamos enxergar a sequencia logica de eventos. Papel, lpis e borracha a postos, pois iremos programar no papel. Sim exatamente isto, no papel!
10 1.3-Al gor i t mo
Algoritmo programar?!?!?!?
programar em papel. determinar a logica principal do problema proposto. Nesta modalidade a sintaxe no to importante. Vrias consideraes que faramos em um programa escrito em uma linguagem de programao, no so feitas. No escrevemos um cdigo realmente e sim um pseudocdigo, de alto nvel. Este cdigo pode ser traduzido para qualquer linguagem de programao.
Algoritmo por sua natureza um pseudocdigo, embora existam softwares voltados para seu ensino, como o visualg que executa um algoritmo. o registro LGICO e cadenciado e em ALTO NIVEL dos passos a serem executados para resolver um problema. Algoritmo esta intimamente ligado a programao. E programao esta intimamente ligada a logica. Portanto podemos entender algoritmo como: Uma srie limitada de etapas com objetivo de executar (Resolver) determinada tarefa. Estas etapas tem que estar ordenadas de maneira logica. SIM NO
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 da internet.
2 xcaras de farinha de trigo 1 xcara de acar 1 colher fermento qumico em p 4 unidades de ovo 1/2 xcara de leite 1/2 colher (sopa) de essncia de baunilha
Numa tigela, misture a farinha e o fermento. No liquidificador, coloque os ovos, o acar, a margarina, e o leite. Bata por 2 minutos e despeje sobre a farinha com fermento. Misture bem, junte a baunilha e misture mais um pouco. Coloque a massa em frma de cone untada e enfarinhada. Asse por 35 minutos em forno pr-aquecido.
3 ovos grandes 1/2 xcara de leo 1 colher (ch) de essncia de baunilha 2 xcaras de acar 250 ml de leite 3 xcaras de trigo 1 colher (sobremesa) de fermento em p
1.Em uma batedeira, bata os ovos at ficarem bem clarinhos
2.Adicione o leo sem parar de bater
3.Coloque o acar de uma s vez e continue batendo
4.Adicione a baunilha
5.Aos poucos despeje o trigo e o leite
6.Depois de bem batido, adicione o fermento e misture s por alguns segundos, pois, se bater muito depois de colocar o fermento o bolo no crescer
7.Despeje a mistura em uma forma mdia, untada com margarina e trigo
8.Asse em forno mdio, por aproximadamente 40 minutos, ou at dourar
12 No testei nenhuma das receitas. E NO requisito para esta disciplina que vocs as testem. Mas qual o nosso problema nesta receita? PRODUZIR UM BOLO DE BAUNILHA. Notem que para o mesmo PROBLEMA, temos SOLUES diferentes. Ambas as receitas so 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 so diferentes? Talvez as pessoas que escreveram a receita tenham experincias diferentes, ou at mesmo ingredientes diferentes. Mas gosto de pensar que temos VISES diferentes do mesmo assunto. E a maneira de pensar muito individual. E isto faz diferena para a logica. A maneira como abordamos o problema neste momento no 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!
13 1.4-Al gor i t mo Humani zado
Quando comeamos a estudar lgica de programao 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, ento posso ter criado um conceito para a posteridade! Eu particularmente no gosto de trabalhar muito tempo com algoritmos humanizados. Considero um mal necessrio, e j respondo por qu. Uma das caractersticas dos algoritmos serem finitos, ou seja, terem cabea, corpo e p, como no esquema a seguir:
Esta uma caracterstica presente nos algoritmos e herdado do conceito de processo que tem inicio (cabea), meio (corpo) e fim (p). Um processo pode ser repetido zilhes de vezes, se mantidas as condies inicio->meio->fim teremos sempre o mesmo resultado. Vamos tornar este conceito mais palpvel. J fizemos bolo de baunilha neste livreto despretensioso. Para mantermos o interesse Inicio Meio Fim
14 de quem no 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, so 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 condies ns teremos o mesmo resultado no nosso exemplo uma bela latinha de extrato de tomate. Acompanhe o esquema: Tomate Fbrica Extrato
ENTRADA PROCESSAMENTO SAIDA
E aqui temos outra caracterstica importante que os algoritmos e a prpria logica de programao herdam do conceito de processo: Entrada->Processamento->Sada. Este conceito confunde- se com o Inicio->Meio->Fim. Quando escrevermos algoritmos computacionais, ser de extrema importncia 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 situao humana as possibilidades de podem ser inmeras. Vamos imaginar e vamos escrever um algoritmo humanizado para que um autmato (ou robozinho) suba em uma escada. Ele lera instruo por instruo e executara uma por vez. Ento vamos a nossa primeira tentativa de escrever um
15 algoritmo que comande este autmato obediente, sempre lembrando que a responsabilidade pelo sucesso do processo sua (ou minha?) bem como a segurana do meu novo amigo autmato! Tenha em mente que um autmato nada sabe, e seguira a risca as nossas instrues (algoritmo). Ai vamos a tentativa 1: 1 - Inicio 2- Pegue a escada 3- Suba na escada 4- Fim
Notem que as aes (VERBOS) PEGAR e SUBIR podem ter algumas conotaes e entendimentos possveis. Pegar e trazer? Pegar e largar? Ora um ser humano entenderia perfeitamente o algoritmo acima. Mas o autnomo tem a mente vazia. Ele pode entender por subir num sentido diferente do nosso. Veja abaixo
Algoritmo concludo. Mas no solucionou o problema certo? Subir (e at mesmo pegar) rene um subconjunto de instrues. 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. Mas no para o autmato. Chefe j subi!
16 1.5-Al gor i t mo Comput ac i onal
Felizmente o nosso objeto de estudo so os algoritmos computacionais. So bem lgicos e com possibilidades menores em muitos casos se comparados ao universo humano. Executar um clculo de mdia muito mais fcil do que subir uma escada. Ao menos o autmato acha isto! Para escrevermos um algoritmo computacional precisamos definir algumas regras e critrios de sintaxe, ou seja, a forma de escrita correta para algoritmos. Vamos definindo a nossa sintaxe durante este livro. No se preocupe se as coisas acelerarem um pouco, mas para criarmos um algoritmo computacional, vamos precisar sedimentar conceitos chaves como variveis e operadores, por exemplo. Mas vamos guia-lo de uma maneira no to ortodoxa, mas por um caminho que ir fazer sentido. como o lego da capa deste livro. No inicio as peas de lego parecem desconexos. Mas em breve iremos sequencia-los e conecta-los criando verdadeiras maravilhas da logica! 1.5.1-Anat omi a bsi c a Neste momento vamos mostras como espero que vocs escrevam um algoritmo formalmente. No se preocupe muito com isto agora. No momento certo vamos dissecar parte por parte de um algoritmo! O algoritmo no uma linguagem de programao de fato. Ela comumente chamada de pseudocdigo. Portanto ela admite diversas sintaxes. Sempre que possvel eu particularmente prefiro ser minimalista. Estou preocupado com a lgica 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
17 momento transcrever os nossos algoritmos em linguagem PHP. Esta medida ira familiarizar um pouco a sintaxe da primeira linguagem de programao que iremos trabalhar. A seguir um corpo de algoritmo.
Neste momento chamo a ateno para algo importante, e que ir melhorar a legibilidade de nossos cdigos (ou pseudocdigos). A EDENTAO. No sei o que o dicionrio diz sobre o verbete indentao. Mas eu escreveria ato ou efeito de edentar produzir marcas ou retrancas dentadas.. Com uma definio destas pouco provavelmente irei escrever um dicionrio nesta vida. Mas edentar significa isto mesmo. Fazer dentes. Que dentes?? Olhe que entre a declarao de inicio e fim do algoritmo acima, nos temos um espao nas prximas declaraes. Isto ajuda na legibilidade de leitura e depurao do cdigo. Se no ficou claro agora no se preocupe em breve isto fara todo o sentido! Algoritmo <NomeDoAlgoritmo>; Const /* declarao das constantes */ var /* declarao das variveis*/ inteiro: var1, var2; real: var3; string: nome; inicio /* comandos */ comando 1; comando 2; .......... comando n; fim
18 1.5.2-Comandos de ent r ada e sada J falamos na trinca entrada ->processamento ->Sada, conceito advindo de processos. Em algoritmos computacionais a entrada ser uma informao, um DADO. No exemplo da fabrica de extrato de tomate, a entrada eram... Tomates! Precisamos ter um comando, uma instruo que nos permita inserir estes dados de entrada. Vou mostrar o comando de entrada e o de sada, e ai voltaremos a falar sobre variveis. Para entrar com uma informao (do teclado, por exemplo) iremos usar o poderoso comando LEIA. O comando leia l um dado, e armazena-lo em uma varivel de memoria. Meio obvio no? O leia l! E para comando de sada (impresso), que a maneira que iremos apresentar o(s) resultado(s) de nosso processamento, iremos usar o comanda escreva. Ou imprima se preferir. to simples. Mas para fixar, vamos fazer um pequeno exemplo. Neste exemplo irei omitir a declarao de variveis, propositadamente.
Temos um belssimo exemplo de um algoritmo, que l e escreve. Simulando o seu funcionamento teramos um prompt piscando. E eu digitaria o nome. Logo a seguir receberia a mensagem: Lindo nome senhor Marcelo incio /* declarao das constantes e variveis*/ Leia nome; Escreva Lindo nome senhor - +nome; fim
19 Isto logica. O autmato executou o comando leia e depois o comando imprima. E claro, qualquer autmato sabe que Marcelo um lindo nome! 1.5.2-Coment r i os Comentrios servem, pasmem - Para fazermos comentrios! A logica infalvel realmente. E para que fazer comentrios? Para chamar ateno ou documentar algo por exemplo. O comentrio inicia pela sequencia /* e termina pela sequencia invertida */ Comentrios no so e nunca sero executados! Veja exemplos abaixo? /* Isto um comentrio */ /* Este um bloco de comentrio. Vejam que esta linha no tem caracter especial para comentrios Ento quando eu abro a marcao do comentrio ele espera encontrar seu fechamento em algum momento */
Tenha em mente que TUDO que estiver dentro de um comentrio...
NO SER EXECUTADO Trechos de cdigo, mesmo que correto, estando comentado jamais ser executado! /* Escreva Nunca serei executado...Entendeu?; */
20 1.5.3-Var i avei s J sabemos como ler um dado, e como imprimir mensagens. Mas antes de avanarmos muito importante sabermos como iremos armazenar e manipular estas informaes (Dados), que sero digitados no teclado por exemplo. Vamos criar uma abstrao de dado e da memria 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, ento um bombom esta intimamente relacionada, no mesmo?)
E S F
R I C A
C U B I C A
21
R E T A N G U L A R
Olhando as formas de silicone, percebemos trs formatos distintos. A primeira pode guardar bombons esfricos, a segunda bombons cbicos e a terceira bombons retangulares. Simples no mesmo? Cada bombom em uma posio da forma. Se voc observar bem, cada forma pode armazenar 15 bombons. E cada bombom pode VARIAR. No de FORMA, mas de sabor, recheio, cor, entre outras caractersticas. Cada bombom OBJETO (voc ainda vai ouvir falar em objetos novamente) nico, ou no. Podemos ter a forma toda preenchida de bombons de morango por exemplo. Ou com trs bombons de canela, dois brancos, um de avela e nove de doce de leite. Com estas observaes simples do dia a dia, chamo a ateno para trs concluses: Cada forma capaz de armazenar UM TIPO de bombom. Um bombom esfrico no pode ser guardado na forma retangular. E vice e versa. O contedo das formas pode ser VARIADO. Todos do mesmo formato, mas de sabores diversos. E posso comer um, e repor com outro bombom diferente.
22 Cada bombom de um RTULO, uma ETIQUETA, um NOME. Este um bombom de avel, aquele o bombom de morango. Encerrando a abstrao, identificamos as algumas das caractersticas de uma varivel. Varivel uma poro de memoria (FORMA DE BOMBOM) capaz de guardar/armazenar um DADO (bombom). A varivel pode ter o seu contedo acrescido, alterado, modificado e removido, situaes anlogas que ocorrem com a forma de bombom. Cada varivel guarda um TIPO de dado, assim como a forma de bombom cubica capaz de guardar apenas bombons cbicos. E cada varivel tem um nome. Rapaz pegue o bombom de avel na forma esfrica, por favor! 1.5.4-Dec l ar ando var i vei s Baseado nas caractersticas que levantamos sobre variveis, o mnimo que uma varivel precisa para existir um tipo e um nome/rotulo. O dado (bombom) pode ser armazenado depois.
Vamos usar o critrio de especificar o tipo, e depois a lista de variveis. H outra notao corrente, de especificar primeiro o nome das variveis e no final o tipo. Entretanto como algoritmo esta associado a papel e caneta, mais pratico escrever primeiro o tipo,
23 e depois a varivel. Assim variveis podem ser acrescidas facilmente, caso haja a necessidade. 1.5.5-Ti pagem de var i vei s Algum tempo atrs, o tipo de variveis tinha uma relao 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 varivel O que armazena String String em ingls, esta relacionado com corda. Por corda podemos entender CADEIA ou SEQUENCIA. E uma string no sentido computacional exatamente isto. um tipo de dados que guarda letras, smbolos e nmeros. Mas entende tudo como caractere literal. prprio para sequencias de caracteres, como um nome, um endereo, um telefone, por exemplo, Inteiro Poderamos ter um tipo numrico, que armazenaria nmeros em geral. Entretanto um problema clssico em computao armazenar nmeros de ponto flutuante (nmeros reais). Ento usaremos o tipo INTEIRO para armazenar nmeros INTEIROS ou seja, nmeros que no tenham vrgula como 1, 2, 1024, 293092309. Real um tipo numrico especifico para nmeros reais ou fracionrios. Admite inteiros? Sim. Mas eles so armazenados como se tivessem parte decimal. Neste caso a parte decimal preenchida com zeros Logico Varivel lgica (booleana). Admite ou representa dois estados. Verdadeira ou Falsa.
24 Agora sim conseguimos declarar variveis. 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 das inmeras possibilidades de soluo 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 o escr 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 bemvi ndo! ; escr eva voc t emapenas + i dade; f i m Opt ei por usar uma var i avel par a ar mazenar a i dade. Poder i a si mpl esment e t e f ei t o assi m: escr eva voc t emapenas + 2014 ano_nasci ment o;
Mas neste momento no estamos preocupados com as possibilidades de variaes do algoritmo. Cabe aqui introduzir uma pergunta reveladora O algoritmo proposto RESOLVE a situao 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 execuo vamos anotando em um cantinho da folha o contedo das variveis. Se a sada (resultado) foi o que foi pedido,
25 ento nosso algoritmo funciona. Pode no estar otimizado, mas esta funcional. Algoritmo Execuo i ni ci o escr 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
Di gi t e t eu nome: Mar cel o Di gi t e seu ano de nasci ment o: 1973 I dade = 41 Ol a Mar cel o sej a bem vi ndo Voc t emapenas 41
Este um algoritmo bastante simples; As variveis acabam no sendo alteradas aps termos digitado seus valores. Mas basicamente assim que testamos, linha a linha, anotando as modificaes que os comandos fazem no contedo das variveis. E neste exemplo, E vendo a sua sada. Imprimei uma mensagem amigvel, o nome digitado, e a idade de acordo com o ano digitado. Sim ele funciona. Ao menos em 2014. J em 2015... Sei no!!!
26 1.5.6-Const ant es Depois de entendermos o conceito e utilidade de uma varivel, entender o conceito de constante fica bastante simplificado. Constante um espao de memoria alocado para guardar um determinado tipo de dado. At aqui nada diferente de variavel. Exceto por um detalhe Varivel, como o prprio nome sugere, pode, e geralmente sobre mutaes em seu contedo. Pode ser acessado, modificado, alterado livremente. Diferente de uma constante que como o prprio nome sugere mantem o seu valor inalterado durante a execuo do algoritmo. Em nossa sintaxe iremos utilizar uma rea especifica para declarao de constantes. Em algumas linguagens atuais no existe uma rea formal para declarao de constantes. Dai bate saudades da linguagem de programao chamada Pascal. Ela tinha a sintaxe extremamente parecida com um algoritmo, foi muito utilizada para alunos iniciais em programao. Antes da rea das variveis, existe a rea para declarao de constantes. Algoritmo <NomeDoAlgoritmo>; const /* declarao das constantes */ var /* declarao das variveis*/ inicio /* comandos */ fim Importante frisar que ao declararmos uma constante, nos no declaramos um tipo. Simplesmente o rotulo (nome) e fazemos a atribuio direta do valor para a constante. O tipo sera definido pelo
27 tipo de informao (dado) que estamos atribuindo a constante. Veja alguns exemplos: Al gor i t mo Const ant es; Const I 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 no 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-Nomenc l at ur a de var i vei s e c onst ant es Precisamos ter alguns critrios para dar nomes a constantes e variveis. verdade que algoritmo uma linguagem de papel. Mas no mundo real usaremos alguma linguagem de programao. E ela ter de entender o nome das variveis. Ns fixaremos aqui as regrinhas bsicas
1 - Caracteres validos para nome de variveis - Letras, nmeros e _ (underline). 2- JAMAIS iniciar uma varivel com um nmero. O processador sinttico ira entender como uma expresso matemtica 3- Procure usar nomes significativos, para melhorar a legibilidade do seu cdigo.
28 Com estas regrinhas em mente vamos criar exemplos e contraexemplos.
Exemplos Nome1 Quatro _4 Quiabo Nome_Aluno _Aluno
Contraexemplos 2o_Nome 4_serie Nome-Aluno 4
1.5.8-Oper a es c om var i vei s ATRIBUIO
Atribuio: Podemos preencher o valor de uma varivel, usando o operador de atribuio = Na pagina anterior j usamos este operador
Idade=41;
A varivel Idade PASSAR A SER 41. O valor 41 atribudo a varivel Idade.
Aritmticos + Soma duas variveis, ou nmeros. Exemplo: Salario +Comissao - Subtrai duas variveis, ou nmeros. Exemplo: AnoAtual - AnoNascimento * Multiplica duas variveis, ou nmeros. Exemplo:
Base * Altura
29 / Divide uma varivel ou numero pela outra. do tipo REAL. Exemplo:
Salario / 3 DIV Diviso INTEIRA. Retorna um tipo INTEIRO. Exemplo:
5 DIV 2
Resultado 2 MOD Retorna o resto da diviso INTEIRA. Retorna um tipo inteiro. Exemplo
5 MOD 2 Resultado - 1 %
^ Exponenciao. Ela a primeira varivel ou numero ao expoente
3 ^2 Resultado - 9
Hierarquia de execuo Primeiro os parentes Segundo exponenciao Terceiro multiplicao ou diviso Quarto soma ou subtrao Se os operadores forem de mesma ordem sero resolvidos da esquerda para a direita. 1.5.9-Var i avei s Lgi c as Variveis logicas, ou booleanas, esto mais relacionadas a estados do que a contedos. Lembramos aqui de bits. Um bit tem dois estados possveis ligado ou desligado, acesso ou apagado, on
30 ou off, 0 ou 1, verdadeiro ou falso. E variveis logicas tem este mesmo sentido. Representam dois estados possveis, basicamente verdadeiro ou falso. Declaramos variveis 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 pseudocdigo acima teramos como sada: Seu St at us V Quebr ou al go? F
Variveis logicas, ou booleanas so extremamente relacionadas com as estruturas de deciso.
1.6.0-Var i avei s Cont ador as Variveis contadoras no um tipo especial de varivel. um conceito de uma varivel do tipo inteiro que ira ser incrementada de uma unidade a cada iterao. Esta intimamente relacionada com estruturas de repetio, que veremos no capitulo 2. 1.6.1-Var i avei s Ac umul ador as Variveis acumuladoras devem serem encaradas como TOTALIZADORES. So usadas para totalizar (acumular) um valor especifico. Se quisermos saber o peso total dos alunos da turma,
31 precisamos TOTALIZAR os pesos individuais. uma tcnica de programao 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 repetio, o exemplo de variveis 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 de t r s al unos. Depoi s apr esent e a medi a do peso e das i dades. A t ur ma t em5 al unos. Al gor i t mo Cont aAl unos Var I nt ei r o: Nr oAl uno, I dade, Tot al I dade; Real : Peso, Tot al Peso; I ni ci o Nr oAl uno = 0; / * Aqui i ni ci al i zamos com0 */ 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 : ;
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;
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 leituras de peso e idade. E como ainda no conhecemos nenhuma estrutura de repetio tem que resolver a situao com conhecimento que temos at o momento. Ler e Imprimir basicamente. Entretanto estes algoritmos tm alguns refinamentos. Ele pede o numero do aluno em questo. E ele usa a varivel contadora NroAluno para calcular as medias. Se tivermos que ler mais informaes as expresses de calculo no tero de ser modificadas. Execute no papel este algoritmo, linha a linha. Faa uma tabela para as variveis, e v anotando o resultado linha a linha. Entenda o funcionamento das variveis acumuladoras e contadoras, linha a linha! 1.6.1-Var i avei s Si nal i zador as Fl ag /* ADICIONAREI EM BREVE */
34
2-Fl ux o de um al gor i t mo
Atravs dos exemplos feitos at agora inclusive com demonstrao da execuo do algoritmo de BoasVindas, naturalmente voc j deve ter percebido, que existe uma sequencia de execuo De cima para baixo. Vamos executando linha a linha, sem desvios ou interrupes, via de regra. Se pararmos para pensar, ser possvel termos trechos de cdigos que no gostaramos de executar em determinada condio? Ainda em duvida? Proponho como exemplo, desenvolvermos um algoritmo para a sentena abaixo: Caso esteja nublado leve o guarda-chuva! Sentena trivial de nosso dia a dia. Mas como escrever um algoritmo que resolva esta situao? Sabemos comando de entrada e sada, expresses e criarmos constantes e variveis. Vamos tentar ento. Al gor i t mo Guar daChuva_V1 Var St r i ng: est achovendo; I ni ci o Escr eva Est a nubl ado? ( si m/ no) ;
35 Lei a est achovendo; Escr eva Leve o guar da- chuva; f i m
Observe atentamente o algoritmo GuardaChuva_V1. Ele cria uma varivel estachovendo para ler do teclado um sim ou no; Em seguida ele imprime a mensagem Leve o guarda-chuva. Mas ele imprime a mensagem eu digitando sim, ou no. O fluxo vem executando de cima para baixo! 0 Vamos a outro exemplo mais simples de ser implementado. Voc ficou de castigo, por no ter trazido uma maa pro seu professor. Ele mandou voc fazer um algoritmo que escreva 10 vezes a mensagem Devo trazer uma maa para meu professor!. Al gor i t mo Maa I ni ci o Escr eva Devo t r azer uma maa par a o meu pr of essor ! ; Escr eva Devo t r azer uma maa par a o meu pr of essor ! ; Escr eva Devo t r azer uma maa par a o meu pr of essor ! ; Escr eva Devo t r azer uma maa par a o meu pr of essor ! ; Escr eva Devo t r azer uma maa par a o meu pr of essor ! ; Escr eva Devo t r azer uma maa par a o meu pr of essor ! ; Escr eva Devo t r azer uma maa par a o meu pr of essor ! ; Escr eva Devo t r azer uma maa par a o meu pr of essor ! ; Escr eva Devo t r azer uma maa par a o meu pr of essor ! ; Escr eva Devo t r azer uma maa par a o meu pr of essor ! ; Fi m
Este foi mais fcil. Esto 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 cdigo?
36 Felizmente no somos os nicos a sofrer deste mal. J inventaram as solues para nossos problemas. Temos estruturas capazes de MODIFICAREM o fluxo de execuo, conforme as condies do problema.
2.1.1-Est r ut ur as de dec i so ou c ondi c i onal
2.1.2-Est r ut ur as de r epet i o Relembrando o algoritmo do castigo. Fazer um programa que escreva a mesma mensagem pode ser impossvel com o que sabemos at o momento. Imagine fazer um algoritmo que imprima o seu nome 10.000 vezes. Manualmente no impossvel. Mas invivel. O pseudocdigo prev estruturas que permitem repetirmos trechos de cdigo 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-Par a/f a a Esta estrutura permite executar um trecho do cdigo 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 cdigo 5 vezes. Se usarmos uma estrutura de
37 repetio no teremos todo aquele trabalho. Vamos comear pela sintaxe desta estrutura de repetio. Para <var i vel > de <val or i ni ci al > at <val or f i nal > [ Passo <i ncr ement o>] f aa Lista de comandos; Fim Para
Talvez no primeiro impacto parea um pouco complexo. Mas acreditem uma estrutura de fcil entendimento, e de uso comum em qualquer algoritmo. Vamos dissecar passo a passo <varivel>- Nome da varivel que ser usada no para. Na verdade uma varivel contadora. PRECISA SER DECLARADA NA AREA DE DECLARAO DE VARIAVEIS. uma espcie de INDICE; <valor inicial>- o valor inicial dela. Geralmente 0 ou 1. Mas pode ser qualquer valor inteiro. <valor final> o limite da repetio. Ele ira iniciar no valor inicial e ira repetir at o valor final. <incremento> - opcional. Se no informarmos o lao ser aumentado de 1 em 1, exatamente como em um contador. Mas o comando flexvel, e podemos modificar este valor. Al gor i t mo Maca2 Var I nt ei r o: I ; I ni ci o Par a I de 1 at 10 f aa Escr eva Devo t r azer uma maa par a o meu pr of essor ! ; Fi mPar a
38 Fi m
2.1.2.2-Enquant o/f a a Outra estrutura de repetio bastante interessante a estrutura enquanto. Ela surge naturalmente nos algoritmos humanizados - enquanto houver degraus suba. Ela repete um trecho de cdigo, enquanto a condio especificada no teste seja falsa. Se a condio nunca tornar-se verdadeira, o trecho de cdigo ser executado indefinidamente em um looping infinito. Isto muito importante! A diferena bsica entre o para/faa e o enquanto que o para/faa eu informo um numero de repeties (embora em algumas linguagens de programao o uso de expresses no para/faa permitido). J no enquanto eu colocarei uma condio que ser testada. E por condio temos vrios exemplos, como enquanto chover, enquanto no passar, enquanto no tiver frio e por ai vai. Vamos dar uma olhada na sintaxe da estrutura enquanto/faa Enquanto <condi o> f aa Lista de comandos; Fim Enquanto De certa feita parece uma estrutura mais simples do que o para/faa. Mas muito poderosa. Vamos propor um exemplo similiar ao da maa, feito no para/faa. Mas vamos resolv-lo usando a estrutura enquanto faa 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 comval or 1 */ Enquant o I <= 10 f aa
39 Escr eva Devo t r azer uma maa par a o meu pr of essor ! ; I = I +1; Fi mEnquant o Fi m
Olhando o exemplo Maa3, o resultado o mesmo do que o Maa2. Notem porem que nos temos o controle da condio. Se esquecermos de incrementar o contador I, a condio ser infinita! O Lao de repetio ser executado infinitamente, pois atribumos 1 antes da execuo. Este um dos maiores cuidados que temos que ter com estruturas enquanto A condio de sada dela.
REFERENCI AS
Lgica de programao A construo de algoritmos e estruturas de dados Andr Forbellone & Henri Eberspcher 3 edio - 2005 - Pearson Prentice Hall
Curso essencial de lgica de programo Marilane Almeida 1 Edio -2008 Digerati Books