Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
Introdução à Programação Prof. Raimundo Osvaldo Vieira Introdução à Programação | 3 Sumário UNIDADE 01 - Introdução à Programação de Computadores 1. Conceitos Básicos em Programação .................................................................................11 1.1 O que é um Computador e como ele está organizado ................................................ 11 1.2 A Programação e o Conceito de Algoritmo .................................................................... 20 1.3 Formas de Representação de Algoritmos ........................................................................ 28 2. Pseudocódigo: Conceitos Básicos .......................................................................................41 2.1 Estrutura da Nossa Linguagem Algorítmica ...................................................................... 41 2.2 O Bloco de Variáveis ............................................................................................................ 42 2.3 O Bloco de Comandos ........................................................................................................ 50 3. Pseudocódigo: Estruturas de Controle – Visão Geral......................................................... 69 3.1 Estruturas de Controle Dinâmico da Execução de um Algoritmo ................................. 69 3.2 Estrutura Sequencial ............................................................................................................. 72 3.3 Uma Ferramenta para Desenvolver e Testar Algoritmos: Visualg .................................. 83 UNIDADE 02 - Estruturas de Seleção e Estruturas de Repetição 4. Estruturas de Seleção ou Decisão ........................................................................................ 93 4.1 Estrutura de Seleção Simples .............................................................................................. 95 4.2 Estrutura de Seleção Composta ......................................................................................... 96 4.3 Estruturas de Seleção Aninhadas ....................................................................................... 99 4.4 Estrutura de Seleção escolha ........................................................................................... 107 5. Estruturas de Repetição ou Iteração .................................................................................113 5.1. Estrutura de Repetição Contada: Comando para ...................................................... 114 5.2. Estrutura de Repetição Condicional: Comando enquanto ........................................ 129 5.3. Estrutura de Repetição Condicional: Comando repita ............................................... 135 5.4. Observações Finais Sobre as Estruturas de Repetição Condicional ........................... 141 UNIDADE 03 - Algoritmos Baseados em Estruturas de Dados Homogêneas 6. Estruturas de Dados Homogêneas Unidimensionais ........................................................151 6.1. Conceito de Vetor ............................................................................................................ 153 6.2. Atribuindo Valores a um Vetor ......................................................................................... 154 6.3. Preenchendo um Vetor .................................................................................................... 155 6.4. Percorrendo um Vetor ...................................................................................................... 156 6.5. Aplicações das Estruturas de Dados Homogêneas Unidimensionais ......................... 157 7. Estruturas de Dados Homogêneas Multidimensionais ....................................................163 7.1. Conceito de Matriz............................................................................................................ 163 7.2. Atribuindo Valores a um Elemento de uma Matriz ....................................................... 165 7.3. Preenchendo uma Matriz ................................................................................................. 165 7.4. Percorrendo uma Matriz ................................................................................................... 166 7.5. Aplicações das Estruturas Homogêneas Bidimensionais .............................................. 168 7.6. Particularidades sobre Matrizes ....................................................................................... 171 Referências .................................................................................................................................. 178 Introdução à Programação | 4 Introdução à Programação | 5 Caro aluno, Você tem em mãos o material didático de Introdução à Programação. Ele foi cuidadosamente elaborado para ser seu companheiro de estudos. Este material está dividido em três unidades, compondo os conceitos e estruturas básicas para o aprendizado de programação de computadores. A primeira unidade é voltada para a apresentação dos conceitos básicos ligados ao desenvolvimento de algoritmos computacionais. A segunda introduz as estruturas de controle dinâmico da execução de um algoritmo e a terceira aborda o uso de estruturas de dados homogêneas na resolução de problemas. Programar não é uma tarefa simples. É preciso horas de dedicação, paciência e muito esforço, além de boa dose de raciocínio lógico-matemático. Para ajudá-lo nesta empreitada, cada capítulo foi pensando para abordar os conceitos de uma forma muito simples. Para isso, foram inseridos exemplos de aplicações e sugeridas atividades de auto-avaliação, que devem ser resolvidos na proporção em que o texto é lido. Ao final de cada unidade ou dos capítulos principais são propostas atividades complementares, cujo objetivo é sedimentar os conhecimentos adquiridos. Este material é seu roteiro e seu ponto de partida para uma viagem extraordinária rumo ao mundo da programação de computadores. Bons Estudos, O Autor Introdução à Programação | 6 Introdução à Programação de Computadores Objetivos Descrever a estrutura e o funcionamento de um computador Conceituar algoritmo, descrevendo suas características e elementos Escrever algoritmos simples em diversos formatos Utilizar comandos de entrada, saída e atribuição. Utilizar a estrutura sequencial para escrever algoritmos simples. Conteúdo Conceitos básicos em programação Pseudocódigo: conceitos básicos Pseudocódigo: estruturas de controle – visão geral Unidade 01 Introdução à Programação de Computadores Objetivos Descrever a estrutura e o funcionamento de um computador Conceituar algoritmo, descrevendo suas características e elementos Escrever algoritmos simples em diversos formatos Utilizar comandos de entrada, saída e atribuição. Utilizar a estrutura sequencial para escrever algoritmos simples. Conteúdo Conceitos básicos em programação Pseudocódigo: conceitos básicos Pseudocódigo: estruturas de controle – visão geral Unidade 01 O homem, desde a pré-história, tem buscado desenvolver equipamentos que o auxiliem em seu trabalho, a fim de diminuir esforços e economizar tempo. Dentre todos os equipamentos que ele já inventou, merece destaque, pela versatilidade, rapidez e segurança, o computador. Ele é capaz de auxiliar o homem na execução das mais difíceis atividades, tendo por finalidade a tarefa de processar dados, que consiste na recepção, manipulação e armazenamento dos dados. Isto só é possivel graças à existência de um conjunto de instruções que são executadas pelo equipamento. Esse conjunto de instruções, chamado de programa, é escrito pelo homem para finalidades específicas de processamento. Neste capítulo, aprenderemos como funciona um computador e como proceder para escrever conjuntos de instruções que poderão ser transformados em programas de computador. Inciaremos nosso estudo pelos conceitos básicos em computação e, em seguida, aprofundaremos os conceitos da programação de computadores. 1.1. O que é um computador e como ele está organizado? Capítulo 01 Conceitos Básicos em Programação Você sabe o que é um computador? Você tem noção de como ele está organizado? O homem, desde a pré-história, tem buscado desenvolver equipamentos que o auxiliem em seu trabalho, a fim de diminuir esforços e economizar tempo. Dentre todos os equipamentos que ele já inventou, merece destaque, pela versatilidade, rapidez e segurança, o computador. Ele é capaz de auxiliar o homem na execução das mais difíceis atividades, tendo por finalidade a tarefa de processar dados, que consiste na recepção, manipulação e armazenamento dos dados. Isto só é possivel graças à existência de um conjunto de instruções que são executadas pelo equipamento. Esse conjunto de instruções, chamado de programa, é escrito pelo homem para finalidades específicas de processamento. Neste capítulo, aprenderemos como funciona um computador e como proceder para escrever conjuntos de instruções que poderão ser transformados em programas de computador. Inciaremos nosso estudo pelos conceitos básicos em computação e, em seguida, aprofundaremos os conceitos da programação de computadores. 1.1. O que é um computador e como ele está organizado? Capítulo 01 Conceitos Básicos em Programação Você sabe o que é um computador? Você tem noção de como ele está organizado? Introdução à Programação | 10 Existem muitas definições do que venha ser computador. O primeiro desses conceitos nos informa que a palavra computador vem do latim computare, significando calcular. Observe estes outros conceitos: “Um computador é um dispositivo capaz de fazer cálculos e tomar decisões lógicas a velocidades milhões (e até bilhões) de vezes mais rápidas que os seres humanos” (DEITEL, 2005). “Computador é uma máquina que recebe e trabalha os dados de maneira a obter um resultado” (MARÇULA; BENINI, 2005). “Computador é uma máquina capaz de variados tipos de tratamento automático de informações ou processamento de dados” (WIKIPEDIA, 2009) Figura 1: Um Computador Fonte: http://www.techclube1.dominiotemporario.com/blog/?p=264 Você deve ter notado que nas definições apresentadas fica claro que um computador realiza as tarefas para o qual foi criado (processamento de dados) por meio da realização de cálculos matemáticos. Entretanto, esses cálculo precisam ser realizados de forma organizada e ordenada. Introdução à Programação | 11 Todo computador, para cumprir sua função, é programável. Ou seja, trabalha executando um conjunto de comandos específicos, também chamados de instruções. São essas instruções que orientam o computador em sua tarefa de processamento de dados. Para que os resultados obtidos sejam os esperados, as instruções são agrupadas e ordenadas, constituindo o que chamamos de programas de computador. A definição de quais instruções irão compor o programa e a ordem em que serão executadas é determinada pelos programadores de computador. Assim, concluímos que um computador pode ser definido como uma “máquina que pode ser programada para receber dados, processá-los em informação útil e armazená-los para proteção ou reutilização” (CAPRON. JOHNSON, 2004). Agora que você já sabe o que é um computador, vamos aprender como ele está organizado e como ele trabalha com os dados que recebe para processar. Você sabe como se consegue essa organização? Você tem noção de quais cálculos devem ser realizados e em que momento? Introdução à Programação | 12 Todo sistema de computação é formado por três componentes: hardware, software e usuário. Figura 2: Componentes de um Sistema de Computação O hardware representa a parte material do computador, ou seja, os componentes físicos do sistema. O software representa todo o conjunto de instruções organizadas logicamente e que são entendidas pelo computador. Em outras palavras, podemos dizer que o software são todos os programas que compõem o sistema de computação. O usuário e toda pessoa que utiliza o computador para algum propósito. Cada um desses componentes possui uma relação de interdependência com os demais. De nada nos serviria ter o melhor equipamento se não possuíssemos os programas que possibilitariam o funcionamento da máquina. Do mesmo modo, para nada serviriam os melhores programas sem que houvesse uma máquina capaz de executá-los. E mesmo que tivessemos a melhor máquina com os mais modernos programas, se não houvesse quem os manipulasse e deles tirasse proveito, não teriam nenhuma utilidade. A seguir, vamos aprender como o hardware de um computador está organizado. O entendimento desta organização é importante para que você compreenda como um programa é executado. Observe a figura: Introdução à Programação | 13 Figura 3: Organização de um Computador e o Ciclo de Processamento A Figura 3 mostra a organização básica de um computador associada a cada uma das etapas do ciclo de processamento: entrada, processamento e saída. Os dispositivos de entrada são responsáveis pela entrada de dados no sistema. A Unidade Central de Processamento (CPU) é responsável pelo processamento dos dados. Os dispositivos de saída realizam a apresentação dos resultados ao usuário. O fluxo de dados obedece ao que está representado na figura. Os dados quando “entram” no sistema são armazenados na memória principal, sendo enviado um sinal de controle para a CPU. Quando a CPU executa uma instrução que necessita dos dados que estão armazenados na memória principal, estes são lidos e armazenados temporariamente em registradores do processador. Os dados no registrador são então manipulados e os resultados são guardados também em registradores e, em seguida são escritos na memória principal. A partir da memória principal estes resultados são enviados para os dispositivos de saída, a fim de que o usuário possa ter acesso a eles. Consideremos a seguinte situação: realizar em meio computacional a seguinte operação 2 + 3. Note que temos aqui uma instrução (soma) e dois valores (dados externos). Inicialmente, os dados e a operação a ser realizada serão fornecidas ao sistema através do teclado (dispositivo de entrada), os dados seguem Introdução à Programação | 14 para a memória principal, onde serão armazenados. Um sinal de controle informando a operação a ser realizada e a localização dos dados é enviado para a CPU (Unidade de Controle). Em seguida, a CPU realiza a leitura dos dados e copia seus valores para os registradores internos. A operação é então realizada pela CPU (Unidade Lógica e Aritmética) e o valor 5 é armazenado em um registrador. Por fim, este resultado é escrito na memória principal para, na sequência, ser enviado ao monitor de vídeo (dispositivo de saída) de modo que possa ser visualizado pelo usuário. Perceba neste pequeno exemplo a presença dos três componentes do sistema: o equipamento (dispositivos de entrada e saída, CPU, memória), as instruções (ler os dados do teclado, armazenar na memória, calcular a soma, apresentar os dados no monitor) e o usuário (que digitou os dados e visualizou os resultados na tela). Antes de prosseguir, vamos fazer uma pequena obervação sobre a memória principal. Quando um dado é guardado na memória, é preciso que seja possível localizá-lo posterioremente. Para isso, a memória é dividida em pequenas porções, normalmente correspondentes a um byte. Cada porção de memória possui um endereço, através do qual é possível ter acesso aos dados ali armazenados. Podemos imaginar a memória conforme a Figura 4. 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 0030 0031 0032 0033 0034 0035 0036 0037 0038 0039 Figura 4: Esquema de Memória Principal Os endereços de cada porção de memória na Figura 3 foram expressos em números decimais apenas para fins didáticos. Na prática, esses valores são expressos na base binária. Introdução à Programação | 15 Nosso objetivo nesta disciplina é escrever instruções que serão executadas pelo computador, a fim de que um dado problema seja resolvido. Ou seja, vamos nos concentrar no desenvolvimento de programas. Para exemplificar alguns conceitos básicos de desenvolvimento de programas, e antes de apresentar a formalização desses conceitos, vamos considerar a existência de um computador hipotético simples, proposto por Celes e Ierusalimschy (2007). Para efeito de simplificação, este computador hipotético trabalha na base decimal. Tenha claro que, na prática, os computadores trabalham com o sistema de numeração binário. Nosso computador é capaz de realizar um conjunto de poucas instruções básicas. Desse modo, um programa para ser executado neste computador, deve ser composto por uma sequêncial dessas instruções. A memória só armazena valores numéricos e cada posição é rotulada por um número inteiro não negativo. Nossa CPU obedece ao esquema já apresentado: possui registradores, uma unidade para controlar a execução das instruções e o fluxo de dados e uma unidade para realizar operações lógicas e aritméticas. A seguir, apresentamos o set de instruções deste computador hipotético. Tabela 1: Set de Instruções do Computador Hipotético Instruções Descrição read pos captura o valor digitado pelo usuário e armazena na memoria na posição especificada pelo valor pos. write pos mostra na tela do monitor o valor armazenado na memória na posição de valor pos. storeconst num pos armazena o valor de uma constante numérica (num) na posiçaõ de memória especificada pelo valor pos. add pos1 pos2 soma os valores armazenados na memória em pos1 e pos2, guardando o resultado no registrador. sub pos1 pos2 subtrai os valores armazenados na memória em pos1 e pos2, guardando o resultado no registrador. mul pos1 pos2 multiplica os valores armazenados na memória em pos1 e pos2, guardando o resultado no registrador. div pos1 pos2 divide o primeiro pelo segundo valores armazenados na memória em pos1 e pos2, guardando o resultado no registrador. store pos armazena o valor do registrador na posição de memória identificada pelo valor pos Conjunto de instruções que uma CPU reconhece e consegue executar. Introdução à Programação | 16 Com esse conjunto de instruções, é possível escrever pequenos programas que podem ser virtualmente executados neste nosso computador hipotético. Por exemplo, considere um programa que captura um valor fornecido pelo usuário e mostra na tela o resultado da soma desse valor com 3. Já sabemos que um programa é um conjunto de instruções que o computador reconhece e consegue executar. Assim, o código abaixo representa o programa deste exemplo para o nosso computador hipotético. A execução deste programa em nosso computador consiste inicialmente na leitura de valor a partir do teclado e armazenamento deste dado na posição de memória 0 (read 0). Em seguida, será guardada na posição 1 da memória o valor constante 3, definido pelo programa (storeconst 3 1). Na sequência, os valores que estão armazenados nas posições de memória 0 e 1 são lidos e copiados para o registrador, a Unidade Lógica e Aritmética então realiza a soma e guarda o resultado no registrador (add 0 1). A seguir, o resultado guardado no registrador é escrito na posição 2 da memória (store 2). Por fim, o valor guardado na posição 2 é mostrado no monitor de vídeo (write 2). Assim, no final da execução, teríamos o valor digitado pelo usuário armazenado na posição de memória rotulada por 0. A posição 1 foi utilizada para armazenar a constante 3, a fim de que a soma pudesse ser realizada. Na posição 2, teríamos o valor fornecido pelo usuário adicionado de 3. O programa apresentado pode ser escrito de outras formas, o que não modificaria o resultado final. Acompanhe: read 0 storeconst 3 1 add 0 1 store 2 write 2 Introdução à Programação | 17 Neste caso, o resultado mostrado no monitor de vídeo é exatamente o mesmo. O que diferencia este programa do analisado anteriormente é o fato de serem utilizadas apenas duas posições de memória (0 e 1). Ao término da execução, teremos o valor 3 armazenado na posição 1 e o valor da soma armazenado na posição 0, sobrescrevendo o valor anteriormente armazenado. Vamos agora analisar o seguinte programa: Este programa não está correto, pois tenta exibir no monitor de vídeo um valor armazenado na posição 2, que não foi definido. Nesta situação seria mostrado um valor indefinido e desconexo do contexto do programa. A este valor atribuímos o nome “lixo”. read 0 storeconst 3 1 add 0 1 store 0 write 2 É possível sobrescrever valores na memória. Quando isto acontece, o valor anterior é perdido, a menos que seja feita uma cópia e armazenada em outra posição. read 0 storeconst 3 1 add 0 1 store 0 write 0 Introdução à Programação | 18 1.2. A Programação e o Conceito de Algoritmo Tomando por base os exemplos apresentados anteriormente, podemos afirmar que um programa é uma sequência de instruções a serem executadas pelo computador que visa atingir um objetivo (resolver um problema). Para que possam ser executadas pela CPU, essas instruções devem estar codificadas em linguagem de máquina. Nos primórdios da computação, os programas eram escritos diretamente em linguagem de máquina, o que era uma tarefa penosa, pois exigia atenção do programador em trabalhar diretamente em notação binária. Com o passar do tempo, surgiram as Linguagens de Programação de alto nível, que consistem em Auto Avaliação 1.1 1. Explique o que é um computador, citando suas principais características. 2. Quais são os componentes de um sistema de computação? Explique cada um. 3. Descreva o funcionamento de um computador. Após ter aprendido como o computador está organizado e como os programas são executados, podemos iniciar o nosso estudo sobre o desenvolvimento de programas. Esteja atento, pois cada detalhe é de fundamental importância. Introdução à Programação | 19 linguagens mais fáceis de serem manipuladas pelo programador e que podem ser traduzidas em linguagem de máquina. Uma linguagem de programação, assim como toda linguagem, deve ser rigorosamente definida, ou seja, deve apresentar sintaxe e semântica próprias. Chamamos sintaxe a estrutura da linguagem, ou seja, as regras que regem a forma como se expressam ideias nessa linguagem. A semântica trata do significado daquilo que foi expresso. Por exemplo, consideremos a seguinte frase escrita conforme as regras da Língua Portuguesa: A manga está madura. Para escrever uma frase normalmente seguimos a regra: primeiro vem o sujeito, em seguida um verbo e seu complemento. Isto é parte da sintaxe da língua portuguesa, pois especifica como expressar uma ideia. A semântica nos possibilita entender que a frase diz respeito ao estado de uma fruta (madura), pois trata do significado do que foi expresso. Com as linguagens de programação não é diferente. Cada uma tem regras que definem como as instruções devem ser escritas (sintaxe) e também semântica, que indica o significado de cada instrução. Atualmente, um programa de computador deve ser escrito numa linguagem de programação e depois traduzido para a linguagem de máquina, a fim de que seja executado pelo computador. O processo de traduzir um programa da linguagem de programação para a linguagem de máquina é chamado de compilação. Essa tarefa é executada por um software chamado de compilador. A criação de um programa não é uma tarefa simples. Exige muita paciência, dedicação e uma forte dose de raciocínio lógico-matemático. O Quadro 1 resume as etapas que devem ser seguidas para a construção de um programa. Introdução à Programação | 20 A partir da análise do Quadro 1 é imediato concluir que um programa constitui-se de um algoritmo escrito em uma linguagem de programação. Por isso, o conceito de algoritmo é fundamental para a Ciência da Computação, visto que desenvolver programas de computador nada mais é senão criar algoritmos que solucionem um dado problema. A literatura apresenta inúmeras definições para o termo Algoritmo das quais selecionamos as seguintes. Leia-as atentamente. “Algoritmo é uma sequência de passos que deve ser seguida para a realização de uma tarefa” (ASCENCIO; CAMPOS, 2007) “Algoritmos são regras formais para a obtenção de um resultado ou da solução de um problema, englobando fórmulas de expressões aritméticas” (MANZANO, 1997) Essas definições, apresentam de forma simples a visão geral do conceito de algoritmo, entendido como um conjunto sequencial de instruções que, quando executadas, solucionam um problema. Nesse contexto, podemos facilmente exemplificar o uso de algoritmos para resolver problemas da nossa vida cotidiana como, por exemplo, um saque num terminal de auto atendimento. Etapas para a Construção de um Programa 1. Análise: esta etapa consiste na compreensão do problema e identificação da entrada, das operações de processamento e da saída. 2. Elaboração do Algoritmo: nesta etapa, são descritos formalmente o problema e sua solução. 3. Codificação: consiste na tradução do algoritmo para uma linguagem de programação. Quadro 1: Etapas para a Construção de um Programa (Fonte: ASCENCIO; CAMPOS, 2007) Introdução à Programação | 21 Imagine que você deseja sacar uma quantia de R$ 500,00 num caixa eletrônico. Normalmente, deve ser seguida uma sequência ordenada de passos para que esta tarefa seja realizada. Quais sejam: Figura 5: Terminal de caixa eletrônico 1. Inserir o cartão; 2. Retirar o cartão; 3. Escolher a opção saque; 4. Escolher o tipo de conta (corrente ou poupança); 5. Digitar o valor (R$ 500,00); 6. Selecionar um conjunto de três letras (uma de cada vez); 7. Inserir o cartão; 8. Retirar o cartão; 9. Retirar o dinheiro. Este é um algoritmo para a operação saque num terminal de caixa eletrônico. Observe que é necessário executar todos os passos na ordem em que são definidos para que a operação seja realizada. Consideremos agora que desejamos comer um ovo frito. Quais são os passos a serem seguidos para a tarefa de transformar “um ovo cru” em “ovo frito” ? Acompanhe: ht tp :// w w w .c am ac ar in ot ic ia s. co m .b r/u pl oa d/ 77 /7 81 59 29 67 .jp g Introdução à Programação | 22 Fonte das Imagens: http://dietacerta.files.wordpress.com 1. Pegar um ovo cru; 2. Pegar uma frigideira e colocar sobre o fogão; 3. Acender o fogo; 4. Colocar gordura na frigideira; 5. Aguardar a gordura esquentar; 6. Quebrar o ovo e colocá-lo na frigideira; 7. Colocar sal sobre o ovo; 8. Aguardar o tempo de fritura; 9. Desligar o fogo; 10. Retirar o ovo da frigideira. 11. Colocar o ovo em um prato. Note que para transformar o ovo cru em ovo frito foi demandado certo tempo e utilizados alguns utensílios. Fazendo uma analogia com o problema do processamento de dados, podemos imaginar que o ovo cru são os dados brutos (dados de entrada) e o ovo frito os dados processados (dados de saída). Os utensílios utilizados para realizar a transformação de ovo cru em ovo frito podem ser entendidos como os recursos computacionais utilizados para processar os dados. O ato de quebrar o ovo na frigideira representa a entrada de dados e sua retirada representa a saída de dados. Diante do exposto, apresentamos uma definição mais completa de algoritmo, proposta por Holloway (2007). Introdução à Programação | 23 Nesta definição é preciso destacar alguns aspectos importantes para a compreensão do conceito de algoritmo. 1. Expressão Finita: um algoritmo é um conjunto finito de instruções. Note que não seria possível estabelecer, por exemplo, uma quantidade infinita de passos para sacar R$ 500,00 ou para fritar um ovo. 2. Execução por Mecanismo: é obrigatória a existência de uma máquina que seja capaz de executar as etapas definidas no algoritmo. 3. Execução Finita: todo algoritmo deve obrigatoriamente ser executado num intervalo de tempo finito. Por exemplo, não é possível estabelecer um passo que realize a contabilização de todos os números naturais, pois a execução ficaria nesta instrução infinitamente. Estas características podem ser identificadas claramente nos algoritmos apresentados anteriormente. Por exemplo, no algoritmo para realizar um saque de R$ 500,00 através de um terminal de caixa eletrônico, é simples notar que o algoritmo consiste num conjunto finito de passos (9 passos). Além disso, existe “alguém” (o usuário) para executar os passos e, uma vez iniciado o saque, ele é concluído após um determinado intervalo de tempo. De forma semelhante, é possível identificar essas características no algoritmo que determina como fritar um ovo. O quadro a seguir, resume as características de um algoritmo. “Um algoritmo é uma lista de instruções que, quando executadas, transformam dados de entrada até a saída. As instruções são um conjunto finito de etapas que podem ser executadas, numa ordem precisa, por um mecanismo determinista. Quando estas etapas são efetivamente executadas, a execução deve terminar após um tempo finito.” Introdução à Programação | 24 Características de um Algoritmo 1. Ter fim. 2. Não dar margem a dupla interpretação. 3. Capacidade de receber dados do mundo exterior. 4. Pode gerar informações de saída para o mundo externo ao ambiente do algoritmo. 5. Ser efetivo, ou seja, após um intervalo de tempo finito, o algoritmo apresenta a saída esperada, de acordo com a entrada. Quadro 2: Características de um Algoritmo (Fonte: ASCENCIO; CAMPOS, 2007) Acabamos de aprender o que é um algoritmo e quais são as suas características. Que tal conhecermos um método que estabeleça como proceder para, dado um problema, construir um algoritmo que represente sua solução?. Introdução à Programação | 25 Para melhor compreender o método apresentado, vamos considerar o seguinte problema: “pegar duas notas de um aluno e apresentar sua média”. Segundo o método, devemos inicialmente compreender o problema. Neste caso, o problema consiste na determinação da média aritmética de um aluno, a partir de suas duas notas. Em seguida, vamos proceder à identificação dos dados de entrada e de saída: neste caso é simples detectar que os dados de entrada (matéria-prima para a execução do algoritmo) são as duas notas do aluno e o dado de saída é a média dessas notas. O próximo passo consiste em definir o processamento. Ou seja, de que forma é possível obter a saída a partir dos dados de entrada. Para o problema estudado, basta pegar as duas notas, somá-las e dividir o total da soma por dois. Uma vez que o problema foi entendido e foram destacados entrada, processamento e saída, é preciso escrever o algoritmo. Mas, como o algoritmo será representado? Para representar um algoritmo, existem diversas formas, algumas padronizadas e outras não. Dentre as várias técnicas de representação de algoritmos, escolhemos três para abordarmos em nosso curso: descrição narrativa, fluxograma e pseudocódigo ou linguagem algorítmica. Estas técnicas serão detalhadas a seguir. Método para a Construção de Algoritmos 1. Ler atentamente e compreender o problema a ser solucionado. 2. Identificar os dados de entrada. 3. Identificar os dados de saída. 4. Determinar o processamento, ou seja, definir como obter os dados de saída a partir dos dados de entrada. 5. Escrever o algoritmo. 6. Testar o algoritmo, simulando sua execução. Quadro 3: Método para Construção de Algoritmos Introdução à Programação | 26 Uma vez escrito o algoritmo, devemos testá-lo, simulando sua execução, a fim de verificar se os resultado apresentados são corretos ou não. Mais adiante, veremos detalhes de como testar nossos algoritmos. 1.3. Formas de Representação de Algoritmos 1.3.1. Descrição Narrativa Esta técnica para escrever algoritmos consiste na escrita do passo a passo em linguagem natural, conforme já o fizemos no início desta unidade quando determinamos os algoritmos para sacar um valor em dinheiro a partir de um terminal de caixa eletrônico e para fritar um ovo. A vantagem de utilizar esta notação para representar um algoritmo é que não é necessário aprender nenhum conceito novo, basta numerar cada passo e detalhá-lo em Língua Portuguesa. Entretanto, existem algumas desvantagens na adoção desta técnica, dentre as quais destacamos: a imprecisão, a pouca confiabilidade e a extensão. Por exemplo, imagine que foi solicitado a duas pessoas que fosse construído um algoritmo que representasse os passos para assistir a um filme a partir de um aparelho de DVD. As soluções apresentadas foram as seguintes: Note que ambas as descrições estão corretas, entretanto o nível de detalhamento de cada uma é diferente. Escrever um algoritmo mais enxuto pode 1. Ligar o aparelho de DVD na tomada. 2. Colocar o disco no aparelho de DVD. 3. Pressionar play. 4. Assistir ao filme. 5. Retirar o disco do aparelho de DVD. 6. Desligar o aparelho de DVD. 1. Ligar o aparelho de DVD na tomada. 2. Conectar o aparelho de DVD na TV. 3. Abrir a bandeja para inserir o disco. 4. Colocar o disco na bandeja. 5. Fechar a bandeja. 6. Pressionar play. 7. Assistir ao filme. 8. Abrir a bandeja. 9. Retirar o disco da bandeja. 10. Fechar a bandeja. 11. Desconectar o aparelho de DVD. 12. Desligar o aparelho de DVD. Introdução à Programação | 27 gerar imprecisão no momento em que ele for executado. Por outro lado, detalhar o passo a passo tornará o algoritmo muito extenso. Utilizando esta forma de representação para escrever nosso algoritmo que informa a média de uma aluno, temos: Algoritmo Calcula Média 1. Solicite a primeira nota. 2. Anote a primeira nota. 3. Solicite a segunda nota. 4. Anote a segunda nota. 5. Some a primeira nota com a segunda e divida o resultado por 2. 6. Anote o resultado do cálculo. 7. Informe o resultado. Auto Avaliação 1.2 1. Conceitue Algoritmo e dê exemplos de algoritmos que você percebe no seu dia a dia. 2. Por que um algoritmo não pode conter um comando que represente a leitura de todos os números naturais? 3. Escreva um algoritmo em descrição narrativa para cada um dos seguintes problemas: a) Trocar uma lâmpada no teto de sua casa. b) Tomar um banho. c) Um homem quer atravessar um rio com um barco que pode carregar ele mesmo e apenas mais uma de suas três cargas: um lobo, um carneiro e um maço de alfafa. O que o homem deve fazer para atravessar o rio sem perder nenhuma de suas cargas, sabendo que se estando juntos, o lobo devora o carneiro e o carneiro devora a alfafa? Introdução à Programação | 28 1.3.2. Fluxograma Esta técnica define um conjunto de símbolos gráficos padronizados para representar algoritmos. A seguir, apresentamos os principais símbolo utilizados e seus siginifcados. Símbolos para Representar Algoritmos Cálculo/ Processamento Entrada de Dados Saída de Dados Decisão Início/ Fim Fluxo de Dados Quadro 4: Símbolos para Construir Fluxogramas Você tem ideia de como é a representação em fluxograma do nosso algoritmo que calcula a média de um aluno? Introdução à Programação | 29 Acompanhe: Início do Algoritmo Entrada da Primeira Nota Entrada da Segunda Nota Cálculo da Média Apresentação do Resultado Fim do Algoritmo A fim de melhor ilustrar o uso de fluxogramas na construção de algoritmos, consideremos o seguinte problema: “dadas duas notas de um aluno, calcular sua média e informar se o aluno foi aprovado, caso sua média seja maior ou igual a 7, ou reprovado, se a média for menor que 7”. Seguindo o método apresentado, iniciamos pela análise e compreensão do problema. O problema consiste em solicitar duas notas, calcular a média aritmética dessas notas e verificar se a média é maior que 7. Caso positivo, informar que o aluno foi aprovado, caso contrário, informar que o aluno foi reprovado. Após compreender o problema, devemos identificar entrada, saída e processamento. Para este problema, temos: Início Nota1 Nota2 Média = (Nota1 + Nota2)/2 Média Fim Introdução à Programação | 30 Entrada: Nota 1 e Nota 2. Saída: a palavra “Aprovado” ou a palavra “Reprovado”. Processamento: A partir dos dados de entrada (Nota 1 e Nota 2), calcular a média aritmética, somando as duas notas e dividindo o resultado por 2. Em seguida, deve ser feito um teste condificional, que consiste em verificar se a média é maior ou igual a 7. Caso o resultado do teste seja verdadeiro, mostrar a palavra “Aprovado”, caso seja falso, mostrar a palavra “Reprovado”. Uma vez identificados esses elementos, o próximo passo consiste em escrever o algoritmo. Neste caso, foi construído um fluxograma. Analise-o. Note a presença de uma decisão. Neste caso, existem dois caminhos e apenas um deverá ser seguido. A escolha é determinada pelo teste condicional. Início Nota1 Nota2 Média = (Nota1 + Nota2)/2 “Aprovado” Fim Média >= 7 “Reprovado” falso verdadeiro Introdução à Programação | 31 Finalmente, devemos proceder aos testes para verificar se o algoritmo apresenta resultados coerentes. Para os testes, devemos simular alguns resultados e executar o algoritmo passo a passo. Vamos considerar os seguintes cenários de testes: o primeiro consistirá na entrada das notas 8 e 9, respectivamente, cuja saída esperada é a palavra “Aprovado”, e o segundo terá como entradas as notas 4 e 6 e a saída esperada é a palavra “Reprovado”. Assim, para o primeiro cenário, temos: Início Nota1 Nota2 Média = (Nota1 + Nota2)/2 “Aprovado” Fim Média >= 7 “Reprovado” falso verdadeiro Aqui se inicia a execução Nota 1 = 8 Nota 2 = 9 Média = (8 + 9) / 2 = 8,5 Média >= 7 verdadeiro (O fluxo segue pela esquerda). É mostrada a Palavra “Aprovado” Fim da Execução Introdução à Programação | 32 Para o segundo cenário, temos: Com base nos testes, verificamos que os resultados apresentados pelo algoritmo são exatamente aqueles esperados. Portanto, o algoritmo corresponde à solução do problema. Início Nota1 Nota2 Média = (Nota1 + Nota2)/2 “Aprovado” Fim Média >= 7 “Reprovado” falso verdadeiro Aqui se inicia a execução Nota 1 = 4 Nota 2 = 6 Média = (4 + 6) / 2 = 5 Média >= 7 falso (O fluxo segue pela direita). Fim da Execução É mostrada a palavra “Reprovado” Introdução à Programação | 33 Exemplo Escrever um algoritmo em fluxograma para fornecer o resultado da divisão de dois números. SOLUÇÃO Entrada: os dois números a serem divididos. Saída: a frase “Não é possível dividir” caso o segundo número seja zero, ou a resultado da divisão do primeiro pelo segundo número, caso contrário. Processamento: verificar se o segundo número é igual a zero. Caso positivo, mostrar a frase. Caso contrário, calcular o quociente e mostrar o resultado. Fluxograma falso verdadeiro Início NUM1 NUM2 “Não é possível dividir” Fim NUM2 = 0 Quociente = NUM1 / NUM2 Quociente Introdução à Programação | 34 A grande vantagem da utilização de fluxogramas para representar algoritmos é sua ampla utilização, uma vez que se trata de uma das notações mais conhecidas mundialmente, sendo inclusive padronizada. Além disso, o entendimento do algoritmo é mais simples em relação à descrição narrativa. Como desvatagens do uso de fluxogramas merece destaque o fato de não oferecer recursos para descrever ou representar os dados e não mostrar alguns detalhes, o que torna a tarefa de codificação trabalhosa. Além disso, quanto maior a complexidade de problema, maior será o fluxograma, tornado mais difcíil o seu entendimento. Como forma de minimizar esses problemas foi criada uma técnica de representação que aproximou os algoritmos das linguagens de programação. Esta técnica é apresentada na seção seguinte e detalhada nos próximos capítulos. 1.3.3. Pseudocódigo (Linguagem Algorítmica) Esta é a representação que mais se assemelha à forma como os programas são escritos, uma vez que consiste na definição de uma pseudolinguagem de programação para escrever um algoritmo, normalmente chamada de Portugol, Pseudocódigo ou Português Estruturado. Como toda linguagem de programação, o Portugol possui regras bem definidas para a escrita das instruções que representam a solução do problema e um significado para cada uma delas (sintaxe + semântica). Devido a isto, a tradução do algoritmo para qualquer linguagem de programação torna-se uma tarefa muito fácil, bastando ao programador apenas conhecer a linguagem que será utilizada para escrever o programa. A grande desvantagem na utilização de pseudocódigo para escrever algoritmos reside no fato de se ter que aprender a sintaxe e a semântica de cada comando. Além disso, não existe uma padronização de sintaxe. Cada grupo tem a liberdade de determinar a forma como as instruções serão escritas. Entretanto, apesar de existirem diversas pseudolinguagens, cada uma com sua sintaxe própria, o significado das instruções é sempre o mesmo. Portanto, um dos objetivos deste Introdução à Programação | 35 curso é apresentar a semântica dos comandos, pois de posse deste conhecimento, é possível compreender e utilizar qualquer linguagem. Antes de apresentar as regras de sintaxe que iremos utilizar, mostraremos alguns exemplos de códigos para que você perceba as diferenças entre eles. Não se preocupe em entender o que cada comando representa, isto é uma tarefa para os próximos capítulos. A seguir, é mostrado o fluxograma que representa o algoritmo e, em seguida, seu correspondente em pseudocódigo (em sintaxes diferentes). Analise-o. Voltemos para o algoritmo que calcula a média de um aluno. Você imagina como é sua representação em pseudocódigo?. Introdução à Programação | 36 Observe que os três algoritmos representam a mesma solução. O que muda de um para o outro é apenas a forma como a solução está escrita, entretanto o significado de cada comando é o mesmo em cada uma das representações. Nos próximos capítulos, focaremos a construção de algoritmos em pseudocódigo, por enquanto tente resolver os exercícios a seguir utilizando a representação de fluxograma. Início Nota1 Nota2 Média = (Nota1 + Nota2)/2 Média Fim Algoritmo CalculaMedia Declare Nota1, Nota1, Media Numérico Escreva “Digite a primeira nota” Leia Nota1 Escreva “Digite a segunda nota” Leia Nota2 Media (Nota1 + Nota2) / 2 Escreva Media Fim_Algoritmo Algoritmo CalculaMedia real Nota1, Nota2, Media; inicio imprima (“Digite a primeira nota”); leia (Nota1); imprima (“Digite a segunda nota”); leia (Nota2); Media = (Nota1 + Nota2) / 2; imprima (Media) fim curso é apresentar a semântica dos comandos, pois de posse deste conhecimento, é possível compreender e utilizar qualquer linguagem. Antes de apresentar as regras de sintaxe que iremos utilizar, mostraremos alguns exemplos de códigos para que você perceba as diferenças entre eles. Não se preocupe em entender o que cada comando representa, isto é uma tarefa para os próximos capítulos. A seguir, é mostrado o fluxograma que representa o algoritmo e, em seguida, seu correspondente em pseudocódigo (em sintaxes diferentes). Analise-o. Voltemos para o algoritmo que calcula a média de um aluno. Você imagina como é sua representação em pseudocódigo?. Introdução à Programação | 37 Auto Avaliação 1.3 Para cada um dos seguintes problemas, identifique entrada, saída e processamento. Em seguida desenhe o fluxograma que representa a solução do problema. 1. Faça um algoritmo para mostrar o resultado da multiplicação de dois números. 2. Faça um algoritmo que informe se um número é positivo ou negativo. 3. Faça um algoritmo para calcular o novo salário de um funcionário. Sabe-se que os funcionários que recebem atualmente salário de até R$ 510,00 terão aumento de 20%; os demais terão aumento de 10%. Introdução à Programação | 38 No capítulo anterior aprendemos o que são algoritmos, quais são suas características e como escrevê-los em diferentes formatos. Além disso, conhecemos um método para solucionar problemas computacionalmente. A partir de agora, vamos nos concentrar na construção de algoritmos em pseudocódigo. Neste capítulo, serão descritos os principais tipos de dados e o conceito de variável. Além disso, serão apresentadas as estruturas de controle da execução de um algoritmo, sendo detalhada a estrutura sequencial e os comandos de entrada, saída e atribuição. A posse destes conceitos é fundamental para a construção de soluções algorítmicas para os mais variados problemas e para o entendimento das estruturas mais complexas que serão estudadas nas próximas unidades. 2.1. Estrutura da Nossa Linguagem Algorítimica Já sabemos que a utilização de pseudocódigo é a maneira de representar um algoritmo que mais se assemelha às linguagens de programação. Sabemos também que, por não ser padronizada, sua utilização exige a definição de uma sintaxe para escrever os comandos, o que pode apresentar muitas variações. A Linguagem Algorítmica utilizada neste curso obedecerá a seguinte estrutura básica: Capítulo 02 Pseudocódigo: Conceitos Básicos algoritmo “ <nome do Algoritmo> ” var <Bloco de Variáveis> inicio <Bloco de Comandos> fimalgoritmo No capítulo anterior aprendemos o que são algoritmos, quais são suas características e como escrevê-los em diferentes formatos. Além disso, conhecemos um método para solucionar problemas computacionalmente. A partir de agora, vamos nos concentrar na construção de algoritmos em pseudocódigo. Neste capítulo, serão descritos os principais tipos de dados e o conceito de variável. Além disso, serão apresentadas as estruturas de controle da execução de um algoritmo, sendo detalhada a estrutura sequencial e os comandos de entrada, saída e atribuição. A posse destes conceitos é fundamental para a construção de soluções algorítmicas para os mais variados problemas e para o entendimento das estruturas mais complexas que serão estudadas nas próximas unidades. 2.1. Estrutura da Nossa Linguagem Algorítimica Já sabemos que a utilização de pseudocódigo é a maneira de representar um algoritmo que mais se assemelha às linguagens de programação. Sabemos também que, por não ser padronizada, sua utilização exige a definição de uma sintaxe para escrever os comandos, o que pode apresentar muitas variações. A Linguagem Algorítmica utilizada neste curso obedecerá a seguinte estrutura básica: Capítulo 02 Pseudocódigo: Conceitos Básicos algoritmo “ <nome do Algoritmo> ” var <Bloco de Variáveis> inicio <Bloco de Comandos> fimalgoritmo Introdução à Programação | 40 Note que existem alguns termos que são componentes obrigatórios, determinados pela sintaxe da linguagem. Esses termos são os seguintes: algoritmo, var, inicio e fimalgoritmo. A palavra algoritmo é utilizada para indicar o início da construção. Ao seu lado, devemos escrever, entre aspas, um nome significativo para identificar o algoritmo. O termo var tem a função de iniciar um bloco conhecido como bloco de variáveis, que será estudado um pouco mais à frente. A palavra chave inicio abre um segundo bloco conhecido como bloco de comandos. Nele é que escreveremos os comandos que representarão a entrada, o processamento e a saída de dados. Este bloco e, consequentemente, o algoritmo é encerrado pelo termo fimalgoritmo. Agora que já conhecemos a estrutura básica da nossa pseudolinguagem, vamos detalhar cada um dos blocos principais. 2.2. O Bloco de Variáveis Você deve estar lembrado do nosso computador hipotético apresentado no capítulo 01. Todos os dados que eram utilizados pelos programas que nosso computador executava, ficavam armazenados na memória principal. O mesmo ocorria com os dados resultantes do processamento. Já discutimos que a memória principal é dividida em pequenas porções e cada uma delas possui um endereço físico. Este endereço é utilizado para a localização dos dados. Essas palavras chaves, e todas as outras que fazem parte da sintaxe da linguagem, são chamadas de palavras reservadas e não podem ser utilizadas para nenhuma outra finalidade que não aquela prevista nas regras de sintaxe da linguagem. Introdução à Programação | 41 Quando escrevemos um algoritmo, devemos informar em que lugar da memória (em qual endereço) os dados utilizados e produzidos por ele deverão ser armazenados. Esta é a finalidade do bloco de variáveis, reservar alguns endereços de memória para guardar os dados necessários à execução de um algoritmo. Você certamente deve estar lembrado de que os endereços de memória são representados por números binários. Imagine como seria difícil escrever em base binária a localização de cada dado utilizado ou produzido por um algoritmo. Devido a essa dificuldade, surgiu o conceito de variável como a representação de cada um desses espaços de memória utilizados pelo algoritmo durante sua execução. Podemos, portanto, afirmar que “a cada variável corresponde uma posição de memória, cujo conteúdo pode variar ao longo do tempo durante a execução de um algoritmo” (FARRER et al, 1999). Toda variável possui três atributos: um nome (ou identificador), um tipo de dado associado a ela e o dado por ela guardado. Mesmo a variável podendo assumir diferentes valores, ela só pode armazenar um valor a cada instante. Uma variável é um local na memória principal, isto é, um endereço que armazena um conteúdo. (LOPES; GARCIA, 2002) Figura 6: Atributos de uma Variável O identificador da variável é uma espécie de apelido do seu endereço de memória, tornando mais simples sua representação. O dado corresponde ao próprio valor que é guardado na variável. Já o tipo de dado é utilizado para determinar o que pode ser guardado numa variável e o que pode ser feito com ela durante a execução do algoritmo. Neste ponto, cabe uma observação: todo o trabalho realizado por um computador é baseado na manipulação dos dados contidas em sua memória. Já sabemos que a manipulação de dados corresponde ao ato do processamento, propriamente dito. E você lembra o que siginifica o termo processamento de dados? Introdução à Programação | 42 Figura 6: Atributos de uma Variável O identificador da variável é uma espécie de apelido do seu endereço de memória, tornando mais simples sua representação. O dado corresponde ao próprio valor que é guardado na variável. Já o tipo de dado é utilizado para determinar o que pode ser guardado numa variável e o que pode ser feito com ela durante a execução do algoritmo. Neste ponto, cabe uma observação: todo o trabalho realizado por um computador é baseado na manipulação dos dados contidas em sua memória. Já sabemos que a manipulação de dados corresponde ao ato do processamento, propriamente dito. E você lembra o que siginifica o termo processamento de dados? O tipo de dado define, entre outras coisas, os tipos de operações que podem ser feitas com ele. Por exemplo, para dados do tipo numérico é possível realizar operações aritméticas. Além disso, cada tipo de dado é representado de uma maneira diferente na memória, ocupando um espaço maior ou menor. Portanto, ao determinar o tipo de dado que será armazenado em uma variável, será definido quanto de memória deve ser reservado para guardar o dado e que operações poderão ser realizadas com este dado. A tarefa de informar ao algoritmo quais são as variáveis a serem utilizadas durante sua execução é chamada de declaração de variáveis e obedece à seguinte sintaxe: onde <identificador> é o nome da variável e <tipo da variável> define o tipo de dado que a variável pode armazenar. Os identificadores das variáveis são usados para referenciá-las dentro do algoritmo, devendo, portanto, ser claros e precisos, indicando explicitamente o significado dos dados nelas armazenados. Existem algumas normas para a nomeação de variáveis, conforme mostra o Quadro 5. O processamento de dados consiste na execução de várias operações sobre os dados, dentre as quais destacam-se: comparação, cálculo, cópia, alteração, ordenação, ... <identificador> : <tipo da variável> Introdução à Programação | 43 O tipo de dado define, entre outras coisas, os tipos de operações que podem ser feitas com ele. Por exemplo, para dados do tipo numérico é possível realizar operações aritméticas. Além disso, cada tipo de dado é representado de uma maneira diferente na memória, ocupando um espaço maior ou menor. Portanto, ao determinar o tipo de dado que será armazenado em uma variável, será definido quanto de memória deve ser reservado para guardar o dado e que operações poderão ser realizadas com este dado. A tarefa de informar ao algoritmo quais são as variáveis a serem utilizadas durante sua execução é chamada de declaração de variáveis e obedece à seguinte sintaxe: onde <identificador> é o nome da variável e <tipo da variável> define o tipo de dado que a variável pode armazenar. Os identificadores das variáveis são usados para referenciá-las dentro do algoritmo, devendo, portanto, ser claros e precisos, indicando explicitamente o significado dos dados nelas armazenados. Existem algumas normas para a nomeação de variáveis, conforme mostra o Quadro 5. O processamento de dados consiste na execução de várias operações sobre os dados, dentre as quais destacam-se: comparação, cálculo, cópia, alteração, ordenação, ... <identificador> : <tipo da variável> Você deve estar se perguntando: E como saber se uma palavra é reservada? Bem, é preciso conhecer a sintaxe da linguagem com a qual se está trabalhando para saber se uma palavra é reservada para aquela linguagem. Quanto à nossa linguagem, a tabela a seguir exemplifica um conjunto de palavras que você não deve utilizar para nomear variáveis. PALAVRAS RESERVADAS abs declare leia passo algoritmo e literal pausa arquivo eco log pi asc enquanto logico pos caracter entao logn procedimento caso escolha maiusc quad compr escreva mensagem raizq copia exp minusc rand cos faca nao repita cotan falso numerico se cronometro função ou sen debug int para senao Regras para a Formação de Identificadores 1. Nunca utilizar palavras reservadas. 2. O primeiro caractere do nome de uma variável deve, obrigatoriamente, ser uma letra. 3. Os demais caracteres podem ser letras, números ou sublinhado. 4. Nunca utilizar caracteres especiais (@, #, !, *, etc), espaço em braço ou acentos em nomes de variáveis. 5. Na sintaxe da nossa pseudolinguagem, não há diferença entre letras maiúsculas e minúsculas (Num é igual a NUM). Quadro 5: Regras para Formação de Identificadores Introdução à Programação | 44 Você deve estar se perguntando: E como saber se uma palavra é reservada? Bem, é preciso conhecer a sintaxe da linguagem com a qual se está trabalhando para saber se uma palavra é reservada para aquela linguagem. Quanto à nossa linguagem, a tabela a seguir exemplifica um conjunto de palavras que você não deve utilizar para nomear variáveis. PALAVRAS RESERVADAS abs declare leia passo algoritmo e literal pausa arquivo eco log pi asc enquanto logico pos caracter entao logn procedimento caso escolha maiusc quad compr escreva mensagem raizq copia exp minusc rand cos faca nao repita cotan falso numerico se cronometro função ou sen debug int para senao Regras para a Formação de Identificadores 1. Nunca utilizar palavras reservadas. 2. O primeiro caractere do nome de uma variável deve, obrigatoriamente, ser uma letra. 3. Os demais caracteres podem ser letras, números ou sublinhado. 4. Nunca utilizar caracteres especiais (@, #, !, *, etc), espaço em braço ou acentos em nomes de variáveis. 5. Na sintaxe da nossa pseudolinguagem, não há diferença entre letras maiúsculas e minúsculas (Num é igual a NUM). Quadro 5: Regras para Formação de Identificadores Introdução à Programação | 45 2.2.1. Tipos de Dados Existem basicamente quatro tipos de dados, conforme detalha a tabela abaixo. Exemplo São identificadores válidos: NUM, NOTA1, ALTURA_MEDIA, AlturaMedia, maiorNumero São inválidos os identificadores: 1Nota (não inicia com letra), Nota 1 (contém espaço), FIM (palavra reservada), Not@ (contém um caractere especial), Altura.Media (contém caractere especial) Pronto. Já aprendemos como nomear uma variável. E você sabe quais são os tipos de dados que uma variável pode armazenar? É isso que vamos aprender agora. Introdução à Programação | 46 Tabela 2: Tipos de Dados Tipo Descrição Exemplos INTEIRO Não possuem parte fracionária e podem ser positivos ou negativos. 100, 12, -56, -48 REAL Possuem parte fracionária e podem ser positivos ou negativos. O ponto é usado como separador da parte decimal. 12.5, 100, -0.456 CARACTERE Podem conter sequências de letras, dígitos e símbolos. Representa texto entre aspas duplas. “Introdução à Programação”, “A”, “1234”, “HPU 1597” LÓGICO Representa valores lógicos. VERDADEIRO FALSO A escolha do tipo de dado para representar uma informação deve levar em consideração a adequação do tipo com a própria informação. Por exemplo, não se deve armazenar o nome de uma pessoa numa variável do tipo real, pois o tipo de dado é incompatível com o valor que se desejar representar. De forma semelhante, não será escolhido o tipo inteiro para representar o valor de um salário, visto que este valor pode ser fracionário. De posse do conhecimento dos tipos de dados disponíveis para uso, já podemos declarar variáveis para serem usadas em nossos algoritmos. Analise o seguinte conjunto de exemplos. 2.2.1. Tipos de Dados Existem basicamente quatro tipos de dados, conforme detalha a tabela abaixo. Exemplo São identificadores válidos: NUM, NOTA1, ALTURA_MEDIA, AlturaMedia, maiorNumero São inválidos os identificadores: 1Nota (não inicia com letra), Nota 1 (contém espaço), FIM (palavra reservada), Not@ (contém um caractere especial), Altura.Media (contém caractere especial) Pronto. Já aprendemos como nomear uma variável. E você sabe quais são os tipos de dados que uma variável pode armazenar? É isso que vamos aprender agora. Introdução à Programação | 47 Em resumo, podemos dizer que: “Um dos objetivos de se declarar uma variável no início do algoritmo é para que seja alocada uma área na memória para a variável. Outro objetivo é que, após a declaração, o algoritmo sabe os tipos de operações que cada variável pode realizar.” (LOPES E GARCIA, 2002). Exemplo Declaração de Variáveis Num: inteiro Aqui estamos declarando uma variável chamada Num que poderá armazenar um dado do tipo inteiro. Ou seja, estamos reservando um espaço na memória, apelidado de Num, suficiente para guardar um número inteiro. NOTA: real Neste caso declarando uma variável chamada NOTA que poderá armazenar um dado do tipo real. Ou seja, estamos reservando um espaço na memória, rotulado pela palavra NOTA, de tamanho suficiente para guardar um número real. NOME, EstCivil: caractere Aqui declaramos duas variáveis do tipo Caractere. Ou seja, alocamos dois espaços na memória, identificados por NOME e EstCivil, que poderão armazenar uma sequência de caracteres cada uma. Introdução à Programação | 48 Já sabemos o que é o bloco de variáveis e como proceder para declarar as variáveis necessárias à execução de um algoritmo. Agora, podemos iniciar o estudo do bloco de comandos para, a partir daí, escrever os primeiros algoritmos utilizando nossa pseudolinguagem. 2.3. O Bloco de Comandos Neste bloco serão escritos todos os comandos necessários para entrada, processamento e saída de dados. Auto Avaliação 2.1 1. Escreva os comandos necessários para declarar: a) uma variável para armazenar o nome de um país. b) duas variáveis para armazenar as medidas dos lados de um retângulo. c) uma variável que seja capaz de armazenar o número de municípios de um Estado. 2. Explique o significado de cada um dos seguintes comandos. Var Altura: real Opcao, soma: inteiro EstadoCivil: caracter Introdução à Programação | 49 No caso dos algoritmos computacionais, um comando é toda e qualquer instrução que deverá ser executada pela CPU, a fim de que dados de entrada sejam processados, gerando, com isso, dados de saída. A partir desta unidade, aprenderemos como escrever esses comandos e como utilizar as estruturas disponíveis para o desenvolvimento de algoritmos. Vamos iniciar conhecendo o comando de atribuição. Em seguida, aprenderemos como escrever e utilizar comandos para entrada e saída de dados. Na próxima seção, conheceremos as estruturas de controle de execução de um algoritmo. 2.3.1. Comando de Atribuição Este comando permite que se forneça um valor a uma certa variável, onde a natureza deste valor tem de ser compatível com o tipo da variável na qual está sendo armazenado. (FARRER et al, 1999). Um comando pode ser definido como a descrição de uma ação a ser executada num dado momento. (FARRER et al, 1999). Você sabe o que é um comando? E que comandos podem ser utilizados para a criação de algoritmos computacionais?. Introdução à Programação | 50 Este comando é a principal forma de se armazenar um dado em uma variável. Sua sintaxe é a seguinte: onde: identificador é o nome da variável a qual está sendo atribuído o valor; <- é o símbolo de atribuição; expressão pode ser qualquer valor constante ou uma expressão aritmética, uma expressão lógica ou uma expressão literal cujo resultado é atribuído à variável. O conceito de expressão em termos computacionais está diretamente relacionado ao conceito de expressão matemática, onde um conjunto de variáveis e Exemplo Comando de Atribuição x <- 2 Como se lê? A variável x recebe o valor 2 ou simplesmente x recebe 2 O que acontece “dentro” do computador? Na memória principal, onde estava reservado um espaço para a variável X, essa variável armazenará o valor 2. Memória Principal identificador <- expressão x 2 Introdução à Programação | 51 constantes numéricas relacionam-se por meio de operadores compondo uma fórmula que, uma vez avaliada, resulta num valor (LOPES; GARCIA, 2002). 2.3.1.1. Expressões Aritméticas Uma expressão aritmética é formada por operadores aritméticos e cujos operandos são valores constantes ou variáveis do tipo inteiro ou do tipo real. A tabela a seguir lista os operadores aritméticos disponíveis para a nossa pseudolinguagem. Para cada operador, associa-se uma operação aritmética. Tabela 3: Operadores Aritméticos Operador Operação + Adição - Subtração * Multiplicação / Divisão \ Divisão Inteira % Resto (ou mod) ^ Exponenciação As operações de adição, subtração, multiplicação e divisão são exatamente as mesmas que você já conhece. A novidade aqui pode ser a divisão inteira e a operação resto. A operação divisão inteira (ou simplesmente div) dá como resultado a parte inteira do quociente da divisão de um valor por outro. Por exemplo, se realizarmos a operação 11 \ 3 (lê-se 11 div 3), teremos como resultado 3, que é a parte inteira do resultado da divisão de 11 por 3. De forma semelhante, 15 \ 2 resulta em 7, pois é a parte inteira da divisão de 15 por 2, ou seja 15 dividido por 2 resulta em 7 e sobra 1. A operação resto ou mod fornece como resultado o resto da divisão de um valor por outro. Por exemplo, para a operação 11 % 3 (lê-se 11 mod 3) o resultado é 2, pois 11 dividido por 3 dá resto 2. De modo semelhante, 15 % 2 resulta em 1. Introdução à Programação | 52 A operação exponenciação calcula a potência de um valor. Por exemplo, 2 ^ 3 resulta em 8, visto que a expressão representa 2 elevado a 3. De forma análoga, 5 ^ 2 resulta em 25, assim como 3 ^ 4 resulta em 81. Na construção de algoritmos, todas as expressões aritméticas devem ser linearizadas, ou seja, dispostos em linha, devendo também ser feita a substituição dos operadores da aritmética tradicional para os da nossa pseudolinguagem. Pelo exemplo, você deve ter percebido que não são utilizados colchetes e chaves para estabelecer prioridades de execução das operações. No formato computacional, devemos utilizar para isto tantos pares de parênteses quantos forem necessários. Os parênteses indicam quais partes da expressão deverão ser executadas primeiro. A execução se dá sempre da esquerda para a direita, mas além dos parênteses, existe uma ordem de prioridade dos operadores, ilustrada na tabela a seguir. Exemplo Linearização de Expressões Aritméticas Formato Tradicional Formato Computacional (Linearizado) ሺሺʹȀ͵�–�ሺ�–�Ͷሻሻ��ሻ�ȗ�� Tabela 4: Precedência de Operadores Aritméticos Prioridade Operadores 1ª ^ \ % 2ª * / 3ª + - Além das operações básicas, podemos utilizar nas expressões aritméticas algumas funções comuns na matemática. Tabela 5: Funções Matemáticas Função Descrição Abs(valor) Calcula o módulo (valor absoluto) do valor entre parênteses. Cos(valor) Calcula o cosseno do valor entre parênteses Sen(valor) Calcula o seno do valor entre parênteses Tan(valor) Calcula a tangente do valor entre parênteses Exp(b, e) Calcula o valor de b elevado a e Log(valor) Calcula o logaritmo decimal do valor entre parênteses Logn(valor) Calcula o logaritmo natural do valor entre parênteses Pi Valor de Pi Raizq(valor) Calcula a raiz quadrada do valor entre parênteses A ordem de prioridade de uma função em uma expressão aritmética é máxima. Ou seja, executa-se uma função antes de qualquer outro operador. Introdução à Programação | 53 Tabela 4: Precedência de Operadores Aritméticos Prioridade Operadores 1ª ^ \ % 2ª * / 3ª + - Além das operações básicas, podemos utilizar nas expressões aritméticas algumas funções comuns na matemática. Tabela 5: Funções Matemáticas Função Descrição Abs(valor) Calcula o módulo (valor absoluto) do valor entre parênteses. Cos(valor) Calcula o cosseno do valor entre parênteses Sen(valor) Calcula o seno do valor entre parênteses Tan(valor) Calcula a tangente do valor entre parênteses Exp(b, e) Calcula o valor de b elevado a e Log(valor) Calcula o logaritmo decimal do valor entre parênteses Logn(valor) Calcula o logaritmo natural do valor entre parênteses Pi Valor de Pi Raizq(valor) Calcula a raiz quadrada do valor entre parênteses A ordem de prioridade de uma função em uma expressão aritmética é máxima. Ou seja, executa-se uma função antes de qualquer outro operador. 2.3.1.2. Expressões Relacionais As expressões relacionais são aquelas em que aparecem operadores relacionais e cujo resultado de avaliação é sempre um valor lógico (verdadeiro ou falso). A tabela a seguir apresenta os operadores relacionais utilizados por nossa linguagem algorítmica. Tabela 6: Operadores Relacionais Operador Significado > Maior que < Menor que >= Maior ou igual a <= Menor ou igual a = Igual a <> Diferente de Exemplo Expressões Aritméticas B ^ 2 – 4 * A * C Neste caso, é executada a operação de exponenciação por primeiro. Em seguida, são realizadas as operações de multiplicação, da esquerda para a direita e, por fim, realizada a subtração. � (-B – Raizq(X))/(2 * A) Neste caso, a função é executada antes de qualquer outra operação. Em seguida, são realizadas as operações entre parênteses e, por fim, realizada a divisão. Introdução à Programação | 54 2.3.1.2. Expressões Relacionais As expressões relacionais são aquelas em que aparecem operadores relacionais e cujo resultado de avaliação é sempre um valor lógico (verdadeiro ou falso). A tabela a seguir apresenta os operadores relacionais utilizados por nossa linguagem algorítmica. Tabela 6: Operadores Relacionais Operador Significado > Maior que < Menor que >= Maior ou igual a <= Menor ou igual a = Igual a <> Diferente de Exemplo Expressões Aritméticas B ^ 2 – 4 * A * C Neste caso, é executada a operação de exponenciação por primeiro. Em seguida, são realizadas as operações de multiplicação, da esquerda para a direita e, por fim, realizada a subtração. � (-B – Raizq(X))/(2 * A) Neste caso, a função é executada antes de qualquer outra operação. Em seguida, são realizadas as operações entre parênteses e, por fim, realizada a divisão. Dos exemplos apresentados, podemos destacar que em uma expressão relacional, os operandos devem obrigatoriamente ser do mesmo tipo. Deste modo, para o conjunto de exemplos, podemos afirmar que A e B são do mesmo tipo, assim como X e o resultado da expressão 3 – Y também são. Note que é possível aparecer variáveis em expressões relacionais. Com isso, o resultado da expressão será determinado no momento em que o algoritmo estiver sendo executado, desde que já tenham sido atribuídos valores para as variáveis envolvidas na expressão. Assim, para o primeiro exemplo se as viaráveis A e B contêm, respectivamente, os valores 4 e 5, o resultado da expressão é o valor lógico falso. 2.3.1.3. Expressões Lógicas Um expressão lógica é aquela em que aparecem operadores lógicos e cujos operandos são expressões relacionais, constantes lógicas e/ou variáveis do tipo lógico. O resultado da avaliação de uma expressão lógica é sempre um dos valores lógicos (verdadeiro ou falso). Já conhecemos, da lógica proposicional, os conectivos lógicos utilizados na formação de novas proposições a partir de outras já conhecidas. Sabemos também Exemplo Expressões Relacionais A <> B A diferente de B. � X <= 3 – Y X menor ou igual a 3 menos Y. � (2 * Num) > Raizq(Y) 2 vezes Num maior que raiz quadrada de Y. Introdução à Programação | 55 Dos exemplos apresentados, podemos destacar que em uma expressão relacional, os operandos devem obrigatoriamente ser do mesmo tipo. Deste modo, para o conjunto de exemplos, podemos afirmar que A e B são do mesmo tipo, assim como X e o resultado da expressão 3 – Y também são. Note que é possível aparecer variáveis em expressões relacionais. Com isso, o resultado da expressão será determinado no momento em que o algoritmo estiver sendo executado, desde que já tenham sido atribuídos valores para as variáveis envolvidas na expressão. Assim, para o primeiro exemplo se as viaráveis A e B contêm, respectivamente, os valores 4 e 5, o resultado da expressão é o valor lógico falso. 2.3.1.3. Expressões Lógicas Um expressão lógica é aquela em que aparecem operadores lógicos e cujos operandos são expressões relacionais, constantes lógicas e/ou variáveis do tipo lógico. O resultado da avaliação de uma expressão lógica é sempre um dos valores lógicos (verdadeiro ou falso). Já conhecemos, da lógica proposicional, os conectivos lógicos utilizados na formação de novas proposições a partir de outras já conhecidas. Sabemos também Exemplo Expressões Relacionais A <> B A diferente de B. � X <= 3 – Y X menor ou igual a 3 menos Y. � (2 * Num) > Raizq(Y) 2 vezes Num maior que raiz quadrada de Y. que cada conectivo é tratado como um operador lógico. Na construção de algoritmos, utilizaremos os seguintes operadores lógicos: Tabela 7: Operadores Lógicos Operador Descrição E Resulta verdadeiro se ambos os operandos forem verdadeiros. OU Resulta verdadeiro se pelo menos um dos operandos for verdadeiro. NAO Inverte o valor lógico do operando, A seguir é mostrada a tabela verdade com os resultados das aplicações dos operadores lógicos. Tabela 8: Tabela Verdade para Operadores Lógicos A B A E B A OU B NAO A NAO B VERDADEIRO VERDADEIRO VERDADEIRO VERDADEIRO FALSO FALSO VERDADEIRO FALSO FALSO VERDADEIRO FALSO VERDADEIRO FALSO VERDADEIRO FALSO VERDADEIRO VERDADEIRO FALSO FALSO FALSO FALSO FALSO VERDADEIRO VERDADEIRO Os operadores lógicos normalmente são utilizados para unir expressões relacionais, de modo a estabelcer conjuntos de condições que devem ser satisfeitas para que um conjunto de comandos seja executado. Por exemplo, considere a situação em que se deseja atribuir um aumento de 20% sobre o salário de um funcionário que recebe entre mil e dois mil reais. Neste caso, em vez de cairmos no erro de escrever a condição como 1000 < salário < 2000, devemos utilizar o operador lógico E, escrevendo: salario > 1000 E salario < 2000. Assim como os operadores aritméticos, os operadores lógicos também obedecem uma ordem de prioridade. Introdução à Programação | 56 que cada conectivo é tratado como um operador lógico. Na construção de algoritmos, utilizaremos os seguintes operadores lógicos: Tabela 7: Operadores Lógicos Operador Descrição E Resulta verdadeiro se ambos os operandos forem verdadeiros. OU Resulta verdadeiro se pelo menos um dos operandos for verdadeiro. NAO Inverte o valor lógico do operando, A seguir é mostrada a tabela verdade com os resultados das aplicações dos operadores lógicos. Tabela 8: Tabela Verdade para
Compartilhar