Lógica de Programação com Pascal. Teoria e Prática. Este material visa auxiliar no aprendizado da programação com Pascal através de exemplos práticos.

Tamanho: px
Começar a partir da página:

Download "Lógica de Programação com Pascal. Teoria e Prática. Este material visa auxiliar no aprendizado da programação com Pascal através de exemplos práticos."

Transcrição

1 Lógica de Programação com Pascal Teoria e Prática Este material visa auxiliar no aprendizado da programação com Pascal através de exemplos práticos. Edeyson Andrade Gomes IFBA ª Edição Revisão

2 SUMÁRIO 1 10 INTRODUÇÃO À PROGRAMAÇÃO 10 Linguagem Natural 13 Fluxogramas 16 Início e Fim de Fluxo 16 Entrada Manual de Dados 17 Exibição 17 Processo 18 Sequencia 18 Decisão 19 Repetição 26 Exemplos 33 Exemplo 1: calculo da raiz de uma equação do primeiro grau. 33 Exemplo 2: Determinar os tipos dos triângulos em função da quantidade de lados. 34 Exemplo 3: Ler 2 valores inteiros e distintos do teclado e ordená-los. 36 Exemplo 4: Imprimir o número 5 dez vezes. 37 Exemplo 5: Imprimir todos os números naturais entre 1 e N. 38 Exemplo 6: Determinar todos os divisores naturais de um número natural N A LINGUAGEM PASCAL Estrutura de um Programa Pascal Cabeçalho Área de Declarações Corpo do Programa 46 Identificadores 51 Palavras Reservadas 52 Comentários Variáveis Constantes Tipos de Dados 53 Inteiros 53 Reais 55 Caracteres 57 Tipos Lógicos

3 EXPRESSÕES Prioridades das Operações Tipos de Expressões Tipos de Operadores 65 Operador de Atribuição 65 Operadores Aritméticos 66 Operador de Concatenação 69 Operadores Relacionais 69 Operadores Lógicos ESTRUTURAS DE DECISÃO IF.. THEN IF.. THEN.. ELSE CASE EXERCÍCIOS ESTRUTURAS DE REPETIÇÃO FOR Exemplos de Uso do FOR WHILE.. DO REPEAT.. UNTIL Arrays 120 Apêndice B Exercícios 127 Apêndice C Exemplos de Código 135 C1 - Tipos, Variáveis e Constantes 135 C3 - Condicionais 144 C4 - For 146

4 LISTAGENS Listagem Cabeçalho de programa Pascal Listagem 2.2 Utilização de Unit Listagem 2.3 Declaração de Variáveis Listagem 2.4 Programa que lê 2 números e calcula a soma Listagem Programa que lê 3 variáveis e calcula a média Listagem 2.6 Exemplo de uso de Inteiros Listagem 2.7 Uso de Reais em Pascal Listagem 2.3 Exemplo com Strings Listagem 2.4 Exemplo com Char Listagem 2.5 Exemplo com Boolean Listagem 2.6 Exemplo com Variáveis e Constantes Listagem 3.1 Operador de Atribuição Listagem 3.2 Uso de DIV e MOD Listagem 3.3 Uso de DIV e MOD com Unidade, Dezena e Centena Listagem Concatenação de Strings Listagem 3.5 Operadores Relacionais com Integer Listagem 3.6 Operadores Relacionais com String Listagem 3.7 Operadores Relacionais com Reais Listagem 3.8 Operadores Lógicos Listagem 4.1 Seleção com uma Via IF.. THEN Listagem 4.2 Seleção com 2 Vias IF.. THEN.. ELSE Listagem Seleção com duas Vias Listagem Calcula Desconto Listagem 4.5 Algoritmo URA 01 Case Listagem 4.6 Programa Triângulos Edeyson Andrade Gomes

5 Listagem 4.7 Programa Paridade Listagem 5.1 Uso de For para repetir 100 teste de notas Listagem 5.2 For Simples com 8 passos Listagem 5.3 Exemplo do FOR com 2 passos Listagem 5.4 Exemplo de FOR com alteração do contador Listagem 5.5 Divisores de N Listagem 5.6 Conta Divisores de N Listagem 5.5 Listagem de números de 1 a Listagem 5.6 Listagem de números de 1 a Listagem 5.7 Listagem de números de 1 a Listagem 5.8 Listagem de números de 1 a Listagem 5.9 While Listagem 5.10 Listagem de números de 1 a Listagem 5.11 Listagem de números de 1 a

6 TABELAS Tabela 2.1 Tipos Inteiros Tabela Tipos Reais Tabela 3.1 Precedência de Operadores Tabela 3.2 Operadores Relacionais Edeyson Andrade Gomes

7 FIGURAS Figura 1.1 Símbolos de um Fluxograma Figura 1.2 Início e Fim de Fluxo Figura 1.3 Símbolo de Entrada Manual de Dados Figura 1.4 Símbolo de Exibição de Dados Figura 1.5 Símbolo de Processo em Fluxograma Figura 1.6 Fluxograma de Sequencia Figura 1.7 Decisão em Fluxograma Figura 1.8 Cálculo de média de duas notas Figura 1.9 Decisão com 1 via em Fluxograma Figura 1.10 Exemplo de Decisão com 1 via Figura 1.11 Decisão com 2 vias em Fluxograma Figura 1.12 Exemplo de Decisão com 2 vias Figura 1.13 Decisão com 2 vias em Fluxograma Figura 1.14 Exemplo de Decisão com N vias Figura 1.15 Exemplo de Repetição Figura 1.16 Fluxograma de Repetição Figura 1.17 Repetição com Teste Antecipado Figura 1.18 Exemplo de Repetição com Teste Antecipado Figura 1.19 Repetição com Teste Postergado Figura 1.20 Exemplo de Repetição com Teste Postergado Figura 1.21 Exemplo de Equação do 1º Grau Figura 1.22 Exemplo do Algoritmo Triângulos Figura Fluxograma: Ordenar 2 números... 36

8 Figura Fluxograma: Imprimir o número 5 dez vezes Figura Fluxograma: Números naturais entre 1 e N Figura Fluxograma: Divisores naturais de N Figura Fluxograma: Soma de a e b Figura Fluxograma: Média de 3 números Figura 2.3 Abstração de memória Figura 2.4 Alocação de variáveis Figura 2.5 Fluxograma do programa InteirosEmPascal Figura 2.6 Fluxograma do programa ReaisEmPascal Figura 2.7 Alocação de Strings Figura 3.1 Divisão de Inteiro Figura 4.1 Fluxograma de sequência Figura 4.2 Fluxograma da seleção com uma Via Figura 4.3 Fluxograma da seleção com duas Vias Figura Fluxograma da seleção com duas Vias Figura 4.5 Fluxograma do Algoritmo Calcula Desconto Figura Fluxograma do Algoritmo Calcula Desconto Figura Fluxograma do algoritmo URA 01 CASE Figura Fluxograma do algoritmo Triângulos Figura Fluxograma do algoritmo Paridade Figura 5.1 Fluxograma FOR Figura 5.2 Fluxograma RepeteTesteNotas Figura 5.3 Fluxograma do ForSimples Figura 5.4 Fluxograma Divisores de N Figura 5.5 Fluxograma Contadores de Divisores de N Figura 6.AA While com Contador Figura 7.BB Pares entre 1 e 10 com WHILE Edeyson Andrade Gomes

9 Figura 8.CC Figura 9.DD While Figura 10.EE Repeat Until de 1 a Figura 11.FF Figura 12.XYZ Figura

10 10 Programação com Pascal 1 INTRODUÇÃO À PROGRAMAÇÃO Um dos maiores desafios para um professor de programação é fazer com que seus alunos consigam descrever detalhadamente uma solução para um problema. Por exemplo: quais os passos necessários para calcular a idade média de uma coleção de pessoas? Fazê-los entender um problema não é o mais difícil, todavia, fazê-los organizar uma linha de raciocínio lógico e bem estruturado para uma solução que seja coerente, efetiva e eficaz não é trivial. As principais dificuldades apresentadas estão na abstração do problema e da solução, pois: a) O aluno precisa compreender o problema para poder resolvê-lo; b) A descrição da solução deve ser textualmente bem detalhada; c) É difícil prover uma descrição da solução que seja completa. Comumente, encontram-se soluções de alunos que omitem passos que são considerados óbvios, embora não sejam a leitores que desejam entender tais soluções. Este livro tem como objetivo ajudar o aluno a desenvolver a habilidade de descrever soluções computacionais coerentes, sem ambiguidades e completas. Para isto, foca-se o desenvolvimento do raciocínio lógico baseando-se num universo de problemas da matemática e física do ensino médio. Alunos do ensino médio são confrontados com problemas como a extração de raízes de uma equação do segundo grau. Para a solução, aprendem um conjunto ordenado de passos. São estes passos que compõem um algoritmo. Um algoritmo deve descrever detalhadamente uma sequência finita e ordenada de passos necessários à solução de um determinado problema ou uma classe de problemas. É uma forma de descrever possíveis soluções a problemas do mundo real, objetivando sua implementação no mundo computacional. A maioria dos problemas pode ser resolvida por um algoritmo que deve possuir 5 características essenciais: 1. Finitude: Todo algoritmo deve sempre terminar após um número finito de passos. 2. Definição: Cada passo de um algoritmo deve ser definido de forma clara. a. As ações devem ser definidas rigorosamente e sem ambiguidades para que não sejam cometidos erros durante a resolução do problema. b. Edeyson Andrade Gomes

11 Introdução à Programação Entradas: Um algoritmo deve ter zero ou mais entradas. a. Por exemplo, uma equação do segundo grau precisa informar os valores de a, b e c, pois sua forma é ax 2 + bx + c e são estes valores que diferenciam as equações. 4. Saídas: Um algoritmo deve ter uma ou mais saídas. a. Por exemplo, uma equação de segundo grau tem duas raízes: x e x. 5. Efetividade: Um algoritmo deve ser efetivo. a. Todas as operações devem ser suficientemente básicas de modo que possam ser executadas com precisão em um tempo finito por um humano usando papel e lápis. b. Cada passo da solução deve ser simples, embora sua composição leve a solução de algo complexo. A elaboração de um algoritmo deve seguir 6 passos fundamentais: 1. Compreender o problema, descrevendo-o de forma clara e precisa. a. Um problema só pode ser resolvido se for bem entendido, o que requer uma descrição compreensível e clara. 2. Identificar os dados de entrada e saída. a. Todo problema tem 0 ou mais dados de entrada. i. Por exemplo, uma equação do segundo grau requer 3 dados de entrada (a, b e c). b. Todo problema tem 0 ou mais dados de saída. i. Por exemplo, uma equação do segundo grau onde delta é menor que zero não possui raízes, logo, não tem dados de saída. Em caso contrário, tem duas saídas: x e x. 3. Determinar o que é preciso para transformar dados de entrada em dados de saída: a. Definição de uma sequência de passos que permitam a solução de maneira automática e repetitiva. i. Usar a estratégia top-down 1, sempre buscando passos simples que sejam compostos na solução; 1 A estratégia top-down consiste em dividir um problema em partes menores e extremamente simples (subproblemas) de modo que seja mais fácil a sua resolução.

12 12 Programação com Pascal 4. Construir o algoritmo. 5. Testar o algoritmo. 6. Executar o algoritmo. ii. Observar regras e limitações (como exceções ao problema); iii. Identificar todas as ações a realizar, usando sempre passos simples para a solução. iv. Eliminar possíveis ambiguidades. Um algoritmo bem definido e estruturado garante sua compreensão por terceiros em qualquer linguagem de programação. Um grave problema que se destaca na elaboração de algoritmos é que se ele não for descrito de forma padronizada e estruturada, possivelmente não será compreendido por outras pessoas, apenas por seus criadores. Para evitar esse possível problema, algoritmos costumam ser representados de três formas, como seguem: 1. Linguagem Natural: Os algoritmos são descritos detalhadamente em linguagem natural. Por exemplo, em português estruturado. 2. Fluxograma: Os algoritmos são representados graficamente. a. Usam-se formas geométricas padronizadas para descrever ações e decisões na resolução do problema. 3. Pseudo-linguagem: Os algoritmos são descritos através de uma linguagem intermediária entre a linguagem natural e uma linguagem de programação. Edeyson Andrade Gomes

13 Introdução à Programação 13 Linguagem Natural Um exemplo de uso de Linguagem Natural está na especificação de como criar um XBurger. Uma possível solução está a seguir: 1. Início do Algoritmo XBurger. a. Pegar um pão; b. Abrir o pão ao meio; c. Passar manteiga no pão; d. Colocar queijo no pão; e. Colocar presunto no pão; f. Colocar ovo frito no pão; g. Fechar o pão. 2. Fim do Algoritmo XBurger. Algumas perguntas que podem surgir ao leitor são: 1. Onde estavam a manteiga, o queijo e o presunto? 2. Quem fritou o ovo? Isso faz parte do algoritmo? 3. Podemos definir um algoritmo fritar ovo e reusá-lo? A especificação de um algoritmo deve ser tão detalhada quanto possível para evitar dúvidas ou ambiguidades. Tais perguntas deveriam ser respondidas numa especificação mais clara e detalhada do Algoritmo XBurger. Por exemplo, pode-se definir que o algoritmo tem como entradas: um pão, um ovo frito (logo, não faz parte do algoritmo fritar o ovo), manteiga, queijo e presunto. Como dado de saída tem-se o sanduíche. Outro exemplo em Linguagem Natural é como extrair as raízes de uma equação do segundo grau na forma ax 2 + bx + c. Sabe-se que: x = i. = b 2-4ac b ± 2a ii. x 1 = (-b + ) / 2a iii. x 2 = (-b - ) / 2a iv. a deve ser diferente de 0, senão a equação é de 1º grau. v. deve ser maior que zero para ter raízes reais. A definição do algoritmo, em linguagem natural, para extrair as raízes de uma equação do segundo grau pode ser a seguinte:

14 14 Programação com Pascal 1. Início do Algoritmo Raízes a. Obter os coeficientes a, b e c (dados de entrada). b. Se a é igual a zero: i. Informar que esta é uma equação de 1º grau e terminar o algoritmo. c. Caso contrário: i. Calcular delta = b 2-4ac ii. Se delta for negativo: 1. Informar que a equação não tem raízes reais e terminar o algoritmo. iii. Caso contrário: 1. Calcular: a. x 1 = (-b + ) / 2a b. x 2 = (-b - ) / 2a 2. Fornecer como resultado x 1 e x 2 3. Terminar o algoritmo. 2. Fim do Algoritmo Raízes Vale ressaltar os dados de entrada e saída do algoritmo. Pela definição, uma equação de segundo grau precisa dos seguintes dados de entrada: a, b e c. Como dados de saída, provê os valores de x 1 e x 2 (x e x, respectivamente). E delta? É dado de entrada ou de saída? Na solução de um problema é comum o uso de dados temporários que auxiliam os cálculos, armazenando valores intermediários. Dados como delta são comumente denominados, em programação, de variáveis. A variável delta é, então, um dado necessário ao cálculo das raízes da equação do segundo grau. Como se pode notar, a definição do Algoritmo Raízes especifica detalhadamente como calcular as raízes de uma equação do segundo grau. Observação: 1. O Algoritmo Raízes foi escrito usando um recurso textual que facilita sua legibilidade, que é a indentação. Note que as ações que compõem blocos ficam indentados. Outra forma de representação de um algoritmo é via o uso de uma linguagem de programação de alto nível, ou Pseudocódigo. Neste caso, aproxima-se bastante da programação formal em computadores, mas distancia-se da linguagem escrita e falada comumente pelos humanos. A programação consiste na codificação precisa de um algoritmo (em qualquer representação adotada) segundo uma linguagem de programação específica. Um programa é uma formalização de um algoritmo em uma determinada linguagem de Edeyson Andrade Gomes

15 Introdução à Programação 15 programação, segundo suas regras de sintaxe e semântica, de forma a permitir que o computador possa entender sua sequencia de ações. A proposta deste material é ensinar algoritmos e programação através de múltiplos meios de representação e usando as linguagens de programação Pascal.

16 16 Programação com Pascal Fluxogramas Um Fluxograma é um diagrama que representa o esquema de solução de um problema. Ele apresenta a linha de raciocínio lógico independente de linguagem de programação e é inteligível por humanos e computadores. Sua representação gráfica é feita por símbolos como na Figura 1.1. Início e Fim de Fluxo Processo Exibição Entrada Manual de Dados Decisão Figura 1.1 Símbolos de um Fluxograma Fluxogramas representam diversas estruturas de controle, detalhadas a seguir. Início e Fim de Fluxo Todo Algoritmo precisa informar em sua representação onde ele inicia e onde termina. Embora o símbolo de início e fim seja o mesmo, seu rótulo é que os diferencia, como apresenta a Figura 1.2. Exemplo de Algoritmo: 1. Início do Algoritmo 2. Fim do Algoritmo Início Fim Figura 1.2 Início e Fim de Fluxo Edeyson Andrade Gomes

17 Introdução à Programação 17 Entrada Manual de Dados Uma entrada manual de dados representa a obtenção de ou mais dados de entrada para a execução do algoritmo, como mostra a Figura 1.3. Exemplo de Algoritmo: 1. Início do Algoritmo a. Entrada manual de dados: i. Ler os valores de a, b e c numa equação do 2º grau (dados de entrada); 2. Fim do Algoritmo Início Fim a, b, c Figura 1.3 Símbolo de Entrada Manual de Dados O uso de [Ler os valores de a, b e c] significa que os valores de a, b e c terão de ser fornecidos ao algoritmo. É uma condição necessária a seu funcionamento. Exibição Uma exibição apresenta (em tela, impresso, etc) um ou mais dados de saída da execução do algoritmo, como se pode ver na Figura 1.4. Exemplo de Algoritmo: 1. Início do Algoritmo a. Entrada manual de dados: i. Ler os valores de a, b e c numa equação do 2º grau (dados de entrada); b. Exibir os valores de a, b e c 2. Fim do Algoritmo Início a, b, c a, b, c Fim Figura 1.4 Símbolo de Exibição de Dados

18 18 Programação com Pascal Processo Um processo representa a transformação de um ou mais dados de entrada em dados temporários (intermediários) ou de saída, como apresenta a figura 1.5. Exemplo de Algoritmo: 1. Início do Algoritmo a. Entrada manual de dados: Ler um valor inteiro para n1 (dados de entrada); b. Processo: i. Calcular delta = b 2-4ac c. Exibir o valor de delta. 2. Fim do Algoritmo Início a, b, c delta = (b * b) (4 * a * c) delta Figura 1.5 Símbolo de Processo em Fluxograma Fim Sequencia Uma Sequencia representa a execução de um conjunto de ações em série. Não existe a possibilidade de alteração da ordem de processamento das ações. Por exemplo: Entrada Ação 1 Ação 2 Saída Figura 1.6 Fluxograma de Sequencia Na Figura 1.6, apresenta-se uma sequência onde as Ações 1 e 2 ocorrerão sempre e na mesma ordem. Observação: 1. Pode-se inferir uma Sequencia na Figura 1.5, onde a leitura de a, b e c antecede o cálculo de delta que, por sua vez, antecede sua exibição. Edeyson Andrade Gomes

19 Introdução à Programação 19 Decisão Uma Decisão representa a avaliação de uma condição (expressão lógica) que pode ser Verdadeira ou Falsa e seu símbolo permite dois caminhos possíveis à sequência de ações. Como exemplo de algoritmo que usa decisão, voltemos ao cálculo das raízes de uma equação do segundo grau, cujo fluxograma é ilustrado na Figura 1.7: 1. Início do Algoritmo Raízes a. Obter o coeficiente a (dado de entrada). b. Se a é igual a zero: (decisão 1) i. Informar que esta é uma equação de 1º grau e terminar o algoritmo. c. Caso contrário: i. Obter os coeficientes b e c (dados de entrada). ii. Calcular delta = b 2-4ac iii. Se delta for negativo: (decisão 2) 1. Informar que a equação não tem raízes reais e terminar o algoritmo. iv. Senão: 1. Calcular: a. x 1 = (-b + ) / 2a b. x 2 = (-b - ) / 2a 2. Fornecer como resultado x 1 e x 2 3. Terminar o algoritmo. 2. Fim do Algoritmo Raízes Início a a = 0 SIM A Equação é do 1º grau. Fim NÃO b, c delta = b 2 4ac delta >= 0 NÃO A Equação não tem raízes reais SIM x1 = (-b + )/(2a) x2 = (-b )/(2a) Exibe x 1 e x 2 Figura 1.7 Decisão em Fluxograma

20 20 Programação com Pascal Como visto no exemplo anterior, a descrição do algoritmo exige duas tomadas de decisão: uma para testar o valor de a e a outra para testar o valor de delta. Com base no resultado, toma-se um de dois caminhos possíveis. Existem vários tipos de decisão que podemos tomar num algoritmo e os descreveremos a seguir. Vamos testar o algoritmo usando 2 exemplos: 1. Equação : 3x + c a. Obter o coeficiente a i. Neste caso, a = 0. Logo, o algoritmo vai informar que esta é uma equação de 1º grau e terminar. 2. Equação : x 2-2x 3 a. Obter o coeficiente a i. Neste caso, a = 1. Logo, o algoritmo prossegue. b. Obter os coeficientes b e c i. Neste caso, b = -2 e c = -3. c. Calcular delta = b 2-4ac i. delta = ( 2)² 4 * 1 * ( 3) = = 16 d. Como delta >= 0, o algoritmo continua. e. Calcular x1 e x2: i. X1 = (2 + 4) / 2 = 3 ii. X2 = (2 4) / 2 = -1 f. Exibe 3 e -1 Decisão com 1 Via Imagine um algoritmo que deva calcular a média aritmética de duas avaliações [media = (nota1 + nota2)/2] e a imprima. Temos um fluxo linear único que é: obter as notas (n1 e n2), calcular a média e imprimi-la. A seguir, o fluxograma que o descreve. Figura 1.8 Cálculo de média de duas notas Edeyson Andrade Gomes

21 Introdução à Programação 21 Uma alteração possível a este algoritmo é: caso a média calculada seja maior ou igual a 6, imprima parabéns e continue o fluxo normal. Note que inserimos uma tomada de decisão (o teste da média). O fluxo será alterado (teremos uma adição de passos) SE a nota for maior ou igual a 6. Neste caso, teremos uma adição ao comportamento inicial do algoritmo. Uma Decisão com uma Via representa uma tomada de decisão (testa-se uma condição) que permite alterar o fluxo de processamento executando ou não uma Ação 1. Normalmente é construída em Linguagem Natural assim: Se expressão lógica é verdadeira então execute a Ação 1. Por exemplo, na Figura 1.9 a Ação 1 só será executada se o resultado da decisão (avaliação de uma expressão lógica) for verdadeiro. Em caso contrário a Ação 1 não será executada. Entrada Verdade Decisão Ação 1 Falso Saída Figura 1.9 Decisão com 1 via em Fluxograma O uso de Decisão com 1 Via para imprimir Parabéns se a média for maior ou igual a 6 é exemplificado no Algoritmo a seguir, representado na Figura 1.10: 1. Início do Algoritmo. a. Entrada manual de dados: i. Ler dois números n1 e n2 (dados de entrada); b. Processo: i. Calcular a média aritmética de n1 e n2 e atribuir à variável média; c. Decisão com 1 Via: i. Se a média for maior ou igual a 6, imprimir Parabéns!. d. Exibição: i. Exibir a média (dado de saída). 2. Fim do Algoritmo.

22 22 Programação com Pascal Figura 1.10 Exemplo de Decisão com 1 via Observa-se que neste exemplo, apresentado na Figura 1.10, a exibição de Parabéns ocorrerá se e somente se a média for maior ou igual a 6. Edeyson Andrade Gomes

23 Introdução à Programação 23 Decisão com 2 Vias Suponha que o algoritmo anterior deve ser alterado para avaliar a média dos alunos e determinar se o mesmo está aprovado (média >=6) ou reprovado (média < 6). Neste caso, têm-se apenas dois resultados possíveis e distintos na análise da média, ou seja, 2 Vias na tomada de decisão. Uma Seleção com duas Vias representa uma tomada de decisão que resulte num fluxo de processamento que segue por 1 das 2 vias possíveis, dependendo do valor lógico da expressão avaliada no início da estrutura. Por exemplo, na Figura 1.11 a Ação 1 só será executada se o resultado da decisão for verdadeiro. Em caso contrário, a Ação 2 será executada. Assim, as ações 1 e 2 são mutuamente exclusivas. Normalmente é construída em Linguagem Natural assim: Se expressão lógica é verdadeira então execute a Ação 1, senão, execute a Ação 2. Entrada Verdade Decisão Falso Ação 1 Ação 2 Saída Figura 1.11 Decisão com 2 vias em Fluxograma Exemplo de Algoritmo (representado na Figura 1.11): 1. Início do Algoritmo. a. Entrada manual de dados: Ler dois números n1 e n2 (dados de entrada); b. Processo: calcular a média aritmética de n1 e n2 e atribuir à variável média; c. Decisão com 2 Vias: i. Se a média for maior ou igual a 6, imprimir Aprovado!. ii. Senão, imprimir Reprovado! d. Exibição: Exibir a média (dado de saída). 2. Fim do Algoritmo.

24 24 Programação com Pascal Figura 1.12 Exemplo de Decisão com 2 vias Decisão com N Vias A Decisão com várias (N) Vias apresenta uma tomada de decisão onde o fluxo de processamento segue por 1 das N vias, dependendo do valor lógico da expressão avaliada no início da estrutura. Ou seja, o valor testado na tomada de decisão pode ter N resultados. Por exemplo, na Figura 1.13, uma das ações será executada em função do valor da condição avaliada. As condições são mutuamente exclusivas. Entrada Avalia Condição Caso 1 Caso 2 Caso 3 Caso N Ação 1 Ação 2 Ação 3... Ação N Saída Figura 1.13 Decisão com 2 vias em Fluxograma Edeyson Andrade Gomes

25 Introdução à Programação 25 Como exemplo, propomos um algoritmo que deve receber como entrada o código da operadora de telefonia móvel / celular e imprimir o nome desta operadora (representado na Figura 1.14). Se a operadora tiver código 1, imprima Oi; se for 2, imprima Claro; se for 3, imprima Tim, e assim, sucessivamente para todas as operadoras cadastradas. Observa-se que a tomada de decisão baseia-se na avaliação do código, que pode ter N valores possíveis. Assim, necessita-se de uma Decisão com N vias. 1. Início do Algoritmo. a. Entrada manual de dados: i. Ler um valor para codigo (dado de entrada); b. Decisão com N Vias: i. Selecione o valor de codigo. Caso: 1. atribua à operadora o valor Oi ; 2. atribua à operadora o valor Claro ; 3. atribua à operadora o valor Tim ; 4. atribua à operadora o valor Vivo ; ii. Qualquer outro valor, termine o algoritmo. c. Exibição: Exibir a operadora (dado de saída). 2. Fim do Algoritmo. Início codigo 1 codigo 4 operadora = Oi 2 3 operadora = Vivo operadora = Claro operadora = Tim Outro Valor operadora Fim Figura 1.14 Exemplo de Decisão com N vias

26 26 Programação com Pascal Repetição Imagine um problema que requer a impressão de todos os números inteiros entre 1 e 5, ou seja, o intervalo [1, 5]. O algoritmo para resolver isso pode ser o seguinte: 1. Início do Algoritmo 1 a 5. a. Exibir 1; b. Exibir 2; c. Exibir 3; d. Exibir 4; e. Exibir 5; 2. Fim do Algoritmo 1 a 5. Várias questões podem ser apresentadas para provar que a solução anterior não é eficiente: 1. Como imprimir todos os números entre 1 e ? Usar linhas de código? 2. Como imprimir os números entre a e b, sendo estes dois inteiros? Neste caso, a e b serão dados de entrada. 3. Como imprimir os números maiores que c entre a e b? Esta alteração vai necessitar de uma Decisão com 1 Via. Para resolver tais questões, quando o problema original requer um conjunto de comandos que se repete, usam-se as estruturas de repetição (também chamada de laço). Uma nova solução para o Algoritmo de 1 a 5 pode ser: 1. Início do Algoritmo 1 a 5. a. i = 1; valor inicial do intervalo [1,5]. b. Repita 5 vezes: são 5 valores no conjunto. i. Exibir i; exibe o valor atual de i. ii. i = i + 1; i assume seu valor anterior acrescido de Fim do Algoritmo 1 a 5. Vamos ver como seria a execução do algoritmo (como ilustra a Figura 1.15): iniciamos o algoritmo com i = 1 (primeiro valor do intervalo). Observação: 1. i é uma variável temporária que armazena o valor a ser impresso. 2. Note que executar i = i + 1 significa: atribua a i seu valor anterior acrescido de 1. Edeyson Andrade Gomes

27 Introdução à Programação 27 Passo 1 i = 1; exibe 1; i = Passo 2 exibe 2; i = Passo 3 exibe 3; i = 3 + 1; Passo 4 exibe 4; i = 4 + 1; Passo 5 exibe 5; i = 5 + 1; Figura 1.15 Exemplo de Repetição O fluxograma padrão para Repetição é apresentado na Figura Observa-se uma Condição (um teste feito) que determina se a repetição chegou ao fim ou não. Caso não, os comandos são novamente executados. Figura 1.16 Fluxograma de Repetição O exemplo anterior (Algoritmo 1 a 5) funciona bem para imprimir todos os números num intervalo conhecido previamente. No exemplo, o intervalo inteiro [1, 5]. Sabemos o início do intervalo (1), seu final (5) e o total de números a imprimir (5). Este total é que limita a repetição (Repita 5 vezes). Para imprimir os números entre 10 e 20, intervalo [10, 20], a alteração é a seguinte: 1. Início do intervalo = 10; 2. Final do intervalo = 20; 3. Total de números no intervalo: 11; a. [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20].

28 28 Programação com Pascal 1. Início do Algoritmo 10 a 20. a. i = 10; valor inicial do intervalo. b. Repita 11 vezes: são 11 valores no conjunto. i. Exibir i; exibe o valor atual de i. ii. i = i + 1; i assume seu valor anterior acrescido de Fim do Algoritmo 10 a 20. Vamos a um desafio: como imprimir os números maiores que c entre 10 e 50? Dica: Esta alteração vai necessitar de uma Decisão com 1 Via. 1. Início do intervalo = 10; 2. Final do intervalo = 50; 3. Total de números no intervalo: 51; a. [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, , 50]. Apresentaremos uma solução ao desafio: 1. Início do Algoritmo DesafioIntervalo. a. Entrada manual de dados: i. Ler um valor para c (dado de entrada); b. i = 10; valor inicial do intervalo. c. Repita 51 vezes: são 51 valores no conjunto. i. Decisão com 1 Via: ii. Se i > c então 1. Exibir i; exibe o valor atual de i. iii. i = i + 1; i assume seu valor anterior acrescido de Fim do Algoritmo DesafioIntervalo. Observe que i só será exibido se seu valor for maior que c. Isso é garantido pelo teste Se i > c então... o que está aninhado com o então (Exibir i) só será executado se a condição for verdadeira. Na maioria das vezes o uso de Repetição requer um teste ou avaliação de condição para executar ou não um bloco de comandos. Comumente, as repetições usam testes Antecipados ou Postergados. Usamos a Repetição com Teste Antecipado quando há a necessidade de tomar uma decisão que determine se uma ação será executada, repetindo-a se necesário. Normalmente é construída em Linguagem Natural assim: Enquanto a expressão lógica é verdadeira, execute a Ação 1. Por exemplo: enquanto o valor da variável a for menor que 10 some 1 à variável a. Neste caso, quando variável a for maior ou igual a 10 a repetição da ação (some 1 à variável a) se encerra. Nota-se que, se antes do teste a variável a já for maior ou igual a 10 nenhuma ação será tomada, pois o teste da expressão lógica precede a ação. O teste funciona como uma condição de parada das repetições. Edeyson Andrade Gomes

29 Introdução à Programação 29 No exemplo da Figura 1.17 a Ação 1 será executada sempre que, e apenas se, o Teste de Condição retornar um valor verdadeiro. Entrada Teste de Condição V Ação 1 F Saída Figura 1.17 Repetição com Teste Antecipado O algoritmo a seguir, representado no fluxograma da Figura 1.18, imprime todos os valores inteiros entre um valor de início x e 10 (intervalo [x, 10]). Note que se o valor inicial de x for maior que 10, nenhum valor será impresso, pois o teste iniciará falso. 1. Início do Algoritmo. a. Entrada de dados: i. Ler um valor para x (dado de entrada); b. Repetição com Teste Antecipado: i. Enquanto o valor de x <= 10: 1. Exibição: a. Exibir o valor de x (dado de saída). 2. Some 1 a x. 2. Fim do Algoritmo. Note que se a linha 2 (Some 1 a x) não for colocada no algoritmo, a repetição ocorrerá para sempre (isso é chamado de laço infinito). Imagine que o usuário digite o valor 1 para x. Sem a linha 2 o teste (enquanto x <= 10) sempre será verdadeiro.

30 30 Programação com Pascal Figura 1.18 Exemplo de Repetição com Teste Antecipado A Repetição com Teste Postergado é semelhante à Repetição com Teste Antecipado, mudando apenas quando efetuar o teste. Usa-se a Repetição com Teste Postergado quando há a necessidade de executar uma ação e somente após determinar se tal ação será executada novamente. Neste caso, a ação será executada ao menos uma vez. Normalmente é construída em Linguagem Natural assim: Repita a Ação 1 até que a expressão lógica torne-se verdadeira. Por exemplo: some 1 à variável a até que seu valor seja maior que 10. Nota-se que a ação que muda o valor de a sempre será executada uma vez, independente do seu valor inicial, como ilustra a Figura Edeyson Andrade Gomes

31 Introdução à Programação 31 Entrada Ação 1 V Teste de Condição F Saída Figura 1.19 Repetição com Teste Postergado O algoritmo a seguir, representado na Figura 1.20, imprime todos os valores inteiros entre um valor de x e 10. Note que mesmo se o valor de x for maior que 10 ao menos um valor será impresso, pois o teste ocorre após a ação. 1. Início do Algoritmo. a. Entrada de dados: i. Ler um valor para x (dado de entrada); b. Repetição com Teste Postergado: i. Repita 1. Exibição: a. Exibir o valor de x (dado de saída). 2. Some 1 a x. ii. Até que o valor de x seja > Fim do Algoritmo.

32 32 Programação com Pascal Figura 1.20 Exemplo de Repetição com Teste Postergado Os recursos vistos até agora linguagem natural e fluxogramas são a base do aprendizado para o bom desenvolvimento de programas. A lógica pode ser explorada independente da codificação esperada. Edeyson Andrade Gomes

33 Introdução à Programação 33 Exemplos Apresentaremos um conjunto de exemplos para fixação dos conceitos vistos neste capítulo. Cada um conterá uma descrição em Linguagem Natural e seu Fluxograma. Exemplo 1: calculo da raiz de uma equação do primeiro grau. Sabe-se que a forma da equação de 1º grau é: y = ax + b A descrição da solução em linguagem natural pode ser: 1. Início do Algoritmo Raiz 1º Grau a. Obter o coeficiente a (dado de entrada). b. Se a é igual a zero: i. Informar que não há raízes para a equação e terminar o algoritmo. c. Obter o coeficiente b (dado de entrada). d. Calcular o valor de x : x = -b / a e. Exibir o valor de x f. Terminar o algoritmo. 2. Fim do Algoritmo Raiz 1º Grau O Fluxograma da solução proposta é apresentado na Figura Início a a = 0 SIM NÃO b x = -b/a Não há raiz para a equação x Fim Figura 1.21 Exemplo de Equação do 1º Grau

34 34 Programação com Pascal Exemplo 2: Determinar os tipos dos triângulos em função da quantidade de lados. 1. Equilátero: todos os lados são iguais. 2. Isósceles: pelo menos dois lados são iguais. 3. Escaleno: os três lados são diferentes. Para esta solução combinaremos 2 Decisões de 1 Via e usaremos a estrutura: SE (condição1 é verdadeira) ENTÃO Ação 1 SENÃO SE (condição 2 é verdadeira) ENTÃO Ação 2 SENÃO Ação 3 Nesta estrutura a Ação 1 só será executada se a condição1 for verdadeira. Neste caso, não entra no SENÃO. Se a condição1 for falsa, e apenas neste caso, será feita a avaliação da condição 2. Se esta for verdadeira, executa a Ação 2. Em caso das duas condições testadas serem falsas, executa a Ação 3. A descrição da solução em linguagem natural pode ser: 1. Início do Algoritmo Triângulos a. Obter os lados a, b e c b. Se os três lados são iguais: i. Exibir Equilátero. c. Senão: i. Se dois lados são iguais: 1. Exibir Isósceles. ii. Senão: 1. Exibir Escaleno. 2. Fim do Algoritmo Triângulos O Fluxograma da solução proposta é apresentado na Figura Edeyson Andrade Gomes

35 Introdução à Programação 35 Início a, b, c a = b e b = c V Equilátero F a = b ou a = c ou b = c V F Isósceles Triângulo Escaleno Fim Figura 1.22 Exemplo do Algoritmo Triângulos

36 36 Programação com Pascal Exemplo 3: Ler 2 valores inteiros e distintos do teclado e ordená-los. Quais os passos do Algoritmo que se deseja? Vejamos: 1. Pensemos assim: a. n1 e n2 serão dados de entrada: inteiros providos pelo usuário ao algoritmo. b. maior e menor serão dados de saída: informarão qual o maior e o menor valor de entrada, respectivamente. 2. Só há duas opções a testar: Ou n1 é o maior dos dois (passo 2.a) ou não é (passo 2.b). a. Se (n1 > n2), então maior = n1 e menor = n2. b. Senão (em caso contrário, n1 < n2), maior = n2 e menor = n1. 3. Imprime os valores menor e maior. Observação: 1. Os dados de saída menor e maior são necessários? A resposta é: eles foram usados apenas para facilitar a legibilidade do algoritmo. Vejamos o Algoritmo em Linguagem Natural: a. Início do Algoritmo 1. Ler valores para n1 e n2. 2. Se n1 > n2, então: 1. atribuir n1 a maior e n2 a menor. 3. Senão: 1. atribuir n2 a maior e n1 a menor. 4. Imprimir os valores menor e maior. b. Fim do Algoritmo A Figura 1.23 ilustra o Fluxograma do algoritmo proposto. Início n1, n2 V n1 > n2 F maior = n1 menor = n2 maior = n2 menor = n1 menor, maior Fim Figura Fluxograma: Ordenar 2 números Edeyson Andrade Gomes

37 Introdução à Programação 37 Exemplo 4: Imprimir o número 5 dez vezes. A solução deste problema cai no que chamamos de repetição. Devemos repetir a impressão do número 5 dez vezes. Uma solução trivial, embora pouco eficiente, seria: Início do Algoritmo 1. Imprimir o número 5 2. Imprimir o número 5 3. Imprimir o número 5 4. Imprimir o número 5 5. Imprimir o número 5 6. Imprimir o número 5 7. Imprimir o número 5 8. Imprimir o número 5 9. Imprimir o número Imprimir o número 5 Fim do Algoritmo O algoritmo proposto acima está correto e faz o que se pede. Porém, como seria a solução caso se deseje imprimir o número 5 um milhão de vezes? O algoritmo terá um milhão de linhas? A solução ideal é usar a linguagem natural para informar a repetição de algo, como segue: Início do Algoritmo 1. Repetir 10 vezes a. Imprimir o número 5 Fim do Algoritmo Note que um laço Repetir comandos N vezes (comandos pode ser um único comando ou um bloco com vários comandos) pode ser criado assim num Fluxograma: 1. Cria-se uma variável de controle iniciada com Testa-se se a variável de controle é menor ou igual a N. (Pois a repetição será de N vezes). 3. Executa-se o comando ou bloco de comandos. 4. Incrementa-se a variável de controle. 5. Volta-se ao passo 2 (esta volta é que constrói o laço). Vejamos isso no Fluxograma ilustrado na Figura 1.24.

38 38 Programação com Pascal Início Conta é a variável de controle Este teste controla quantas vezes o laço será executado Conta = 1 Conta <= 10 F Fim V 5 Conta = Conta + 1 O incremento em 1 garante que Conta mude de valor Figura Fluxograma: Imprimir o número 5 dez vezes Exemplo 5: Imprimir todos os números naturais entre 1 e N. A solução deste problema necessita de um laço de repetição. Devemos repetir a impressão de um número contido no intervalo [1, N]. Uma solução possível é: Início do Algoritmo a. Ler N b. Faça a variável valor variar entre todos os valores no intervalo [1 e N] i. Imprima valor Fim do Algoritmo Note que necessitaremos novamente de um laço Faça algo N vezes (algo aqui será a impressão de um número natural). O problema é bem parecido com o anterior, pois inicia em 1 e varia até N. Logo, vamos à mesma solução: 1. Cria-se uma variável de controle iniciada com Testa-se se a variável de controle é menor ou igual a N, pois se desejam os números entre 1 e N, inclusive. 3. Imprime-se o valor da variável de controle, pois ela será o próprio número no intervalo. 4. Incrementa-se a variável de controle em 1, pois tem-se uma sequência de números naturais. 5. Volta-se ao passo 2 (esta volta é que constrói o laço). Edeyson Andrade Gomes

39 Introdução à Programação 39 Uma revisão do algoritmo em linguagem natural é a seguinte: 1. Início do Algoritmo a. Leia um valor inteiro para N b. Faça valor igual a 1 c. Enquanto valor <= N Faça: i. Imprima valor ii. valor = valor Fim do Algoritmo Vamos testar o Algoritmo e seus passos: 1. Ler N suponha que N seja 5 2. Faça a variável valor variar entre todos os valores no intervalo [1 e 5] logo, valor assumirá os seguintes valores {1, 2, 3, 4, 5} 3. Serão impressos os valores 1, 2, 3, 4, 5 4. Quando valor for igual a 6 o teste (valor <= N) falha, pois N=5. Vejamos isso no Fluxograma ilustrado na Figura Início n valor = 1 valor <= n N Fim V valor = valor + 1 valor Figura Fluxograma: Números naturais entre 1 e N Notem que neste fluxograma há um Laço de repetição de N vezes. O controle do laço é feito no teste (valor <= n), ou seja, valor inicia com 1 e varia até n. O teste garante que valor não será maior que n. Se valor for menor ou igual a n, imprime-se o valor e soma-se um a ele para que este assuma o próximo número no intervalo [1, N].

40 40 Programação com Pascal Exemplo 6: Determinar todos os divisores naturais de um número natural N. O objetivo do algoritmo proposto é: dado um valor inteiro N qualquer, imprimir todos os seus divisores. Por exemplo, supondo N = 12, como saber seus divisores? Uma solução é testar todos os números entre 1 e 12. O teste é para saber se algum destes números divide 12, ou seja, se o resto da divisão de 12 por cada um deles é zero. Observação: 1. Cabe lembrar que A é divisor de N se o resto da divisão de N por A é zero. 2. Em muitas linguagens de programação este teste é feito pela operação MOD. Se N MOD A = 0, então A divide N. 1. Início do Algoritmo a. Ler N b. Faça a variável Divisor variar entre todos os valores no intervalo [1 e N] c. Para cada valor de Divisor faça: 1. Atribua à variável Resto o resto da divisão de N por Divisor. 2. Se Resto = 0, então imprima o valor de Divisor 2. Fim do Algoritmo Veja que a letra c do algoritmo faz com que todos os números entre 1 e N sejam testados. Outra forma de escrever o algoritmo, mais próximo da programação, é: 1. Início do Algoritmo a. Leia um valor inteiro para N b. Faça Divisor igual a 1 c. Enquanto Divisor <= N Faça i. Resto = N MOD Divisor ii. SE (Resto = 0) ENTÃO 1. Imprima Divisor iii. Divisor = Divisor Fim do Algoritmo Note que o passo b do algoritmo (Faça a variável Divisor variar entre todos os valores no intervalo [1 e N]) é destacado no fluxograma, ilustrado na Figura Edeyson Andrade Gomes

41 Introdução à Programação 41 Início N Divisor = 1 Divisor <= N F Fim V Resto = resto da divisão de N por Divisor Resto = 0 V Divisor F Divisor = Divisor + 1 Figura Fluxograma: Divisores naturais de N

42 42 Programação com Pascal 2 A LINGUAGEM PASCAL A linguagem Pascal foi desenvolvida no início da década de 1970 por Nicklaus Wirth, na Universidade Técnica de Zurique, Suíça. O primeiro compilador para a linguagem foi disponibilizado em O objetivo do Pascal é ser uma linguagem de programação de alto nível voltada ao ensino da programação estruturada. Por ser simples, é ideal para a introdução à programação. 2.1 Estrutura de um Programa Pascal Todo programa em Pascal é dividido em três áreas distintas: cabeçalho, área de declarações e corpo. cabeçalho área de declarações corpo Cabeçalho O cabeçalho é uma área utilizada para que se possa identificar um programa através de um nome (instrução program). {Sintaxe:} program nomedoprograma; Exemplo: program adicionanumeros; Edeyson Andrade Gomes

43 A LINGUAGEM PASCAL 43 área de declarações corpo Observações: 1. O nome de um programa é um identificador e deve ser único neste. O programa da Listagem 1.1, chamado de adicionanumeros, iniciaria assim: 1. program adicionanumeros; 2. {Programa que lê 2 números e imprime sua soma.} Listagem Cabeçalho de programa Pascal. Note que no trecho de programa da Listagem 2.1 anterior, a linha 2 apresenta um comentário, pois o texto está entre { }. A linha 1 usa a instrução program para dar nome ao programa. No caso, adicionanumeros. Observações: 1. Nossos programas sempre aparecerão em caixas como a da Listagem O uso de { } serve para definir comentários: descrições ou informações, em texto livre, que auxiliem no entendimento do código Área de Declarações A Área de Declarações de um programa é utilizada para criar identificadores que não sejam predefinidos. Toda variável (dado de entrada, temporário ou de saída) que quisermos usar num programa precisa ser identificado por um nome único. Um cuidado que se deve ter é que Pascal reserva alguns nomes como integer, real, boolean, etc. Observação: 1. O uso de variáveis e sua nomenclatura serão detalhados durante o texto. A área de declarações pode ser subdividida em sete subáreas: uses, label, const, type, var, procedure e function.

44 44 Programação com Pascal Utilização de Units As units são conjuntos de funções que já estão prontas para serem usadas pelo programador. Por exemplo, se quisermos limpar a tela ou ler o teclado já existem funções prontas para isso nas units, evitando o trabalho de reescrevê-las. São elas: 1. CRT: possui a maior parte das rotinas e variáveis de geração de som, controle de vídeo e teclado; 2. DOS: possui as rotinas que envolvem a utilização do sistema operacional; 3. GRAPH: possui rotinas destinadas a manipulações gráficas; 4. OVERLAY: possibilita gerenciar as atividades de um programa economizando memória; 5. PRINTER: permite declarar um arquivo tipo texto com o nome LST e associálo à impressora; 6. SYSTEM: possui a maior parte das rotinas padrão da linguagem Pascal e é usada de forma automática. Para se fazer uso de units é necessário o uso da instrução uses antes da declaração da instrução var. {Sintaxe:} uses nomedaunidade; Nosso programa continuaria como apresenta a Listagem program adicionanumeros; 2. {Programa que lê 2 números e imprime sua soma.} {Usa a biblioteca CRT onde está a função ReadKey; esta serve para ler uma tecla digitada pelo usuário} 5. uses crt; Listagem 2.2 Utilização de Unit. Note que no programa da Listagem 2.2 as linhas 2 e 4 apresentam comentários, pois estão entre { }. A linha 1 usa a instrução program para dar nome ao programa (adicionanumeros). A linha 5 usa a instrução uses para habilitar as funções da biblioteca CRT. Edeyson Andrade Gomes

45 A LINGUAGEM PASCAL 45 Observações: 1. Na Listagem 1.2, as linhas 2 e 4 apresentam comentários. 2. Comentários são textos livres, escritos dentro do código-fonte para explicar e detalhar algo. Não são compilados e não contam como linha de código LOC (Line of Code). Declaração de Variáveis Nos problemas comuns da matemática e física nos deparamos com variáveis símbolos (comumente letras ou nomes) que representam valores ou expressões. Por exemplo, uma equação do segundo grau 2 possui a forma: ax 2 + bx + c. Logo, são exemplos de equação do segundo grau: x 2 + 2x + 1 e 2x 2 + 3x + 4. Cabe-nos observar que as equações do 2º grau variam, entre si, sempre num aspecto: os valores de a, b e c. Para a matemática, a, b e c são constantes (coeficientes), pois a equação 2x 2 + 3x + 4 já tem tais valores definidos (a = 2, b = 3 e c = 4). Para a programação, se quisermos montar uma equação do segundo grau a partir da fórmula ax 2 + bx + c, precisamos saber a parte que varia entre elas, ou seja, as variáveis para o algoritmo: a, b e c. Pode-se afirmar que a, b e c serão dados de entrada do algoritmo e as raízes (x e x ), os de saída. Da mesma forma, na física temos a equação da velocidade na forma: v = vo + at 2. Para sabermos a velocidade final de um corpo, precisamos conhecer os valores das variáveis: velocidade inicial (vo), aceleração (a) e tempo (t). Sempre que tivermos um problema a resolver num mesmo domínio de aplicação, o que mudar entre um problema e outro similar são variáveis para o algoritmo. Para a programação, variáveis são áreas de memória que possuem nome e podem armazenar valores de tipos predeterminados. Assim, um programador pode criar uma variável média, do tipo real, e ela pode armazenar valores reais durante a execução do programa. Onde a variável média será alocada na memória cabe ao Sistema Operacional saber (e a apenas ele). Observações: 1. É muito mais fácil recordar o nome de uma variável que seu endereço na memória. 2. Por exemplo, se uma máquina tem 4GB de memória, teremos endereços possíveis entre 0 e É mais fácil lembrar-se do nome média que do endereço Toda equação da forma ax² + bx + c = 0, em que a, b e c são números reais com a 0, é chamada de equação do 2 grau. Quando b = 0 ou c = 0 tem-se uma equação do 2º grau incompleta.

46 46 Programação com Pascal Para a solução de problemas como os citados são necessárias variáveis declaradas num programa, o que é feito via a instrução var. Cada variável tem um nome único no programa (identificador) e um tipo (inteiro, real, lógico, etc). {Sintaxe:} var nomedavariável : tipo de dado; nomedeoutravariável : tipo de dado; Observações: 1. Após o nome de cada variável deve ser utilizado o símbolo dois-pontos ( : ) seguido pelo tipo de dado que a variável irá receber, seguido de ponto-e-vírgula. 2. Caso as variáveis sejam de mesmo tipo, estas poderão ser relacionadas separadas por vírgula. Por exemplo: var a, b, c : integer; Isso define as variáveis a, b e c como sendo do tipo integer (inteira). Nosso primeiro programa continuaria como apresenta a Listagem program adicionanumeros; 2 {Programa que lê 2 números e imprime sua soma.} 4 {Usa a biblioteca CRT onde está a função ReadKey} 5 uses crt; 7 {Declara a, b e soma como variáveis inteiras} 8 var 9 a, b : integer; 10 soma : integer; Listagem 2.3 Declaração de Variáveis. Note que na Listagem 1.3 a linha 8 apresenta a instrução var iniciando uma área de declaração de variáveis. A linha 9 define duas variáveis inteiras chamadas a e b e a linha 10 define uma variável do tipo inteira (integer) chamada soma Corpo do Programa Após o Cabeçalho e a Área de Declarações, temos o programa em Pascal escrito numa área denominada Corpo do Programa, que tem início com a instrução begin e é finalizada pela instrução end, seguida do símbolo ponto (. ). O uso destas instruções caracteriza o que é chamado de bloco de comandos, como indicado abaixo: {Sintaxe:} begin bloco de comandos; end. Edeyson Andrade Gomes

47 A LINGUAGEM PASCAL 47 Observações: 1. O corpo do programa pode conter vários blocos de comandos. Nosso programa continuaria como apresenta a Listagem program adicionanumeros; 2 {Programa que lê 2 números e imprime sua soma.} 4 {Usa a biblioteca CRT onde está a função ReadKey} 5 uses crt; 7 {Declara a, b e soma como variáveis inteiras} 8 var 9 a, b : integer; 10 soma : integer; 12 begin 13 {limpa a tela} 14 clrscr; 16 {escreve na tela (prompt de comandos)} 17 writeln('insira o valor de a: '); 19 {espera que o usuário digite algo e atribui o que for digitado à variável a} 20 readln(a); 22 writeln('insira o valor de b: '); 23 readln(b); 25 {soma a com b e atribui o resultado a soma} 26 soma := a + b; 27 writeln('a soma de ', a, ' com ', b, ' eh ', soma); 29 {para o programa até que alguma tecla seja pressionada} 30 readkey; 31 end. Listagem 2.4 Programa que lê 2 números e calcula a soma. Descrição do primeiro programa exemplo O objetivo do programa da Listagem 2.4 é efetuar a leitura de dois valores numéricos (variáveis a e b), fazer a operação de adição entre elas, atribuir o resultado à variável soma e apresentar o resultado obtido. Destaca-se o seguinte: 1. O corpo do programa está delimitado pelas linhas 12 (begin) e 31 (end.). 2. A linha 14 apresenta uma instrução (clrscr) usada para limpar a tela. 3. As linhas 17, 22 e 27 usam uma instrução (writeln) para imprimir na tela. 4. As linhas 20 e 23 usam uma instrução (readln) para ler um valor do teclado e associar a uma variável. 5. A instrução da linha 30 (readkey) para o programa até que algo seja teclado.

48 48 Programação com Pascal Outra forma de representar o algoritmo adicionanumeros é usando a Linguagem Natural, como segue: 1. Início do Algoritmo adicionanumeros a. Declarar as variáveis a, b e soma; b. Solicitar ao usuário para inserir o valor de a; c. Ler um valor para a variável a; d. Solicitar ao usuário para inserir o valor de b; e. Ler um valor para a variável b; f. Efetuar a soma das variáveis a e b, colocando o resultado na variável soma; g. Apresentar o valor resultante da variável soma; h. Aguardar até que algo seja pressionado. 2. Fim do Algoritmo adicionanumeros. O fluxograma que representa o algoritmo adicionanumeros está representado na Figura 2.1. Início Insira o valor de a: a Insira o valor de b: b soma = a + b Fim 'A soma de ', a, ' com ', b, ' eh ', soma Figura Fluxograma: Soma de a e b. Observações: 1. Os comandos read e readln são responsáveis por entrada de dados, como leitura pelo teclado. a. ReadLn(var) lê um valor do teclado e atribui à variável var. b. O programa fica parado até que a tecla ENTER seja pressionada. Tudo o que for digitado antes de ENTER será colocado na variável (var). 2. Os comandos write e writeln são responsáveis por saída de dados, como impressão na tela. a. WriteLn(var) imprime o valor da variável (var) na tela. 3. O uso de LN (acrônimo para New Line Nova Linha) indica que uma nova linha deve ser usada após o comando. Edeyson Andrade Gomes

49 A LINGUAGEM PASCAL 49 Vamos a outro exemplo comentado que serve para calcular a média aritmética de 3 valores. Ele deve ler três variáveis numéricas (a, b e c) e calcular a média aritmética destas, apresentando o resultado obtido. Algoritmo usado em Linguagem Natural: 1. Início do Algoritmo Média de 3 Números a. Solicitar ao usuário para digitar o valor da variável a; b. Ler um valor para a variável a; c. Solicitar ao usuário para digitar o valor da variável b; d. Ler um valor para a variável b; e. Solicitar ao usuário para digitar o valor da variável c; f. Ler um valor para a variável c; g. Calcular a média como a soma de a, b e c dividida por 3. h. Imprimir os três valores lidos e a média. 2. Terminar o Algoritmo Média de 3 Números. O fluxograma que ilustra o Algoritmo Média de 3 Números está ilustrado na Figura 2.2 a seguir: Início Digite o valor de a: a Digite o valor de b: b Digite o valor de c: Fim 'A media entre ', a, ', ', b, ' e ', c, ' eh: ' média = (a + b + c) / 3 c Figura Fluxograma: Média de 3 números. A implementação do Algoritmo Média de 3 Números é apresentada na Listagem 2.5.

50 50 Programação com Pascal 1 {O programa deve ler 3 variáveis inteiras, calcular a media aritmética e atribuir a uma variável media. 2 Qual deve ser o tipo da variável media? Por quê? 3 } 4 program media3n; 6 uses crt; 8 var 9 a, b, c : integer; 10 media : real; 12 begin 13 writeln('digite o valor de a: '); 14 readln(a); 16 writeln('digite o valor de b: '); 17 readln(b); 19 writeln('digite o valor de c: '); 20 readln(c); 22 media := (a + b + c) / 3; 23 write('a media entre ', a, ', ', b, ' e ', c, ' eh: '); 24 writeln(media:3:2); 26 readkey; 27 end. Listagem Programa que lê 3 variáveis e calcula a média. No programa da Listagem 2.5 destaca-se o seguinte: 1. O cabeçalho do programa está entre as linhas 1 e As declarações do programa estão entre as linhas 8 e O corpo do programa está delimitado pelas linhas 12 e As linhas 13, 16, 19, 23 e 24 usam instruções writeln e write para imprimir na tela. 5. As linhas 14, 17 e 20 usam uma instrução para ler os valores de a, b e c, respectivamente. 6. Na linha 22 calcula-se a média aritmética de a, b e c, atribuindo-a à variável media. 7. A linha 24 imprime a média formatada com 3 dígitos decimais e 2 decimais. Por isso a variável media é seguida por :3:2, respectivamente. Observações: 1. A variável media precisa ser real, pois a divisão de inteiros nem sempre é um inteiro. Por exemplo, 7/3. 2. O uso de media:3:2 na impressão significa que o resultado será formatado com 3 dígitos antes da vírgula e 2 dígitos depois. Edeyson Andrade Gomes

51 A LINGUAGEM PASCAL 51 Identificadores A memória do computador pode ser abstraída como um enorme armário de gavetas, onde cada gaveta possui uma identificação numérica única, sequencial, e só pode armazenar um caractere (alfanumérico) ou um número entre 0 e 255, como ilustra a Figura 2.3, que representa uma memória com 1024 posições (bytes). Figura 2.3 Abstração de memória. As máquinas modernas trabalham com bilhões de bytes de armazenamento, o que torna difícil memorizar o endereço de cada elemento armazenado. Para facilitar o trabalho do programador, cada região de memória que armazene algo pode receber um nome - identificador. Os identificadores servem para definir variáveis, constantes, tipos de dados, procedimentos e funções e estes precisam de um nome que forneça uma identificação única. Nomes (identificadores) em Pascal devem seguir as seguintes regras de construção: 1. Iniciar sempre por uma letra (a - z, A - Z) ou um sublinhado (_); 2. O restante do identificador deve conter apenas letras, sublinhado ou dígitos (0-9). Não pode conter outros caracteres; e 3. Pode ter qualquer tamanho, desde que os primeiros 63 caracteres sejam significativos. Não existe distinção entre letras maiúsculas e minúsculas no nome de um identificador. Por exemplo, os nomes ALPHA, alpha e Alpha são equivalentes para o Pascal. Observações: 1. CamelCase é a denominação em inglês para a prática de escrever palavras compostas, ou frases, onde cada palavra é iniciada com Maiúsculas e unidas sem espaços. a. É um padrão largamente utilizado em diversas linguagens de programação, como Java, Ruby e Python. b. Exemplos: NomeDoCliente, TipoDePeça, MediaPonderada, MediaDe3Numeros.

52 52 Programação com Pascal Palavras Reservadas Pascal reconhece certo grupo de palavras como sendo reservadas. Elas têm significado especial e não podem ser usadas como identificadores em um programa para objetos criados pelo programador. São elas: absolute, and, array, asm, begin, case, const, constructor, destructor, div, do, downto, else, end, file, for, function, goto, if, implementation, in, inherited, inline, interface, label, mod, nil, not, object, of, on, operator, or, packed, procedure, program, record, reintroduce, repeat, self, set, shl, shr, string, then, to, type, unit, until, uses, var, while, with, xor. Comentários Comentários são textos escritos dentro do código-fonte para explicar ou descrever alguns aspectos relativos ao mesmo ou para esclarecer detalhes de programação que podem não ficar claros. Seu principal objetivo é adicionar informação textual ao código, facilitando seu entendimento por leitores. A sintaxe requerida aos comentários permite o uso de chaves como em: { comentário } ou de parêntesis e asteriscos, como em: (* comentário *). 2.1 Variáveis Uma variável é uma região da memória, identificada através de um nome, cujo valor pode mudar durante a execução do programa. Como Pascal é uma linguagem fortemente tipada, cada variável precisa obrigatoriamente de um tipo de dados predeterminado (informando se é inteiro, real, caractere, texto, etc.). {Sintaxe:} var variável : tipo de dado; variável1, variável2 : tipo de dado2; Nesta especificação de sintaxe, variável tem seu tipo definido por tipo de dado. Note que variável1 e variável2 são definidas juntas, separadas por vírgulas e atribuindo-lhes um único tipo de dados. Isso pode ser feito para qualquer número de variáveis que compartilhem um mesmo tipo de dados. Edeyson Andrade Gomes

53 A LINGUAGEM PASCAL Constantes Uma constante é uma região rotulada da memória através de um nome cujo valor não pode mudar durante a execução do programa. Um exemplo de uso de constantes em programas é o uso de π (3, ) para aplicações da matemática. {Sintaxe:} const nomedaconstante = expressão; 2.3 Tipos de Dados Um tipo de dado especifica as características, ou seja, quais os possíveis valores e operações que um dado possui. Por exemplo, um valor inteiro pode ser somado a outro, subtraído, multiplicado, etc. Variáveis, como apresentado em sua sintaxe, requerem um tipo de dado em sua definição. A linguagem Pascal fornece ao programador um conjunto de tipos de dados predefinidos e que serão descritos a seguir. Inteiros Inteiros são valores numéricos positivos ou negativos, excluindo-se qualquer número fracionário. Em Pascal, este tipo de dado pode ser referenciado por um dos seguintes identificadores: Byte, Shortint, Smallint, Word, Integer, Cardinal, Longint, Longword, Int64 e QWord. Tabela 2.1 Tipos Inteiros Tipo Valores Tamanho em Bytes Byte Shortint Smallint Word Integer Smallint ou Longint 2 ou 4 Cardinal Longword 4 Longint Longword Int QWord A Tabela 2.1 apresenta o nome de cada tipo, quantos bytes necessitam para ser armazenados e seus limites de valores.

54 54 Programação com Pascal Retornando à memória do computador, seus endereços são sequenciais e contíguos. Assim, a declaração da variável alfa do tipo Longint vai reservar 4 bytes na memória e associar ao nome alfa apenas o primeiro deles. Figura 2.4 Alocação de variáveis. Desta forma, se a variável alfa for alocada no endereço n+2, ele e os 3 próximos (4 bytes contíguos) ficam reservados para armazenar seu valor, mas alfa fica associada apenas ao primeiro endereço (n+2). A definição de variáveis inteiras é feita com a seguinte sintaxe: {Sintaxe:} variável : integer; O Fluxograma da Figura 2.5 apresenta um exemplo de uso de Inteiros baseado na segunda lei de Newton, que determina a relação entre força, massa e aceleração: Força = massa * aceleração. Conhecidas a massa e a aceleração, qual a força, em newtons? Início massa = 100 aceleracao = 2 forca = massa * aceleracao 'A forca eh: ', forca Fim Figura 2.5 Fluxograma do programa InteirosEmPascal. A implementação do algoritmo do fluxograma da Figura 2.5 está na Listagem 2.6, descrito a seguir. Edeyson Andrade Gomes

55 A LINGUAGEM PASCAL 55 1 program InteirosEmPascal; 2 {Este programa vai demonstrar o uso de Inteiros em Pascal.} 4 uses crt; 6 var 7 forca : integer; 8 massa, aceleracao : integer; 9 begin 10 massa := 100; 11 aceleracao := 2; 12 forca := massa * aceleracao; 13 writeln ('A forca eh: ', forca); 14 readkey; 15 end. Listagem 2.6 Exemplo de uso de Inteiros No programa da Listagem 2.6 destaca-se o seguinte: 1. Na linha 7 declara-se a variável forca do tipo integer. 2. A linha 8 apresenta a declaração de duas variáveis inteiras: massa e aceleração. Embora as três variáveis pudessem ter sido declaradas numa única linha, optou-se por duas declarações separadas para exemplificação. 3. Na linha 10 atribui-se o valor 100 à variável massa, enquanto na linha 11 atribui-se 2 à variável aceleração. 4. Na linha 12 atribui-se à variável forca o produto entre massa e aceleração. 5. A linha 13 imprime o valor resultante da forca. A execução do programa imprimirá: A forca eh: 200 Reais O tipo de dado real permite trabalhar com números fracionários, tanto positivos como negativos, sendo sua capacidade de armazenamento maior que dos números inteiros. Vejamos os tipos: Real, Single, Double, Extend, Comp e Currency. Tabela Tipos Reais Tipo Valores Dígitos Tamanho Signific. em Bytes Real Depende da Plataforma 4 ou 8 Single 1.5E E Double 5.0E E Extended 1.9E E Comp -2E E Currency A definição de variáveis reais é feita com a seguinte sintaxe:

56 56 Programação com Pascal {Sintaxe:} variável : real; O Fluxograma da Figura 2.7 representa o algoritmo que calcula a massa de um corpo sabendo-se a força aplicada ao mesmo e sua aceleração. Como a massa é calculada pela razão entre força e aceleração (massa = força / aceleração), seu resultado pode resultar num número não inteiro. Assim, um tipo real é requerido. Início forca = 235 aceleracao = 2 massa = forca / aceleracao A massa eh: ', massa:3:2 Fim Figura 2.6 Fluxograma do programa ReaisEmPascal. A implementação do algoritmo do fluxograma da Figura 2.6 está na Listagem 2.7, descrito a seguir. 1 program ReaisEmPascal; 2 {Este programa vai demonstrar o uso do tipo Real em Pascal.} 4 uses crt; 6 var 7 forca : real; 8 massa, aceleracao : real; 9 begin 10 forca := 235; 11 aceleracao := 2; 12 massa := forca / aceleracao; 13 writeln ('A massa eh: ', massa:3:2); 14 readkey; 15 end. Listagem 2.7 Uso de Reais em Pascal No programa da Listagem 2.7 destaca-se o seguinte: 1. Na linha 7 declara-se a variável forca do tipo real. Edeyson Andrade Gomes

57 A LINGUAGEM PASCAL A linha 8 apresenta a declaração de duas variáveis reais: massa e aceleração. Embora as três variáveis pudessem ter sido declaradas numa única linha, optou-se por duas declarações separadas para exemplificação. 3. Na linha 10 atribui-se o valor 235 à variável forca, enquanto na linha 11 atribui-se 2 à variável aceleração. 4. Na linha 12 atribui-se à variável massa a razão entre forca e aceleração. 5. A linha 13 imprime o valor resultante da massa. A execução do programa imprimirá: A massa eh: Observações: 1. Write e WriteLn permitem que sejam definidos formatos aos números. a. Estes formatos são úteis na impressão de números reais para evitar a forma com exponenciação. b. O formato é: numero:tamanho:precisão i. numero é o número que se quer imprimir. ii. tamanho informa a largura da saída. iii. precisão informa com quantos dígitos o numero será impresso. Caracteres String Strings são sequências contendo letras, números e símbolos especiais e devem ser representadas entre delimitadores (apóstrofos, em Pascal). Este tipo de dado é referenciado pelo identificador string, podendo armazenar de 1 até 255 caracteres. Retornando à memória do computador, uma string, assim como os demais tipos primitivos, ocupa endereços contíguos na memória. Logo, a declaração da variável nome do tipo String precisa reservar tantos bytes quanto for o seu tamanho. Por exemplo: suponha a variável nome do tipo string e que seu valor seja Edeyson. Necessitam-se de 7 bytes contíguos de memória para armazenar a variável nome. Figura 2.7 Alocação de Strings.

58 58 Programação com Pascal Supondo que na memória representada na Figura 2.7 a variável nome esteja no endereço n+2 (note que há 7 bytes contíguos reservados para isso) de memória e a variável alfa, do tipo Longint, esteja no endereço n+9, o que acontecerá se mudarmos o valor de nome para Edeyson Gomes? O novo valor de nome necessita de mais 6 bytes contíguos. Ressalta-se que os 4 bytes iniciados em n+9 já estão reservados. A solução usada pelo gerenciamento de memória é mudar nome de lugar, encontrando um espaço contíguo livre que o caiba, alterando seu endereço. Logo, alterar o conteúdo de uma String, aumentando sua quantidade de caracteres, leva a uma movimentação daquela na memória, mudando o endereço da variável. O ponto positivo disso é que é totalmente transparente ao programador. Para definir uma variável do tipo string, cujo conteúdo pode ter até 255 caracteres, usase a seguinte sintaxe: {Sintaxe:} variável : string; Como a sintaxe anterior não especifica um tamanho, a variável definida sempre ocupará 255 bytes na memória, pois o Pascal na tem como saber quantos bytes realmente serão necessários. Para o caso de variáveis string que o programador conheça o tamanho máximo, pode-se usar a seguinte sintaxe para determiná-lo: {Sintaxe:} variável : string[tamanho]; O uso de colchetes determina que a variável tenha um conteúdo de até tamanho caracteres. A Listagem 2.3 apresenta um exemplo de uso de Strings. 1 program StringsEmPascal; 2 {Este programa vai demonstrar o uso de String em Pascal.} 4 uses crt; 6 var 7 endereco : string; {endereço é uma cadeia com 0 a 255 caracteres.} 8 nome : string[30]; 9 CPF : string[11]; {O uso de [] delimita o número de caracteres. Neste caso CPF tem 11 caracteres.} 11 begin 12 endereco := 'Rua dos Alferes, 1234, Ap. 1001, Barra, Salvador, Bahia - CEP: '; 13 nome:= 'Jose da Silva Santos'; 14 CPF := ' '; 15 writeln('endereco: ', endereco, ' Cliente: ', nome, ' CPF: ', cpf); 16 readkey; 17 end. Edeyson Andrade Gomes

59 A LINGUAGEM PASCAL 59 Listagem 2.3 Exemplo com Strings No programa da Listagem 8 destaca-se o seguinte: 1. Na linha 7 declara-se a variável endereco que terá até 255 caracteres (é o limite máximo de uma string), 2. A linha 8 apresenta a declaração da variável nome que terá, no máximo, 30 caracteres. 3. A linha 8 apresenta a declaração da variável CPF que terá, no máximo, 11 caracteres. 4. Na linha 12 atribui-se um valor à variável endereço. Note que atribuição de string requer o uso de apóstrofos. 5. A linha 15 faz-se a impressão das três variáveis e seus valores. A execução do programa imprimirá: Endereco: Rua dos Alferes, 1234, Ap. 1001, Barra, Salvador, Bahia - CEP: Cliente: Jose da Silva Santos CPF: Observações: 1. Write e WriteLn permitem imprimir múltiplos valores separando-os por vírgulas. a. A impressão de constantes string é feita colocando-as entre apóstrofos. b. O comando writeln('endereco: ', endereco); imprimirá Endereco: seguido pelo valor da variável endereco.

60 60 Programação com Pascal Char Pascal suporta o tipo Char, que ocupa exatamente 1 byte e contém um caractere ASCII (American Standard Code for Information Interchange). Para definir uma variável do tipo char usa-se a seguinte sintaxe: {Sintaxe:} variável : char; A Listagem 2.4 apresenta um exemplo de uso de char. 1 program CharEmPascal; 2 {Este programa vai demonstrar o tipo Char do Pascal} 3 4 uses crt; 5 6 var 7 letraaminuscula, letraamaiuscula : char; 8 letrabminuscula, letrabmaiuscula : char; 9 sexo : char; {char representa um único caracter. Neste caso sexo pode ser 'M' ou 'F'} begin 12 {Atribuições de valores às variáves} 13 sexo := 'M'; 14 letraaminuscula := 'a'; 15 letraamaiuscula := #65; letrabminuscula := #98; 18 letrabmaiuscula := 'B'; writeln('sexo: ', sexo); 21 writeln('letras Maiusculas: ', letraamaiuscula, letrabmaiuscula); 22 writeln('letras Minusculas: ', letraaminuscula, letrabminuscula); 23 readkey; 24 end. Listagem 2.4 Exemplo com Char Nas linhas 7, 8 e 9 definem-se variáveis do tipo char. Um caractere pode ser especificado colocando-o entre delimitadores (apóstrfos), como 'a' ou 'B', por exemplo, nas linhas 14 e 18. Também pode ser especificado pelo seu valor de caracteres (normalmente um código ASCII), precedendo o valor ordinal com o símbolo (#). Por exemplo, na linha 15, especificando #65 é o mesmo que 'A'. O resultado da execução do programa é: Sexo: M Letras Maiusculas: AB Letras Minusculas: ab Edeyson Andrade Gomes

61 A LINGUAGEM PASCAL 61 Tipos Lógicos No Capítulo 1 apresentamos o símbolo de fluxograma para decisão usado sempre que é necessária a avaliação de uma condição (que pode ser Verdadeira ou Falsa) para uma tomada de decisão: a escolha de um dos caminhos possíveis à sequência de ações. Comumente, as linguagens de programação apresentam o tipo Boolean, com dois possíveis valores predefinidos: true e false. Qualquer expressão que resulte em um valor booleano (verdadeiro ou falso) também pode ser atribuída a um tipo booleano. Para definir uma variável do tipo boolean usa-se a seguinte sintaxe: {Sintaxe:} variável : char; A Listagem 2.5 apresenta exemplos de uso do tipo boolean. 1 program BooleanEmPascal; 2 {Este programa vai demonstrar o tipo boolean do Pascal} 3 4 uses crt; 5 var 6 aprovado : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 7 maior, menor, igual : boolean; 8 9 begin 10 {Atribuições de valores às variáves} 11 aprovado := true; {Atribui TRUE a aprovado} 12 maior := 2 > 1; {Atribui o resultado do teste: 2 > 1? a maior} 13 igual := 2 = 1; {Atribui o resultado do teste: 2 > 1? a igual} 14 menor := 2 < 1; {Atribui o resultado do teste: 2 > 1? a menor} writeln('aprovado: ', aprovado); 17 writeln('2 > 1? eh: ', maior); 18 writeln('2 = 1 eh: ', menor); 19 writeln('2 = 1 eh: ', igual); 20 readkey; 21 end. O resultado da execução do programa é: Listagem 2.5 Exemplo com Boolean Aprovado: TRUE 2 > 1? eh: TRUE 2 = 1 eh: FALSE 2 < 1 eh: FALSE

62 62 Programação com Pascal A linha 11 atribui diretamente o valor TRUE à variável aprovado. As linhas 12 a 14 atribuem o valor lógico do teste às variáveis maior, igual e menor. Note que uma atribuição tem duas partes: uma antes do := e outra depois. No caso da linha 12 estamos atribuindo à variável maior o resultado da expressão que avalia se 2 é maior que 1, o que é verdade (TRUE). As linhas 13 e 14 seguem o mesmo princípio, atribuindo a igual e a menor o resultado dos respectivos testes lógicos. A Listagem 2.6 a seguir apresenta um exemplo com variáveis e constantes que serve para calcular a área de um círculo com a fórmula πr 2, onde R representa o raio. 1 program VariaveisEConstantes; 2 {Este programa vai demonstrar variáveis e constantes no Pascal} 3 4 uses crt; 5 6 var 7 area, raio : real; {Declara area e raio como variáveis REAIS} 8 9 const 10 pi = ; {Declara pi como uma constante} begin 13 {Atribuições de valores às variáves} 14 raio := 10; 15 area := pi * raio * raio; 16 writeln('a area do circulo de raio 10 eh: ', area:3:4); raio := 15; 19 area := pi * raio * raio; 20 writeln('a area do circulo de raio 15 eh: ', area:3:4); {pi := 10;} 23 readkey; 24 end. Listagem 2.6 Exemplo com Variáveis e Constantes O programa VariaveisEConstantes declara na linha 7 as variáveis área e raio do tipo REAL. Como o nome já informa, as variáveis podem mudar de valor durante a execução do programa, mas as constantes, como pi, não. As linhas 14, 15, 18 e 19 exemplificam isso, mudando os valores de raio e área. Para um novo valor do raio é calculada a área de um círculo usando-se a fórmula: area = π * raio 2 (calculado como raio * raio). A constante matemática π é representada no programa pela constante pi, cujo valor é atribuído na própria declaração, como é visto na linha 10. O resultado da execução do programa da Listagem 2.6 é: Edeyson Andrade Gomes

63 A LINGUAGEM PASCAL 63 A area do circulo de raio 10 eh: A area do circulo de raio 15 eh:

64 64 Programação com Pascal 3 EXPRESSÕES Expressões são arranjos de operandos (variáveis, constantes ou valores gerados por funções) e operadores (operações a serem efetuadas sobre os operandos) que ocorrem nas atribuições ou em testes e produzem um valor de um determinado tipo. Um exemplo de expressão é: ax 2 + bx + c, que em linguagem de programação é representada comumente como: a*x*x + b*x + c. Um operador pode ser binário, ou seja, requer 2 operandos (como em X / Y e em A * B) ou unário, isto é, exige apenas um argumento (como em -X). Cada tipo de dados possui um conjunto de operadores relacionados. Cada linguagem traz símbolos para operadores como adição, a subtração, a multiplicação, a divisão, a potenciação, etc. 3.1 Prioridades das Operações Se vários operadores aparecerem em uma mesma expressão, sua ordem de execução (precedência) será dada segundo os seguintes critérios: 1. Pelo emprego explícito de parênteses; 2. Pela ordem de precedência existente entre os operadores; e 3. Se existirem operadores de mesma ordem de precedência, a avaliação será feita da esquerda para a direita. Como exemplo do uso de precedência, qual o resultado da expressão: * 5? A resposta será 25 ou 13? Na matemática, a multiplicação precede a soma. Logo, a expressão pode ser lida assim: 3 + (2 * 5), o que resulta em 13. O uso de parêntesis facilita a leitura de expressões com múltiplos operadores, explicitando sua precedência. A Tabela 3.1 apresenta a ordem de precedência dos operadores (da maior para a menor): Tabela 3.1 Precedência de Operadores OPERADOR ORDEM DE PRECEDÊNCIA 1 *, /, div, mod, and, shl, shr, 2 as +, -, or, xor 3 <, <>, >, <=, >=, in, is 4 Edeyson Andrade Gomes

65 EXPRESSÕES Tipos de Expressões As expressões podem ser divididas em três grupos: Numérica - quando os operandos e o resultado são numéricos (inteiros ou reais). Literal - quando os operandos e o resultado são literais do tipo string (não pode ser char). Só existe um operador para expressões literais: Concatenação ( + ). Lógica - quando seu resultado é do tipo boolean (TRUE ou FALSE). 3.3 Tipos de Operadores Existem vários operadores para a realização de expressões em Pascal, como detalhado a seguir. Operador de Atribuição O operador de atribuição é utilizado para atribuir o valor de uma expressão a uma variável. {Sintaxe:} nomedavariável := expressão; A Listagem 3.1 apresenta exemplos de atribuições documentados no código via comentários. 1 program VariaveisPascal; 2 3 var 4 a, b, c : integer; {Declara a, b e c como variáveis inteiras} 5 media : real; {Declara media do tipo real} 6 aprovado : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 7 endereco : string; {endereço é uma cadeia com 0 a 255 caracteres.} 8 CPF : string[11]; {O uso de [] delimita o número de caracteres.} 9 sexo : char; {char representa um único caracter.} begin 12 {Atribuições de valores às variáves} 13 endereco := 'Rua dos Alferes, 1234, Ap. 1001, Barra, Salvador, Bahia - CEP: '; 14 nome:= 'Jose da Silva Santos'; 15 CPF := ' '; 16 writeln('endereco: ', endereco, ' Cliente: ', nome, ' CPF: ', cpf); 17 sexo := 'M'; 18 a := 7; 19 b := a + 2; 20 c := 8; 21 media := (a + b + c) / 3; 22 readkey; 23 end. Listagem 3.1 Operador de Atribuição

66 66 Programação com Pascal Das linhas 13 a 21, exceto a linha 16, temos atribuições de valores às variáveis de diversos tipos. Note que o que está após o := é uma expressão. Operadores Aritméticos Os operadores aritméticos são utilizados para efetuar operações aritméticas com números inteiros e reais (e seus subtipos). São eles: Subtração (-), Adição (+) e Multiplicação (*). São exemplos de expressões onde a, b e c podem ser inteiros ou reais: 1. a := a * 3; 2. b := ; 3. c := 10 1; A (/) é chamada de Divisão Real, pois sempre resultará num número real. Não se pode garantir que a divisão de dois inteiros resultará num número inteiro, como é o caso da divisão de 10 por 3. Por exemplo, suponha uma variável com nome total do tipo real. A expressão total := 16 / 3 atribuirá como resultado a total o valor 5,3333. Observações: 1. Suponha que se deseja saber se um número inteiro a é múltiplo de 2. Para isto, necessitase saber o resto da divisão de a por 2. Apenas se o resto for 0, a é múltiplo de Para resolver tal problema, o operador MOD fornece o resto inteiro da divisão. 3. Ainda há o operador DIV para obter a parte inteira da divisão entre inteiros. Figura 3.1 Divisão de Inteiro. A Figura 3.1 ilustra a divisão de um número inteiro a por 2. Assim, as seguintes expressões retornam o quociente e o resto inteiros da divisão. 1. resto := a MOD 2; 2. quociente := a DIV 2; A listagem 3.2 apresenta um código que ilustra o uso de DIV e MOD apresentando o dividendo, divisor, quociente e resto numa divisão inteira e a Listagem 3.3 demonstra como extrair todos os dígitos de um número com 3 dígitos. Edeyson Andrade Gomes

67 EXPRESSÕES 67 1 program UsoDivMod; 2 {Este programa demonstra o uso de DIV e MOD como operadores de inteiros.} 3 4 uses crt; 5 6 var 7 dividendo, divisor, quociente, resto : integer; 8 quocientereal : real; 9 10 begin 11 dividendo := 10; 12 divisor := 3; 13 quociente := dividendo div divisor; 14 quocientereal := dividendo / divisor; resto := dividendo mod divisor; writeln('dividendo: ', dividendo:3, ' Divisor: ', divisor:3); 19 writeln('quociente: ', quociente:3, ' Resto : ', resto:3); 20 writeln('quociente Real: ', quocientereal:3:4); readkey; {Para o programa até que algo seja teclado} 23 end. Listagem 3.2 Uso de DIV e MOD Na Listagem 3.2, as linhas 7 e 8 definem as variáveis dividendo, divisor, quociente e resto como inteiros e quocientereal como real. Tais variáveis representarão os elementos numa divisão. As linhas 11 e 12 iniciam o dividendo com 10 e o divisor com 3. A divisão entre 10 e 3 é uma dízima periódica 3.333, que será o valor de quocientereal calculado na linha 14. Pensando-se numa divisão com todos os fatores inteiros, quociente (linha 13) assumirá o valor 3 e resto (linha 16) assumirá o valor 1. Vale lembrar que 10 dividido por 3 é igual a 3 com resto 1 (10 = 3 * 3 + 1). O resultado da execução do programa da Listagem 3.2 é: Dividendo: 10 Divisor: 3 Quociente: 3 Resto : 1 Quociente Real:

68 68 Programação com Pascal 1 program UsoDivMod2; 2 {Este programa vai demonstrar o uso de DIV e MOD.} 3 4 uses crt; {Usa a biblioteca CRT onde está readkey} 5 6 var 7 numero, centena, dezena, unidade, resto : integer; 8 {Operações sobre Inteiros: +, -, *, DIV e MOD} 9 10 begin {inicia o programa} 11 {Atribuições de valores às variáves} 12 numero := 367; {XYZ = X * YZ} 13 centena := numero div 100; {centena = X} 14 resto := numero mod 100; {resto = YZ} {YZ = Y * 10 + Z} 15 dezena := resto div 10; {dezena = Y} 16 unidade := resto mod 10; {unidade = Z} writeln('centena: ', centena); 19 writeln('dezena: ', dezena); 20 writeln('unidade: ', unidade); readkey; {Para o programa até que algo seja teclado} end. {termina o programa} Listagem 3.3 Uso de DIV e MOD com Unidade, Dezena e Centena O objetivo do programa da Listagem 3.3 é apresentar os valores de unidade, dezena e centena de um número. Na linha 12 atribui-se o valor 367 à variável numero. Note que 367 = 3 * = (3 * 100) + (6 * 10) + 7. A linha 13 atribui à variável centena o valor de numero div 100, ou seja, o quociente inteiro da divisão entre 367 e 100, que resulta em 3. A linha 14 atribui à variável resto o valor de numero mod 100, o que representa o resto inteiro da divisão. Como número é igual a 367, resto será 67. Seguindo o raciocínio do uso de DIV e MOD, a linha 15 atribui 6 a dezena e a linha 16 atribui 7 a unidade. O resultado da execução do programa da Listagem 3.3 é: Centena: 3 Dezena : 6 Unidade: 7 Edeyson Andrade Gomes

69 EXPRESSÕES 69 Operador de Concatenação O operador de concatenação efetua a junção de duas variáveis ou constantes do tipo string. Por exemplo, suponha as strings nome e sobrenome. Nome armazena Edeyson e sobrenome, Gomes. Como obter uma string com o nome completo? Variáveis e constantes do tipo string suportam a operação de soma (+) que funciona com a concatenação (junção). A Listagem 3.4 exibe um exemplo de concatenação de strings. 1 program ConcatenacaoDeStrings; 2 {Este programa vai demonstrar a Concatenação de Strings em Pascal.} 3 4 uses crt; 5 6 var 7 nome : string[20]; {Definição de variáveis} 8 sobrenome : string[20]; 9 nomecompleto : string[40]; begin 12 nome := 'Edeyson'; {Atribui Edeyson para a var. nome} 13 sobrenome:= 'Gomes'; {Atribui Gomes para a var. sobrenome} 14 nomecompleto := nome + ' ' + sobrenome; {Concatena nome, espaço em branco e sobrenome} 15 writeln('nome Completo: ', nomecompleto); {Exibe o nome completo} readkey; 18 end. Listagem Concatenação de Strings Na Listagem 3.4, as linhas 7, 8 e 9 declaram strings com tamanho fixo. As variáveis nome e sobrenome só podem armazenar cadeias de caracteres com, no máximo, 20 caracteres. Já a variável nomecompleto pode armazenar cadeias de até 40 caracteres. Na linha 12 atribui-se a string Edeyson à variável nome. Na linha 13 atribui-se Gomes para sobrenome. Note que na linha 14 faz-se uma operação de concatenação entre strings. Isso significa que as strings Edeyson, espaço em branco e Gomes serão concatenadas e o resultado será atribuído à variável nomecompleto. O resultado da linha 15 será: Nome Completo: Edeyson Gomes

70 70 Programação com Pascal Operadores Relacionais Os operadores relacionais, apresentados na Tabela 3.2, são utilizados para efetuar a comparação entre dados de mesmo tipo, por exemplo, se um número inteiro é maior que outro, se um número real é menor ou igual a outro, se duas strings são iguais, etc. Exemplo de operadores relacionais: Tabela 3.2 Operadores Relacionais OPERADOR SÍMBOLO Maior que > Menor que < Igual = Maior Igual >= Menor Igual <= Diferente <> 1 program OperadoresRelacionaisComInteger; 2 {Este programa vai demonstrar Operadores Relacionais do Pascal} 3 uses crt; 4 var 5 valorlogico : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 6 inteiro1, inteiro2 : integer; 7 8 begin 9 {Atribuições de valores às variáves} 10 inteiro1 := 10; 11 inteiro2 := 20; valorlogico := inteiro1 = inteiro2; 14 writeln('teste se ', inteiro1, ' = ', inteiro2, ' : ', valorlogico); valorlogico := inteiro1 < inteiro2; 17 writeln('teste se ', inteiro1, ' < ', inteiro2, ' : ', valorlogico); valorlogico := inteiro1 > inteiro2; 20 writeln('teste se ', inteiro1, ' > ', inteiro2, ' : ', valorlogico); readkey; 23 end. Listagem 3.5 Operadores Relacionais com Integer Na Listagem 3.5 a linha 5 define uma variável valorlogico do tipo boolean, ou seja, ela só armazena Verdade (TRUE) ou Falso (FALSE). A linha 6 define duas variáveis inteiras que são inicializadas nas linhas 10 e 11, respectivamente. A linha 13, valorlogico := inteiro1 = inteiro2, precisa de destaque aos :=, que é o símbolo de atribuição do Pascal. Este atribui ao símbolo da esquerda do :=, no caso valorlogico, o valor lógico ou absoluto do que está à direita do símbolo. A linha 13 é lida assim: o valor do inteiro1 é igual ao valor do inteiro2? Se sim, atribua TRUE para valorlogico; se não, atribua FALSE. Edeyson Andrade Gomes

71 EXPRESSÕES 71 A linha 14 imprime o resultado do teste lógico. Note que as linhas 16/17 e 19/20 fazem algo similar às linhas 13/14, apenas mudando o operador relacional. O resultado da execução do programa da Listagem 3.5 é: Teste se 10 = 20 : FALSE Teste se 10 < 20 : TRUE Teste se 10 > 20 : FALSE 1 program OperadoresRelacionaisComString; 2 {Este programa vai demonstrar Operadores Relacionais do Pascal} 3 uses crt; 4 var 5 valorlogico : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 6 string1, string2 : string; 7 8 begin 9 {Atribuições de valores às variáves} 10 string1 := 'abc'; 11 string2 := 'def'; valorlogico := string1 = string2; 14 writeln('teste se ', string1, ' eh = a ', string2, ' : ', valorlogico); valorlogico := string1 > string2; 17 writeln('teste se ', string1, ' eh > que ', string2, ' : ', valorlogico); valorlogico := string1 < string2; 20 writeln('teste se ', string1, ' eh < que ', string2, ' : ', valorlogico); readkey; 23 end. Listagem 3.6 Operadores Relacionais com String Na Listagem 15, similar a Listagem 14, a linha 5 define uma variável valorlogico do tipo boolean, ou seja, ela só armazena Verdade (TRUE) ou Falso (FALSE). A linha 6 define duas variáveis do tipo string (cadeias de caracter) que são inicializadas nas linhas 10 e 11, respectivamente. A linha 13 é lida assim: o valor da string1 é igual ao valor do string2? Se sim, atribua TRUE para valorlogico; se não, atribua FALSE. A linha 14 imprime o resultado do teste lógico. Note que as linhas 16/17 e 19/20 fazem algo similar às linhas 13/14, apenas mudando o operador relacional. Note que strings podem ser comparadas com >, <, etc. O resultado da execução do programa da Listagem 15 é:

72 72 Programação com Pascal Teste se abc eh = a def : FALSE Teste se abc eh > que def : FALSE Teste se abc eh < que def : TRUE 1 program OperadoresRelacionaisComReal; 2 {Este programa vai demonstrar Operadores Relacionais do Pascal} 3 uses crt; 4 var 5 valorlogico : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 6 real1, real2 : real; 7 8 begin 9 {Atribuições de valores às variáves} 10 real1 := 8/6; 11 real2 := 4/3; valorlogico := real1 > real2; 14 writeln('teste se ', real1:3:4, ' eh > que ', real2:3:4, ' : ', valorlogico); valorlogico := real1 = real2; 17 writeln('teste se ', real1:3:4, ' eh = a ', real2:3:4, ' : ', valorlogico); valorlogico := real1 < real2; 20 writeln('teste se ', real1:3:4, ' eh < que ', real2:3:4, ' : ', valorlogico); readkey; 23 end. Listagem 3.7 Operadores Relacionais com Reais A listagem 3.7 é similar a 3.5 e 3.6. Ressaltam-se as linhas 10 e 11 que fazem a atribuição de números não inteiros às variáveis real1 e real2. Fica como exercício sua execução e a observação do resultado. Edeyson Andrade Gomes

73 EXPRESSÕES 73 Operadores Lógicos O Pascal dispõe dos seguintes operadores lógicos: AND (E), OR (OU) e NOT (NÃO, NEGAÇÃO). Para compreendê-los, vamos fazer uma breve introdução à Lógica. A lógica é a ciência que estuda a correção do pensamento, do raciocínio. Quando elaboramos frases como: a) A Lua é maior que a Terra; b) A água do mar é salgada e c) 2 (dois) é o único número primo que é par, podemos determinar a elas um valor lógico verdadeiro ou falso. Logo, a é falso, b e c são verdadeiros. Tais frases são chamadas de proposições, pois afirmam fatos, exprimem juízos. A Lógica Matemática apresenta regras fundamentais do pensamento baseadas em dois princípios (Axiomas): a. Princípio da Não Contradição - uma proposição ou é Verdadeira ou é Falsa; b. Princípio do Terceiro Excluído - toda proposição ou é Verdadeira ou é Falsa - apenas esses valores são possíveis. Nas Listagens 3.5, 3.6 e 3.7 foram elaboradas proposições, por exemplo, em valorlogico := inteiro1 = inteiro2. Esta proposição pode ser lida assim: compare o inteiro1 com o inteiro2 e atribua o resultado assim: verdadeiro se iguais e falso se diferentes. O valor lógico (verdadeiro ou falso) desta proposição é armazenado na variável valorlogico e depende dos valores atribuídos a inteiro1 e inteiro2. Como exemplo, se inteiro1 armazena o valor 10 e inteiro2 armazena o valor 20, valorlogico é FALSO. As proposições usadas nas Listagens 3.5, 3.6 e 3.7 são ditas Simples ou Atômicas, pois não contém outra proposição como parte integrante. Uma proposição é dita Composta quando ela resulta da combinação (via conectivos E ou OU, por exemplo) de outras proposições. Por exemplo, supondo-se que se queira saber se um número x pertence ao Intervalo Fechado nos extremos a e b : x ϵ [a, b] = { x ϵ R ; a x b }. Em Pascal necessitamos de uma proposição composta como segue: valorlogico := (x >= a) AND (x <= b); Esta proposição é lida da seguinte forma: Teste se x é maior ou igual a a E se x é menor ou igual a b. Se ambos forem verdade, e apenas neste caso, valorlogico será verdade. Note o seguinte: supondo o intervalo [1, 5]. Sendo a = 1 e b = 5; se x = 6 o teste 6 >= 1 é verdade, mas 6 <= 5 é falso, logo x = 6 não pertence ao intervalo [1, 5]. Por isso o valorlogico neste caso é falso. Uma proposição composta com conectivos AND só é verdade se todas as suas componentes são verdade.

74 74 Programação com Pascal Pela teoria básica de conjuntos, define-se A B por: A B = { x / x ϵ A e x ϵ B } A B Podemos afirmar que x pertence a A B se, e somente se, x pertence a A AND x pertence a B, ou seja, pertence aos dois conjuntos simultaneamente. O conectivo AND opera a interseção entre proposições (e conjuntos). Vejamos exemplos em Pascal: suponha que A = {1, 2, 3, 4, 5} e B = {4, 5, 6}. Se x ϵ A, então (x >= 1) AND (x <= 5) é verdade. Se x ϵ B, então (x >= 4) AND (x <= 6) é verdade. Se x ϵ A B, então ((x >= 1) AND (x <= 5)) AND ((x >= 4) AND (x <= 6)) é verdade. Ou seja, x ϵ {4, 5}. De outra forma, x ϵ [1, 5] [4, 6]. O uso de operadores lógicos é apresentado na Listagem program OperadoresLogicos; 2 {Este programa vai demonstrar Operadores Lógicos do Pascal} 3 uses crt; 4 var 5 valorlogico : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 6 x, inicio, fim : integer; 7 8 begin 9 {Atribuições de valores às variáves} 10 inicio := 0; 11 fim := 10; 12 x := 5; valorlogico := (x > inicio) and (x > fim); 15 writeln('teste se ', x, ' eh > que ', inicio, ' E ', x, ' eh > que ', fim, ' : ', valorlogico); valorlogico := (x > inicio) and (x < fim); 18 writeln('teste se ', x, ' eh > que ', inicio, ' E ', x, ' eh < que ', fim, ' : ', valorlogico); valorlogico := (x > inicio) or (x > fim); 21 writeln('teste se ', x, ' eh > que ', inicio, ' OU ', x, ' eh > que ', fim, ' : ', valorlogico); valorlogico := ((x >= 1) and (x <= 5)) AND ((x >= 4) and (x <= 6)); 24 writeln('teste se ', x, ' esta entre 1 e 5 e se ', x, ' esta entre 4 e 6 simultaneamente : ', valorlogico); readkey; 27 end. Listagem 3.8 Operadores Lógicos Na Listagem 3.8, as linhas 5 e 6 definem as variáveis e as linhas 10 a 11 as iniciam. Edeyson Andrade Gomes

75 EXPRESSÕES 75 A linha 14 atribui à variável valorlogico o resultado do teste: (valorlogico := (x > inicio) and (x > fim)); Ou seja, testa se x é maior que inicio AND x é maior que fim. Logo, x tem de ser maior que o maior valor. Como inicio e fim foram iniciadas com 0 e 10, respectivamente, o teste só é verdade se x for maior que 10. Como x foi iniciada com 5, valorlogico é FALSE na linha 14. A linha 17 atribui à variável valorlogico o resultado do teste: (valorlogico := (x > inicio) and (x < fim)); Ou seja, se x é maior que inicio AND x é menor que fim. Como inicio e fim foram iniciadas com 0 e 10, respectivamente, o teste só é verdade se x for maior que 0 AND menor que 10. Como x foi iniciada com 5, valorlogico é TRUE na linha 14. A linha 20 atribui à variável valorlogico o resultado do teste: (valorlogico := (x > inicio) or (x > fim)); Similarmente, o teste só é verdade se x for maior que 0 OR maior que 10. Diferente do AND, uma proposição composta com OR é verdade se pelo menos uma das proposições componentes for verdade. Como x foi iniciada com 5, valorlogico é TRUE, pois 5 é maior que 0, embora 5 seja menor que 10. A linha 23 atribui à variável valorlogico o resultado do teste (valorlogico := ( (x >= 1) and (x <= 5) ) AND ( (x >= 4) and (x <= 6) )), ou seja, x deve estar no conjunto [1, 5] [4,6]. Note que o AND em maiúsculas só foi usado para destacar os conjuntos na expressão. Em Pascal não há distinção de maiúsculas e minúsculas. Como x tem o valor 5, o valorlogico é TRUE na linha 24. Ainda pela teoria básica de conjuntos, define-se A U B por: A U B = { x / x ϵ A or x ϵ B } Podemos afirmar que x pertence a A U B se, e somente se, x pertence a A OR x pertence a B, ou seja, pertence a um ou ao outro. O conectivo OR opera a união entre proposições (e conjuntos). Vejamos um exemplo em Pascal: suponha que A = {1, 2, 3, 4, 5} e B = {4, 5, 6}. Se x ϵ A, então (x >= 1) AND (x <= 5) é verdade. Se x ϵ B, então (x >= 4) AND (x <= 6) é verdade. Se x ϵ A U B, então ((x >= 1) AND (x <= 5)) OR ((x >= 4) AND (x <= 6)) é verdade. Ou seja, x ϵ {1, 2, 3, 4, 5, 6}. De outra forma, x ϵ [1, 5] U [4, 6].

76 76 Programação com Pascal Exercícios 1. Elabore um programa que deve: a. Declarar a variável x como inteira. b. Solicitar ao usuário para informar um valor para x. c. Determinar se x pertence aos intervalos: i. [2, 7] U [10, 15] ii. [1, 5) U [4, 10) U (20, 26] iii. [0, 10] [7, 15] iv. (0, 10] (7, 15) Edeyson Andrade Gomes

77 4 77 4ESTRUTURAS DE DECISÃO Todos os programas de exemplo elaborados até este capítulo apresentam um conjunto de ações sequenciais onde todas as ações são executadas numa mesma ordem. O modelo da Figura 4.1 não é único em programas quotidianos. Normalmente o programador se depara com ações que serão executadas ou não a depender de uma determinada situação. Entrada Ação 1 Ação 2 Saída Figura 4.1 Fluxograma de sequência Quando uma ou mais ações dependem de uma ou mais condições para sua execução, são necessárias estruturas de decisão que controlem o fluxo de execução do programa efetuando tomadas de decisão e desvios de operações. Em Linguagem Natural podem-se descrever tais estruturas de decisão das seguintes formas: 1. Seleção com uma via: Se a condição é verdadeira então execute a ação Seleção com duas vias: Se a condição é verdadeira então execute a ação 1. Senão, execute a ação 2. Em ambas as formas a ação 1 só será executada se e somente se a condição for verdadeira. Na forma 1, seleção com uma via, caso a condição seja verdadeira adiciona-se uma ação ao fluxo normal do programa. Na forma 2, escolhe-se um caminho a seguir, executando a ação1 ou a ação 2. Observações: 1. Uma ação, como descrita no texto, não consiste apenas numa instrução. Ela pode ser executada por um bloco de comandos bloco de programa com demarcação de início e fim (usando-se BEGIN e END) que contém uma ou várias instruções. 2. A instrução Pascal end pode ser finalizado com um ponto-e-vírgula ( ; ) e não apenas com um ponto. O uso de ponto ao final de um end ocorre somente na finalização de um programa.

78 78 Programação com Pascal 4.1 IF.. THEN A instrução do Pascal IF condição THEN ação pode ser lida assim: SE a condição é verdadeira ENTÃO execute a ação. IF.. THEN tem por finalidade testar uma condição e tomar uma decisão é uma seleção com uma via. Se a condição é verdadeira, um bloco de comandos é executado. Em caso contrário, esse bloco é ignorado. {Sintaxe:} IF condição THEN bloco de comandos O fluxograma da Figura 4.2 tem por objetivo é ler uma nota e determinar se ela é maior ou igual a 6. Em caso verdadeiro, deve imprimir Aluno aprovado. Início nota Nota >= 6.0 SIM Aluno aprovado Fim Figura 4.2 Fluxograma da seleção com uma Via O programa da Figura 4.2 é assim descrito: 1. Início do Algoritmo Nota; a. Declarar uma variável nota do tipo real; b. Solicitar um valor para a nota; c. Se a nota for maior ou igual a 6.0, então imprimir: Aluno aprovado. 2. Terminar Algoritmo Nota. Edeyson Andrade Gomes

79 ESTRUTURAS DE DECISÃO 79 A Listagem 4.1 apresenta o código que implementa o Algoritmo Nota proposto na Figura 4.2 com seleção com uma via através de IF.. THEN. 1 program testanota; 2 uses crt; 3 {Declarar uma variável nota do tipo real;} 4 var nota : real; 5 begin 6 {Solicitar um valor para a nota;} 7 write('digite uma nota: '); 8 readln(nota); 9 {Se a nota for maior ou igual a 6.0, então imprimir: Aluno aprovado.} 10 if (nota >= 6.0) then 11 writeln('aluno aprovado.'); 12 {Parar o programa até que algo seja pressionado} 13 readkey; 14 end. Listagem 4.1 Seleção com uma Via IF.. THEN Neste programa declara-se uma variável real chamada nota na linha 4. As linhas 7 e 8 solicitam o valor da nota (write) e efetuam sua leitura (readln), respectivamente. Na linha 10 testa-se se a nota lida é maior ou igual a 6 e, caso seja, e apenas com esta condição, escreve-se Aluno aprovado. Note que se a nota for menor que 6 o programa aguarda uma tecla ser pressionada linha 13 e acaba. Veja que neste código, após o IF não se colocou o par begin.. end, pois desejava-se executar uma ação com apenas uma instrução linha 11. Caso a ação desejada necessitasse de mais de uma instrução para executar, estas deveriam estar inseridas em um bloco de comandos (delimitados por begin..end).

80 80 Programação com Pascal 4.2 IF.. THEN.. ELSE A instrução IF condição THEN ação1 ELSE ação2 tem por finalidade testar uma condição e tomar uma decisão entre duas possíveis. Se a condição é verdadeira, um bloco de comandos após o THEN é executado. Se a condição é falsa, um bloco de comandos após o ELSE é executado. A instrução IF condição THEN ação1 ELSE ação2 pode ser lida assim: SE a condição é verdadeira ENTÃO execute a ação1. EM CASO CONTRÁRIO, execute a ação2. Suponha que no programa da Listagem 4.1 também fosse necessário informar se o aluno está reprovado. Neste caso, têm-se duas decisões possíveis: Se a nota é maior ou igual a 6, a decisão é informar Aluno Aprovado. Senão, se a nota é menor que 6, a decisão é informar Aluno Reprovado. A listagem 4.2 apresenta um código que satisfaz as duas decisões citadas usando IF.. THEN.. ELSE. {Sintaxe:} IF condição THEN bloco de comandos 1 ELSE bloco de comandos 2 O fluxograma apresentado na Figura 4.3 apresenta uma solução onde a mensagem Aluno aprovado será apresentada se, e somente se, a nota for maior ou igual a seis e que Aluno aprovado será apresentada em caso contrário. Estas são as duas vias (decisões) possíveis. Início nota NÃO Nota >= 6.0 SIM Aluno reprovado Aluno aprovado Fim Figura 4.3 Fluxograma da seleção com duas Vias Edeyson Andrade Gomes

81 ESTRUTURAS DE DECISÃO 81 O programa da Figura 4.3 é assim descrito e implementado na Listagem 4.2: 1. Início do Algoritmo; a. Declarar uma variável nota do tipo real; b. Solicitar um valor para a nota; c. Se a nota for maior ou igual a 6.0, então imprimir: Aluno aprovado. d. Senão, imprimir: Aluno reprovado. 2. Terminar Algoritmo. 1 program testanota; 2 uses crt; 3 {Declarar uma variável nota do tipo real;} 4 var nota : real; 5 begin 6 {Solicitar um valor para a nota;} 7 write('digite uma nota: '); 8 readln(nota); 9 {Se a nota for maior ou igual a 6.0, então imprimir: Aluno aprovado.} 10 if (nota >= 6.0) then 11 writeln('aluno aprovado.') 12 else 13 writeln('aluno reprovado.'); {Parar o programa até que algo seja pressionado} 16 readkey; 17 end. Listagem 4.2 Seleção com 2 Vias IF.. THEN.. ELSE Note que o que diferencia as Listagens 4.1 e 4.2 é que nesta a linha 10 testa se a nota lida é maior ou igual a 6 e, caso seja, e apenas com esta condição, escreve-se Aluno aprovado. Em caso contrário - teste da linha 12 - escreve-se se Aluno reprovado linha 13. Observações: 1. Observe que a última linha antes de um ELSE não deve possuir ponto-e-vírgula ( ; ), como ocorre na linha 11. Outro exemplo do uso de IF..THEN..ELSE está no programa da Listagem 4.3, que simula um débito numa conta corrente. O débito só é possível se há saldo e/ou limite disponíveis para isso. O programa é assim descrito: 1. Início do Algoritmo; a. Definir as variáveis saldo, limite e valoradebitar como real; b. Atribuir valores a saldo e limite; c. Solicitar ao usuário o valor a debitar;

82 82 Programação com Pascal d. Se o saldo somado ao limite for maior que o valor a debitar, então: i. subtraia valoradebitar do saldo; ii. Imprima 'Debito efetuado com sucesso'. e. Senão: i. Imprima 'Saldo insuficiente'. f. Imprima: 'Fim da transacao. Pressione Alguma Tecla'; g. Pare o programa até que uma tecla seja pressionada. 2. Fim do algoritmo. A Listagem 4.3 exibe o programa que implementa o referido algoritmo. 1 program TesteContaCorrente; 2 {importação da biblioteca CRT} 3 uses crt; 4 var 5 {Definição das variáveis saldo, limite e valoradebitar do tipo real} 6 saldo, limite, valoradebitar : real; 7 begin 8 {limpa a tela} 9 clrscr; {Atribuição de valores a saldo e limite} 12 saldo := 200; 13 limite := 500; {Solicitar ao usuário o valor a debitar.} 16 writeln('qual o valor a debitar?'); 17 readln(valoradebitar); {Se o saldo somado ao limite for maior que o valor a debitar, então debite o valoradebitar do saldo} 21 if (saldo + limite > valoradebitar) then 22 begin 23 saldo := saldo - valoradebitar; 24 writeln('debito efetuado com sucesso.'); 25 end 26 {Senão, imprima: 'Saldo Insuficiente'} 27 else 28 begin 29 writeln('saldo insuficiente.'); 30 end; 31 writeln('fim da transacao. Pressione Alguma Tecla'); 32 readkey; 33 end. Listagem Seleção com duas Vias Neste código testa-se na linha 21 se a variável saldo somada à variável limite tem valor maior que a variável valoradebitar. Se isto é verdade, a linha 23 subtrai do saldo o valoradebitar e a linha 24 imprime o sucesso do débito. Observações: 1. Note que as linhas 22 a 25 e 28 a 30 compõem blocos de comandos delimitados por BEGIN.. END. Edeyson Andrade Gomes

83 ESTRUTURAS DE DECISÃO 83 O fluxograma correspondente ao programa da Listagem 4.3 é apresentado na Figura 4.4. Início saldo = 200 limite = 500 valoradebitar saldo + limite > valoradebitar NÃO SIM saldo = saldo - valoradebitar Saldo Insuficiente Debito efetuado com sucesso Fim da transacao. Pressione Alguma Tecla Fim Figura Fluxograma da seleção com duas Vias A instrução IF condição THEN ação1 ELSE ação2 tem uma limitação: ela só oferece dois caminhos alternativos. Se a condição é verdadeira, segue-se o caminho que executa a ação1. Em caso contrário, segue-se o caminho que executa a ação2. Suponha o seguinte problema: uma seguradora dá descontos progressivos no seguro de automóvel em função da faixa etária do cliente. As faixas são as seguintes: a 25 anos: 3% de desconto; a 30 anos: 5% de desconto; a 45 anos: 8 % de desconto; 4. Acima de 45 anos: 10% de desconto. Como calcular o desconto com estruturas de decisão com uma ou duas vias? Tal solução requer um recurso denominado de aninhamento a composição de tomadas de decisão.

84 84 Programação com Pascal Uma especificação em Linguagem Natural para o cálculo do desconto pode ser a seguinte, que chamaremos de Algoritmo Calcula Desconto 1: 1. Início do Algoritmo Calcula Desconto1; a. Ler um valor para a variável idade; b. Desconto é iniciado com 0%; c. Se a idade está entre 20 e 25 anos, então o desconto é de 3%; d. Senão: i. Se a idade está entre 26 e 30 anos, então o desconto é de 5%; ii. Senão: 1. Se a idade está entre 31 e 45 anos, então o desconto é de 8%; 2. Senão: a. Se a idade é maior que 45 anos, então o desconto é de 10%; e. Informar o desconto. 2. Fim do algoritmo Calcula Desconto1. Um erro comum à especificação em Linguagem Natural seria o seguinte, que chamaremos de Algoritmo Calcula Desconto 2: 1. Início do Algoritmo Calcula Desconto2; a. Ler um valor para a variável idade; b. Desconto é de 0%; c. Se a idade está entre 20 e 25 anos, o desconto é de 3%; d. Se a idade está entre 26 e 30 anos, o desconto é de 5%; e. Se a idade está entre 31 e 45 anos, o desconto é de 8%; f. Se a idade é maior que 45 anos, o desconto é de 10%; g. Informar o desconto. 2. Fim do algoritmo Calcula Desconto2. Embora as duas especificações forneçam o mesmo resultado para o desconto, a primeira (Algoritmo Calcula Desconto 1) o faz de maneira mais eficiente. Note que uma pessoa encontra-se numa única faixa etária, logo, se uma condição é satisfeita (verdadeira) as demais não precisam ser testadas, pois sempre serão falsas. O desconto sempre inicia em 0%, assumindo-se que não haverá desconto (casos de pessoas com menos de 20 anos). A segunda especificação (Algoritmo Calcula Desconto 2) obriga a execução de todos os testes de condição, mesmo que uma condição já tenha sido verdadeira, o que é desnecessário. Edeyson Andrade Gomes

85 ESTRUTURAS DE DECISÃO 85 Início idade Desconto = 0% idade >= 20 e idade <= 25 NÃO idade >= 26 e idade <= 30 NÃO idade >= 31 e idade <= 45 NÃO idade > 45 SIM SIM SIM SIM Desconto = 3% Desconto = 5% Desconto = 8% Desconto = 10% Informar Desconto Fim Figura 4.5 Fluxograma do Algoritmo Calcula Desconto 1 A Figura 4.5 apresenta o fluxograma do algoritmo Calcula Desconto 1. Como pode ser notado, caso uma condição seja atendida (verdadeira), o algoritmo determina o novo desconto, informa-o e termina o algoritmo. Caso o teste de uma condição falhe, testa-se a próxima condição até que uma seja verdadeira, determinando o novo desconto, informando-o e terminando o algoritmo. Se nehuma condição for atendida, o desconto será de 0%. A Listagem 4.4 exibe o programa que implementa o algoritmo Calcula Desconto 1.

86 86 Programação com Pascal 1 program CalculaDesconto1; 2 {importação da biblioteca CRT} 3 uses crt; 4 var 5 {Definição das variáveis idade e desconto como inteiras} 6 idade, desconto : integer; 7 begin 8 {limpa a tela} 9 clrscr; {Solicitar ao usuário o valor da idade.} 12 writeln('qual sua idade?'); 13 readln(idade); {Atribuição de valor inicial ao desconto} 16 desconto := 0; {Seleçõe aninhadas} 19 if (idade >= 20) and (idade <= 25) then 20 desconto := 3 21 else 22 if (idade >= 26) and (idade <= 30) then 23 desconto := 5 24 else 25 if (idade >= 31) and (idade <= 45) then 26 desconto := 8 27 else 28 if (idade >= 46) then 29 desconto := 10; writeln('o desconto eh de ', desconto, '%'); 32 readkey; 33 end. Listagem Calcula Desconto 1 Na linha 19 testa-se a idade (se está entre 20 e 25). Se sim, o desconto será de 3%, senão, abre-se um novo ninho de testes. Por isso usa-se o termo aninhamento. A linha 22 inicia um ninho que só será executado se, e somente se, o teste anterior falhar, o que economiza a quantidade de testes realmente realizados. A Figura 4.6 apresenta o fluxograma do algoritmo Calcula Desconto 2. Nele, mesmo que uma condição seja atendida (verdadeira), o algoritmo continua a testar desnecessariamente as demais condições para determinar o novo desconto, informandoo e terminando. Embora o Algoritmo Calcula Desconto 1 seja mais eficiente que o 2, ainda há um problema. Imagine que a seguradora trabalhe com um conjunto com 20 condições de cálculo de seguro. Com ficaria o fluxograma e o aninhamento? Neste caso, usa-se a Seleção com Múltiplas Vias. Edeyson Andrade Gomes

87 ESTRUTURAS DE DECISÃO 87 Início idade Desconto = 0% idade >= 20 e idade <= 25 NÃO SIM idade >= 26 e idade <= 30 NÃO Desconto = 3% SIM idade >= 31 e idade <= 45 NÃO Desconto = 5% SIM idade > 45 Desconto = 8% SIM Desconto = 10% Informar Desconto NÃO Fim Figura Fluxograma do Algoritmo Calcula Desconto 2

88 88 Programação com Pascal 4.3 CASE Embora o aninhamento de IF seja comum quando a condição possui múltiplos caminhos alternativos, normalmente ela é usada com condições que necessitam de avaliação de um valor lógico verdadeiro ou falso. Em algumas situações, contudo, a condição pode ser avaliada para um conjunto de valores discretos, sendo estes inteiros ou caracteres. Por exemplo, imagine um sistema que automatiza uma URA (Unidade de Reconhecimento Audível), comum em atendimento telefônico pelo sistema Comumente são oferecidas opções entre 0 e 9. Cada opção leva a uma ação diferente. Por exemplo, vamos analisar o problema URA 01 a seguir. Uma solução de URA (URA 01) deve oferecer as seguintes opções e ações: 1 Saldo; 2 Extrato Parcial; 3 Extrato da Última Conta; 8 Falar com atendente; 9 Menu anterior. Uma especificação em Linguagem Natural para a URA 01 pode ser a seguinte, que chamaremos de Algoritmo URA 01 IF: 1. Início do Algoritmo URA 01 IF; a. Informar ao usuário quais as opções do menu; b. Solicitar ao usuário qual a opção desejada; c. Se a opção for 1, apresentar o saldo; d. Senão: i. Se a opção for 2, então apresentar o Extrato Parcial; ii. Senão: 1. Se a opção for 3, então apresentar o Extrato da Última Conta; 2. Senão: a. Se a opção for 8, então transferir a ligação para a atendente; b. Senão: i. Se a opção for 9, então desviar para o menu anterior; ii. Senão, informar opção inválida. 2. Fim do algoritmo URA 01 IF. Com esta especificação teremos um fluxograma muito semelhante ao da Figura 4.5. Todavia, existe a opção de reescrever o algoritmo usando Seleção com Múltiplas Vias ao invés de Aninhamento de Seleções de Duas Vias. Um exemplo é o seguinte Algoritmo URA 01 CASE: Edeyson Andrade Gomes

89 ESTRUTURAS DE DECISÃO Início do Algoritmo URA 01 CASE; a. Informar ao usuário quais as opções do menu; b. Solicitar ao usuário qual a opção desejada; c. Caso a opção seja: i. 1 : apresentar o saldo; ii. 2 : apresentar o Extrato Parcial; iii. 3 : apresentar o Extrato da Última Conta; iv. 8 : transferir a ligação para a atendente; v. 9 : desviar para o menu anterior; vi. Outra, informar opção inválida. 2. Fim do algoritmo URA 01 CASE. A Figura 4.7 apresenta o fluxograma do algoritmo URA 01 CASE. Como pode ser notado, testa-se uma condição em busca de um valor específico (discreto) e desvia-se a execução para cada caso especificado. Início Exibir as opções opção opção 1 0, 4, 5, 6 ou Saldo Extrato Parcial 3 Desvia para o Menu Anterior Transfere ligação para Atendente Extrato Última Conta Opção Inválida Fim Figura Fluxograma do algoritmo URA 01 CASE A implementação do algoritmo URA 01 CASE deve ser feito com o comando CASE, cuja sintaxe é descrita a seguir:

90 90 Programação com Pascal {Sintaxe:} CASE variável OF Valor1 : Bloco de Comandos 1; Valor2 : Bloco de Comandos 2; Valor3 : Bloco de Comandos 3;... ELSE Bloco de Comandos n END; Observações: 1. A variável do CASE deve ser inteira ou caracter (integer ou char) apenas. 2. O ELSE é usado para tratar uma possível exceção de valor da variável A Listagem 4.5 exibe o programa que implementa o algoritmo URA 01 CASE. 1 program URA01Case; 2 {importação da biblioteca CRT} 3 uses crt; 4 var 5 {Definição das variável opção como inteira} 6 opcao : integer; 7 begin 8 {limpa a tela} 9 clrscr; {Informar opções ao usuário.} 12 writeln('tecle 1 para Saldo'); 13 writeln('tecle 2 para Extrato Parcial'); 14 writeln('tecle 3 para Extrato da Ultima Conta'); 15 writeln('tecle 8 para Transferir ligação para a Atendente'); 16 writeln('tecle 9 para Retornar ao Menu anterior'); 17 readln(opcao); case opcao of 20 1: begin 21 {código para apresentar saldo} 22 end; 23 2: begin 24 {código para apresentar o Extrato Parcial} 25 end; 26 3: begin 27 {código para apresentar o Extrato da última Conta} 28 end; 29 8: {transferir a ligação para a atendente}; 30 9: {desviar para o menu anterior}; 31 else 32 writeln('opcao Invalida'); 33 end; {end case} 34 readkey; 35 end. Listagem 4.5 Algoritmo URA 01 Case Edeyson Andrade Gomes

91 ESTRUTURAS DE DECISÃO 91 Na Listagem 4.5, a linha 6 define a variável opção como inteira. As linhas 12 a 17 exibem as opções da URA e a linha 17 lê a opção escolhida pelo usuário. A tomada de decisão do que fazer após a seleção da opção está entre as linhas 19 e 33. O CASE da Listagem 4.5 baseia-se no valor da variável opção. Para cada caso, um bloco de ações é sugerido. No caso, apenas fez-se a indicação de onde e como o bloco de comandos deve ser inserido linhas 20 a 22, por exemplo. Na linha 31 o ELSE captura qualquer valor de opção que não seja 1, 2, 3, 8 ou 9.

92 92 Programação com Pascal 4.4 EXERCÍCIOS Escrever um algoritmo em Linguagem Natural, seu fluxograma e seu código em Pascal que, lendo três lados de um triângulo, determine se o mesmo é equilátero, isósceles ou escaleno. Opção 1 de solução em Linguagem Natural: 1. Início do Algoritmo Triângulos a. Obter os lados a, b e c b. Se os três lados são iguais, então imprima que é Equilátero. c. Senão: i. Se dois lados são iguais, então imprima que é Isósceles. ii. Senão, imprima que é Escaleno. 2. Fim do Algoritmo Triângulos Opção 2 de solução em Linguagem Natural: 1. Início do Algoritmo Triângulos a. Obter os lados a, b e c b. Se a = b e b = c, então imprima que é Equilátero. c. Senão: i. Se a = b ou b = c ou a = c, então imprima que é Isósceles. ii. Senão, imprima que é Escaleno. 2. Fim do Algoritmo Triângulos O Fluxograma para o Algoritmo Triângulos é apresentado na Figura 4.8. Início a = b e b = c V Triângulo Equilátero F a, b, c a = b ou a = c ou b = c V Triângulo Isósceles F Triângulo Escaleno Fim Figura Fluxograma do algoritmo Triângulos Edeyson Andrade Gomes

93 ESTRUTURAS DE DECISÃO 93 O Código do Algoritmo Triângulos é apresentado na Listagem program Triangulos; 2 3 uses crt; 4 var 5 lado1, lado2, lado3 : integer; 6 7 begin 8 writeln('digite o lado 1'); 9 readln(lado1); writeln('digite o lado 2'); 12 readln(lado2); writeln('digite o lado 3'); 15 readln(lado3); if (lado1 = lado2) and (lado2 = lado3) then 18 writeln('triangulo Equilatero') 19 else 20 if ((lado1 = lado2) or (lado1 = lado3) or (lado2 = lado3) ) then 21 writeln('triangulo Isosceles') 22 else 23 writeln('triangulo Escaleno'); 24 readkey; 25 end. Listagem 4.6 Programa Triângulos Escrever um algoritmo em Linguagem Natural, seu fluxograma e seu código em Pascal que, lendo um inteiro, determine se o mesmo é par ou ímpar. Opção 1 de solução em Linguagem Natural: 1. Início do Algoritmo Paridade a. Obter o valor do inteiro n b. Se n é divisível por 2 (o resto da divisão de n por 2 é 0), então imprima que n é PAR. c. Senão: i. Imprima que n é ÍMPAR. 2. Fim do Algoritmo Paridade O problema da Opção 1 é como determinar em linguagem de programação que n é par. Isso pode ser feito em Pascal usando o operador de inteiros MOD. Assim, temos a opção 2 de solução em Linguagem Natural: 1. Início do Algoritmo Paridade a. Obter o valor do inteiro n b. Se n MOD 2 = 0, então imprima que n é PAR. c. Senão: i. Imprima que n é ÍMPAR. 2. Fim do Algoritmo Paridade

94 94 Programação com Pascal O Fluxograma que atente ao Algoritmo Paridade é apresentado na Figura Início n V n MOD 2 = 0 F PAR ÍMPAR Fim Figura Fluxograma do algoritmo Paridade O Código do Algoritmo Paridade é apresentado na Listagem {O programa deve ler 1 variavel inteira e determinar se a mesma eh par ou impar.} 2 3 program Paridade; 4 uses crt; 5 var 6 n : integer; 7 8 begin 9 writeln('digite o valor: '); 10 readln(n); if (n mod 2 = 0) then 13 writeln(n, ' e PAR') 14 else 15 writeln(n, ' e IMPAR'); readkey; 18 end. Listagem 4.7 Programa Paridade. Edeyson Andrade Gomes

95 5 95 5ESTRUTURAS DE REPETIÇÃO Um método recomendado à construção de algoritmos remete à busca de pequenos passos, simples, que possam ser resolvidos manualmente por um ser humano. A decomposição de um problema em um conjunto de passos simples é a melhor forma de construir um algoritmo, por mais complexo que este seja. Em muitas situações, um conjunto de passos simples é repetido por diversas vezes. Por exemplo, suponha um problema onde se deseja ler uma coleção de 100 notas e, para cada uma, determinar se o aluno foi aprovado (nota maior ou igual a seis) ou reprovado (nota menor que seis). Os passos que devem ser repetidos são facilmente identificados: a. Ler a nota; b. Determinar se o aluno foi aprovado ou não. O uso de seleção com duas vias pode resolver este problema, contudo, necessita-se testar uma coleção de 100 notas. Uma solução possível, porém muito pouco eficiente pela repetição de código, seria assim descrito: 1. Início do Algoritmo Le100Notas; a. Declarar uma variável nota do tipo real; b. Solicitar um valor para a nota 1; c. Se a nota 1 for maior ou igual a 6.0, então imprimir: Aluno aprovado. d. Senão, imprimir: Aluno reprovado. e. Solicitar um valor para a nota 2; f. Se a nota 2 for maior ou igual a 6.0, então imprimir: Aluno aprovado. g. Senão, imprimir: Aluno reprovado. h.... i. Solicitar um valor para a nota 100; j. Se a nota 100 for maior ou igual a 6.0, então imprimir: Aluno aprovado. k. Senão, imprimir: Aluno reprovado. 2. Terminar Algoritmo Le100Notas. Analisando-se o algoritmo Le100Notas, observa-se que um conjunto de passos (ler a nota, testá-la e tomar uma decisão em duas vias) se repetirá 100 vezes. Imagine repetir o trecho de código entre a leitura da nota e sua análise 100 vezes. Isso é viável? E se a coleção fosse muito maior? Em situações com essas, onde é necessária a repetição de um determinado trecho de código (ou bloco de código), usam-se estruturas de repetição, também chamadas de laços.

96 96 Programação com Pascal Estruturas de repetição de blocos de comandos também são chamadas de Laços. Os laços dividem-se em dois grupos: Laços Finitos: o número de repetições do laço é conhecido; Laços Infinitos (indeterminados): o número de repetições do laço é desconhecido previamente. 5.1 FOR O comando FOR permite a repetição de um comando, ou bloco de comandos, um número finito de vezes. Esse número é determinado por uma variável denominada de contador do FOR. Sua sintaxe é: {Sintaxe 1:} for contador := início to fim do Comando; {Sintaxe 2:} for contador := início to fim do begin Bloco de Comandos; end; Caso o laço contenha um único comando, usa-se a sintaxe 1 ou a 2. Caso seja um bloco de comandos, usa-se a sintaxe 2, obrigatoriamente. O fluxo de execução do comando FOR é o seguinte: 1. O FOR inicia o contador com um valor de início. 2. O FOR inicia um laço de execução: a. O FOR testa se o contador é <= fim (condição de controle); b. Se sim: i. executa o Bloco de Comandos; ii. o FOR incremente automaticamente o contador em um; iii. volta ao laço (passo 2.a). c. Senão: i. Para e termina o laço. Embora o fluxo de execução do comando FOR indique no passo 2.b.ii que o FOR incrementa automaticamente o contador, no fluxograma temos de explicitar isso, como ilustra a Figura 5.1 que apresenta a estrutura genérica do FOR. Edeyson Andrade Gomes

97 ESTRUTURAS DE REPETIÇÃO 97 FOR contador = início contador <= fim F Fim Bloco de Comandos V contador = contador + 1 Figura 5.1 Fluxograma FOR Uma forma mais apropriada de escrever o algoritmo Le100Notas, que chamaremos de RepeteTesteNotas, é o seguinte: 1. Início do Algoritmo RepeteTesteNotas; a. Declarar uma variável nota do tipo real; b. Repetir 100 vezes: i. Solicitar um valor para a nota; ii. Se a nota for maior ou igual a 6.0, então imprimir: Aluno aprovado. iii. Senão, imprimir: Aluno reprovado. 2. Terminar Algoritmo RepeteTesteNotas. 3. O fluxograma correspondente ao algoritmo RepeteTesteNotas encontra-se na Figura 5.2. Nota-se o uso de teste antecipado do contador de vezes que uma nota foi lida e testada.

98 98 Programação com Pascal Início conta = 0 Fim F conta < 100 Bloco de Comandos V nota Aluno reprovado F Nota >= 6 V Aluno aprovado conta = conta + 1 Figura 5.2 Fluxograma RepeteTesteNotas No fluxograma da Figura 5.2 inicia-se a variável conta com zero e testa-se se ela é menor que 100. A variável conta é usada como um contador de vezes que o bloco de comandos será executado. Um dos passos do algoritmo no fluxograma é incrementar o valor de conta para indicar que um passo foi executado. Sem isso, nunca se chegaria ao fim do algoritmo. Usando o comando FOR, a implementação do algoritmo RepeteTesteNotas fica como apresentado na Listagem 5.1. Edeyson Andrade Gomes

99 ESTRUTURAS DE REPETIÇÃO 99 1 program RepeteTesteNotas; 2 {Importa a biblioteca CRT para usar ReadKey} 3 uses crt; 4 5 {Declara as variáveis} 6 var nota : real; 7 conta: integer; {Variável que ajudará a contar número de repetições} 8 9 {Inicia o programa principal} 10 begin 11 for conta := 1 to 100 do 12 begin 13 write('digite a nota do aluno entre 0 e 10: '); 14 readln(nota); if (nota >= 6) then 17 writeln('aluno aprovado') 18 else 19 writeln('aluno reprovado'); 20 end; 21 end. Listagem 5.1 Uso de For para repetir 100 teste de notas. A linha 11 inicia um laço de repetição de 100 vezes. Ela pode ser lida assim: faça conta variar de 1 até 100 e, para cada valor de conta neste intervalo faça o que está entre o bloco de comandos delimitado entre (begin..end;). Ressalta-se que o end só termina com ponto (end.) ao fim do programa. Tudo que está entre o begin (linha 12) e o end (linha 20), que compõe um bloco de comandos, será repetido 100 vezes. Isso é garantido se o programador não mudar explicitamente o valor de conta (que é incrementado automaticamente pelo FOR). As linhas 13 e 14 solicitam a digitação de uma nota entre 0 e 10. A linha 16 teste se a nota digitada é maior ou igual a seis. Em caso verdadeiro, escreve Aluno aprovado (linha 17). Senão (linha 18), escreve Aluno reprovado (linha 19). A Listagem 5.2 apresenta outro exemplo do FOR. Veja que a variável contador pode ter qualquer nome (neste exemplo, n) e é inteira. O programa imprimirá 8 vezes linha seguido do número do contador. A linha 11 determina o laço de repetição. As linhas 11 e 12 podem ser lidas como: faça o n variar entre 1 e 8 e para cada valor neste intervalo imprima: linha: concatenado a n. Neste caso, o FOR não usa o begin..end, pois será executando apenas um comando por vez (sintaxe 1).

100 100 Programação com Pascal 1 program ForSimples; 2 3 uses crt; 4 5 var 6 n : integer; 7 8 begin 9 clrscr; for n := 1 to 8 do 12 writeln('linha: ', n); readkey; 15 end. Listagem 5.2 For Simples com 8 passos. A descrição do algoritmo da Listagem 5.2 é o seguinte: 1. Início do Algoritmo ForSimples; a. Para cada valor de n entre 1 e 8 faça: i. Imprimir: linha: concatenado com o valor de n. 2. Terminar Algoritmo ForSimples. O Fluxograma do ForSimples está na Figura 5.3. Veja que o For é implementado como uma repetição com teste antecipado. Início n = 1 Fim F n <= 8 V Bloco de Comandos 'linha: ', n n = n + 1 Figura 5.3 Fluxograma do ForSimples Edeyson Andrade Gomes

101 ESTRUTURAS DE REPETIÇÃO 101 O resultado da execução do programa ForSimples é o seguinte: linha: 1 linha: 2 linha: 3 linha: 4 linha: 5 linha: 6 linha: 7 linha: 8 Para entender melhor tal resultado, deve-se seguir o Fluxo de Execução para o FOR da linha 11: 1. Inicie o n com o valor Inicie o Laço (execução do Comando). a. Teste se o n é <= 8; b. Se sim: i. execute o comando: writeln('linha: ', n);; ii. incremente o n; iii. Volte ao laço (passo 2.a). c. Senão: i. Pare. O Passo a Passo de execução da Listagem 5.2 é o seguinte: 1: n = 1 2.a: n <= 8? 2.b: sim o 2.b.i escreva linha: 1 o 2.b.ii n = 2 o 2.b.iii Voltar a 2.a 2.a: n <= 8? 2.b: sim o 2.b.i escreva linha: 2 o 2.b.ii n = 3 o 2.b.iii Voltar a 2.a 2.a: n <= 8? 2.b: sim o 2.b.i escreva linha: 3... Uma dúvida comum ao entendimento do fluxograma da Figura 5.3 é o que significa n := n + 1.

102 102 Programação com Pascal Em programação (assim como na matemática) toda atribuição se inicia da direita para a esquerda. Quando se escreve: x = , soma-se 10 com 5 e atribui-se o resultado a x. Logo, x resultará em 15. E quando se escreve x = x + 5? Qual o resultado? O que isso significa é: compute o valor atual de x acrescido de 5 e atribua o resultado à mesma variável x. Logo, se x era 15, passará a ser 20. Escrever x = x + y significa acumular o valor y ao de x. O novo valor de x será igual a seu valor antigo acrescido de y. O FOR se vale disso para fazer o incremento da variável de controle. 1 for conta := 1 to 2 do 2 begin 3 writeln('valor de i: ', i); 4 end; Listagem 5.3 Exemplo do FOR com 2 passos. No trecho de código da Listagem 5.3, o Bloco de Comandos (linhas 2, 3 e 4) vai ser executado 2 vezes, com conta assumindo os valores 1 e 2. Quando conta for 3, o teste 2.a, do fluxo de execução do FOR, que testa se conta <= 2, informa que o FOR acabou. O fluxo de execução do FOR para a execução da Listagem 5.3 é o seguinte: 1: conta = 1 2.a: conta <= 2? 2.b: sim o 2.b.i escreve valor de conta: 1 o 2.b.ii conta = 2 o 2.b.iii Voltar a 2.a 2.a: conta <= 2? 2.b: sim o 2.b.i escreve valor de conta: 2 o 2.b.ii conta = 3 o 2.b.iii Voltar a 2.a 2.a: conta <= 2? 2.b:não Termina o Laço. Observações: 1. Note que se a variável usada como contador for alterada entre 2.a e 2.b.iii, o número de repetições pode mudar. Vejamos uma alteração intencional do contador com a mudança do fluxo de repetições: Edeyson Andrade Gomes

103 ESTRUTURAS DE REPETIÇÃO for i := 3 to 10 do 2 begin 3 writeln('valor de i: ', i); 4 i := i + 5; 5 end; Listagem 5.4 Exemplo de FOR com alteração do contador. Note que o contador (no caso, a variável i) pode iniciar em qualquer valor. Neste trecho de código da Listagem 5.4 (linha 1) ele inicia em 3. O que este trecho de código fará? Qual será seu resultado? Veja que neste exemplo o contador i é incrementado no bloco (linha 4) e também pelo FOR (linha 1) automaticamente. Neste caso, o Bloco de Comandos (linhas 3 e 4) vai ser executado 2 vezes: 1. Na primeira execução: a. i foi iniciado com 3; b. Após a linha 4, i terá valor 8, mas o FOR incrementa o contador sempre que chega ao end; c. i sai do primeiro laço com valor Na segunda execução a. i inicia com 9; b. Após a linha 4, i terá valor 14, mas o FOR incrementa o contador sempre que chega ao end; c. i sai do primeiro laço com valor 15. O comando FOR apresentado até agora suporta o incremento automático da variável denominada de contador, o que é chamado de FOR Crescente. Existe, ainda, o FOR Decrescente, com a única diferença que este decrementa o contador. {Sintaxe 1:} for contador := fim downto início do Comando; {Sintaxe 2:} for contador := fim downto início do begin Bloco de Comandos; end; O raciocínio de uso é o mesmo, a principal diferença é a inversão do início e fim e o decremento do contador.

104 104 Programação com Pascal Exemplos de Uso do FOR 1. Escrever um algoritmo em Linguagem Natural, seu fluxograma e seu código em Pascal que, lendo um número inteiro positivo, determine todos os seus divisores. 2. Início do Algoritmo Divisores de N a. Obter o valor do inteiro n b. Se n > 0, então: i. Faça divisor variar de 1 até n ii. Para cada valor de divisor, faça: 1. Se n MOD divisor = 0, então imprima o valor de divisor. c. Senão i. Imprima: o número deve ser positivo. 3. Fim do Algoritmo Divisores de N O Fluxograma do Algoritmo Divisores de N é apresentado na Figura 5.4 e seu código na Listagem 5.5. Teste se n é positivo Início n n > 0 F V FOR divisor = 1 divisor <= n F Fim V n MOD divisor = 0 Bloco de Comandos V divisor F divisor = divisor + 1 Figura 5.4 Fluxograma Divisores de N Edeyson Andrade Gomes

105 ESTRUTURAS DE REPETIÇÃO program DivisoresDeN; 2 3 uses crt; 4 5 var 6 n, divisor : integer; 7 8 begin 9 clrscr; write('digite um valor inteiro positivo para n: '); 12 readln(n); if (n > 0) then 15 for divisor := 1 to n do 16 begin 17 if (n mod divisor = 0) then 18 writeln('divisor: ', divisor); 19 end; 20 readkey; 21 end. Listagem 5.5 Divisores de N. Observações: 1. Matematicamente, o algoritmo pode ser bastante melhorado. Fica como desafio aperfeiçoar a solução apresentada, diminuindo o número de passos do FOR. 2. Escrever um algoritmo em Linguagem Natural, seu fluxograma e seu código em Pascal que, lendo um número inteiro positivo, determine todos os seus divisores e quantos são estes. A solução a este problema é uma extensão do bloco de comandos do algoritmo anterior para contar os divisores. Necessitaremos de uma nova variável, que chamaremos de contadivisores, inteira, inicialmente com valor 0, pois não se sabe a princípio quantos divisores o número possui. Dado que o teste do algoritmo já informa quem é divisor de N, alteraremos tal teste para também contar os divisores. Assim, teremos um novo algoritmo.

106 106 Programação com Pascal 1. Início do Algoritmo Contador Divisores de N a. Obter o valor do inteiro n b. Iniciar contadivisores com 0 c. Se n > 0, então: i. Faça divisor variar de 1 até n ii. Para cada valor de divisor, faça: 1. Se n MOD divisor = 0, então: a. imprima o valor de divisor. b. Incremente contadivisores. d. Senão i. Imprima: o número deve ser positivo. e. Imprima: o número + n + possui + contadivisores + divisores 2. Fim do Algoritmo Contador Divisores de N O Fluxograma do Algoritmo Contador Divisores de N é apresentado na Figura 5.5 e seu código na Listagem 5.6. Teste se n é positivo Início n contadivisores = 0 n > 0 F V FOR divisor = 1 divisor <= n F Fim V n MOD divisor = 0 V Bloco de Comandos divisor contadivisores = contadivisores + 1 F divisor = divisor + 1 Figura 5.5 Fluxograma Contadores de Divisores de N. Edeyson Andrade Gomes

107 ESTRUTURAS DE REPETIÇÃO 107 Observações: 1. A linha e do algoritmo apresenta uma operação + entre string e inteiro, o que resultará na concatenação das strings com o literal que representa contadivisores. 1 program ContaDivisoresDeN; 2 3 uses crt; 4 5 var 6 n, divisor, contadivisores : integer; 7 8 begin 9 clrscr; write('digite um valor inteiro positivo para n: '); 12 readln(n); 13 contadivisores := 0; if (n > 0) then 16 begin 17 for divisor := 1 to n do 18 begin 19 if (n mod divisor = 0) then 20 begin 21 writeln('divisor: ', divisor); 22 contadivisores := contadivisores + 1; 23 end; 24 end; 25 writeln('o numero ', n, ' possui ', contadivisores, ' divisores'); 26 end; Listagem 5.6 Conta Divisores de N. 3. Escrever um algoritmo em Linguagem Natural, seu fluxograma e seu código em Pascal que, para um conjunto de números inteiros entre 1 e 20, determine todos os seus divisores e quantos são estes. A solução a este problema é uma modificação simples do anterior, pois não mais leremos um valor para n. Todavia, necessitaremos de 2 laços: 1. Um laço para obter os números entre 1 e 20; 2. O laço existente que determina e conta os divisores do número do laço anterior.

108 108 Programação com Pascal 1. Início do Algoritmo Contador Divisores de 1 a 20 a. Faça n variar de 1 a 20 b. Iniciar contadivisores com 0 c. Para cada valor de n, faça: i. Faça divisor variar de 1 até n ii. Para cada valor de divisor, faça: 1. Se n MOD divisor = 0, então: a. imprima o valor de divisor. b. Incremente contadivisores. iii. Imprima: o número + n + possui + contadivisores + divisores 2. Fim do Algoritmo Contador Divisores de 1 a 20 A estrutura desta solução será a seguinte: Início n = 1 FOR n <= 20 F Bloco de Comandos V FOR Fim n = n + 1 Edeyson Andrade Gomes

109 ESTRUTURAS DE REPETIÇÃO WHILE.. DO O comando WHILE.. DO permite a repetição de um comando, ou bloco de comandos, um número finito ou indeterminado de vezes. O número de repetições é determinado por uma condição de controle que deve ser testada antes da execução do comando (ou bloco de comandos). {Sintaxe 1:} while condição do Comando; {Sintaxe 2:} while condição do begin Bloco de Comandos; end; Note que o comando, ou bloco de comandos, só será executado se a condição for avaliada como verdadeira. Pode-se ler o comando como: ENQUANTO a condição for verdadeira, FAÇA: executar comando (ou bloco de comandos). A principal característica do WHILE é efetuar um teste lógico no início de um loop (laço), verificando se é permitido executar o trecho de instruções abaixo dela. Desta forma, poderá executar um determinado conjunto de instruções enquanto a condição verificada permanecer verdadeira. No momento em que a condição se torna falsa, o processamento da rotina é desviado para fora do laço. Sendo a condição falsa logo no início do laço, as instruções contidas nele são ignoradas. Usando o comando WHILE.. DO, vamos elaborar um programa para imprimir todos os números entre 1 e 10. Para isto, a condição será os números serem maiores que 0 e menores ou iguais a 10. Usando o FOR, o programa seria como a Listagem for i := 1 to 10 do 2 begin 3 writeln('valor de i: ', i); 4 end; Listagem 5.5 Listagem de números de 1 a 10 Note que o FOR controla implicitamente a condição, fazendo o i (controle) variar entre 1 e 10. Para fazer o mesmo com o WHILE, necessitamos de um código similar. Vamos iniciar uma variável de controle com 1 e fazê-la variar explicitamente de 1 em 1, até chegar a 10. Por exemplo, vejamos a Listagem 5.6

110 110 Programação com Pascal 1 program whilesimples; 2 uses crt; 3 var i : integer; 4 5 begin 6 i := 1; 7 while (i <= 10) do 8 begin 9 writeln('valor de i: ', i); 10 i := i + 1; 11 end; 12 readkey; 13 end. Listagem 5.6 Listagem de números de 1 a 10 A linha 6 inicia a variável i com 1, pois desejam-se os números entre 1 e 10. Logo, ela tem de iniciar em 1. Como o maior valor deve ser o 10, i terá de variar até 10. Isso deve ser garantido pela condição do WHILE, o que é feito na linha 7. Tem-se, então, um laço de repetição de 10 vezes. Porém, isso só é verdade se i for incrementado de 1 em 1, como é feito na linha 10. Isso garante que i será um valor do conjunto {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}. Se a linha 10 fosse i := i + 5, i passaria de 1 para 6, por exemplo, não atendendo o que se deseja. O código da Listagem 5.6 pode ser lido assim: inicie i em 1, faça i variar de 1 em 1 até 10 e, enquanto i for menor que 10, imprima seu valor. Tudo que está entre o begin (linha 5) e o end (linha 13), que compõe um bloco de comandos, será repetido 10 vezes. Isso é garantido se o programador incrementar o valor de i de 1 em 1. O fluxograma do programa da Listagem 5,6 é apresentado na Figura 5.AA Edeyson Andrade Gomes

111 ESTRUTURAS DE REPETIÇÃO 111 Início i = 1 i <= 10 NÃO Fim SIM Valor de i: i i = i + 1 Figura 6.AA While com Contador Uma alteração interessante a este programa é o seguinte: imprimir todos os número pares entre 1 e 10. Apresentaremos duas soluções possíveis a este problema. Na solução 1, exibida na Listagem 5.7, vamos iniciar uma variável de controle com 1 e fazê-la variar explicitamente de 1 em 1, até chegar a 10. Embora a solução seja similar a anterior, o bloco de comandos deve filtrar os elementos a exibir. 1 program whilepares; 2 uses crt; 3 var i : integer; 4 5 begin 6 i := 1; 7 while (i <= 10) do 8 begin 9 if (i mod 2 = 0) then 10 writeln('valor de i: ', i); 11 i := i + 1; 12 end; 13 readkey; 14 end. Listagem 5.7 Listagem de números de 1 a 10 A principal alteração da Listagem 5.7 para a 5.6 está na adição da condicional na linha 9. Agora, um número só será impresso se ele for par, ou seja, o resto da divisão de i por 2 é zero (i mod 2 = 0), logo, i é divisível por 2. O fluxograma desta solução é apresentado na Figura 5.BB

112 112 Programação com Pascal Início i = 1 i <= 10 NÃO Fim SIM i mod 2 = 0 SIM Valor de i: NÃO Laço do While i i = i + 1 Figura 7.BB Pares entre 1 e 10 com WHILE Na solução 2, exibida na Listagem 5.8, vamos usar um pouco de matemática. Como se desejam os números pares entre 1 e 10, sabe-se que o primeiro número válido é 2. Logo, pode-se iniciar a variável de controle i com 2. E, como se desejam apenas os pares, vamos variar explicitamente i de 2 em 2, até chegar a 10. Assim, teremos {2, 4, 6, 8, 10}. Vejamos a solução 1 program whilepares; 2 uses crt; 3 var i : integer; 4 5 begin 6 i := 2; 7 while (i <= 10) do 8 begin 9 writeln('valor de i: ', i); 10 i := i + 2; 11 end; 12 readkey; 13 end. Listagem 5.8 Listagem de números de 1 a 10 Edeyson Andrade Gomes

113 ESTRUTURAS DE REPETIÇÃO 113 A principal alteração da Listagem 5.7 para a 5.6 está no início da variável i e em seu incremento, agora de 2 em 2 (linha 10). Como i inicia em 2, teremos os valores {2, 4, 6, 8, 10}. O fluxograma desta solução é apresentado na Figura 5.CC Início i = 2 i <= 10 NÃO Fim SIM Valor de i: i Laço do While i = i + 2 Figura 8.CC Os exemplos apresentados até agora usaram o WHILE com laços finitos, pois havia uma condição de parada. Todavia, no seguinte problema, teremos um laço infinito (indeterminado): Início do Algoritmo WhileQuadrado 1. Solicitar ao usuário para digitar um número. 2. Enquanto o número digitado não for zero, faça: a. imprimir o quadrado do número; b. solicitar ao usuário para digitar um número. Fim do Algoritmo WhileQuadrado Quando o algoritmo WhileQuadrado chegará ao fim? Isso é indeterminado, pois não se sabe quando o usuário digitará o número 0. O fluxograma deste algoritmo está na Figura 5.DD

114 114 Programação com Pascal Início i i <> 0 NÃO Fim SIM i * i Laço do While i Figura 9.DD While O código deste algoritmo está na Listagem program whilequadrados; 2 uses crt; 3 var i : integer; 4 5 begin 6 writeln('digite um valor. 0 para terminar.'); 7 readln(i); 8 9 while (i <> 0) do 10 begin 11 writeln('o quadrado de : ', i, ' eh: ', i * i); writeln(#10, #10, #13, 'Digite um valor. 0 para terminar.'); 14 readln(i); 15 end; 16 readkey; 17 end. Listagem 5.9 While No código da Listagem 5.9, a linha 6 imprime uma mensagem e a 7 lê um valor para i. A linha 9 inicia um laço que se repetirá enquanto i for diferente de 0 (i <> 0). Se o usuário iniciar digitando 0, a condição da linha 9 faz com que o laço não seja executado. A linha 11 imprime o quadrado do número lido e a 13 solicita outro valor. Destaca-se o uso de #10 (nova linha) e #13 (retorno de cursor) para criar duas linhas em branco e posicionar o cursor na coluna da esquerda, na tela. Edeyson Andrade Gomes

115 ESTRUTURAS DE REPETIÇÃO 115 A linha 14 lê um novo valor para i. Note que enquanto i for diferente de 0, o bloco de comando entre as linhas 10 e 15 se repetirá. Isso é um laço infinito. Desafios 1. Imprimir todos os múltiplos de 5 entre 1 e 100 usando WHILE e sem usar IF ou Case. 2. Imprimir todos os múltiplos de 3 e 5 entre 1 e 100 usando WHILE e sem usar IF ou Case. 3. Imprimir todos os múltiplos de 3 ou 5 entre 1 e 100 usando WHILE e sem usar IF ou Case.

116 116 Programação com Pascal 5.3 REPEAT.. UNTIL O comando REPEAT.. UNTIL permite a repetição de um comando, ou bloco de comandos, um número finito ou indeterminado de vezes. O número de repetições é determinado por uma condição de controle que deve ser testada após a execução do comando (ou bloco de comandos). Note que sua principal diferença para o WHILE..DO está onde o teste será feito. Como o WHILE executa o teste da condição ANTES do comando, pode ser que este nunca seja executado (no caso da condição ser falsa). O REPEAT testa a condição APÓS e execução do comando, o que significa que, ao menos, este será executado uma vez. {Sintaxe:} repeat Bloco de Comandos; until (condição); Note que o comando, ou bloco de comandos, será executado até que a condição seja avaliada como verdadeira, outra diferença para o WHILE, que executa até a condição ser falsa. Pode-se ler o comando como: REPITA a execução do bloco de comandos ATÉ QUE a condição seja falsa. A principal característica do REPEAT..UNTIL é efetuar um teste lógico ao final de um loop (laço), verificando se é permitido continuar a execução do trecho de instruções. Desta forma, poderá executar um determinado conjunto de instruções enquanto a condição verificada permanecer falsa. No momento em que a condição se torna verdadeira, o processamento da rotina é desviado para fora do laço. Usando o comando REPEAT..UNTIL, vamos elaborar um programa para imprimir todos os números entre 1 e 10. Para isto, a condição será os números serem maiores que 0 e menores ou iguais a 10, tal qual com WHILE..DO. O Fluxograma encontra-se na Figura 5.EE. Comparando-o com o mesmo fluxograma do WHILE, Figura 5., nota-se que a única diferença está onde o teste da condição é feito. Edeyson Andrade Gomes

117 ESTRUTURAS DE REPETIÇÃO 117 Início i = 1 Valor de i: i Laço do Repeat i = i + 1 i > 10 SIM Fim Figura 10.EE Repeat Until de 1 a 10 O código está na Listagem program Repeat1a10; 2 uses crt; 3 var i : integer; 4 5 begin 6 i := 1; 7 repeat 8 writeln('valor de i: ', i); 9 i := i + 1; 10 until (i > 10); 11 readkey; 12 end. Listagem 5.10 Listagem de números de 1 a 10 A linha 6 inicia a variável i com 1, pois desejam-se os números entre 1 e 10. Logo, ela tem de iniciar em 1. Como o maior valor deve ser o 10, i terá de variar até 10. Isso deve ser garantido pela condição do REPEAT, o que é feito na linha 10, que pode ser lida: execute os comandos ATÉ QUE i seja maior que 10. Note que a condição é diferente da do WHILE. Aqui, informamos quando o laço deve terminar. Tem-se, então, um laço de repetição de 10 vezes. Porém, isso só é verdade se i for incrementado de 1 em 1, como é feito na linha 9. Isso garante que i será um valor do conjunto {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.

118 118 Programação com Pascal O código da Listagem 5.10 pode ser lido assim: inicie i em 1 e repita: imprima i e incremente-o de 1 em 1 até que seja maior que 10. Observações: 1. O REPEAT..UNTIL já delimita por si só o bloco de comandos, tornando o uso de BEGIN..END opcional. 2. Note que os comandos entre o REPEAT e o UNTIL compõem o bloco de comandos e serão repetidos. Na Listagem 5.11 apresentaremos a conversão do programa da Listagem 5.7 para o uso de REPEAT..UNTIL. Os passos para isto são os seguintes: 1. Onde se tem WHILE, substituir por REPEAT; 2. Eliminar, se houver, o begin do início do bloco de comandos e substituir o end pelo UNTIL; Lembrar que o REPEAT..UNTIL delimita um bloco de comandos. 3. Negar a condição do WHILE e movê-la para a condição do UNTIL; a. Neste caso, a negação de (i <= 10) é (i > 10). 1 program repeatpares; 2 uses crt; 3 var i : integer; 4 5 begin 6 i := 1; 7 repeat 9 if (i mod 2 = 0) then 10 writeln('valor de i: ', i); 11 i := i + 1; 12 until (i > 10); 13 readkey; 14 end. Listagem 5.11 Listagem de números de 1 a 10 O fluxograma desta solução é apresentado na Figura 5.FF Edeyson Andrade Gomes

119 ESTRUTURAS DE REPETIÇÃO 119 Início i = 1 i mod 2 = 0 SIM Valor de i: NÃO Laço do Repeat i i = i + 1 i > 10 SIM Fim Figura 11.FF Desafios 4. Imprimir todos os múltiplos de 5 entre 1 e 100 usando REPEAT e sem usar IF ou Case. 5. Imprimir todos os múltiplos de 3 e 5 entre 1 e 100 usando REPEAT e sem usar IF ou Case. 6. Imprimir todos os múltiplos de 3 ou 5 entre 1 e 100 usando REPEAT e sem usar IF ou Case.

120 120 Programação com Pascal 6. Arrays Um Array, também chamado de vetor, quando unidimensional, ou matriz, quando bidimensional, é uma estrutura simples de dados. Arrays mantêm uma coleção de elementos, do mesmo tipo de dados. Elementos individuais são acessados por sua posição no array, que é determinada por um índice. {Sintaxe:} nomedovetor : array [início..fim] of tipodedados; Em Pascal, define-se um array informando-se qual o valor de seu primeiro e último índice (início e fim, respectivamente). Por exemplo, analisemos o seguinte código: 1 program TesteArray; 2 uses crt; 3 4 var 5 a : array[1..2] of integer; 6 i : integer; 7 8 begin 9 i := 10; 10 a[1] := -5; {Coloca -5 na posição 1 do vetor a} 11 a[2] := 2; {Coloca 2 na posição 2 do vetor a} writeln('i: ', i); 14 writeln('a[1]: ', a[1]); 15 writeln('a[2]: ', a[2]); 16 readkey; 17 end. Na linha 5 declara-se a variável a como sendo um array de inteiros e na linha 6 declarase i como um inteiro. O que diferencia i de a é que i representa um único inteiro, ou seja, um único valor inteiro. Pode-se atribuir um único valor inteiro para i e acessá-lo diretamente pelo nome da variável. Imagine que para cada variável, o sistema reserva uma área de memória com seu nome. Referenciar o nome i significa para o sistema acessar seu conteúdo, como representa a Figura XYZ. i 10 Figura 12.XYZ Edeyson Andrade Gomes

121 ESTRUTURAS DE REPETIÇÃO 121 A variável a, contudo, possui índices 1 e 2 (especificado por [1..2], sendo início = 1 e fim = 2). Logo, a pode armazenar 2 valores distintos. A linha 10 atribui o valor -5 à posição 1 do array a. A linha 11 atribui 2 à sua segunda posição. Não se pode acessar a variável a pelo nome, pois ela exige um índice, como representa a Figura ZZZ a[1] a[2] Figura 13 Imagine que, para cada vetor, o sistema reserva uma área de memória com várias posições. Logo, apenas o nome (a, por exemplo) não serve para identificar qual posição se quer acessar. Por isso necessita-se do índice (a[1] e a[2]), que indica a posição correta dentro da área reservada. O seguinte problema ilustra o uso de vetores: desejam-se ler 5 valores e, após isso, imprimir os pares separados dos ímpares. Uma solução está na Listagem 6.XX

122 122 Programação com Pascal 1 program paresimparessemarray; 2 uses crt; 3 var v1, v2, v3, v4, v5 : integer; 4 5 begin 6 writeln('problema: ler 5 valores e, apos isso, imprimir os pares separados dos ímpares'); 7 write('digite o valor 1: '); read(v1); 8 write('digite o valor 2: '); read(v2); 9 write('digite o valor 3: '); read(v3); 10 write('digite o valor 4: '); read(v4); 11 write('digite o valor 5: '); read(v5); writeln(#10, #10, #13, 'Imprimindo os Valores Pares'); 14 if (v1 mod 2 = 0) then writeln(v1); 15 if (v2 mod 2 = 0) then writeln(v2); 16 if (v3 mod 2 = 0) then writeln(v3); 17 if (v4 mod 2 = 0) then writeln(v4); 18 if (v5 mod 2 = 0) then writeln(v5); writeln(#10, #10, #13, 'Imprimindo os Valores Impares'); 21 if (v1 mod 2 = 1) then writeln(v1); 22 if (v2 mod 2 = 1) then writeln(v2); 23 if (v3 mod 2 = 1) then writeln(v3); 24 if (v4 mod 2 = 1) then writeln(v4); 25 if (v5 mod 2 = 1) then writeln(v5); readkey; 28 end. Para minimizar a área da listagem, optou-se por usar comandos compostos numa mesma linha, como é o caso das linhas 7 a 10, onde a solicitação de um número e sua leitura estão numa mesma linha de código. Também, os comandos IF, por não conterem blocos de comando, fazem a escrita logo após o THEN, numa mesma linha. Ressalta-se que este não é o modelo preferencial de escrita de código, pois minimiza a legibilidade do mesmo. Ele foi usado apenas para reduzir o espaço da listagem. Analisando o código, a linha 3 declara 5 variáveis inteiras necessárias ao programa. As linhas de 7 a 10 fazem a leitura dos 5 números inteiros, solicitando-os ao usuário. Em seguida, linhas 13 a 18, apenas os números pares são impressos. Após isso, as linhas de 20 a 25 imprimem apenas os números ímpares. Observações: 1. O uso de #10 (nova linha) e de #13 (retorno do cursor) é feito no WRITE(LN) para saltar múltiplas linhas. a. O comando writeln(#10, #10, #13, 'ABC') imprime 2 linhas em branco, volta o cursos para a primeira coluna e depois imprime ABC. Imagine a Listagem 6.XX caso o requisito fosse o de leitura de 30 números. Seriam necessárias mais 75 linhas de código (25 para leitura, 25 para pares e 25 para ímpares). Edeyson Andrade Gomes

123 ESTRUTURAS DE REPETIÇÃO 123 Uma solução com vetores resolveria esse acréscimo de linha por todo o código. A Listagem 6.YY demonatra isso. 1 program paresimparescomarray; 2 uses crt; 3 4 const tamanhovetor = 5; 5 var v : array [1..tamanhoVetor] of integer; 6 i : integer; 7 8 begin 9 writeln('problema: ler 5 valores e, apos isso, imprimir os pares separados dos impares'); 10 for i := 1 to tamanhovetor do 11 begin 12 write('digite o valor ', i, ' : '); 13 read(v[i]); 14 end; writeln(#10, #10, #13, 'Imprimindo os Valores Pares'); 17 for i := 1 to tamanhovetor do 18 if (v[i] mod 2 = 0) then 19 writeln(v[i]); writeln(#10, #10, #13, 'Imprimindo os Valores Impares'); 22 for i := 1 to tamanhovetor do 23 if (v[i] mod 2 = 1) then 24 writeln(v[i]); readkey; 27 end. Na Listagem 6.YY, a linha 4 declara uma constante tamanhovetor com valor 5. A linha 5 declara v como um vetor com 5 posições inteiras (valor de tamanhovetor). A linha 6 declara i como um inteiro, que será o controlador do FOR. As linhas efetuam a leitura dos números. Como são 5 números, tem-se um laço finito com 5 passos (linha 10: FOR com i variando entre 1 e 5). O bloco de comandos deste laço é composto pelas linhas 11-14, onde é feita a solicitação de um valor e sua leitura. A linha 12 solicita um valor, identificando-o pelo controlador do FOR. O usuário sabe que digitará o i-ésimo número da seqüência de 5. A linha 13 efetua a leitura de um elemento do vetor, usando i como índice. As linhas 17 a 19 formam um novo laço com 5 passos. Em cada passo testa-se se um dos elementos do vetor é par (testa-se se v indexado por i e par: v[i] mod 2 = 0). Cada elemento só é impresso se a condição for verdadeira. As linhas de 22 a 24 fazem algo similar, mas para ímpares. Note que o tamanho do código da Listagem 6.YY não mudará mesmo que a quantidade de números a ler mude. Para isto, basta alterar a dimensão da constante tamanhovetor.

124 124 Programação com Pascal {Exercícios} Algoritmo A4.1 (Fácil): 1. Declarar idade1 e idade2 como inteiro; 2. Declarar pessoa1 e pessoa2 como string; 3. Ler um valor para a variável idade1 e outro para idade2; 4. Ler um valor para a pessoa1 e outro para a pessoa2; 5. Se (idade1 for maior que a idade2) a. imprima: pessoa1, eh mais velha que, pessoa2 6. Se (idade2 for maior que a idade1) a. imprima: pessoa2, eh mais velha que, pessoa1 7. Se (idade1 for igual a idade2) a. imprima: pessoa1, e, pessoa2, tem a mesma idade Algoritmo A4.2 (Fácil): 1. Declarar idade1 e idade2 como inteiro; 2. Declarar pessoa1 e pessoa2 como string; 3. Ler um valor para a variável idade1 e outro para idade2; 4. Ler um valor para a pessoa1 e outro para a pessoa2; 5. Se (idade1 for maior que a idade2) a. imprima: pessoa1 é mais velha que pessoa2 6. Senão a. Se (idade2 for maior que a idade1) i. imprima: pessoa2 é mais velha que pessoa1 b. Senão i. imprima: pessoa1 e pessoa2 tem a mesma idade Questões: - Qual a diferença entre A4.1 e A4.2? - Que linhas executam em A4.1 e não necessariamente executam em A4.2? Justifique. Edeyson Andrade Gomes

125 125 Algoritmo A4.1 (Médio): 1. Declarar numerodelados como inteiro; 2. Declarar área, lado1, lado2, lado3 e lado4 como real; 3. Declarar numerodeangulosiguais como inteiro; 4. Imprimir: Quantos lados tem a figura geométrica: <3> ou <4>? 5. Ler um valor para a variável numerodelados; 6. Imprimir: Quantos ângulos são iguais: <2>, <3> ou <4>? 7. Ler um valor para a variável numerodeangulosiguais; 8. Ler área, lado1, lado2, lado3 e lado4 como real; 9. Se numerodelados for diferente de 3 ou 4 a. Imprima: Numero de lados inválido. 10. Senão a. Se numerodelados for igual a 3 i. Imprima: Triangulo ii. Se todos os lados são iguais 1. Imprima: Isto eh um triangulo equilatero; iii. Senão 1. Se dois lados forem iguais e numerodeangulosiguais for igual a 2 a. Imprima: Isto eh um triangulo isosceles; 2. Senão a. Imprima: Isto eh um triangulo escaleno; b. Senão i. Imprima Retangulo ou Trapézio ii. Se todos os lados são iguais e numerodeangulosiguais igual a 4 1. Imprima: Isto eh um quadrado ; 2. Faça área = lado1 * lado1; 3. Imprima a área do quadrado. iii. Senão, 1. Se os lados são iguais dois a dois e numerodeangulosiguais igual a 2 a. Imprima: Isto eh um retângulo ; b. Faça área = lado1 (menor) * lado2 (maior); c. Imprima: A area do retângulo é, area. 2. Senão a. Imprima: Isso é um Trapezio.

126 126 Programação com Pascal Edeyson Andrade Gomes

127 Apêndice B Exercícios 127 Apêndice B Exercícios Observações: 1. Todas as questões trabalham com intervalos fechados. Logo, entre A e B corresponde a [A, B]. 1. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que resolve o seguinte problema: - Numa escola, decidiu-se fazer o censo de alunos. Criou-se uma base de dados onde os registros são estruturados da seguinte forma: Nome Sexo - O campo Nome informa o nome do aluno. - O campo sexo, com valores F ou M, corresponde a Feminino ou Masculino, respectivamente. Seu algoritmo deve ler múltiplos registros e informar: 1. Total de meninos; 2. Total de meninas; 3. Total de alunos. Início de solução: Início do Algoritmo Iniciar as variáveis TotalMeninos, TotalMeninas e TotalAlunos com zero. Enquanto houver registros, faça: Leia Registro Se sexo = M então adicione 1 a TotalMeninos Senão, adicione 1 a TotalMeninas TotalAlunos = TotalMeninos + TotalMeninas Imprima TotalMeninos, TotalMeninas, TotalAlunos Fim do Algoritmo 2. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que resolve o seguinte problema: - Numa escola, decidiu-se fazer o censo de alunos com Miopia. Criou-se uma base de dados onde os registros são estruturados da seguinte forma: Nome Sexo Miopia - O campo Nome informa o nome do aluno. - O campo sexo, com valores F ou M, corresponde a Feminino ou Masculino, respectivamente.

128 128 Programação com Pascal - O campo Miopia indica o grau da disfunção. Grau zero indica não haver o problema. Seu algoritmo deve ler todos os registros da base de dados e informar: 1. Total de meninos; 2. Total de meninos com miopia; 3. Média de miopia entre os meninos; 4. Total de meninas; 5. Total de meninas com miopia; 6. Média de miopia entre as meninas; 7. Média geral de miopia. 3. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que resolve o seguinte problema: - Numa escola, decidiu-se fazer o censo de alunos com Miopia e Hipermetropia. Criou-se uma base de dados onde os registros são estruturados da seguinte forma: Nome Sexo Miopia Hipermetropia - O campo Nome informa o nome do aluno. - O campo sexo, com valores F ou M, corresponde a Feminino ou Masculino, respectivamente. - Os campos Miopia e Hipermetropia indicam o grau da disfunção. Grau zero indica não haver o problema. Seu algoritmo deve ler todos os registros da base de dados e informar: 1. Total de meninos; 2. Total de meninos com miopia; 3. Total de meninos com hipermetropia; 4. Média de miopia entre meninos; 5. Média de hipermetropia entre meninos; 6. Total de meninas; 7. Total de meninas com miopia; 8. Total de meninas com hipermetropia; 9. Média de miopia entre meninas; 10. Média de hipermetropia entre meninas. 11. Média geral de miopia. 12. Média geral de hipermetropia. 4. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime todos os múltiplos de N entre A e B. Note que N, A e B devem ser fornecidos pelo usuário. 5. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime o Máximo Divisor Comum de dois números A e B, fornecidos pelo usuário. Dica por Edeyson Andrade Gomes

129 Apêndice B Exercícios 129 Dois números naturais sempre têm divisores comuns. Por exemplo: os divisores comuns de 12 e 18 são 1, 2, 3 e 6. Dentre eles, 6 é o maior. Então chamamos o 6 de máximo divisor comum de 12 e 18 e indicamos m.d.c.(12,18) = 6. Alguns exemplos: mdc (6,12) = 6 mdc (12,20) = 4 mdc (20,24) = 4 mdc (12,20,24) = 4 mdc (6,12,15) = 3 CÁLCULO DO M.D.C. PELO PROCESSO DAS DIVISÕES SUCESSIVAS Nesse processo efetuamos várias divisões até chegar a uma divisão exata. O divisor desta divisão é o m.d.c. Acompanhe o cálculo do m.d.c.(48,30). Regra prática: 1º) dividimos o número maior pelo número menor; 48 / 30 = 1 (com resto 18) 2º) dividimos o divisor 30, que é divisor da divisão anterior, por 18, que é o resto da divisão anterior, e assim sucessivamente; 30 / 18 = 1 (com resto 12) 18 / 12 = 1 (com resto 6) 12 / 6 = 2 (com resto zero - divisão exata) 3º) O divisor da divisão exata é 6. Então m.d.c.(48,30) = Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime o Mínimo Múltiplo Comum de dois números A e B, fornecidos pelo usuário. Sugestões: Início do Algoritmo Leia A e B Enquanto múltiplo de A menor que AxB faça Se múltiplo de A for divisível por B então Imprima: MMC é múltiplo de A Calcule próximo múltiplo de A Fim do Algoritmo Início do Algoritmo Leia A e B Múltiplo = A Enquanto Múltiplo menor ou igual a AxB faça Se Múltiplo divisível por B então Imprima: MMC é Múltiplo Termine Algoritmo Múltiplo = Múltiplo + A Fim do Algoritmo Dica:

130 130 Programação com Pascal Dados dois números A e B, encontre os múltiplos de A. Para cada múltiplo de A, teste se ele é divisível por B. Se sim, ele é o MMC. O ideal é achar os múltiplos do maior número entre A e B e testar com o menor. Dica em 7. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que lê os lados de um retângulo, calcula e imprime sua área. 8. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que lê o raio de um círculo, calcula e imprime sua área. 9. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que: a. Lê o número de lados de um polígono regular. Se o número de lados é diferente de 3, 4 ou 6, termine o algoritmo. b. Lê o tamanho do lado. c. Calcula e imprime a área do polígono e seu nome (triângulo, quadrado ou hexágono). Dica: Início do Algoritmo Leia o número de lados do polígono. Se o número de lados lido for diferente de 3, 4 ou 6, termine o algoritmo. Senão, Leia o tamanho do lado. Se número de lados é igual a 3, então área = (fórmula a ser lida). Imprima área calculada e triângulo. Senão, Se número de lados é igual a 4, então área = lado 2. Imprima área calculada e quadrado. Senão, área = (fórmula a ser lida). Imprima área calculada e hexágono. Fim do Algoritmo 10. Usando Linguagem Natural e Fluxograma, descreva um algoritmo que leia um conjunto de números naturais e determine qual o menor e o maior. A leitura do conjunto deve ser feita até que um número negativo seja encontrado. 11. Usando Linguagem Natural e Fluxograma, descreva um algoritmo que leia um número inteiro que representa uma quantidade de segundos, e determine quantas horas, minutos e segundos estão contidos neste número. Por exemplo: 3600 segundos correspondem a 1 hora : 00 minutos : 00 segundos 12. Usando Linguagem Natural e Fluxograma, descreva um algoritmo que leia o sexo de uma pessoa (H ou M) e sua altura e a partir dele calcule seu peso ideal: a) Para homens (H): (72.7 * altura) - 58 b) Para mulheres (M): (62.1 * altura) 44. Edeyson Andrade Gomes

131 Apêndice B Exercícios Usando Linguagem Natural e Fluxograma, descreva um algoritmo que leia os valores de X e Y e calcule X Y usando apenas a operação de multiplicação. 14. Usando Linguagem Natural e Fluxograma, descreva um algoritmo que leia os valores de X e Y e calcule X * Y usando apenas a operação de soma. Início do Algoritmo Leia X e Y Resultado = 0 Faça Y vezes Resultado = Resultado + X Imprima Resultado Fim do Algoritmo 15. O fatorial de um número natural n, representado por n!, é o produto de todos os inteiros positivos menores ou iguais a n. Usando Linguagem Natural e Fluxograma, descreva um algoritmo leia n e imprima seu fatorial. 16. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime todos os números primos entre A e B. Note que A e B devem ser fornecidos pelo usuário. 17. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime todos os divisores de N entre A e B. Note que N, A e B devem ser fornecidos pelo usuário. Se A for menor que 1 ou se A for maior que B ou se B for maior que N, termine o algoritmo. 18. Usando Linguagem Natural e Fluxograma, descreva um algoritmo que leia os valores de X e Y e calcule X / Y usando apenas a operação de subtração. 19. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime todos os múltiplos de N entre A e B. Note que N, A e B devem ser fornecidos pelo usuário. 20. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que usando variáveis que armazenam apenas 1 dígito [0..9] escreve todos os número entre 0 e 999. Dica: serão necessárias 3 variáveis. 21. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia algo do teclado. Enquanto o que for lido for diferente de espaço em branco, imprima o que foi lido. 22. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprima o número 20 vinte vezes, o número 19 dezenove vezes, o número 18 dezoito vezes, e assim sucessivamente, até o número 1 uma vez. 23. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia um número N e imprima o número N ene vezes, o número (N-1) ene menos uma vezes, e assim sucessivamente, até o número 1 uma vez.

132 132 Programação com Pascal Por exemplo: Se N for 3 deve imprimir: Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia um número N e um número F e imprima o número N ene vezes, o número (N-1) ene menos uma vezes, e assim sucessivamente, até o número F efe vezes. Se F for maior que N, encerre o algoritmo Por exemplo: Se N for 5 e F for 3 deve imprimir: Sugestão: Início do Algoritmo Leia N, F Enquanto N >= F faça Cont = N Faça Cont Vezes Imprima N N = N - 1 Fim do Algoritmo 25. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia dois números, A e B e determine o valor da menor e da maior razão entre eles. Ou seja, determine se A/B é maior que B/A e imprima-os. 26. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia H (altura) e g (gravidade) e determine a velocidade de um corpo a cada metro percorrido após ser largado de uma altura H. Dica: H = gt 2 /2, onde t é o tempo. Logo, t = 2H/g (raiz quadrada) V = V 0 + at 2 /2, onde a é a aceleração. Neste caso, a = g. 27. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia g (gravidade) e t (tempo) e determine a altura H percorrida por um corpo em queda. Dica: H = gt 2 /2, onde t é o tempo. Logo, t = 2H/g (raiz quadrada) V = V 0 + at 2 /2, onde a é a aceleração. Neste caso, a = g. 28. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia H (altura) e g (gravidade) e determine o tempo de queda de um corpo após ser largado de uma altura H. Dica: H = gt 2 /2, onde t é o tempo. Logo, t = 2H/g (raiz quadrada) V = V 0 + at 2 /2, onde a é a aceleração. Neste caso, a = g. 29. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia V (velocidade final), a (aceleração) e t (tempo) e determine a velocidade inicial de um corpo em movimento. Dica: V = V 0 + at 2 /2, onde a é a aceleração. Neste caso, a = g. 30. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia um valor N. Se N for maior ou igual a zero, imprimir N e ler outro valor. Se N for menor que zero, termine o algoritmo. Edeyson Andrade Gomes

133 Apêndice B Exercícios Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia dois números A e B, sendo B maior que A, e imprima todos os divisores de todos os números entre A e B. 32. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que resolve o seguinte problema: - Numa empresa, decidiu-se fazer o levantamento de consumo de telefone. Criou-se uma base de dados onde os registros são estruturados da seguinte forma: Ramal Numero Discado Tempo Ligação Seu algoritmo deve ler todos os registros da base de dados e informar quais os 5 ramais com maior tempo total de ligação. Existem, na empresa, 10 ramais. 33. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que resolve o seguinte problema: - Uma empresa aérea decidiu imprimir uma relação de funcionários nordestinos. Sabe-se que ela possui uma base de dados onde os registros são estruturados da seguinte forma: Nome DataNascimento CidadeNascimento UF Seu algoritmo deve ler todos os registros da base de dados e gerar tal relação. UF possui valores como BA, SE, PB, etc. 34. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia um valor N e imprima todos os número pares entre 1 e N. 35. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que leia um número inteiro de até 4 dígitos N e imprima todos os seus dígitos. Dica: 13 DIV 10 resulta em 1 13 MOD 10 resulta em Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime todos os números de Armstrong entre 1 e Um número N é dito de Armstrong se a soma dos cubos de seus dígitos é igual a N. 37. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime todos os números simétricos entre 1 e Um número N é dito simétrico se ele é lido igualmente da direita para a esquerda e da esquerda para a direita: Exemplo: 232, 1221, etc. 38. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime todos os números simétricos e pares entre 1 e Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime todos os números simétricos e primos entre 1 e

134 134 Programação com Pascal 40. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que imprime todos os números simétricos entre 1 e e também todos os seus divisores. 41. Usando Linguagem Natural e Fluxograma, descreva o algoritmo que determina todas as possíveis combinações de números consecutivos para os números entre 1 e 100. Para isto, tem-se que pegar um número N e descobrir somas de números consecutivos que resultem neste número N. Por exemplo: se o número N é15, o número de combinações consecutivas será: , pois = , pois = , pois = Usando Linguagem Natural e Fluxograma, descreva o algoritmo que determina os 8 primeiros números naturais curiosos. Para isso, dado um número N, deve-se encontrar seu número de dígitos (nd). Eleve N ao quadrado e pegue os nd dígitos da direita. Se o número original N é igual ao número formado pelos nd dígitos da direita de N 2, N é um número curioso. Por exemplo: 25 é um número curioso. Note que nd = 2 (dois dígits em 25) = 625. Os dois dígitos da direita são Usando Linguagem Natural e Fluxograma, descreva o algoritmo que dado um número real escreva-o por extenso e em Real (moeda). Por exemplo: dado 1.325,17 escreva: Mil, trezentos e vinte e cinco reais e dezessete centavos. Edeyson Andrade Gomes

135 Apêndice C Exemplos de Código 135 Apêndice C Exemplos de Código C1 - Tipos, Variáveis e Constantes C Este programa demonstra o uso de variáveis e constantes no Pascal. Seu objetivo é determinar um valor para o Raio de um círculo e Calcular sua área = πr 2. Como π é uma constante matemática, ela foi definida na linha 12. Área e Raio são variáveis, pois círculos diferentes têm valores diferentes. 1 program VariaveisConstantes; 2 {Este programa demonstra o uso de variáveis e constantes no Pascal. 3 Seu objetivo é determinar um valor para o Raio de um círculo e 4 Calcular sua área.} 5 6 uses crt; 7 var 8 {Declara area e raio como variáveis REAIS} 9 area, raio : real; 10 const 11 {Declara pi como uma constante} 12 pi = ; begin 15 {Atribuições de valores às variáves} 16 {Determina o raio do círculo explicitamente.} 17 raio := 10; 18 {Calcula a área do círculo = pi * raio ao quadrado} 19 area := pi * raio * raio; 20 writeln('a area do circulo de raio ', raio:3:2, ' eh: ', area:3:4); readkey; 23 end.

136 136 Programação com Pascal C Este programa vai demonstrar os tipos de variáveis do Pascal, como lhes atribuir valores e imprimi-las. Para isto são definidas variáveis inteiras, reais, lógicas, caracter e texto. 1 program TiposDeVariaveis; 2 {Este programa vai demonstrar os tipos de variáveis do Pascal, 3 como lhes atribuir valores e imprimi-las.} 4 5 uses crt; 6 7 {Tudo que vem após VAR é variável 8 sintaxe: 9 nomedavariável : tipo; 10 } 11 var 12 {Declara ai, bi e ci como variáveis INTEIRAS} 13 ai, bi, ci : integer; 14 {Declara ar e br como varáveis REAIS} 15 ar, br : real; 16 {Variáveis lógicas - podem ser TRUE ou FALSE} 17 al, bl : boolean; 18 {Declara bs como String - uma cadeia de caracteres} 19 bs : string; 20 {O uso de [] na declaração de string delimita o número de caracteres. 21 Neste caso, a variável nome pode ter 10 caracteres no máximo.} 22 nome : string[10]; 23 {Char representa um único caracter} 24 caracter : char; const 27 pi = ; begin 30 {Atribuições de valores às variáveis} 31 ai := 10; 32 bi := ai * 2; 33 ci := 2 * 23; caracter := 'A'; 36 writeln('a letra eh: ', caracter); 37 caracter := 'B'; 38 writeln('a letra eh: ', caracter); 39 {Atribui a letra pelo valor da Tabela AscII} 40 caracter := #69; 41 writeln('a letra eh: ', caracter); {Teste se 2 é maior que 1 e atribui o resultado para al} 44 al := 2 > 1; 45 writeln('al: ', al); bs := ' Isto eh uma string longa. Pode ser uma frase.'; 48 nome := 'Edeyson'; 49 writeln(nome, bs); readkey; 52 end. Edeyson Andrade Gomes

137 Apêndice C Exemplos de Código 137 C Segunda lei de movimento de Newton ou Princípio da Proporcionalidade ou Lei de Força: Um ponto material sujeito à ação de uma força F adquire aceleração a, de mesma direção e sentido que a força e módulo a proporcional à intensidade de F; o coeficiente de proporcionalidade é um escalar essencialmente positivo que 'mede' a inércia do ponto - sua massa. Assim, calcula-se Força = massa * aceleração. 1 program InteirosEmPascal; 2 {Este programa vai demonstrar o uso de Inteiros em Pascal 3 calculando a Força que incide num ponto material de massa e aceleração conhecidas.} 4 5 uses crt; 6 7 var 8 forca, massa, aceleracao : integer; 9 10 begin 11 writeln('qual a massa do ponto material?'); 12 readln(massa); writeln('qual a aceleracao do ponto material?'); 15 readln(aceleracao); forca:= massa * aceleracao; 18 writeln('a Forca aplicada ao ponto material eh: ', forca); 19 readkey; 20 end. C Segunda lei de movimento de Newton ou Princípio da Proporcionalidade ou Lei de Força: Cálculo da Massa. 1 program ReaisEmPascal; 2 {Este programa vai demonstrar o uso do tipo Real em Pascal calculando a massa de um ponto material conhecendo-se a força nele aplicada e sua aceleração.} 4 5 uses crt; 6 7 var 8 forca, massa, aceleracao : real; 9 10 begin 11 writeln('qual a forca do ponto material?'); 12 readln(forca); writeln('qual a aceleracao do ponto material?'); 15 readln(aceleracao); massa := forca / aceleracao; 18 writeln('a massa eh: ', massa:3:2); 19 readkey; 20 end.

138 138 Programação com Pascal C.1.5 Uso de String e Char em Pascal. 1 program StringChar; 2 uses crt; 3 var 4 endereco, nome : string; {endereço e nome são cadeias com 0 a 255 caracteres.} 5 CPF : string[11]; {O uso de [] delimita o número de caracteres. Neste caso CPF tem 11 caracteres.} 6 sexo : char; {char representa um único caracter. Neste caso sexo pode ser 'M' ou 'F'} 7 8 begin 9 {Atribuições de valores às variáves} 10 endereco := 'Rua dos Alferes, 1234, Ap. 1001, Barra, Salvador, Bahia - CEP: '; 11 nome:= 'Jose da Silva Santos'; 12 CPF := ' '; 13 sexo := 'M'; writeln('endereco: ', endereco); 16 writeln('cliente: ', nome); 17 writeln('cpf: ', cpf); 18 writeln('sexo: ', sexo); 19 readkey; 20 end. C.1.6 Uso de String e Char em Pascal. 1 program StringsEmPascal; 2 {Este programa vai demonstrar o uso de String em Pascal.} 3 4 uses crt; 5 6 var 7 endereco : string; {endereço é uma cadeia com 0 a 255 caracteres.} 8 nome : string[30]; 9 CPF : string[11]; {O uso de [] delimita o número de caracteres. Neste caso CPF tem 11 caracteres.} begin 12 endereco := 'Rua dos Alferes, 1234, Ap. 1001, Barra, Salvador, Bahia - CEP: '; 13 nome:= 'Jose da Silva Santos'; 14 CPF := ' '; 15 writeln('endereco: ', endereco, ' Cliente: ', nome, ' CPF: ', cpf); 16 readkey; 17 end. Edeyson Andrade Gomes

139 Apêndice C Exemplos de Código 139 C.1.7 Uso de Boolean em Pascal. 1 program BooleanEmPascal; 2 {Este programa vai demonstrar o tipo boolean do Pascal} 3 4 uses crt; 5 var 6 aprovado : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 7 maior, menor, igual : boolean; 8 9 begin 10 {Atribuições de valores às variáves} 11 {Atribui TRUE a aprovado} 12 aprovado := true; 13 {Atribui o resultado do teste: 2 > 1? a maior} 14 maior := 2 > 1; 15 {Atribui o resultado do teste: 2 > 1? a igual} 16 igual := 2 = 1; 17 {Atribui o resultado do teste: 2 > 1? a menor} 18 menor := 2 < 1; writeln('aprovado: ', aprovado); 21 writeln('2 > 1? eh: ', maior); 22 writeln('2 = 1 eh: ', menor); 23 writeln('2 = 1 eh: ', igual); 24 readkey; 25 end. C.1.8 Uso de Char em Pascal. 1 program CharEmPascal; 2 {Este programa vai demonstrar o tipo chardo Pascal} 3 4 uses crt; 5 var 6 letraaminuscula, letraamaiuscula : char; 7 letrabminuscula, letrabmaiuscula : char; 8 {char representa um único caracter.} 9 sexo : char; begin 12 {Atribuições de valores às variáves} 13 sexo := 'M'; 14 letraaminuscula := 'a'; 15 letraamaiuscula := #65; letrabminuscula := #98; 18 letrabmaiuscula := 'B'; writeln('sexo: ', sexo); 21 writeln('letras Maiusculas: ', letraamaiuscula, letrabmaiuscula); 22 writeln('letras Minusculas: ', letraaminuscula, letrabminuscula); 23 readkey; 24 end.

140 140 Programação com Pascal C2 - Operadores C Este programa demonstra o uso de operadores de concatenação de Strings. 1 program ConcatenacaoDeStrings; 2 {Este programa vai demonstrar a Concatenação de Strings em Pascal.} 3 uses crt; 4 var 5 nome : string[20]; {Definição de variáveis} 6 sobrenome : string[20]; 7 nomecompleto : string[40]; 8 9 begin 10 nome := 'Edeyson'; {Atribui Edeyson aa var. nome} 11 sobrenome:= 'Gomes'; {Atribui Gomes aa var. sobrenome} 12 nomecompleto := nome + ' ' + sobrenome; {Concatena nome e sobrenome} 13 writeln('nome Completo: ', nomecompleto); {Exibe o nome completo} readkey; 16 end. C Este programa demonstra o uso de operadores lógicos. 1 program OperadoresLogicos; 2 {Este programa vai demonstrar Operadores Lógicos do Pascal} 3 uses crt; 4 var 5 valorlogico : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 6 x, inicio, fim : integer; 7 8 begin 9 {Atribuições de valores às variáves} 10 inicio := 0; 11 fim := 10; 12 x := 5; valorlogico := (x > inicio) and (x > fim); 15 writeln('teste se ', x, ' eh > que ', inicio, ' E ', x, ' eh > que ', fim, ' : ', valorlogico); valorlogico := (x > inicio) and (x < fim); 18 writeln('teste se ', x, ' eh > que ', inicio, ' E ', x, ' eh < que ', fim, ' : ', valorlogico); valorlogico := (x > inicio) or (x > fim); 21 writeln('teste se ', x, ' eh > que ', inicio, ' OU ', x, ' eh > que ', fim, ' : ', valorlogico); valorlogico := ((x >= 1) and (x <= 5)) AND ((x >= 4) and (x <= 6)); 24 writeln('teste se ', x, ' esta entre 1 e 5 e se ', x, ' esta entre 4 e 6 simultaneamente : ', valorlogico); readkey; 27 end. Edeyson Andrade Gomes

141 Apêndice C Exemplos de Código 141 C Este programa demonstra o uso de operadores relacionais com Strings. 1 program OperadoresRelacionaisComString; 2 {Este programa vai demonstrar Operadores Relacionais do Pascal} 3 uses crt; 4 var 5 valorlogico : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 6 string1, string2 : string; 7 8 begin 9 {Atribuições de valores às variáves} 10 string1 := 'abc'; 11 string2 := 'def'; valorlogico := string1 = string2; 14 writeln('teste se ', string1, ' eh = a ', string2, ' : ', valorlogico); valorlogico := string1 > string2; 17 writeln('teste se ', string1, ' eh > que ', string2, ' : ', valorlogico); valorlogico := string1 < string2; 20 writeln('teste se ', string1, ' eh < que ', string2, ' : ', valorlogico); readkey; 23 end. C Este programa demonstra o uso de operadores relacionais com Inteiros.

142 142 Programação com Pascal 1 program OperadoresRelacionaisComInteger; 2 {Este programa vai demonstrar Operadores Relacionais do Pascal} 3 uses crt; 4 var 5 {Variáveis lógicas - podem ser TRUE ou FALSE} 6 valorlogico : boolean; 7 inteiro1, inteiro2 : integer; 8 9 begin 10 {Atribuições de valores às variáves} 11 inteiro1 := 10; 12 inteiro2 := 20; valorlogico := inteiro1 = inteiro2; 15 writeln('teste se ', inteiro1, ' eh = a ', inteiro2, ' : ', valorlogico); valorlogico := inteiro1 < inteiro2; 18 writeln('teste se ', inteiro1, ' eh < que ', inteiro2, ' : ', valorlogico); valorlogico := inteiro1 > inteiro2; 21 writeln('teste se ', inteiro1, ' eh > que ', inteiro2, ' : ', valorlogico); readkey; 24 end. C Este programa demonstra o uso de operadores relacionais com Reais. 1 program OperadoresRelacionaisComReal; 2 {Este programa vai demonstrar Operadores Relacionais do Pascal} 3 uses crt; 4 var 5 valorlogico : boolean; {Variáveis lógicas - podem ser TRUE ou FALSE} 6 real1, real2 : real; 7 8 begin 9 {Atribuições de valores às variáves} 10 real1 := 8/6; 11 real2 := 4/3; valorlogico := real1 > real2; 14 writeln('teste se ', real1:3:4, ' eh > que ', real2:3:4, ' : ', valorlogico); valorlogico := real1 = real2; 17 writeln('teste se ', real1:3:4, ' eh = a ', real2:3:4, ' : ', valorlogico); valorlogico := real1 < real2; 20 writeln('teste se ', real1:3:4, ' eh < que ', real2:3:4, ' : ', valorlogico); readkey; 23 end. Edeyson Andrade Gomes

143 Apêndice C Exemplos de Código 143 C Este programa demonstra o uso de operadores lógicos e Tabela Verdade. No programa são definidas duas proposições simples: p e q. Atribuem-se valores lógicos a p e q nas linhas 7, 12, 17 e 22. As outras linhas imprimem os resultados da conjunção e disjunção entre p e q. Vale lembrara que TRUE é Verdade e FALSE é Falso. 1 program TabelaVerdade; 2 uses crt; 3 var 4 p, q : boolean; 5 6 begin 7 p := true; q:= true; 8 writeln('p:', p, ' e q:', q, ' = ', p and q); 9 writeln('p:', p, ' ou q:', q, ' = ', p or q); writeln; 12 p := true; q:= false; 13 writeln('p:', p, ' e q:', q, ' = ', p and q); 14 writeln('p:', p, ' ou q:', q, ' = ', p or q); writeln; 17 p := false; q:= true; 18 writeln('p:', p, ' e q:', q, ' = ', p and q); 19 writeln('p:', p, ' ou q:', q, ' = ', p or q); writeln; 22 p := false; q:= false; 23 writeln('p:', p, ' e q:', q, ' = ', p and q); 24 writeln('p:', p, ' ou q:', q, ' = ', p or q); readkey; 27 end.

144 144 Programação com Pascal C3 - Condicionais C Este programa visa ler uma nota (variável real) e testá-la. Se a nota estiver no intervalo [0, 3) deve imprimir Sem Rendimento. Senão, se estiver no intervalo [3, 6) deve imprimir Medio. Senão, deve imprimir Superior. 1 program Condicioal01; 2 uses crt; 3 var 4 nota : real; 5 6 begin 7 writeln('digite uma nota'); 8 readln(nota); 9 10 if (nota >= 0) and (nota < 3) then 11 writeln('sem Rendimento') 12 else 13 if (nota >= 3) and (nota <= 6) then 14 writeln('medio') 15 else 16 writeln ('Superior'); 17 readkey; 18 end. C Este programa deve ler uma variável inteira e determinar se a mesma é par ou ímpar. Uma variável valor é par quando é divisível por 2, ou seja, se (valor mod 2 = 0). 10 program Paridade; 11 uses crt; 12 var 13 valor : integer; begin 16 writeln('digite o valor: '); 17 readln(valor); if (valor mod 2 = 0) then 20 writeln(valor, ' eh PAR') 21 else 22 writeln(valor, ' eh IMPAR'); readkey; 25 end. C Este programa deve: 1. Solicitar que o usuário digite o sexo da pessoa. 2. Ler o sexo da pessoa. 3. Solicitar a altura da pessoa em centímetros. 4. Ler a altura da pessoa. 5. Calcular o peso ideal da pessoa. a) Para homens (H): (72.7 * altura) - 58 Edeyson Andrade Gomes

145 Apêndice C Exemplos de Código 145 b) Para mulheres (M): (62.1 * altura) program pesoideal; 9 10 {importação da biblioteca CRT} 11 uses crt; var 14 {criação da variável sexo do tipo caracter - ou F ou M} 15 sexo : char; {criação da variável altura (em cm) do tipo inteiro} 18 altura : integer; {criação da variável peso do tipo real (ponto flutuante)} 21 peso : real; begin 24 {limpa a tela} 25 clrscr; {escreve no prompt de comando} 28 writeln('escolha o sexo: (F)eminino ou (M)asculino'); {esperando que o usuário pressione alguma tecla e atribuindo o caractere a variável sexo} 31 sexo := readkey; {tornando maiúscula(caixa alta), pois o usuário pode digitar em minúsculas} 34 sexo := upcase(sexo); {escreve no prompt do comando} 37 write('digite a altura em CM: '); {esperando queo usuário digite algo e atribua a variável altura} 40 readln(altura); {se sexo contiver M faça} 43 if(sexo = 'M') then 44 {realize o cálculo do peso ideal} 45 peso := ((72.7 * altura)/100) {do contrário, se sexo contiver F faça} 47 else 48 if(sexo='f') then 49 {realize o cálculo do peso ideal} 50 peso := ((62.7 * altura)/100) else 52 writeln('oh, Zeh, não sabe o que eh sexo???'); {escreva no prompt do comando + o valor da variável com 3 casas decimais e 2 após o ponto} 55 writeln('seu peso ideal: ', peso:3:2); {espera que algo seja teclado para finalizar o programa} 58 readkey; 59 end.

Linguagem Pascal. Prof. Sérgio Rodrigues. É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa;

Linguagem Pascal. Prof. Sérgio Rodrigues. É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa; Linguagem Pascal Prof. Sérgio Rodrigues Introdução Algoritmo É a descrição, de forma lógica, dos passos a serem executados no cumprimento de determinada tarefa; Programa é a formalização de um algoritmo

Leia mais

VARIÁVEIS NUMÉRICAS : integer - Números inteiros entre e real - Números reais de 11 algarismos significativos.

VARIÁVEIS NUMÉRICAS : integer - Números inteiros entre e real - Números reais de 11 algarismos significativos. TURBO PASCAL Histórico Origem: desenvolvida nos anos entre 1968 e 1970 por Nicklaus Wirth na Universidade Técnica de Zurique, Suíça. Em 1970 é disponibilizado o primeiro compilador para a linguagem. Objetivo:

Leia mais

Estrutura de decisão

Estrutura de decisão Estrutura de decisão Os comandos de decisão ou desvio fazem parte das técnicas de programação que conduzem a estruturas de programas que não são totalmente sequenciais. Com as instruções de SALTO ou DESVIO

Leia mais

CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS DISCIPLINA : INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO ASSUNTO: ALGORITMOS

CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS DISCIPLINA : INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO ASSUNTO: ALGORITMOS CURSO SUPERIOR DE TECNOLOGIA EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS DISCIPLINA : INTRODUÇÃO À LÓGICA DE PROGRAMAÇÃO ASSUNTO: ALGORITMOS PROFESSOR : Romilson Lopes Sampaio Introdução a Lógica de Programação

Leia mais

6) ESTRUTURA DE UM PROGRAMA

6) ESTRUTURA DE UM PROGRAMA Página 1 de 16 6) ESTRUTURA DE UM PROGRAMA = = program ; = uses

Leia mais

Linguagem Computacional. Estruturas de Controle: Estruturas de Repetição. Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves

Linguagem Computacional. Estruturas de Controle: Estruturas de Repetição. Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves Informática II Linguagem Computacional Estruturas de Controle: Estruturas de Repetição Prof. Dr. Adriano Cansian Prof. Dr. Leandro Alves Neves 1 Sumário q Estruturas de Controle de Fluxo Repetição Enquanto

Leia mais

Algoritmos. Edeyson Andrade Gomes

Algoritmos. Edeyson Andrade Gomes Algoritmos edeyson@ifba.edu.br Agenda Introdução Lógica Definições Básicas Lógica de Programação Nomenclaturas Simbologias 2 Introdução Introdução O que é a Lógica? Maneira particular de raciocinar Conjunto

Leia mais

ENGENHARIA DE PRODUÇÃO ICC 1 TÉCNICAS DE PROGRAMAÇÃO

ENGENHARIA DE PRODUÇÃO ICC 1 TÉCNICAS DE PROGRAMAÇÃO ENGENHARIA DE PRODUÇÃO ICC 1 TÉCNICAS DE PROGRAMAÇÃO 1. INTRODUÇÃO O que é um programa? Programa constitui uma seqüência lógica de passos para solução de um problema. Um programa pode ser codificado em

Leia mais

Linguagem Pascal. Prof. Antonio Almeida de Barros Junior

Linguagem Pascal. Prof. Antonio Almeida de Barros Junior Linguagem Pascal Prof. Antonio Almeida de Barros Junior 1 Linguagem Pascal Criada para ser uma ferramenta educacional (Década de 70); Prof. Niklaus Wirth (Universidade de Zurique); Blaise Pascal (Matemático

Leia mais

Programação Estruturada

Programação Estruturada Algoritmos e Técnicas - Estruturas de Controle de Fluxo - Programação Estruturada Programação estruturada é a técnica de construir e formular algoritmos de uma forma sistemática. Utilizada para apresentar

Leia mais

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95

PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95 PROGRAMAÇÃO de COMPUTADORES: LINGUAGEM FORTRAN 90/95 Exercícios de revisão Lista 01: a) Monte um mapa conceitual indicando as relações entre os seguintes conceitos, no contexto do assunto visto em aula:

Leia mais

2.2.5 EXPRESSÕES - Regras para o cálculo de valores

2.2.5 EXPRESSÕES - Regras para o cálculo de valores Métodos de Programação I Departamento de Matemática, FCTUC 30 2.2.5 EXPRESSÕES - Regras para o cálculo de valores As expressões fornecidas ao computador, quer tenham variáveis, constantes ou apenas literais,

Leia mais

Algoritmos e Programação

Algoritmos e Programação Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;

Leia mais

Aula 3: Algoritmos: Formalização e Construção

Aula 3: Algoritmos: Formalização e Construção Aula 3: Algoritmos: Formalização e Construção Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Algoritmos: Formalização e Pseudo-Código Programação de

Leia mais

Sumário. Ciência da Computação. Prof. Dr. Leandro Alves Neves. Aula 10. Algoritmos e Programação. Enquanto (Teste no início) Repeat (Teste no final)

Sumário. Ciência da Computação. Prof. Dr. Leandro Alves Neves. Aula 10. Algoritmos e Programação. Enquanto (Teste no início) Repeat (Teste no final) Algoritmos e Programação Informática II Ciência da Computação Prof. Dr. Leandro Alves Neves Aula 10 1 Sumário Estruturas de Controle de Fluxo q Repetição Enquanto (Teste no início) Repeat (Teste no final)

Leia mais

Estrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas

Estrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas Estrutura de um Algoritmo, Variáveis, Comandos de Entrada e Saída e Expressões Aritméticas Estrutura de um Programa em Linguagem Algorítmica Nesse curso nós vamos utilizar a linguagem algorítmica para

Leia mais

Algoritmo e Programação Matemática

Algoritmo e Programação Matemática Algoritmo e Programação Matemática Fundamentos de Algoritmos Parte 1 Renato Dourado Maia Instituto de Ciências Agrárias Universidade Federal de Minas Gerais Dados A funcionalidade principal de um computador

Leia mais

Linguagem de programação: Pascal

Linguagem de programação: Pascal Aula 04 Linguagem de programação: Pascal Prof. Tecgº Flávio Murilo 26/03/2013 1 Pascal Introdução Pascal é uma linguagem de programação estruturada, criada em 1970 pelo suíço Niklaus Wirth, dando este

Leia mais

Linguagem Pascal. Definição e Tipos de Dados. Professora Lara Popov Zambiasi Bazzi Oberderder. Linguagem PASCAL 1

Linguagem Pascal. Definição e Tipos de Dados. Professora Lara Popov Zambiasi Bazzi Oberderder. Linguagem PASCAL 1 Linguagem Pascal Definição e Tipos de Dados Professora Lara Popov Zambiasi Bazzi Oberderder Linguagem PASCAL 1 Origem Linguagem de programação largamente utilizada no ensinoaprendizagem de programação

Leia mais

Processamento de Dados aplicado à Geociências. AULA 3: Algoritmos computacionais Representação de Algoritmos Sintaxe Tipos de dados Expressões

Processamento de Dados aplicado à Geociências. AULA 3: Algoritmos computacionais Representação de Algoritmos Sintaxe Tipos de dados Expressões Processamento de Dados aplicado à Geociências 1 AULA 3: Algoritmos computacionais Representação de Algoritmos Sintaxe Tipos de dados Expressões UNIVERSIDADE FEDERAL DE PELOTAS CENTRO DE DESENVOLVIMENTO

Leia mais

I - CONCEITOS INICIAIS

I - CONCEITOS INICIAIS Sumário I - CONCEITOS INICIAIS... 2 Lógica de programação... 2 Algoritmo... 2 Instrução... 3 Programa de Computador... 3 Fases... 4 Diagrama de Blocos... 4 II - VARIÁVEIS... 5 Numéricas... 5 Cadeia ou

Leia mais

Aula 4 Introdução ao C

Aula 4 Introdução ao C Considere o nosso MSC. O Processador Central, entende o conjunto de instruções, leia, imprima, atribuição e condicional e com ela resolvemos vários problemas, construindo vários algoritmos. As instruções

Leia mais

BCC Introdu c ao ` a Programa c ao Portugol Guillermo C amara-ch avez UFOP 1/35

BCC Introdu c ao ` a Programa c ao Portugol Guillermo C amara-ch avez UFOP 1/35 BCC 201 - Introdução à Programação Portugol Guillermo Cámara-Chávez UFOP 1/35 Introdução I Lógica A lógica é usada no dia a dia das pessoas que trabalham com computação para solucionar problemas de forma

Leia mais

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Condicionais e de Repetição 1 Comando while Deseja-se calcular o valor de: 1 + 2 + 3 +... + N. Observação: não sabemos, a priori, quantos termos

Leia mais

Algoritmos e Programação

Algoritmos e Programação Algoritmos e Programação Aula 2 Elementos fundamentais de Algoritmos, Conceitos de Variáveis Profa. Marina Gomes marinagomes@unipampa.edu.br 21/03/2017 Engenharia de Computação - Unipampa 1 Aula de Hoje

Leia mais

Programação Introdução

Programação Introdução PROGRAMAÇÃO Programação Introdução Prof. Dr. Adriano Mauro Cansian 1 Introdução Para armazenar um algoritmo na memória de um computador e para que ele possa, em seguida, comandar as operações a serem executadas,

Leia mais

FACCAT Sistemas de Informação. Estruturas de Dados

FACCAT Sistemas de Informação. Estruturas de Dados FACCAT Sistemas de Informação Estruturas de Dados Aula 1 http://professores.faccat.br/azambuja (Estrutura de Dados) Definição de variáveis Podemos imaginar uma variável como o local onde se pode colocar

Leia mais

Noções de algoritmos - Aula 1

Noções de algoritmos - Aula 1 Noções de algoritmos - Aula 1 Departamento de Física UFPel Definição de algoritmo Sequência ordenada e finita de operações para a realização de uma tarefa. Tarefa: Experimento de Física I. Passo 1: Reunir

Leia mais

Programação Procedimental

Programação Procedimental Programação Procedimental Maria Adriana Vidigal de Lima Universidade Federal de Uberlândia - 2013 1 Escrita de Algoritmos 1.1 Técnicas de Programação e Algoritmos Na elaboração de programas maiores e complexos

Leia mais

CONCEITOS DE ALGORITMOS

CONCEITOS DE ALGORITMOS CONCEITOS DE ALGORITMOS Fundamentos da Programação de Computadores - 3ª Ed. 2012 Editora Prentice Hall ISBN 9788564574168 Ana Fernanda Gomes Ascênsio Edilene Aparecida Veneruchi de Campos Algoritmos são

Leia mais

Aula 7: Estrutura de Decisão

Aula 7: Estrutura de Decisão Aula 7: Estrutura de Decisão Fernanda Passos Universidade Federal Fluminense Programação de Computadores IV Fernanda Passos (UFF) Estrutura de Decisão Programação de Computadores IV 1 / 27 Agenda 1 Revisão

Leia mais

Procedimento. Função. Selecção Condicional - a instrução if-then-else. expressão if lógica then instrução else instrução

Procedimento. Função. Selecção Condicional - a instrução if-then-else. expressão if lógica then instrução else instrução Métodos de Programação I 2. 20 2.2.8 ESTRUTURAS DE CONTROLO Estruturas de controlo são instruções especiais em Pascal que permitem controlar o fluxo de sequência de instruções, alterando a ordem sequencial

Leia mais

Estruturas de Repetição

Estruturas de Repetição Algoritmos e Estruturas de Dados I (DCC/003) Estruturas de Repetição Aula Tópico 4 (while, for) 1 Problema 10 Suponha que soma (+) e subtração (-) são as únicas operações disponíveis em C. Dados dois números

Leia mais

Algoritmos e Estrutura de Dados I Conceitos de Algoritmos. Prof. Elyssandro Piffer

Algoritmos e Estrutura de Dados I Conceitos de Algoritmos. Prof. Elyssandro Piffer Algoritmos e Estrutura de Dados I Conceitos de Algoritmos Prof. Elyssandro Piffer CONCEITO DE ALGORITMO O computador pode auxiliar em muitas tarefas, contudo ele não possui independência, não é inteligente,

Leia mais

Elementos básicos das linguagens de programação

Elementos básicos das linguagens de programação Elementos básicos das linguagens de programação Objetivos: Apresentar os últimos elementos básicos das linguagens de programação Elementos básicos já estudados Entrada (read, readln) Saída (write, writeln)

Leia mais

APÊNDICE A - FUNDAMENTOS DA LINGUAGEM DE PROGRAMAÇÃO PASCAL.

APÊNDICE A - FUNDAMENTOS DA LINGUAGEM DE PROGRAMAÇÃO PASCAL. APÊNDICE A - FUNDAMENTOS DA LINGUAGEM DE PROGRAMAÇÃO PASCAL. 1. INTRODUÇÃO Este apêndice tem o objetivo de fornecer as regras básicas para transformar algoritmos (em Natural) em programas (em PASCAL).

Leia mais

ALGORITMOS E TÉCNICAS DE PROGRAMAÇÃO

ALGORITMOS E TÉCNICAS DE PROGRAMAÇÃO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE ALGORITMOS E TÉCNICAS DE PROGRAMAÇÃO Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com eberton.marinho@ifrn.edu.br

Leia mais

A única diferença entre o difícil e o impossível é que o último demora um pouco mais de tempo para ser alcançado..

A única diferença entre o difícil e o impossível é que o último demora um pouco mais de tempo para ser alcançado.. Técnicas de Programação em Engenharia Elétrica I - Engenharia de Sistemas Embarcados - Introdução aos Algoritmos A única diferença entre o difícil e o impossível é que o último demora um pouco mais de

Leia mais

Pascal. -Cabeçalho do programa. - label - const - type - var - procedure - function. - integer - real - byte - boolean - char - string

Pascal. -Cabeçalho do programa. - label - const - type - var - procedure - function. - integer - real - byte - boolean - char - string Pascal -Cabeçalho do programa Áreas do programa -Área de declarações -Corpo do programa - label - const - type - var - procedure - function - integer - real - byte - boolean - char - string Program

Leia mais

INFORMÁTICA APLICADA AULA 02 ALGORITMOS

INFORMÁTICA APLICADA AULA 02 ALGORITMOS UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: Bacharelado em Ciências e Tecnologia INFORMÁTICA APLICADA AULA 02 ALGORITMOS Profª ª Danielle Casillo ALGORITMOS Um algoritmo é uma sequência de instruções

Leia mais

LINGUAGEM C: COMANDOS DE REPETIÇÃO

LINGUAGEM C: COMANDOS DE REPETIÇÃO LINGUAGEM C: COMANDOS DE REPETIÇÃO Prof. André Backes ESTRUTURAS DE REPETIÇÃO Uma estrutura de repetição permite que uma sequência de comandos seja executada repetidamente, enquanto determinadas condições

Leia mais

I1, I2 e In são instruções simples ou estruturadas da linguagem Pascal.

I1, I2 e In são instruções simples ou estruturadas da linguagem Pascal. Capítulo 4 TESTES, ESCOLHAS E MALHAS DE REPETIÇÃO 1. INTRODUÇÃO Em muitos exemplos e exercícios realizados nos capítulos anteriores, não foram raras as vezes em que fizemos uso de elementos disponíveis

Leia mais

Professor Mauricio Lederer Algoritmos. Entrada e saída de dados

Professor Mauricio Lederer Algoritmos. Entrada e saída de dados Entrada Algoritmos Entrada e saída de dados Muitas vezes, um algoritmo, para que possa trabalhar, precisa de dados de entrada informados pelo usuário, porque nem sempre é necessário ter esse tipo de dados.

Leia mais

Conceitos Básicos. Professor: Juliano Lucas Gonçalves.

Conceitos Básicos. Professor: Juliano Lucas Gonçalves. Conceitos Básicos Professor: Juliano Lucas Gonçalves juliano.goncalves@ifsc.edu.br Agenda Revisão Algoritmos Memória, variáveis e constantes Estrutura básica de um algoritmo em pseudocódigo 2 O que já

Leia mais

CAI Fluxograma Revisão 7

CAI Fluxograma Revisão 7 exatasfepi.com.br CAI Fluxograma Revisão 7 André Luís Duarte O coração do entendido adquire o conhecimento, e o ouvido dos sábios busca a sabedoria. Pv 18:15 Fluxograma Introdução Formas básicas Estrutura

Leia mais

Linguagem de Programação Pascal - Introdução

Linguagem de Programação Pascal - Introdução Linguagem de Programação Pascal - Introdução História Pascal é uma linguagem de programação que recebeu o seu nome em homenagem ao matemático Blaise Pascal. A linguagem Pascal foi criada em 1970 pelo suíço

Leia mais

PDA - Repetição. Estruturas de repetição. Slides adaptação de Deise Saccol

PDA - Repetição. Estruturas de repetição. Slides adaptação de Deise Saccol PDA - Repetição Estruturas de repetição Slides adaptação de Deise Saccol 1 Existem situações em que o processamento de um valor uma única vez não é suficiente para resolver o problema. Quando isto ocorre,

Leia mais

Técnicas de Programação

Técnicas de Programação Técnicas de Programação Algoritmos Anderson Gomes Eleutério Lógica A lógica de programação é necessária para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir

Leia mais

Lógica de Programação I. Gilson de Souza Carvalho

Lógica de Programação I. Gilson de Souza Carvalho Gilson de Souza Carvalho gaucho.gilson@hotmail.com 1. Estruturas básicas Apresentaremos um resumo com os comandos estudados para criação de algoritmos. Para utilizar estes comandos, usaremos uma sintaxe

Leia mais

ALGORITMOS E APLICAÇÕES. FATEC IPIRANGA ADS Noturno 1º semestre de 2012 Prof. Luiz Carlos de Jesus Junior

ALGORITMOS E APLICAÇÕES. FATEC IPIRANGA ADS Noturno 1º semestre de 2012 Prof. Luiz Carlos de Jesus Junior ALGORITMOS E APLICAÇÕES FATEC IPIRANGA ADS Noturno 1º semestre de 2012 Prof. Luiz Carlos de Jesus Junior Formato Básico do Pseudocódigo Tipos de dados O VisuAlg prevê quatro tipos de dados: inteiro, real,

Leia mais

Teoria da Computação e Algoritmos. Introdução à Linguagem Pascal. ALGORITMO <Nome do algoritmo>; <definições>; INÍCIO <Comandos>; FIM.

Teoria da Computação e Algoritmos. Introdução à Linguagem Pascal. ALGORITMO <Nome do algoritmo>; <definições>; INÍCIO <Comandos>; FIM. Teoria da Computação e Algoritmos Introdução à Linguagem Pascal 1 Estrutura de um programa INÍCIO FIM. PROGRAM END.

Leia mais

Noções de algoritmos - Aula 1

Noções de algoritmos - Aula 1 Noções de algoritmos - Aula 1 Departamento de Física UFPel Definição de algoritmo Sequência ordenada e finita de operações para a realização de uma tarefa. Tarefa: Experimento de Física I. Passo 1: Reunir

Leia mais

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática Programação 1 Prof. Osório Aula 03 Pag.: 1 UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática PROGRAMAÇÃO I AULA 03 Disciplina: Linguagem

Leia mais

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO LÓGICA DE PROGRAMAÇÃO PROFª. M.Sc. JULIANA H Q BENACCHIO Expressando a lógica em programação Ferramentas gráficas: diagramas e fluxogramas; Ferramentas textuais: pseudocódigos ou metalinguagens (Português

Leia mais

Programação de Redes de Computadores

Programação de Redes de Computadores 1: Introdução 1 MINISTÉRIO DA EDUCAÇÃO SECRETARIA DE EDUCAÇÃO PROFISSIONAL E TECNOLÓGICA INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA CAMPUS SÃO JOSÉ SANTA CATARINA Programação de Redes de Computadores

Leia mais

TÉCNICO DE INFORMÁTICA - SISTEMAS

TÉCNICO DE INFORMÁTICA - SISTEMAS 782 - Programação em C/C++ - estrutura básica e conceitos fundamentais Linguagens de programação Linguagem de programação são conjuntos de palavras formais, utilizadas na escrita de programas, para enunciar

Leia mais

Variáveis, Tipos de Dados e Operadores

Variáveis, Tipos de Dados e Operadores ! Variáveis, Tipos de Dados e Operadores Engenharias Informática Aplicada 2.o sem/2013 Profa Suely (e-mail: smaoki@yahoo.com) VARIÁVEL VARIÁVEL É um local lógico, ligado a um endereço físico da memória

Leia mais

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: estruturas de repetição While / Do While / For

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: estruturas de repetição While / Do While / For Universidade Federal de Uberlândia Faculdade de Computação Linguagem C: estruturas de repetição While / Do While / For Prof. Renato Pimentel 1 Estruturas de repetição O real poder dos computadores está

Leia mais

Programação Estruturada Aula VisualG

Programação Estruturada Aula VisualG Programação Estruturada Aula VisualG Prof. Flávio Barros flavioifma@gmail.com www.flaviobarros.com.br 2 CRIANDO ALGORITMO CRIANDO ALGORITMO Passos para construir Algoritmos Ler enunciado do problema, compreendendo-o

Leia mais

Algoritmos Lógica e Programação Prof. Me. Adelson Felipe Dias Nogueira

Algoritmos Lógica e Programação Prof. Me. Adelson Felipe Dias Nogueira Algoritmos Lógica e Programação 2016-2 Prof. Me. Adelson Felipe Dias Nogueira E-mail: adelson.nogueira@pitagoras.com.br PORTUGUES ESTRUTURADO o o o o Para que o algoritmo possa ser executado por uma máquina

Leia mais

Fundamentos de Lógica e Algoritmos Aula 2.5 Conceitos Básicos de Algoritmos. Prof. Dr. Bruno Moreno

Fundamentos de Lógica e Algoritmos Aula 2.5 Conceitos Básicos de Algoritmos. Prof. Dr. Bruno Moreno Fundamentos de Lógica e Algoritmos Aula 2.5 Conceitos Básicos de Algoritmos Prof. Dr. Bruno Moreno bruno.moreno@ifrn.edu.br Introdução Um algoritmo pode ser definido como uma sequência finita de passos

Leia mais

Laços de repetição for, while, do-while

Laços de repetição for, while, do-while Computação Eletrônica Laços de repetição for, while, do-while Prof: Luciano Barbosa Estruturas de Repetição Imagine um programa que calcula a média de um aluno. Este programa é bastante simples, bastaria:

Leia mais

Algoritmos. Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi

Algoritmos. Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi Algoritmos Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi Conceitos Linhas de Código de um Algoritmo ou Programa escrita do programa linha a linha, ou seja, a sintaxe do programa, podendo-se

Leia mais

Programação de Computadores III

Programação de Computadores III Programação de Computadores III Pseudocódigo e Estruturas Básicas de Controle Professor Hugo de Oliveira Barbalho hbarbalho@ic.uff.br Material produzido pelo professor: Leandro Augusto Frata Fernandes

Leia mais

Informática Fundamentos em C++ Revisão 1

Informática Fundamentos em C++ Revisão 1 exatasfepi.com.br Informática Fundamentos em C++ Revisão 1 André Luís Duarte Feliz é o homem que acha sabedoria, e o homem que adquire entendimento; Provérbios 3:13 Conceitos em Programação Técnicas de

Leia mais

SSC304 Introdução à Programação Para Engenharias

SSC304 Introdução à Programação Para Engenharias Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação Introdução à Para Engenharias Algoritmos e Lógica de GE4 Bio GE4Bio Grupo de Estudos em

Leia mais

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com eberton.marinho@gmail.com

Leia mais

Prof. Jorge Cavalcanti

Prof. Jorge Cavalcanti Universidade Federal do Vale do São Francisco Curso de Engenharia de Computação Introdução a Algoritmos Parte 02 (baseado no material do prof. Marcelo Linder) Prof. Jorge Cavalcanti jorge.cavalcanti@univasf.edu.br

Leia mais

ESTRUTURAS DE REPETIÇÃO - PARTE 1

ESTRUTURAS DE REPETIÇÃO - PARTE 1 AULA 15 ESTRUTURAS DE REPETIÇÃO - PARTE 1 15.1 O comando enquanto-faca- Considere o problema de escrever um algoritmo para ler um número inteiro positivo, n, e escrever todos os números inteiros de 1 a

Leia mais

4. Constantes. Constantes pré-definidas

4. Constantes. Constantes pré-definidas 4. Constantes Constantes pré-definidas O PHP possui algumas constantes pré-definidas, indicando a versão do PHP, o Sistema Operacional do servidor, o arquivo em execução, e diversas outras informações.

Leia mais

Oficina de Introdução de Programação usando Linguagem Python Prof. Ms. Perini

Oficina de Introdução de Programação usando Linguagem Python Prof. Ms. Perini Oficina de Introdução de Programação usando Linguagem Python Prof. Ms. Perini Apresentação do Professor Professor: José Carlos Perini E-mail: jose.perini@metrocamp.edu.br Blog: http://profperini.com Formação

Leia mais

Programação de Computadores:

Programação de Computadores: Instituto de C Programação de Computadores: Pseudocódigo e Estruturas Básicas de Controle Luis Martí Instituto de Computação Universidade Federal Fluminense lmarti@ic.uff.br - http://lmarti.com Roteiro

Leia mais

Comandos de desvio de fluxo. Expressões lógicas.

Comandos de desvio de fluxo. Expressões lógicas. BCC701 Programação de Computadores I Universidade Federal de Ouro Preto Departamento de Ciência da Computação www.decom.ufop.br/bcc701 2012/01 Semana 03 Comandos de desvio de fluxo. Expressões lógicas.

Leia mais

Estruturas de Repetição

Estruturas de Repetição Estruturas de Repetição Introdução As estruturas de repetição, permitem executar mais de uma vez um mesmo trecho de código. Trata-se de uma forma de executar blocos de comandos somente sob determinadas

Leia mais

Portugol. Tiago Alves de Oliveira

Portugol. Tiago Alves de Oliveira Portugol Tiago Alves de Oliveira Revisando Algoritmo: Sequência finita de passos que levam à execução de uma tarefa Claro e preciso. Ex. somar dois números Algoritmo precisa seguir uma sequência lógica

Leia mais

Oficina de Python Prof. Me. José Carlos Perini

Oficina de Python Prof. Me. José Carlos Perini Oficina de Python Prof. Me. José Carlos Perini Prof. José Carlos Perini Formação em Análise de Sistemas Univ. S. Francisco Pós em Administração Universidade S. Francisco Mestrado em Ciência da Computação

Leia mais

Oficina de Python Prof. Me. José Carlos Perini

Oficina de Python Prof. Me. José Carlos Perini Oficina de Python Prof. Me. José Carlos Perini Prof. José Carlos Perini Formação em Análise de Sistemas Univ. S. Francisco Pós em Administração Universidade S. Francisco Mestrado em Ciência da Computação

Leia mais

Introdução a Lógica de Programação

Introdução a Lógica de Programação Introdução a Lógica de Programação O processo de programação é uma conversa controlada entre um ser humano (tecnicamente preparado) e um computador Linguagem Linguagem de baixo nível Grande dificuldade,

Leia mais

Métodos de Programação I Ana Maria de Almeida

Métodos de Programação I Ana Maria de Almeida Métodos de Programação I 2. 13 type naipe = ( ouros, copas, paus, espadas ); var trunfo : naipe; Claro que são apenas identificadores e não existirá a mesma escolha de operadores e funções sobre eles que

Leia mais

Algoritmos Computacionais

Algoritmos Computacionais Material produzido por professores da UFABC Objetivos Aprender a sintaxe e a semântica de instruções de saída e de entrada de dados na linguagem PORTUGOL Aprender alguns operadores pra uso na parte de

Leia mais

Programação de Computadores III

Programação de Computadores III Programação de Computadores III Pseudocódigo e Estruturas Básicas de Controle Professor Leandro Augusto Frata Fernandes laffernandes@ic.uff.br Material disponível em http://www.ic.uff.br/~laffernandes/teaching/2013.1/tcc-00.157

Leia mais

Algoritmos e Estruturas de Dados I. Universidade Federal de São João del-rei Pedro Mitsuo Shiroma Sala 119 Bloco 3

Algoritmos e Estruturas de Dados I. Universidade Federal de São João del-rei Pedro Mitsuo Shiroma Sala 119 Bloco 3 Algoritmos e Estruturas de Dados I Universidade Federal de São João del-rei Pedro Mitsuo Shiroma Sala 119 Bloco 3 Exercício - Seleção Escreva um algoritmo que leia o ano, mês e dia que uma pessoa nasceu

Leia mais

Lógica e Linguagem de Programação Aula 04 - Estruturas de Repetição Repetição com Teste no Final - Repita Até - GABARITO Professor: Danilo Giacobo

Lógica e Linguagem de Programação Aula 04 - Estruturas de Repetição Repetição com Teste no Final - Repita Até - GABARITO Professor: Danilo Giacobo Lógica e Linguagem de Programação Aula 04 - Estruturas de Repetição Repetição com Teste no Final - Repita Até - GABARITO Professor: Danilo Giacobo Este guia irá lhe ajudar a entender o laço de repetição

Leia mais

JavaScript (ou JScript)

JavaScript (ou JScript) 1. Introdução JavaScript (ou JScript) Uma linguagem como o JavaScript permite criar interfaces interativas na web (permite a interação do usuário). Para desenvolver web sites interativos precisamos de

Leia mais

SEBENTA INTRODUÇÃO Á ALGORITMIA

SEBENTA INTRODUÇÃO Á ALGORITMIA SEBENTA INTRODUÇÃO Á ALGORITMIA O desenvolvimento de programas para computador está sempre baseado na tarefa de programar um computador para seja resolvido um problema ou executada uma função e assim dar

Leia mais

Algoritmo. Prof. Anderson Almeida Ferreira. Agradeço ao prof. Guilherme Tavares de Assis por fornecer slides que fazem parte desta apresentação

Algoritmo. Prof. Anderson Almeida Ferreira. Agradeço ao prof. Guilherme Tavares de Assis por fornecer slides que fazem parte desta apresentação 1 Algoritmo Prof. Anderson Almeida Ferreira Agradeço ao prof. Guilherme Tavares de Assis por fornecer slides que fazem parte desta apresentação Desenvolvimento de programas 2 Análise do problema Desenvolvimento

Leia mais

Capítulo 1 Conceitos Básicos

Capítulo 1 Conceitos Básicos Capítulo 1 Conceitos Básicos Licenciatura em Computação Fundamentos de Lógica para Programação Prof. Nícolas Trigo nicolas.trigo@ifsertao-pe.edu.br http://professor.ifsertao-pe.edu.br/nicolas.trigo Introdução

Leia mais

AEDI Fundamentos Revisão 1

AEDI Fundamentos Revisão 1 exatasfepi.com.br AEDI Fundamentos Revisão 1 André Luís Duarte Feliz é o homem que acha sabedoria, e o homem que adquire entendimento; Provérbios 3:13 Conceitos em Programação Técnicas de algoritmos Descrição

Leia mais

Algoritmos. Seqüência finita e ordenada de procedimentos que resolvem um determinado problema. Exemplo: O que preciso fazer para preparar um omelete?

Algoritmos. Seqüência finita e ordenada de procedimentos que resolvem um determinado problema. Exemplo: O que preciso fazer para preparar um omelete? Algoritmos Seqüência finita e ordenada de procedimentos que resolvem um determinado problema Exemplo: O que preciso fazer para preparar um omelete? Pegar os ovos na geladeira; Bater os ovos; Escolher o

Leia mais

Disciplina Programação Prof. Esp. Armando Hage. Programação em Turbo Pascal

Disciplina Programação Prof. Esp. Armando Hage. Programação em Turbo Pascal Disciplina Programação Prof. Esp. Armando Hage Programação em Turbo Pascal Introdução A linguagem de programação pascal foi escrita por Niklaus Wirth entre 1969 e 1971, e deriva das linguagens ALGOL-60

Leia mais

LINGUAGEM E TECNICAS DE PROGRAMAÇÃO

LINGUAGEM E TECNICAS DE PROGRAMAÇÃO LINGUAGEM E TECNICAS DE PROGRAMAÇÃO Aula 03 Lógica Entrada de dados Lógica Lógica, no seu sentido mais amplo, está presente em todos os passos de nossas vidas, servindo de base para resolução de nossos

Leia mais

Mini apostila de Python - Oficina de Vestibulandos. PET Computação - UFPR September 2016

Mini apostila de Python - Oficina de Vestibulandos. PET Computação - UFPR September 2016 Mini apostila de Python - Oficina de Vestibulandos PET Computação - UFPR September 2016 1 Sumário 1 Introdução 3 2 Obtenção e Instalação 3 3 Variáveis 3 4 Operações Matemáticas 5 5 Entrada de Dados 6 6

Leia mais

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho

Linguagem e Técnicas em Programação. Gilson de Souza Carvalho Gilson de Souza Carvalho gaucho.gilson@hotmail.com 3.1.3 Condições compostas Linguagem e Técnicas em Programação As condições que vimos até agora sempre foram únicas. Entretanto, conforme aumenta a complexidade

Leia mais

Python 3.x Estrutura de Repetição while

Python 3.x Estrutura de Repetição while Python 3.x Estrutura de Repetição while Introdução à Ciência da Computação Prof. Edison Ishikawa Sumário Atribuição Atualizando variáveis Iterações Revisitando o laço for Laço while Rastreando um programa

Leia mais

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema ALGORITMIA Resolução De Problemas Em Informática Docente: Ana Paula Afonso 2000-2001 Resolução de Problemas 1. Analisar o problema Conhecer o bem o problema Descrever o problema: subdividir, detalhar 2.

Leia mais

Aula 4: Introdução à Linguagem C++

Aula 4: Introdução à Linguagem C++ CI208 - Programação de Computadores Aula 4: Introdução à Linguagem C++ Prof. MSc. Diego Roberto Antunes diegor@inf.ufpr.br www.inf.ufpr.br/diegor Universidade Federal do Paraná Setor de Ciências Exatas

Leia mais

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática

UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática Programação 1 Prof. Osório Aula 05 Pag.: 1 UNISINOS - UNIVERSIDADE DO VALE DO RIO DOS SINOS CENTRO DE CIÊNCIAS EXATAS E TECNOLÓGICAS (C6/6) Curso: Informática PROGRAMAÇÃO I AULA 05 Disciplina: Linguagem

Leia mais

Introdução a Algoritmos - Revisão

Introdução a Algoritmos - Revisão Introdução a Algoritmos - Revisão O computador é uma máquina capaz de seguir uma certa espécie de algoritmos, chamados programas Ele possui uma memória, capaz de armazenar dados, e uma unidade aritmética,

Leia mais

LINGUAGEM ALGORÍTMICA

LINGUAGEM ALGORÍTMICA LINGUAGEM ALGORÍTMICA Adriano Mauro Cansian André Proto UNESP - São José do Rio Preto Linguagem Computacional Introdução! Para uma melhor padronização de nosso estudos, vamos agora definir uma linguagem

Leia mais