Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Conceitos Preliminares 1.1 - Introdução O computador tornou-se uma poderosa ferramenta, presente nas mais variadas áreas de atividade humana, devido fundamentalmente ao fato de o mesmo ser uma máquina programável. Essa característica faz dele uma máquina que pode ser usada na determinação da solução dos mais variados tipos de problemas. Basicamente, um computador consiste em uma máquina que executa ordens. Assim, para que ele execute a solução de um problema, é necessário que execute um programa, o qual fará com que se obtenha uma solução. Como uma definição preliminar, pode-se dizer que programar um computador consiste na elaboração de um conjunto de instruções, de forma que, ao serem executadas, o computador obtenha a solução de um determinado problema. O nosso objetivo neste livro é apresentar as características e conceitos envolvidos na escrita de um programa de computador. Afinal, se um programa de computador consiste em um conjunto de instruções, como são essas instruções? Que características apresentam? Que tipo de instrução um computador pode executar? Mais do responder a essas perguntas, procuraremos, no decorrer desse livro, apresentar os conceitos envolvidos na modelagem da resolução de um problema em computador. Essa modelagem pode ser feita a partir de vários paradigmas. Neste livro, abordaremos o paradigma "Programação Estruturada". De acordo com esse paradigma, a escrita de um programa, para a resolução de um determinado problema, está baseada na divisão do problema em problemas menores. Para cada problema menor, identifica-se quais os dados que esse problema apresenta e a que resultados se quer chegar. Os dados que o problema apresenta são denominados Entradas e os resultados desejados são denominados Saídas. Definidas as entradas e saídas, deve-se determinar que tipo de processamento deve executado para que, a partir das entradas, obtenha-se as saídas. Assim, a escrita de um programa envolve todo um processo de análise do problema, onde a divisão de um problema maior em problemas menores constitui-se em característica fundamental. Como inicialmente estaremos apresentando e discutindo problemas bastante simples, essa característica não será levada em consideração nos primeiros capítulos. 1.2 Um Primeiro Exemplo Para que se tenha uma visão mais clara do que significa programar um computador, vamos analisar um pequeno problema e escrever para este uma primeira versão de um programa. Obviamente que, por menor que seja o problema, a construção de um programa que resolva esse problema envolve um conjunto razoável de informações. Por questões didáticas, neste primeiro exemplo, alguns conceitos não serão discutidos. Suponha que o nosso problema seja escrever um programa que faça com que o computador resolva o seguinte problema: "Dadas a base e a altura de um triângulo, determinar a sua área". Pelo enunciado do problema, podemos concluir que este apresenta como dados (entradas) os valores da base e da altura, os quais são necessários para a resolução do problema. Também podemos concluir que a solução do problema consiste em se encontrar o valor da área do triângulo. Temos, então, como saída, o valor da área. Para que possamos escrever uma primeira versão de programa para esse problema, é necessário que saibamos alguns conceitos sobre como funciona um computador. Afinal, que tipo de instruções um computador pode executar? Como são armazenados os valores que processa? Que conhecimentos tem o computador? Dados os objetivos deste livro, vamos visualizar um computador como sendo uma máquina cega, que conhece um conjunto limitado de instruções e só as executa se solicitado. Vamos considerar, por enquanto, que um computador consiste em uma máquina que sabe: Ler; Escrever; Efetuar operações aritm~éticas básicas, tais como: adição, subtração, multiplicação e divisão. A maioria das instruções que o computador executa está, de alguma forma, associada ao processo de armazenamento de valores na sua memória ou ao processo de cópia de valores de sua memória. Assim, se quisermos que o computador saiba qual o valor da altura do triângulo, que, conforme vimos, é necessário para o cálculo da área, devemos instruí-lo de forma que leia um valor, a ser fornecido pelo usuário, e que esse valor seja armazenado em algum local de sua memória. O computador só sabe ou conhece aqueles valores que estão armazenados em sua memória. Fisicamente, a memória de um computador consiste em um conjunto de elementos denominados bytes, cujo estudo foge ao escopo deste livro. Entretanto, para efeito de construção de um programa, podemos considerar a memória como sendo um conjunto de posições, conforme apresentado na tabela seguinte, onde cada posição recebe uma identificação (um nome) e armazena um determinado valor. Base Idade X1 Nota 8.0 25 2 8.5 Aluno A12 Area Altura João X8tdhjf3 16.0 4.0 Cada posição de memória sempre armazena um valor. Se o computador executar uma instrução fazendo com que um novo valor seja armazenado em determinada posição, então o valor antigo será destruído. Devemos considerar que, em uma posição, sempre se tem algum valor armazenado, mesmo que nenhum valor tenha sido explicitamente lá colocado. Se nenhum valor foi%èxplicitamente ar- mazenado em determinada posição, considera-se que esta possui um "lixo". É fundamental que o leitor entenda o funcionamento da memória, pois a maioria das instruções que o computador executa tem por base a sua memória. Dadas essas considerações, podemos escrever o programa faz com que o computador calcule a área de um triângulo, como segue: Inicio Leia Base Leia Altura Area Base*Altura/2 Escreva Area Fim Veja que nosso programa usou as posições de memória Base, Altura e Area. O nome de uma posição de memória é definido pelo programador. Por questão de legibilidade, é sempre recomendável que os nomes das posições de memória sejam significativos. O nome de uma posição de memória é significativo quando expressa de alguma forma qual o conteúdo da posição. Assim, por exemplo, se quisermos que o computador armazene o valor da idade de alguém, é conveniente que a posição que armazenará esse valor seja identificada por Idade. Seja a instrução: Leia Base A execução dessa instrução faz com que o computador fique aguardando que o usuário digite um valor. O valor digitado é então lido pelo computador e, conforme determina a instrução, é armaze - nado na posição de memória Base. Todo comando Leia deve especificar pelo menos uma posição de memória. O valor lido será armazenado na posição de memória especificada pelo comando Leia. Note que, antes da execução da instrução Leia Base, algum valor existia na posição de memória Base. Com a execução da instrução, o valor fornecido pelo usuário será armazenado na posição Base e o antigo valor lá existente será destruído. Lembre-se: mesmo que o programa não tenha mandado armazenar nenhum valor em uma posição, algum valor a posição conterá. Conforme já foi colocado, quando nenhuma instrução foi executada de forma a armazenar um valor em determinada posição, diz- se que a posição contém um "lixo". Seja a instrução: Area Base*Altura/2 A execução dessa instrução faz com que o computador copie os valores contidos nas posições de memória Base e Altura, multiplique um pelo outro e divida o resultado por 2. O resultado final obtido, conforme determina a instrução, deve ser armazenado na posição de memória Area. Veja que usamos os caracteres * e / para representar as operações de multiplicação e divisão, respectivamente. Já o símbolo F- é usado para indicar que o resultado da expressão à direita, deve ser armazenado na posição de memória especificada à esquerda. Com a execução da instrução Escreva Area o valor que estiver armazenado na posição de memória Area será copiado e mostrado na tela. 1.3. Definição da Linguagem Conforme pode ser observado na seção anterior, para escrever nossa primeira versão de um programa, usamos uma determinada linguagem. Uma linguagem pode ser definida como um conjunto de símbolos e regras utilizados em um processo de comunicação. Em termos de programação de computadores, várias são as linguagens disponíveis, cada qual com suas características. Nosso objetivo neste livro é apresentar ao leitor, todos os conceitos envolvidos na construção de um programa de computador, sem, contudo, entrar em aspectos relativos a uma determinada lin- guagem de programação. Assim, estaremos usando durante todo o livro uma linguagem a qual denominaremos de Pseudocódigo. Esse pseudocódigo, assim chamado por não ser uma linguagem de programação propriamente dita, tem por base o português e suas características básicas procuram seguir o especificado em linguagens de programação tradicionais. Mais especificamente, esse pseudocódigo será apresentado de uma forma bastante similar à linguagem de programação Pascal. Considerando que o pseudocódigo não constitui-se em uma linguagem de programação disponível em computador, o conjunto de instruções escrito em pseudocódigo será denominado de algoritmo, em vez de programa. Ao usarmos um pseudocódigo, em vez de uma linguagem de programação, não necessitamos nos preocupar com detalhes específicos da linguagem. Isto possibilita que o projetista se concentre fun- damentalmente na montagem lógica da resolução do problema. 1.4 Conceito de Algoritmo Podemos definir algoritmo como sendo uma seqüência finita e lógica de instruções executáveis, especificadas em uma determinada linguagem, que mostram como resolver determinado problema. Veja que essa definição não está presa a utilização ou não do computador. Qualquer seqüência de instruções que mostra como resolver um problema constitui-se em um algoritmo. Uma receita de bolo é um bom exemplo de algoritmo. Uma receita de bolo constituise em uma seqüência finita e lógica de instruções, as quais mostram o que uma cozinheira deve fazer, e em que ordem, para obter um bolo. Veja que a receita especifica todos os passos em uma seqüência onde a ordem das instruções ou passos é fundamental. Um algoritmo deve especificar quais são as instruções que devem ser executadas e em que ordem. Se o problema for, por exemplo, calcular a média aritmética de três valores, o seguinte algoritmo poderia ser usado por alguém que fosse resolver este problema: - Conhecer os três valores; - Determinar a soma dos três valores; - Dividir a soma por 3, encontrando a média; - Mostrar a média encontrada. Nosso objetivo neste livro é apresentar e discutir os conceitos relativos à construção de algoritmos para execução em computador. Conforme já colocamos anteriormente, estaremos utilizando um pseudocódigo, que tem por base palavras do português e sua estrutura é bem similar à linguagem de programação Pascal. Assim, os algoritmos que estaremos discutindo terão todas as características de um programa, exceto a linguagem. Para o problema do cálculo da média dos três valores, pode-se escrever o seguinte algoritmo: Inicio Leia Valor_a (1) Leia Valor_b (2) Leia Valor_c (3) Soma Valor_a + Valor_b + Valor_c (4) Media Soma/3 (5) Escreva Media (6) Fim A execução das instruções (1), (2) e (3) faz com que o computador leia os valores dos quais se deseja determinar a média. Veja que, de acordo com as instruções, o primeiro valor será lido e arma- zenado na posição de memória identificada com o nome Valor a; o segundo valor será armazenado na posição Valor b; e o terceiro, na posição Valor c. A execução da instrução (4), faz com que sejam copiados e somados os valores que estão armazenados nas posições Valor a, Valor -b e Valor c. O resultado obtido, de acordo com a instrução, será armazenado na posição de memória Soma. A execução da instrução (5) faz com que o valor armazenado em Soma seja dividido por 3 e o resultado seja armazenado na posição Media. A instrução (6) faz com que seja mostrado o valor armazenado na posição Media. Todos esses tipos de instruções serão apresentados em maiores detalhes no próximo capítulo. Pelos exemplos apresentados, podemos concluir que a construção de um algoritmo envolve todo um processo de análise do problema, com o objetivo de abstrair-se uma solução. Nessa análise, devese identificar claramente quais os dados que são necessários para a resolução do problema. Esses dados são denominados entradas. Também deve ficar claro a que resultados se quer chegar, ou seja, em que consiste a solução do problema. Aos resultados a que se quer chegar, denominamos saídas. Voltamos a lembrar, entretanto, que o princípio fundamental da programação estruturada consiste em considerar o problema a ser solucionado como sendo composto por subproblemas. Dividindo-se o problema maior em subproblemas menores, estes serão mais facilmente resolvidos. 1.5 Exercícios Propostos 1) Explique o que significa programar um computador. 2) O que você entendeu por programação estruturada? 3)Defina Algoritmo. 4) Como pode ser visualizada a memória de um computador? 5) Escreva um algoritmo para calcular a área de um círculo. Área do círculo = 3,1415 * Raio*Raio.