You are on page 1of 6

Introduo Programao de Computadores

Introduo Em nossa disciplina de Algoritmos e Estruturas de Dados, voc vai estudar abordagens diretas e claras para que voc aprenda o processo de resoluo de problemas computacionais, a saber: a anlise, com a identificao e soluo de subproblemas, e a sntese, unio das solues encontradas para compor a soluo do problema original. O resultado dessas etapas sintetizado em passos que devem ser seguidos em determinada ordem e que constituem os algoritmos. Com este documento, pretendo seguir uma apresentao incremental dos tpicos. Inicialmente so propostos problemas simples que envolvem raciocnio lgico e que possuem soluo livre, de modo a ambientar e a incentivar voc estudante na descrio dos passos necessrios resoluo de problemas. Isso fundamental, pois grande parte dos estudantes que tem um primeiro contato com lgica de programao apresenta dificuldades na organizao de suas solues e em abstraes. Alm disso, neste primeiro contato, um processo genrico de soluo de problemas apresentado de maneira a fornecer um conjunto de dicas ou heursticas que podem ser aplicadas em todos os problemas a serem resolvidos, fortalecendo assim o processo de abstrao, essencial em programao. Vamos empregar uma notao formal para a soluo de problemas utilizando a descrio de algoritmos sob a forma de fluxogramas baseados na norma ISO 5807/1985. Os fluxogramas so compostos por smbolos bsicos que representam as menores partes em um processo de soluo: estruturas seqenciais, de deciso e de repetio. O uso de fluxogramas justificado pelo fato de que o engenheiro tem a obrigao de desenvolver um raciocnio lgico bem-estruturado e que o fluxograma ainda representa uma poderosa ferramenta para a verificao e teste da lgica empregada na soluo de problemas. A utilizao de fluxogramas em Engenharia ampla: de descries de programas at descries de processos de fabricao ou processos qumicos, seu emprego similar e regido nica e exclusivamente pela lgica utilizada na composio de seus blocos, at se alcanar a soluo de um determinado problema. Alm do uso de fluxogramas, voc vai aprender outras duas formas conhecidas para a representao de algoritmos: descrio narrativa e o pseudo-cdigo baseado na lngua portuguesa, o Portugol. Existem tambm outras representaes como diagramas de Nassi-Schneidermann que empregam uma representao em caixas aninhadas, em que cada uma relacionada a um determinado tipo de comando ou estrutura de programao. Programa de Computador Um programa de computador produto resultante da atividade intelectual de um programador. Esta atividade, por sua vez, depende de um treinamento prvio em abstrao e modelagem de problemas, bem como o uso da lgica na verificao das solues. Um programa de computador ou simplesmente software (soft = abstrato, ware = do gnero) representado pelas instrues e dados que algum ser humano definiu e que ao serem executados por alguma mquina (computador digital) cumprem algum objetivo. Os computadores digitais so mquinas eletrnicas contendo processadores e circuitos digitais adequados, operando com sinais eltricos em dois nveis (binrios) que sero estudados com mais detalhes na disciplina de arquitetura de computadores. Os dados so organizados em um computador de acordo com sua representao binria, isto , seqncias de 0s e 1s. O objetivo de se utilizar um computador extrair as informaes resultantes de computaes, isto , o resultado das execues das instrues de algum programa. Deve-se observar a diferena entre informao e dado: o dado por si s um valor qualquer armazenado em um computador enquanto a informao representa a interpretao desse dado, ou seja, qual o seu significado. Parte dos dados processados durante a execuo de um software fornecida pelo ser humano (ou outra mquina) e denominada dados de entrada. Por outro lado, os dados de sada so aqueles fornecidos ao seu humano (ou outra mquina) aps o processamento dos dados de entrada.

Pgina 1 de 6
E-mail professor: sandrotc.professor@gmail.com Arquivo: AEDI01 Introduo Programao.doc

Processo de Desenvolvimento de um Software De forma simplificada, o processo de desenvolvimento de um software consiste na definio de requisitos, desenvolvimento e entrega do software. O cliente (entidade que contrata os servios para a criao de um software) especifica exatamente o que o software deve conter. Ele sabe o que o software deve conter e realizar, mas regra geral no sabe como. Ele indica o que o software deve contemplar e executar por meio de especificaes chamadas requisitos. No desenvolvimento, os requisitos do cliente so traduzidos em especificaes tcnicas de software pelos analistas de sistemas ou engenheiros de software. O desenvolvimento de um software tipicamente dividido nas seguintes etapas: Anlise: criam-se especificaes que detalham como o software vai funcionar; Projeto: criam-se especificaes que detalham o resultado da anlise em termos mais prximos da implementao do software; Implementao: utilizando-se uma linguagem de programao e as especificaes de projeto, o software construdo; Testes: aps a concluso do software, so realizados testes para conferir sua conformidade com os requisitos iniciais. O software deve satisfazer a todas as especificaes do cliente.

Aps os testes o software implantado na empresa. A implantao pode variar desde uma simples instalao via CD-ROM, que dure alguns minutos, at a instalao e testes de integrao entre diversos softwares, que pode levar semanas. De qualquer forma, o fato de o software estar finalizado e testado no significa que esteja totalmente livre de erros, tambm denominados bugs. Assim, deve-se voltar e tentar identificar a causa dos erros. Pior que erros de programao, o caso em que pode acontecer de o software funcionar corretamente, no apresentar erros, mas no realizar o que o cliente esperava. Nesse caso, deve-se retornar etapa inicial, verificando os requisitos e em muitos casos refazendo todo o ciclo de desenvolvimento novamente. um fato que grande parte do investimento feito em um software gasta na correo de erros do que propriamente na sua elaborao. Da, surge a necessidade de enxergar o software como o produto de um processo bem-definido e controlado, que atue sobre as suas etapas de desenvolvimento, em outras palavras, um processo de engenharia de software. Algoritmos e Lgica de Programao Conforme apresentado anteriormente neste documento, o software deve ser encarado como um produto de um processo bem-definido e controlado de engenharia. Nossa disciplina (Algoritmos e Estruturas de Dados) no tem como objetivo entrar em detalhes sobre engenharia de software mas sim concentrar-se na disseminao de conceitos bsicos que viabilizem a especificao correta de softwares, uma etapa imediatamente anterior a sua implementao ou programao. claro que, aprendidas as tcnicas de abstrao e de elaborao de fluxogramas entre outras formas de algoritmos, iremos estudar como elaborar programas utilizando a linguagem de programao C, ou seja, vamos nos concentrar em seguida implementao ou programao. O estudo de algoritmos e de lgica de programao essencial no contexto do processo de criao de um software. Ele est diretamente relacionado com a etapa de projeto de um software em que, mesmo sem saber qual ser a linguagem de programao a ser utilizada, se especifica completamente o software a ponto de na implementao ser possvel traduzir diretamente essas especificaes em linhas de cdigo em alguma linguagem de programao como C, Pascal, Java etc. Essa tarefa permite verificar, em um nvel maior de abstrao, se o software est correto ou no. Permite tambm averiguar se o software atender s especificaes originalmente propostas, evitando mais erros no produto final.

Pgina 2 de 6
E-mail professor: sandrotc.professor@gmail.com Arquivo: AEDI01 Introduo Programao.doc

O que significa Algoritmo? Um algoritmo representa um conjunto de regras para a soluo de um problema. Essa uma definio geral, podendo ser aplicada a qualquer circunstncia que exija a descrio da soluo. A seguir, outras definies para algoritmo, de forma mais precisa e voltada para a computao, presentes tambm no documento AEDI01 Conceitos bsicos.pdf. Algoritmo uma seqncia de passos que visa atingir um objetivo bem definido. (FORBELLONE, 1999) Algoritmo a descrio de uma seqncia de passos que deve ser seguida para a realizao de uma tarefa. (ASCENCIO, 1999) Algoritmo uma seqncia finita de instrues ou operaes cuja execuo, em tempo finito, resolve um problema computacional, qualquer que seja sua instncia. (SALVETTI, 1999) Algoritmo so regras formais para a obteno de um resultado ou da soluo de um problema, englobando frmulas de expresses aritmticas. (MANZANO, 1997) Ao um acontecimento que, a partir de um estado inicial, aps um perodo de tempo finito, produz um estado final previsvel e bem definido. Portanto, um algoritmo a descrio de um conjunto de comandos que, obedecidos, resultam numa sucesso finita de aes. (FARRER, 1999) Assim, podemos afirmar que uma receita de bolo um exemplo de um algoritmo (claro que, na realidade, um algoritmo informal e impreciso), pois descreve as regras necessrias para a concluso de seu objetivo: a preparao de um bolo. Em um bolo, descrevem-se quais sero os ingredientes e as suas quantidades. Em seguida, quais so as regras para o seu preparo, como a seqncia de incluso dos ingredientes para bater as gemas, cozimento e assim por diante. A correta execuo das instrues contidas na receita de bolo leva sua preparao. No entanto, se essas instrues tiverem sua ordem trocada ou a quantidade dos ingredientes alterada, o resultado vai divergir do original. Existe ainda o perigo de o autor da receita no a ter testado previamente, o que poder gerar, novamente, resultados indesejveis (se o fogo estiver desregulado, tambm pode gerar problemas). Da mesma forma, em programao, o algoritmos especifica com clareza e de forma correta as instrues que um software dever conter para que, ao ser executado, fornea resultados esperados. Em primeiro lugar, deve-se saber qual o problema a ser resolvido pelo software o seu objetivo. Da, deve-se extrair todas as informaes a respeito desse problema (dados e operaes), relacion-las com o conhecimento atual que se tem do assunto. Essa fase representa a modelagem do problema em questo. A modelagem do problema resultante de um processo mental de abstrao. Depois de saber como resolver o problema, a tarefa consiste em descrever claramente os passos para se chegar sua soluo. Os passos por si s no resolvem o problema: necessrio coloc-los em uma seqncia lgica que, ao ser seguida, de fato solucionar o problema. Alm disso, importante que essa descrio possua algum tipo de conveno para que todas as pessoas envolvidas na definio do algoritmo possam entend-lo. A Formalizao de um Algoritmo A tarefa de especificar os algoritmos para representar um programa consiste em detalhar os dados que sero processados pelo programa e as instrues que vo operar sobre esses dados. Essa especificao pode ser feita livremente como visto anteriormente, mas importante formalizar a descrio dos algoritmos segundo alguma conveno, para que todas as pessoas envolvidas na sua criao possam entend-lo da mesma forma. Em primeiro lugar, necessrio definir um conjunto de regras que regulem a escrita do algoritmo, isto , regras de sintaxe. Em segundo, preciso estabelecer as regras que permitam interpretar um algoritmo, que so as regras semnticas.

Pgina 3 de 6
E-mail professor: sandrotc.professor@gmail.com Arquivo: AEDI01 Introduo Programao.doc

A Sintaxe de um Algoritmo A sintaxe de um algoritmo resume-se nas regras para escrev-lo corretamente. Em computao, essas regras indicam quais so os tipos de comandos que podem ser utilizados e tambm como neles escrever expresses. As expresses de um comando em um algoritmo realizam algum tipo de operao com os dados envolvidos, isto , operam com valores e resultam em outros valores que so usados pelo algoritmo. Os tipos de comando de um algoritmo so tambm denominados estruturas de programao. Existem apenas trs tipos de estruturas que podem ser utilizadas para escrever qualquer programa: Estruturas seqenciais Estruturas de deciso Estruturas de repetio

Quando um algoritmo emprega apenas as estruturas seqenciais, no possuindo nenhum tipo de condio a ser verificada e nenhum desvio em seu caminho, dizemos que esse algoritmo emprega apenas as estruturas seqenciais. A manipulao dos dados em um algoritmo feita por meio de variveis e valores constantes, que representam no texto do algoritmo os dados que sero armazenados na memria do computador. O significado de varivel semelhante quele empregado na matemtica: representar um valor, porm com um significado fsico por trs; esse valor ser armazenado na memria do computador. Um valor constante representa um valor que no pode ser alterado, como o nmero 38, o nome Sandro e assim por diante. A Semntica de um Algoritmo A semntica de um algoritmo estabelece regras para sua interpretao. Os smbolos ou comandos de um algoritmo por si s no tem um significado, a menos que este seja bem-definido. Como exemplo, no caso de um fluxograma, o smbolo de retngulo representa um comando que deve ser executado de forma imperativa, isto , sem condio alguma. definido geralmente como um smbolo e, no seu interior, figura uma expresso que deve ser avaliada, podendo ser qualquer uma desde que seja vlida para esse smbolo. A semntica de um algoritmo sempre acompanha a sua sintaxe, fornecendo um significado. A importncia da formalizao de um algoritmo, sua sintaxe e semntica podem ser resumidos assim: Evitar ambigidades, pois definem regras sintticas e semnticas que sempre so interpretadas da mesma forma. Impedir a criao de smbolos ou comandos desnecessrios na criao de um algoritmo: representam um conjunto mnimo de regras que pode ser utilizado em qualquer algoritmo. Permitir uma aproximao com as regras de uma linguagem de programao, fazendo, assim, uma fcil traduo de um algoritmo para sua implementao no computador.

Como Resolver Problemas A criao de um algoritmo uma tarefa essencialmente intelectual. A partir do enunciado de um problema deseja-se obter um algoritmo que o resolva. Pode-se afirmar que a tarefa de escrever algoritmos , portanto, uma tarefa de resolver problemas. A Anlise e Sntese de um Problema A resoluo de um problema envolve duas grandes fases: a anlise e a sntese da soluo. Na fase de anlise, o problema entendido de forma que se descubra o que deve ser solucionado, quais so os dados necessrios e as condies para resolv-lo se esses dados e essas condies so necessrios, insuficientes ou redundantes ou ainda contraditrios e, ento, parte-se para a sua modelagem, podendo ser enriquecida com o auxlio de equaes, desenhos ou grficos. Como resultado dessa fase, tem-se a elaborao de um plano de ao, no qual a Pgina 4 de 6
E-mail professor: sandrotc.professor@gmail.com Arquivo: AEDI01 Introduo Programao.doc

experincia em problemas similares vistos anteriormente utilizada e, tambm, pode ser necessria a utilizao de problemas auxiliares. Nessa fase, faz-se uso direto de processos de abstrao, o que significa elaborar modelos mentais de problemas em questo e do encaminhamento de sua soluo. Na etapa de sntese, executa-se o plano definido na fase de anlise, representando os passos por meio de um algoritmo. Aqui, emprega-se uma representao formal. importante que a soluo seja verificada e comprovada corretamente, por meio da execuo do algoritmo. Essa execuo feita percorrendo-se o algoritmo do seu incio at o seu final, e verificando, a cada passo, se o resultado esperado foi obtido. Caso tenha sido encontrada alguma discrepncia, deve-se procurar saber qual foi a sua causa e eventualmente analisar novamente o problema, repetindo-se assim esse ciclo at que a soluo tenha sido obtida. O Papel da Lgica em Programao Lgica uma rea da Matemtica cujo objetivo investigar a veracidade de suas proposies. Considere, por exemplo, o caso em que temos as seguintes proposies: 1. 2. Se estiver chovendo, eu pegarei meu guarda-chuva. Est chovendo.

O que se conclui dessas duas proposies? Parece que a concluso bvia : eu pegarei meu guarda-chuva. Essa concluso seguiu o fato de que existe uma implicao lgica na primeira proposio, a qual afirma que se estiver chovendo implica eu pegarei meu guarda-chuva. Essa implicao age como uma regra, que conduz declarao do fato. Continuando, e se as proposies fossem: 1. 2. Se estiver chovendo, eu pegarei meu guarda-chuva. Eu peguei meu guarda-chuva.

O que se conclui? A concluso poderia ser: plausvel que esteja chovendo (no se pode afirmar com preciso que est chovendo s porque voc pegou seu guarda-chuva!). Esses dois exemplos fornecem uma idia embora simplificada, do que a lgica se preocupa em estudar. Toda lgica proposta tambm deve ser formalizada em elementos sintticos (especificam como escrever suas proposies) e elementos semnticos (avaliam o significado das proposies suas interpretaes). No caso da lgica clssica, o resultado da avaliao de suas proposies pode ser somente um entre dois valores VERDADEIRO ou FALSO. No se entrar em mais detalhes sobre essa formalizao, pois esse assunto est alm de nossa disciplina. O papel da lgica em programao de computadores est relacionado com a correta seqncia de instrues que devem ser definidas para que o programa atinja seu objetivo. Serve como instrumento para a verificao do programa escrito, provando se este est correto ou no. Como voc aluno deve se portar no curso Leciono programao de computadores em vrios perodos dos cursos de computao h mais de 13 anos e percebo que o grande problema apresentado pelos estudantes em um primeiro curso de computao no so as linguagens de programao ou de descrio de algoritmos propriamente ditas, mas sim a dificuldade em abstrair e descrever as solues de problemas contando apenas com poucas e simples estruturas. O que deve ser percebido que o sucesso em um curso ou carreira de computao exige uma predisposio em se envolver com tarefas diretamente intelectuais. Um novo problema de computao pode ser gerado a partir de um j existente, alterando-se apenas poucos elementos de seu enunciado. Assim, um grave erro decorar as solues em computao, pois podem no servir para outros problemas, que com certeza sero diferentes. O que deve ser procurado o entendimento de como foi obtida uma soluo, armazen-la na memria (na sua memria e no a do computador) e ento utilizar essa experincia adaptando-a a outras situaes, por analogia, generalizao ou especializao. A grande dica que um problema Pgina 5 de 6
E-mail professor: sandrotc.professor@gmail.com Arquivo: AEDI01 Introduo Programao.doc

pode ser diferente de outro, mas consegue-se aproveitar grande parte da experincia obtida em problemas passados em novos desafios. No existe em computao uma frmula mgica para resolver problemas. De qualquer forma, apresentase a seguir um conjunto de dicas que podem ser utilizadas durante o processo de raciocnio empregado na soluo de problemas: 1. Ao se deparar com um problema novo, tente entend-lo. Para auxiliar, pense no seguinte: O que se deve descobrir ou calcular? Qual o objetivo? Quais so os dados disponveis? So suficientes? Quais as condies necessrias e suficientes para resolver o problema? Faa um esboo informar de como ligar os dados com as condies. Se possvel, modele o problema de forma matemtica. Elabore um algoritmo do tipo descrio narrativa e detecte no mesmo as trs partes: entrada, processamento e sada. Crie um plano com a soluo: Consulte sua memria e verifique se voc j resolveu um problema similar. A sua soluo pode ser aproveitada por analogia, quando o enunciado for diferente, mas a estrutura em si guarda similaridades; por generalizao, quando se tem uma soluo particular e deseja uma soluo geral; por especializao, quando se conhece alguma soluo geral que serve como base para uma em particular ou ainda uma mistura das trs tcnicas anteriores. Verifique se necessrio introduzir algum elemento novo no problema, como um problema auxiliar. Se o problema for muito complicado, tente quebr-lo em partes menores e solucionar essas partes. possvel enxergar o problema de outra forma, de modo que seu entendimento se torne mais simples? Formalize a soluo: Crie um algoritmo informal com passos que resolvam o problema. Verifique se cada passo desse algoritmo est correto. Escreva um algoritmo formalizado por meio de um fluxograma ou outra tcnica de representao. Anlise dos resultados: Teste o algoritmo com diversos dados de entrada e verifique os resultados (teste de mesa). Se o algoritmo no gerou resultado algum, o problema est na sua sintaxe e nos comandos utilizados. Volte e tente encontrar o erro. Se o algoritmo gerou resultados, estes esto corretos? Analise sua consistncia. Se no esto corretos, alguma condio, operao ou ordem das operaes est incorreta. Volte e tente encontrar o erro. Otimizao da soluo: possvel melhorar o algoritmo? possvel reduzir o nmero de passos ou dados? possvel conseguir uma soluo tima?

2.

3.

4.

5.

E, para encerrar, os problemas de computao so verdadeiros projetos de Engenharia. Aqui se tem a oportunidade de analisar um problema, definir uma estratgia de soluo e, por fim, criar um produto, que o programa em si. Tenha fora de vontade e lute ao tentar a soluo de cada exerccio aplicado pelo professor. Procure a ajuda de colegas, do professor, na Internet e em livros. Lembre-se de que um bom profissional de sua rea deve ser um bom desenvolvedor de software, j que esta constitui o alicerce de seu curso de Anlise e Desenvolvimento de Sistemas.

Pgina 6 de 6
E-mail professor: sandrotc.professor@gmail.com Arquivo: AEDI01 Introduo Programao.doc

You might also like