i Algoritmos Notas de aulas Prof. Aluísio Eustáquio da Silva Betim, Fevereiro de 2012 ii Sumário Introdução ................................................................................................... 1 Objetivos .................................................................................................... 2 Objetivos gerais .......................................................................................... 2 Objetivos específicos .................................................................................. 2 Conceitos .................................................................................................... 2 Elementos básicos de um algoritmo ........................................................... 5 Dados ......................................................................................................... 5 Tipos de dados ........................................................................................... 5 Dados numéricos ....................................................................................... 5 Dados lógicos ............................................................................................. 6 Dados literais .............................................................................................. 6 Identificação de variáveis ........................................................................... 7 Declaração de variáveis .............................................................................. 8 Operadores ................................................................................................. 8 Operador de atribuição ............................................................................... 8 Operadores aritméticos ............................................................................... 9 Funções ...................................................................................................... 11 Algumas funções matemáticas ................................................................... 11 Comandos de entrada ................................................................................ 13 Comandos de saída ..................................................................................... 13 Comentários ................................................................................................ 14 Estrutura de um algoritmo .......................................................................... 15 Estruturas sequenciais ................................................................................ 16 Exemplo 1 – Calcular Massa corporal ....................................................... 16 Exemplo 2 - Converter Megabytes em Bytes ............................................ 17 Exemplo 3 - Calcular o salário a receber .................................................. 18 Exemplo 4 - Calcular descontos ................................................................ 19 Exemplo 5 - Simular Caixa Eletrônico ...................................................... 20 Exemplo 6 - Calcular área, perímetro e diagonal de um quadrado ........... 22 Exemplo 7 - Transformar graus em radianos ............................................ 23 Exemplo 8 - Transforma milhas náuticas em metros ................................ 24 Exemplo 9 – “Separar” os algarismos de um número inteiro .................... 25 Exemplo 10 – Calcular digito verificador do código de um produto ......... 26 iii Lista de exercícios 1 ................................................................................... 27 Lista de exercícios 2 ................................................................................... 29 Lista de exercícios 3 ................................................................................... 31 Lista de exercícios 4 ................................................................................... 32 Estruturas condicionais ............................................................................... 33 Proposições ................................................................................................. 33 Operadores relacionais ............................................................................... 34 Operadores lógicos ..................................................................................... 35 Estruturas condicionais simples ................................................................. 36 Estruturas condicionais duplas ................................................................... 37 Exemplo 11 – Verificar se um número é positivo, negativo ou nulo ......... 38 Exemplo 12 – Verificar se uma pessoa é maior de idade ........................... 40 Exemplo 13 – Calcular a razão entre dois números ................................... 41 Exemplo 14 – Verificar se um número é divisível por 2 e 11 .................... 42 Exemplo 15 – Associar nome e telefone .................................................... 43 Exemplo 16 – Verificar tipo de caractere ................................................... 45 Lista de exercícios 5 ................................................................................... 46 Lista de exercícios 6 ................................................................................... 48 Estruturas de repetição ............................................................................... 49 Repetição com condição no início .............................................................. 49 Exemplo 17 – Escrever números ímpares .................................................. 50 Exemplo 18 – Calcular maior altura ........................................................... 51 Exemplo 19 – Apurar pesquisa .................................................................. 52 Exemplo 20 – Calcular tempo de desintegração de material radioativo .... 54 Estruturas de repetição com variável de controle ....................................... 55 Exemplo 21 – Tabuada de multiplicação ................................................... 55 Exemplo 22 – Soma dos N primeiros números inteiros ............................. 56 Exemplo 23 – Números palíndromos ......................................................... 57 Lista de exercícios 7 ................................................................................... 58 Lista de exercícios 8 ................................................................................... 59 1 ALGORITMOS INTRODUÇÃO O computador, fruto da evolução da matemática, eletrônica, telecomunicações e outras ciências, foi o responsável por uma mudança radical do mundo moderno. As pessoas e as organizações dependem totalmente do “ente” computador. Por trás de todos os serviços que utilizamos no dia a dia, como água, energia elétrica, transporte, comunicações e sistemas públicos em geral, existem milhares de computadores interligados. E cada vez mais a sociedade moderna precisa de “sistemas computacionais”. Um sistema computacional é constituído de: Hardware: que são os componentes físicos dos sistemas, tais como CPU, placa de rede, teclado, mouse, monitor, pendrive, HD etc. Software: são os programas, como editor de texto, planilha, gerenciador de banco de dados, navegador de internet, compilador etc. Peopleware: são as pessoas “no entorno” de um sistema computacional, seja como membro de uma equipe de desenvolvimento, como responsável pela manutenção de um sistema ou como usuário deste. Este texto se destina ao ensino dos fundamentos das técnicas de programação de computadores, portanto, se enquadra em duas das categorias acima: Software (programas) e Peopleware (desenvolvedor). Um software é programa ou um conjunto de programas e um programa é um conjunto de comandos, escritos numa dada linguagem (“Linguagem de Programação”) e executados por algum dispositivo tal como um celular, um computador ou uma máquina. Em nosso curso, limitar-nos-emos a desenvolver programas que serão executados em computador. Daí o termo consagrado “Programação de Computadores”, que já virou título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a programação de computadores é confundida com o aprendizado de uma linguagem de programação, e realmente pode-se aprender programação de computadores, utilizando uma linguagem de programação. Aliás, a Linguagem Pascal, criada por Nicolau Wirth, na década de 70, tinha como um de seus objetivos, o ensino de programação de computadores. Mas, existem metodologias e técnicas de programação que não dependem de uma linguagem formal de programação. Utilizaremos neste texto a metodologia denominada de “Programação Estruturada” com a técnica “Top-Down”, assim denominada por partir do simples para o complexo e por usar um processo de refinamentos sucessivos. Para escrever programas de computador usaremos uma pseudolinguagem, composta de palavras-chaves, em língua portuguesa, operadores, funções e comandos, organizados em estruturas apropriadas. Segundo NYHOFF (1993), o desenvolvimento de programas de computadores exige arte e técnica. Arte porque exige criatividade e capacidade de relacionar e generalizar. Técnica porque exige conhecimento de metodologias de desenvolvimento de softwares eficientes, rápidos e robustos. Para desenvolver um programa de computador é necessário: ● Analisar o problema que se quer resolver, definindo com clareza: os dados de entrada, o processamento destes dados e a saída de resultados. ● Descrever em forma de texto, passo a passo, os comandos de entrada, o processamento dos dados e a saída de resultados (Algoritmo). ● Codificar o algoritmo em uma linguagem de programação. 2 OBJETIVOS DESTE TEXTO Este texto, é fruto de vários anos de experiência lecionando disciplinas básicas de programação de computadores em cursos de Ciência da Computação, Sistemas de Informação, Matemática e Engenharia. OBJETIVOS GERAIS ● ● Complementar a bibliografia indicada. Facilitar o aprendizado de programação de computadores, usando exemplos simples e com nível crescente de dificuldade. OBJETIVOS ESPECÍFICOS ● Desenvolver técnicas de programação estruturada ● Abstrair da sintaxe das linguagens formais, focando apenas na lógica do programa ● Escrever programas de computador em forma algorítmica ● Criar algoritmos corretos e eficientes A programação de computadores pode ser aprendida com o uso direto de uma linguagem de programação, conforme foi dito acima. Mas a preocupação com a sintaxe ou a semântica da linguagem faz com que o programador, muitas vezes, se desvie do foco principal que é a lógica do programa. Este texto tem como objetivo principal desenvolver programas eficientes e corretos. Para que esse objetivo seja alcançado as técnicas de desenvolvimento de algoritmos terão mais preocupação com a lógica e correção do programa do que com o formalismo ou a rigidez da sintaxe. ALGORITMOS CONCEITOS “Um algoritmo é uma sequência finita de instruções bem definidas e não ambíguas, que podem ser executada mecanicamente num período finito de tempo e com uma quantidade de esforço finita. O conceito de algoritmo é frequentemente associado a uma receita culinária, embora muitos algoritmos sejam mais complexos. Eles podem repetir passos (fazer iterações) ou necessitar de decisões (tais como comparações lógicas) até que a tarefa seja completada. Um algoritmo corretamente executado não irá resolver um problema se estiver implementado incorretamente ou se não for apropriado ao problema. Um algoritmo não representa, necessariamente, um programa de computador, e sim os passos necessários para realizar uma tarefa. Sua implementação pode ser feita por um computador, por outro tipo de autômato ou mesmo por um ser humano. Diferentes algoritmos podem realizar a mesma tarefa usando um conjunto diferenciado de instruções em mais ou menos tempo, espaço ou esforço do que outros. Tal diferença pode ser reflexo da complexidade computacional aplicada, que depende de estruturas de dados adequadas ao algoritmo. Por exemplo, um algoritmo para se vestir pode especificar que você vista primeiro as meias e os sapatos antes de vestir a calça enquanto outro algoritmo especifica que você deve primeiro vestir a calça e depois as meias e os sapatos. Fica claro que o primeiro algoritmo é mais difícil de ser executado que o segundo apesar de ambos levarem ao mesmo resultado.” (Wikipédia – 12/11/2011) 3 “Um programa de computador é essencialmente um algoritmo que diz ao computador os passos específicos e em que ordem eles devem ser executados. Logo, o algoritmo pode ser considerado uma sequência de ações a serem executadas por uma máquina. Quando os procedimentos de um algoritmo envolvem o processamento de dados, a informação é lida de uma fonte de entrada, processada e retornada sob novo valor, o que geralmente é realizado com o auxílio de uma ou mais estrutura de dados. Para qualquer processo computacional, o algoritmo precisa estar rigorosamente definido, especificando a maneira como ele se comportará em todas as circunstâncias. A corretividade do algoritmo pode ser provada matematicamente, bem como a quantidade de tempo e espaço (complexidade) necessários para a sua execução. Estes aspectos dos algoritmos são alvo da análise de algoritmos. A maneira mais simples de se pensar em um algoritmo é por uma lista de procedimentos bem definidos, na qual as instruções são executadas passo a passo a partir do começo da lista. Tal formalização adota as premissas da programação imperativa, que é uma forma mecânica para visualizar e desenvolver um algoritmo. Concepções alternativas variam em programação funcional e programação lógica. A maioria dos algoritmos é desenvolvida para ser implementada em um programa de computador. Apesar disso eles também podem ser implementados por outros modos tais como uma rede neural biológica (tal como no cérebro quando efetuamos operações aritméticas) em circuitos elétricos ou até mesmo em dispositivos mecânicos. Para programas de computador existe uma grande variedade de linguagens de programação, cada uma com características específicas que podem facilitar a implementação de determinados algoritmos ou atender a propósitos mais gerais. Para que um computador faça qualquer coisa, é necessário “um programa de computador”. Para criar um programa, é preciso informar ao computador, passo a passo, exatamente o que se espera que ele faça. O computador então "executa" o programa, seguindo cada passo mecanicamente para atingir o objetivo final. Quando se "diz" ao computador o que fazer, também se deve dizer como fazê-lo. É aí que entram os algoritmos de computador. Algoritmo é a técnica básica usada para fazer o trabalho. Vamos acompanhar um exemplo para ajudar a entender o conceito de algoritmo. Digamos que você tem um amigo chegando ao aeroporto e ele precisa ir do aeroporto até sua casa. Aqui estão quatro algoritmos diferentes que você poderia dar a seu amigo para ele chegue à sua casa: O algoritmo do táxi: 1. Vá para o ponto de táxi 2. Entre em um táxi 3. Dê meu endereço ao motorista O algoritmo "ligue-me": 1. Quando seu avião chegar, ligue para meu celular 2. Espere do lado de fora do terminal O algoritmo "alugue um carro": 1. Pegue o circular até o aluguel de automóveis 2. Alugue um carro 3. Siga as instruções para chegar até minha casa O algoritmo do ônibus: 1. Fora do terminal de bagagens, pegue o ônibus número 70 2. Faça uma baldeação para o ônibus 14 na Rua Dom Pedro 3. Desça na rua Aroeira 4. Ande duas quadras até minha casa 4 Todos esses quatro algoritmos atingem exatamente a mesma meta, mas cada um deles o faz de modo completamente diferente. Cada algoritmo também possui um custo e um tempo de viagem, diferentes. O táxi, por exemplo, é a maneira mais rápida e cara. Já o ônibus é definitivamente mais barato, mas bem mais lento. Você escolhe o algoritmo com base nas circunstâncias. Na programação de computadores, freqüentemente há diversos caminhos, ou algoritmos, para cumprir qualquer tarefa determinada. “Cada algoritmo tem vantagens e desvantagens em situações diferentes”. "HowStuffWorks - O que é um algoritmo de computador?". Publicado em 05 de setembro de 2001 (atualizado em 05 de abril de 2007) http://informatica.hsw.uol.com.br/questao717.htm (11 de dezembro de 2011) Em Ciência da Computação, um Programa é uma sequência de comandos (instruções) numa dada ordem e logicamente relacionados, escritos numa linguagem de programação e o Algoritmo é um “projeto” desse programa, escrito numa pseudo-linguagem, linguagem essa, mais próxima da linguagem humana e, geralmente, na própria língua do programador (no nosso caso, Português). O termo algoritmo é derivado do nome do matemático árabe Abu Ja’far Mohammed ibn Musa al Khowarizmi (825), que escreveu um livro com procedimentos para efetuar operações com números escritos em algarismos indus (os algarismos do sistema de numeração decimal, conhecidos, hoje, como induarábicos). Atualmente o termo algoritmo é utilizado para descrever um procedimento passo a passo, para resolver um problema qualquer. Vários cálculos matemáticos são feitos por processos práticos ou algoritmos. Como exemplo, podemos citar o processo de determinação do máximo divisor comum (MDC) de dois números inteiros, denominado Crivo de Eratóstenes, que pode ser descrito da seguinte forma: Sejam dois inteiros A e B, A > B ● Divide-se A por B ● Toma-se o resto R, da divisão de A por B ● Faz-se A = B e B = R ● Repete-se o processo (primeiro item) até que R seja igual a zero, e, quando isso ocorrer, B será o MDC. Exemplo numérico: seja calcular o MDC de 28 e 48, pelo processo acima: A = 48 e B = 28 Quociente Valores Resto ● ● ● ● ● 48 20 1 28 8 1 20 4 2 8 0 A = 48 e B = 28; 48 / 28 = 1 e “sobra” um resto R A = B e B = R ou seja, A = 28 e B = 20. 28 / 20 = A = B e B = R ou seja, A = 20 e B = 8. 20 / 8 = A = B e B = R ou seja, A = 8 e B = 4. 8/4 = MDC é o último valor de B, ou seja 4. MDC (28, 48) = 4 2 4 = 1 2 2 20 e sobra um resto R = 8 e sobra um resto R = 4 e sobra um resto R = 0 5 “Todo problema de computação pode ser resolvido executando-se uma série de ações em uma ordem específica. Um procedimento para resolver um problema em termos das ações a serem executadas e na ordem em que essas ações devem ser executadas é chamado de algoritmo” (DEITEL, 2007). Características de um algoritmo: ● Bem definido: apresentar com exatidão as instruções a serem executadas. ● Sem ambiguidade: cada ação deve ser executada de forma única ● Eficiente: apresentar o resultado previsto, minimizando o número de instruções e o tempo de execução ● Finito: ter início e fim (Não entrar em “looping”) ● Possível de ser executado por um computador. Um algoritmo é constituído de um conjunto de instruções, escritas em uma pseudo-linguagem, com termos de uma linguagem comum e de alguns símbolos. Um programa de computador é constituído, em geral, das seguintes fases: ● Entrada de dados ● Processamento ● Saída de resultados (Informação) ELEMENTOS BÁSICOS DE UM ALGORITMO DADOS (Variáveis e constantes) Entes do mundo real são representados em programas de computador através de “dados”. Assim um aluno pode ser representado num programa, por seu nome, um conjunto de caracteres, ou por seu número de matrícula. O sexo de uma pessoa pode ser simbolizado no computador por um caractere, como por exemplo “F” para feminino e “M” para masculino ou um número inteiro: 0 para feminino e 1 para masculino. Uma variável é um endereço de memória para armazenar um tipo de dado, que pode ser modificado durante a execução do programa. Cada tipo de variável tem um tamanho fixo e uma forma própria de ser armazenada e de ser manipulada pelo programa onde é definida. Uma variável é identificada por um nome e é associada a um endereço de memória. Os valores que não podem ser alterados em um programa são denominados constantes. TIPOS DE DADOS Os principais tipos de dados, denominados Tipos Básicos, por constituírem a base de outros tipos de dados mais complexos são: Numéricos, lógicos e literais. NUMÉRICOS Os tipos numéricos se dividem em inteiros e reais. Os inteiros são os valores numéricos que não possuem parte fracionária e os reais são os valores numéricos que possuem parte inteira e fracionária. Exemplos de números inteiros: O número de alunos em uma dada sala de aula A quantidade de pessoas que aderiu a um plano de saúde 6 O ano de nascimento de uma pessoa O último dia do mês de fevereiro (28 ou 29) O número das casas A idade de um animal Exemplos de números reais: O peso de um objeto A altura de um edifício A extensão de uma rua O preço de uma mercadoria O valor de uma “Conta de água” As dimensões de uma sala retangular A medida de um ângulo LÓGICOS São tipos de dados que só podem assumir um dentre dois valores: verdadeiro ou falso. Este tipo de variável é aplicado em situações antagônicas do tipo sim, não, ligado, desligado, aceso, apagado, claro, escuro, sonoro, mudo, marcado, desmarcado, quente, frio etc. Exemplos de valores lógicos: Uma letra: é vogal ou não é vogal Número primo: um número inteiro é primo ou não é primo Sexo de um animal: macho ou fêmea Dinheiro em um caixa eletrônico: tem ou não tem Funcionamento de um banco: aberto ou fechado em um dado horário Horário: antes ou depois do meio dia Horário: dia ou noite Tempo: chove ou não chove Motor: ligado ou desligado Lâmpada: acesa ou apagada Porta: aberta ou fechada Número inteiro: par ou ímpar LITERAIS São dados formados por cadeia (sequência) de caracteres, que serão chamados nos algoritmos de literal (string, em inglês). Exemplos de valores literais: O nome de uma empresa Um endereço Os “números” de telefones Os “números” de CPFs Os “números” de RGs Os “números” de RENAVAMs 7 Nos algoritmos desse texto usaremos os tipos de dados abaixo relacionados: Tipos básicos de dados (variáveis e constantes) Números inteiros Números reais Seqüência de caracteres Variáveis lógicas Designação nos algoritmos inteiro real literal lógico IDENTIFICAÇÃO DE VARIÁVEIS Na Matemática uma variável é identificada por uma letra do nosso alfabeto, como por exemplo m, n, p, q, r, x, y, z, t etc., ou uma letra grega como α, β, γ, δ, ε, θ, λ, π, ω, ϕ etc. Nos programas de computador a identificação de uma variável é feita com um nome significativo, de acordo com a função da mesma. Assim, usaremos a designação “Salario” para identificar, em um programa, a variável que armazenará o salário de um funcionário e Nota1 e Nota2 as variáveis que armazenarão duas notas de um aluno. Adotaremos algumas convenções para identificar as variáveis de um programa. Algumas destas convenções são obrigatórias em linguagens de programação e outras serão adotadas pela clareza e padronização requeridas pela Ciência da Computação: 1. Todo identificador de variável se iniciará com uma letra de A a Z. Por convenção, iniciaremos todo identificador com uma letra maiúscula, se esse possuir mais de um caractere, e os outros caracteres serão minúsculos. Se possuir um único caractere, fica a cargo do programador, identificá-lo com letra maiúscula ou minúscula. Exemplos: Imposto, Sobrenome, Apelido, K3, Nota4, X, P, Xyz, x, Z etc. 2. O identificador de uma variável só poderá conter letras do alfabeto inglês (a a z ou A a Z), algarismos indu-arábicos (0 a 9) e travessão, também denominado sublinha (underscore, em inglês). Nenhum outro caractere é permitido. Exemplos: Nome1, Nome2, Fim_Texto, Arquivo_Morto, Cateto_Oposto, Angulo_Reto 3. O identificador da variável deverá ser significativo (de acordo com a função no programa) Exemplos: Desconto, Salario_Bruto, Desconto_IR, CNPJ, Peso, Largura, Milimetro etc. 4. Se o identificador de uma variável for formado com mais de uma palavra, cada palavra se iniciará com letra maiúscula e essas serão separadas por um travessão. Exemplos: Peso_Liquido, Lado_Maior, Menor_Valor, Respondeu_Sim, Posicao_Anterior, Lugar_Fixo etc. 8 DECLARAÇÃO DE VARIÁVEIS Toda variável em um programa só pode ser usada depois de declarada e a declaração de uma variável é escrita da seguinte forma: Tipo_de_variável Identificação_da_variável Exemplos: inteiro real lógico literal N, Idade, Numero_Habitantes, Contador, Maior_Valor Salario, Desconto, X, Altura, Hipotenusa, Angulo Achou, Idoso, Colorido, Alto, Ligado, Branco, Transparente, Teste Aprovado, Letra, Status, Sexo, Porta, Nome_Funcionario, CPF, Telefone, Empresa, Frase, Legenda, Bairro, Rua OPERADORES OPERADOR DE ATRIBUIÇÃO Na Matemática usa-se o símbolo “ = “ em duas situações: 1. Para atribuir valor a uma variável Exemplos: a = 1, b = -5 e c = 6 2. Para comparar dois valores Exemplos: Se x = y, então x – y = 0 Em sistemas computacionais, como já dissemos anteriormente, uma instrução não pode ser ambígua, isto é, não pode ter dupla interpretação. Portanto devemos usar um símbolo para atribuição de valor e outro para comparar valores. Nos algoritmos usaremos o símbolo “” (seta para a esquerda) para atribuir valor e “ = “ para comparar valores. Exemplos 1. inteiro x x4 2. literal Nome Nome “Maria Luiza de Almeida” Observação: o valor de variáveis literais deve vir entre aspas 3. literal Sigla Sigla “CNPJ” 4. real Soma Soma 12.345 Observação: O ponto (.) separa a parte inteira da fracionária em um número real 5. lógico Achou Achou falso 9 OPERADORES ARITMETICOS As operações matemáticas básicas adição e subtração usam os símbolos + e -, respectivamente. A operação de multiplicação tem várias notações. As expressões: ab, a.b, a x b têm o mesmo significado: a multiplicado por b. a Da mesma forma , a / b, a : b, a b , significam a dividido por b. b Em sistemas computacionais só podemos usar um símbolo para cada operação. Para as quatro operações básicas acima usaremos: Operador + * / Operação Adição Subtração Multiplicação Divisão Usaremos também dois outros operadores: 1) Para a potenciação usaremos o símbolo “^”, circunflexo. a ^ b significa ab. Por exemplo: 2 ^ 5, significa 2 elevado ao expoente 5. 2) Uma operação muito útil em sistemas computacionais e não usual na Matemática é o cálculo do resto da divisão inteira. Um programa clássico de uso dessa operação é o da contagem de notas numa retirada de dinheiro em um caixa eletrônico. Vamos supor a retirada de R$ 215,00, em um caixa eletrônico, com disponibilidade de notas de R$ 50,00, R$ 10,00 e R$ 5,00 . A primeira operação a ser feita é o cálculo da quantidade de notas de 50 reais. 215 / 50 = 4 mais um resto de 15 reais. Depois a quantidade de notas de R$ 10,00, 15 / 10 = 1 mais um resto de 5 reais. E finalmente a quantidade de notas de R$ 5,00, 5 / 5 = 1 mais resto 0 (zero). Portanto o valor a ser retirado consta de 4 notas de 50 reais, uma de 10 reais e uma de 5 reais. Usaremos o termo “mod” para a operação “resto da divisão de inteiros”. Este também é o símbolo usado em algumas linguagens de programação como a linguagem Pascal Assim: 17 mod 18 mod 15 mod 234abc7 6 = 5, que é o resto da divisão de 17 por 6. 2 = 0, resto da divisão por 2 20 = 15 (Por quê ?) mod 2 = 1, quaisquer que sejam os algarismos a, b e c. (Por quê ?) ^ mod Exponenciação Resto da divisão inteira 10 Exemplos Sejam os valores: inteiro a, b, real x, y, z a8 b 10 x 0.01 y 10, Calcule: a) c a + b * b – (a * b) b) z (y ^ 2) / 5 – 100 * x c) k 99 mod (b mod a) Solução matemática a) c = 8 + 10 x 10 – (8 x 10) = 8 + 100 - 80 = 108 – 80 = 28 b) z = 102 / 5 – 100 x 0,01 = 100 / 5 – 1 = 20 – 1 = 19 c) k = Resto(99 / Resto(10 / 8)) = Resto(99 / 2) =1 11 FUNÇÕES ALGUMAS FUNÇÕES MATEMÁTICAS Matematicamente, função é a relação, entre dois conjuntos, que associa a todo elemento de um conjunto A um único elemento de um conjunto B. As funções, em matemática, têm como objetos (domínio e imagem) os conjuntos numéricos. Exemplos: 1. f ( x) x 2 4 é uma função cujo domínio é o conjunto dos números reais e cuja imagem é o conjunto do números reais maiores ou iguais a 2. 2. f(x) = | x | é uma função cujo domínio é o conjunto dos números reais e cuja imagem é o conjunto do números reais maiores ou iguais a 0 (função modular ou função valor absoluto). 3. se n 2 1, f ( n) nf (n 1), se n 2 Esta função é denominada Função Fatorial, e é definida de forma recursiva (faz referência a si própria) para números inteiros não negativos (função discreta). Usa-se o sinal de exclamação (!) como notação dessa função. 12 Relacionamos abaixo algumas funções matemáticas e as correspondentes formas que usaremos nos algoritmos. Matemática Função Algoritmos Módulo ou valor absoluto Abs(x) ou abs(x) Raiz quadrada Raiz(x) ou raiz(x) a elevado à potência x a^x ln x Logaritmo neperiano (base e = 2,71828) Ln(x) ou ln(x) log x Logaritmo decimal Log(x) ou log(x) sen x Seno do arco x Sen(x) ou sen(x) cos x Cosseno do arco x Cos(x) ou cos(x) tg x Tangente do arco x Tg(x) ou tg(x) arcsen x Arco seno de x ArcoSen(x) ou arcsen(x) arccos x Arco cosseno de x ArcoCos(x) ou arccos(x) arctg x Arco tangente de x ArcoTg(x) ou arctg(x) |x| OUTRAS FUNÇÕES Parte inteira de um número real x Inteiro(x) ou Int(x) ou int(x) Parte fracionária de um número real x Frac(x) ou frac(x) Arredondamento de x Arredonda(x) ou arredonda(x) 13 COMANDOS DE ENTRADA Programas de computadores processam dados que podem ser gerados dentro do próprio programa ou podem vir de dispositivos externos. Neste texto vamos supor a entrada de dados externos pelo teclado. A entrada de dados será feita com o comando: leia (variáveis). O comando leia obtém o valor de um dado do teclado e esse valor é atribuído à variável cujo identificador está entre parênteses. Portanto o comando leia tem duas funções: ler um dado digitado no teclado e atribuir o valor deste dado à variável cujo identificador aparece na frente do comando. Exemplos inteiro Idade leia (Idade) real Peso leia (Peso) literal Nome leia (Nome) ou leia (Idade, Peso, Nome) COMANDO DE SAÍDA Um programa pode não ter entrada de dados, pois os dados podem ser gerados dentro do próprio programa, mas não existe programa que não apresente um resultado ou uma informação. A saída de resultados ou de informação será feita com o comando: escreva (“expressão literal” e/ou expressão e/ou valor). Exemplos inteiro Quantidade real Preco, Total leia (Quantidade, Preco) Total Quantidade * Preco escreva (Quantidade, Preco, Total) 14 COMENTÁRIOS Comentários são textos introduzidos nos programas para torná-los mais claros. Podemos usar um comentário, dentre outros objetivos, para explicar o significado de uma variável, esclarecer um trecho do programa ou documentar um programa. Nos algoritmos, para definirmos os comentários, usaremos os mesmos símbolos utilizados nas linguagens C# (lê-se: C charp) e C++ (lê-se: C mais mais), ou seja: 1. // para comentários de uma linha O texto escrito após // será considerado um comentário 2. E para comentários multilinhas /* texto */ Todo o texto entre os símbolos “ /* */ “ é um comentário. Exemplo //Cabeçalho //Algoritmo para somar duas notas //Programador: Pedro Carlos Lisboa //20/11/2011 Algoritmo inteiro Nota1, Nota2 inteiro Soma //Inicio do algoritmo //duas notas de um aluno //Variável para acumular a soma das duas notas //Entrada de dados leia (Nota1, Nota2) //Processamento Soma Nota1 + Nota2 //Saída de resultados escreva (Soma) Fim do algoritmo //Fim do algoritmo O cabeçalho acima poderia ser escrito como um comentário multilinhas, da seguinte forma: /* Algoritmo Algoritmo somar duas notas Programador: Pedro Carlos Lisboa 20/11/2011 */ 15 ESTRUTURA DE UM ALGORITMO No texto acima os diversos componentes de um algoritmo foram vistos de forma isolada. Passaremos, a escrever algoritmos completos, com todos os componentes básicos interligados. Adotaremos alguns padrões, não obrigatórios, para tornar os algoritmos simples, legíveis e funcionais: Todo algoritmo começará com um comentário onde ficará expresso de forma bem clara qual é o objetivo do mesmo, quem o desenvolveu e a data de elaboração. Os comandos (instruções) de um algoritmo serão delimitados pelas palavras Algoritmo e Fim do algoritmo. As instruções do algoritmo serão escritas, uma por linha Cada linha será alinhada à esquerda, com espaços, “endentações”, nas estruturas de um mesmo nível. As palavras chaves do algoritmo, como leia, escreva e outras, serão escritas com letras minúsculas Todo identificador de variável que tiver mais de um caractere se iniciará com letra maiúscula Os identificadores compostos terão cada palavra iniciada com letra maiúscula e separadas por travessão (underline). Exemplo: // Algoritmo para resolver equação do primeiro grau // Programador: Nome do programador // DD/MM/AAAA Algoritmo real a, b, x leia (a, b) se (a ≠ 0) x -b/a escreva (x) fim se Fim do algoritmo 16 ESTRUTURAS SEQUENCIAIS De acordo com a sequência das ações executadas por um programa, suas estruturas podem ser classificadas em Estruturas Sequenciais, Condicionais ou de Repetição. Nas estruturas sequenciais os comandos serão executados na ordem em que aparecem, linha por linha, de cima para baixo. Nas estruturas condicionais os comandos são executados ou não, dependendo de certas condições verdadeiras ou falsas. E as estruturas de repetição, as que formam sequências repetitivas de comandos dependentes de condições verdadeiras ou falsas. Os programas abaixo farão uso apenas de estruturas sequenciais, isto é, sem estruturas condicionais ou de repetição. Portanto não serão feitos testes de validação de dados, operações ou de impressão de resultados. Usaremos com o mesmo significado os termos escreva ou imprima. 1. Escreva um algoritmo que leia do teclado o valor de duas variáveis, o peso (kg) e a altura (m) de uma pessoa, calcule e escreva a massa corporal dessa pessoa usando a fórmula: Análise do problema Pelo teclado o usuário deve digitar o peso e a altura de uma pessoa. O algoritmo deve calcular a massa corporal usando a fórmula dada e posteriormente imprimir o resultado. As variáveis usadas são: Peso, Altura e Massa_Corporal /* Cálculo de massa corporal Data: DD/MM/AAAA Programador: */ Algoritmo //Declaração de variáveis real Peso, Altura, Massa_Corporal //Peso da pessoa em kg //Altura da pessoa em m //Massa corporal (sem dimensão) //Entrada de dados leia (Peso, Altura) //Processamento Massa_Corporal Peso /(Altura * Altura) //Saída de resultados escreva (Massa_Corporal) Fim do algoritmo 17 2. Algoritmo para ler a capacidade de armazenamento de um Pendrive, em Gigabytes, calcular e escrever sua capacidade em bytes. Análise do problema Como 1 GB corresponde a 1024 MB, 1 MB corresponde a 1024 KB e 1KB equivale a 1024 Bytes, para se transformar uma 1 gigabytes em bytes deve-se multiplicar a unidade em gigabytes por 1024 x 1024 x 1024 ou 2^30. Portanto 1GB = (1024 x 1024 x 1024) bytes ou 1 GB = 2 ^ 30 bytes /* Programa para transformar Gigabytes em Bytes Programador: ... Data:DD/MM/AAAA */ Algoritmo //Declaração de variáveis inteiro Giga, Byte //Entrada de dados leia (Giga) //Processamento Byte Giga * 1024 * 1024 * 1024 //Saída de resultados escreva (Byte) Fim algoritmo 18 3. Escreva um algoritmo que leia o valor da hora de trabalho de um operário e o número de horas trabalhadas no mês. Calcule e escreva o valor a receber. 4. Análise do problema O usuário deve digitar o valor da hora de trabalho e o número de horas trabalhadas. O determina o valor a receber multiplicando o valor da hora trabalhada pelo número trabalho. O resultado é impresso na tela. /* Programa para calcular salário Programador: Data: */ Algoritmo //Declaração de variáveis inteiro Numero_Horas real Valor_Hora, Salario //Entrada de dados leia (Valor_Hora, Numero_Horas) //Processamento Salario Valor_Hora * Numero_Horas //Saída de resultados escreva (Salario) Fim do algoritmo algoritmo de horas de 19 4. Escreva um programa que leia o preço de uma mercadoria. Calcule e armazene em outras variáveis descontos de 5%, 7% e 10% sobre esse preço. Escreva o preço, os descontos e os novos preços. Análise do problema O valor de um desconto é calculado pela fórmula: Desconto = (Preço * Percentual_de_Desconto) / 100 O Novo Preço corresponde ao preço primitivo menos o desconto /* Programa para calcular descontos em mercadorias Programador: DD/MM/AAAA */ Algoritmo //Declaração de variáveis real Preco, Desconto_5, Desconto_7, Desconto_10, Novo_Preco_5, Novo_Preco_7, Novo_Preco_10 //Entrada de dados leia (Preco) //Processamento Desconto_5 (Preco * 5) / 100 Desconto_7 (Preco * 7) / 100 Desconto_10 (Preco * 10) / 100 Novo_Preco_5 Preco - Desconto_5 Novo_Preco_7 Preco - Desconto_7 Novo_Preco_10 Preco – Desconto_10 //Desconto de 5% //Desconto de 7% //Desconto de 10% //Preco menos desconto de 5% // Preco menos desconto de 7% / Preco menos desconto de 10% //Saída de resultados Escreva (Preco,Desconto_5,Desconto_7,Desconto_10,Novo_Preco_5,Novo_Preco_7, Novo_Preco_10) Fim do algoritmo 20 5. Escreva um programa que simule um caixa eletrônico, com notas de R$ 50,00, R$ 20,00, R$ 10,00 e R$ 5,00. O usuário deve solicitar a quantia a ser retirada no caixa eletrônico e o programa deve calcular e imprimir a quantidade de notas de R$ 50,00, R$ 20,00, R$ 10,00 e R$ 5,00, nessa ordem. Suponha que o usuário digite o valor correto (múltiplo de 5). Análise do problema O usuário deve digitar o valor desejado (múltiplo de 5). Seja por exemplo: Valor_Desejado = R$ 185,00 O número de notas de R$ 50,00 corresponde ao número inteiro obtido pela divisão do valor desejado por 50, ou seja: Notas_50 = inteiro (185 / 50) = 3 O número de notas de R$ 20,00 será o quociente inteiro da divisão do resto da divisão do valor desejado por 50. No exemplo dado: R = Resto(185, 50) = 35 Notas_20 = inteiro(R / 20) = inteiro (35 / 20) =1 Obtém-se novo resto. R = Resto(R, 20) = Resto (35, 20) = 15 O número de notas de R$ 10,00 será o quociente inteiro da divisão desse resto por 10. Notas_10 = inteiro(R / 20) = inteiro(15 / 10) =1 O número de notas de R$ 5,00 será o resto dessa última divisão, dividido por 5. R = Resto (15, 10) Notas_5 = inteiro (R / 5) = 1 21 /* Programa para simular um caixa eletrônico Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis inteiro Valor, Nota_5, Nota_10, Nota_20, Nota_50, Resto //Entrada de dados leia (Valor) //Valor a ser retirado no caixa eletrônico //Processamento Nota_50 ← Inteiro(Valor / 50) Resto ← Valor mod 50 Nota_20 ← Inteiro (Resto / 20) Resto ← Resto mod 20 Nota_10 ← Inteiro (Resto / 10) Resto ← Resto mod 10 Nota_5 ← Inteiro (Resto / 10) //Cálculo da quantidade de notas de 50 reais //Cálculo do resto da divisão do valor digitado por 50 // Cálculo da quantidade de notas de 20 reais //Cálculo do resto da divisão do resto anterior por 20 //Cálculo da quantidade de notas de 10 reais //Cálculo do resto da divisão do resto anterior por 10 //Cálculo da quantidade de notas de 5 reais //Saída de resultados escreva (Nota_5, Nota_10, Nota_20, Nota_50) Fim do algoritmo 22 6. Escreva um programa para calcular a área, o perímetro e a diagonal de um quadrado, dado o lado (lido do teclado). Análise do problema A área, perímetro e diagonal de um quadrado são calculados pelas fórmulas: = /* Programa para calcular a área, o perímetro e a diagonal de um quadrado, dado o lado Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis real Lado, Area, Diagonal, Perimetro //Entrada de dados leia (Lado) //Medida do lado do quadrado //Processamento Area Lado * Lado Diagonal ← Raiz(Lado * Lado + Lado * Lado) Perimetro ← 4 * Lado //Cálculo da area //Cálculo da diagonal // Cálculo do perímetro //Saída de resultados escreva (Area, Diagonal, Perimetro) Fim do algoritmo 23 7. Escreva um programa para transformar a medida de um arco de graus para radianos. Análise do problema Para a transformar graus em radianos ou radianos em graus usa-se a relação: /* Transformar a medida de um arco de graus para radianos Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis real Graus, Radianos real PI ← 3.141592 //Valor de //Entrada de dados leia (Graus) //Processamento Radianos ← (Graus * PI) / 180 //Saída de resultados escreva (Radianos) Fim do algoritmo //Fórmula dada acima 24 8. Escreva um programa para transformar milhas náuticas em metros. Análise do problema 1 milha náutica = 1852 metros Ler a medida em milhas. Multiplicar a medida por 1852. Escrever o resultado. /* Transformar milhas náuticas em metros Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis real Milhas, Metros //Entrada de dados leia (Milhas) //Processamento Metros ← Milhas * 1852 //Saída de resultados escreva (Milhas, “milhas = “, Metros, “ metros”) Fim do algoritmo 25 9. Escreva um programa para ler do teclado um número inteiro de 4 algarismos e separar os algarismos das unidades, das dezenas, das centenas e das milhares. Análise do problema Seja, por exemplo, o número N = 3456. Cada algarismo pode ser obtido da seguinte forma: Algarismo das unidades = Resto (N, 10) Unidades = 6 Algarismo das dezenas = Resto (Inteiro (N / 10), 10) Dezenas = Resto (345, 10) = 5 Algarismo das centenas = Resto (Inteiro (N / 100), 10) Centenas = Resto (34, 10) = 4 Algarismo das milhares = Inteiro (N / 1000) Milhares = 3 /* Separar os algarismos de um número de 4 algarismos Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis inteiro Numero, Unidades, Dezenas, Centenas, Milhares //Entrada de dados leia (Numero) //Processamento Unidades ← Numero mod 10 Dezenas ← Inteiro(Numero / 10) mod 10 Centenas ← Inteiro (Numero / 100) mod 10 Milhares ← Inteiro (Numero / 1000) //Saída de resultados escreva (Numero, Unidades, Dezenas, Centenas, Milhares) Fim do algoritmo 26 10. O dígito verificador do código de 4 algarismos de cada produto de uma loja de informática, é seguinte forma: calculado da S = 9 * Algarismo_Unidades + 7 * Algarismo_Dezenas + 5 * Algarismo_Centenas + 3 * Algarismo_Milhares Digito = Resto(S, 10) Escreva um programa que leia o código de um produto, calcule e escreva o dígito verificador, acima. usando Análise do problema Separar cada algarismo usando o processo do algoritmo anterior. Aplicar a fórmula dada acima. Escrever o resultado /* Calcular digito verificador Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis inteiro Numero, Unidades, Dezenas, Centenas, Milhares, Digito //Entrada de dados leia (Numero) //Processamento //Usar o processo do problema anterior Unidades ← Numero mod 10 Dezenas ← (Numero / 10) mod 10 Centenas ← (Numero / 100) mod 10 Milhares ← Numero / 1000 Digito ← (9 * Unidades + 7 * Dezenas + 5 * Centenas + 3 * Milhares) mod 10 //Saída de resultados escreva (Numero, Digito) Fim do algoritmo a regra 27 Lista de Exercícios 01 Em todos os exercícios abaixo a entrada de dados (leitura) será pelo teclado e a saída de resultados (impressão) na tela. Escrever um algoritmo para: 1. Imprimir seu nome e endereço. 2. Ler o nome e o sobrenome de uma pessoa. Imprimir o sobrenome, uma vírgula, um espaço e o nome da pessoa. 3. Calcular e escrever o valor de um “troco”, lendo o valor da compra e o valor “dado” pelo comprador. 4. Calcular e escrever o valor, em reais, “apurado” em um “cofrinho”. Ler a quantidade de moedas de um real, 50 centavos, 25 centavos, 10 centavos, 5 centavos e um centavo. 5. Ler dois números reais x e y, calcular e imprimir: A soma desses valores A diferença entre x e y e entre y e x O produto de x e y O quociente entre x e y e entre y e x (os números x e y devem ser diferentes de zero) 6. Ler as medidas dos lados de um retângulo, calcular e escrever: O perímetro A área A diagonal desse retângulo. 7. Ler: O número de horas trabalhadas por um funcionário de uma empresa O valor da hora de trabalho, em reais O percentual de descontos de INSS O percentual de descontos de Imposto de Renda Calcular e escrever: O salário bruto O valor do desconto de INSS O valor do desconto de Imposto de Renda O salário líquido 8. Armazenar em uma constante o valor do quilowatt hora de energia elétrica residencial fornecida por uma empresa de Energia Elétrica. Ler o número registrado no medidor de uma residência em dois meses consecutivos. Calcular e escrever o consumo registrado e o valor a pagar pela conta de energia elétrica no período acima. 28 9. Ler o salário de um funcionário e o percentual de aumento que terá. Calcular e imprimir: o salário atual, o percentual de aumento e o novo salário. 10. Sabe-se que os produtos de um supermercado são codificados com números inteiros de 100 a 999 e mais um dígito verificador X assim calculado X = Resto( (Código * 1357), 10). Ler o código de um produto, determinar o seu dígito verificador. Escrever o código digitado e o dígito verificador calculado. 29 Lista de Exercícios 02 Escrever um algoritmo que: 1. Leia um número real x, calcule e escreva f(x), sendo 2. Leia a idade de uma pessoa. Leia o ano do último aniversário dessa pessoa. Calcule e escreva o ano de nascimento dessa pessoa. 3. Leia o diâmetro de uma esfera, calcule e imprima: ● A área da superfície esférica ● O volume da esfera 4. Leia a medida do raio do piso circular de uma sala. Calcule e escreva a medida do perímetro e da área do piso dessa sala. 5. Leia os elementos (números reais) de uma matriz 2 x 2. Calcule e escreva o determinante dessa matriz. 6. Leia o valor da medida do lado do quadrado da figura abaixo. Calcule e escreva a medida da área fora do círculo e dentro do quadrado (área sombreada). 7. Leia uma medida em polegadas, na forma: numerador e denominador (dois valores inteiros). Calcule e escreva a medida correspondente em milímetros. Observação: 1” = 25,4 mm Medidas em polegadas são dadas na forma: 30 8. Leia uma medida de ângulo em graus. Calcule e escreva a medida correspondente em radianos. Observação: use a proporção: 9. Leia uma medida de ângulo em graus. Converta essa medida para radianos. Calcule e escreva o seno, o cosseno e a tangente desse ângulo. 10. Leia a medida do raio da base e da altura, em metros, de uma caixa d’água, em forma de cilindro circular reto, Calcule e escreva o volume dessa caixa d’água, em litros. 31 Lista de Exercícios 03 Escrever um algoritmo que: 1. Leia uma temperatura em graus Fahrenheit. Calcule e escreva a temperatura correspondente, em graus Celsius. 2. Solicite ao usuário que digite uma temperatura em graus Celsius. Determine o valor dessa temperatura em graus Fahrenheit. Escreva o valor da temperatura nas duas unidades. 3. Leia a cotação atual do dólar (real). Leia um valor em dólar. Converta o valor lido para reais. Escreva o valor em dólar e em real. 4. O cálculo do valor da prestação mensal do pagamento de um financiamento é dado pela fórmula: P VF ( k 1) t 1 k sendo P prestação, k (1 Taxa / 100), Taxa taxa mensal de juros VF Valor financiado e t número de parcelas Escreva um algoritmo que: ● Leia o valor a financiar ● Leia o valor da taxa mensal de juros ● Leia o número de parcelas ● Calcule e imprima o valor de cada parcela 5. Leia as coordenadas de dois pontos, A e B, do plano. Calcule e escreva a distância entre A e B. 6. Leia uma medida em milhas terrestres. Calcule e escreva a medida correspondente em metros. 7. Leia a base e a altura de um triângulo. Calcule e escreva a área do mesmo. 8. Leia o número de lados de um polígono convexo. Calcule e escreva o número de diagonais desse polígono. 9. Leia uma hora (uma variável para horas e outra para minutos). Converta e escreva essa hora em segundos. 10. Leia a cotação do dólar em reais. Faça uma tabela com os valores abaixo em dólar e em reais. Valores em dólar: 1, 2, 5, 10, 20, 50, 100, 500 e 1000. 32 Lista de Exercícios 04 Escrever um algoritmo que: 1. Leia as coordenadas de dois pontos A e B, do plano. Calcule e escreva as coordenadas do ponto médio do segmento AB. 2. Leia as medidas dos três lados de um triângulo (Suponha medidas válidas). Calcule e escreva a área do mesmo. sendo 3. Leia as medidas dos catetos de um triângulo retângulo. Calcule a medida da hipotenusa. Escreva as medidas dos catetos e da hipotenusa. 4. Leia as medidas dos lados de um triângulo qualquer. Calcule as alturas relativas a cada lado. Escreva as medidas dos lados e das alturas. Obs. A altura relativa ao lado a pode ser calculada pela fórmula: 5. Uma herança em dinheiro foi dividida entre três irmãos, em partes diretamente proporcionais à idade de cada um. Escreva um algoritmo que solicite ao usuário que digite o valor da herança e a idade de cada irmão. Calcule o valor que caberá a cada irmão. Escreva o valor da herança, as idades e o valor que caberá a cada irmão. 6. Uma liga metálica é composta de 30% de níquel e 70% de cobre. Escreva um algoritmo que solicite ao usuário que digite a quantidade de liga que se pretende obter, em quilogramas. Determine a quantidade de cada um dos componentes da liga. Escreva a quantidade de liga e de cada um de seus componentes. 7. Solicite ao usuário que digite o raio da base e a altura, em metros, de uma caixa d’água cilíndrica. Calcule o volume dessa caixa. Escreva o raio da base, a altura e o volume dessa caixa d’água, em litros. 8. Solicite ao usuário que digite a velocidade de um automóvel, em quilômetros por hora. Calcule essa velocidade em m/seg. Escreva as duas velocidades. 9. Leia a medida do lado de um hexágono regular. Calcule e escreva sua área. 10. Calcule e escreva na tela 5%, 10%, 15% e 25% do salário mínimo. 33 ESTRUTURAS CONDICIONAIS Todos os algoritmos feitos até agora executaram apenas uma sequência de ações, uma após a outra, em uma ordem pré-estabelecida seguindo o padrão: Declaração de variáveis Entrada de dados pelo teclado, sem validação dos mesmos Processamento sequencial (sem desvios ou repetições) Impressão de valores na tela Nos próximos programas introduziremos comandos para controlar a ordem e o número de vezes que uma tarefa deve ser executa. No nosso cotidiano verificamos varias situações em que condicionada a determinados fatores. Vejamos alguns exemplos: uma determinada ação é Na elaboração do “Contra cheque” dos funcionários de uma empresa, o desconto de imposto de renda depende da faixa salarial de cada funcionário. O cálculo do desconto a ser oferecido por uma loja depende da forma de pagamento: a vista, a prazo, com cartão de débito ou cartão de crédito. A dosagem de alguns medicamentos depende do peso da pessoa que vai usá-lo. A classificação de um time num campeonato de futebol depende do número de vitórias, empates, gols marcados, gols sofridos e resultado nos confrontos diretos, no caso de empate na classificação. Nos programas de computadores as ações dependentes de certas condições formão um bloco de comandos denominado “Estrutura condicional”. As linguagens de programação oferecem muitas opções de estruturas condicionais, mas nesse estudo de algoritmos usaremos apenas dois tipos para que o enfoque seja “a lógica de programação” e não as diversas formas de especificar uma estrutura. Antes de estudarmos as estruturas condicionais vamos fazer uma breve exposição sobre a lógica proposicional. PROPOSIÇÃO As estruturas condicionais fazem uso de proposições, que são sentenças declarativas cujo resultado é verdadeiro ou falso. Exemplo de proposições: João é alto. Ontem choveu. A telefonia celular da empresa X é eficiente. O número de habitantes de São Paulo é superior a vinte milhões. Betim recicla lixo. O telefone da empresa ZZ é 31-3210-4567 O Shopping Betim abre as portas às 10 horas O CPF 123.456.789-10 não é válido (-3) x (-7) > 0 34 As proposições são escritas, em geral, com dois tipos de operadores: Operadores Relacionais e Operadores Lógicos. OPERADORES RELACIONAIS São operadores que estabelecem uma relação entre dois operandos gerando um resultado verdadeiro ou falso. Nos algoritmos, por questão de simplicidade, sem deixar de lado o rigor científico, usaremos os mesmos operadores relacionais da Matemática, ou seja: Matemática Significado Operador Algoritmo Símbolo utilizado = igual a = ≠ diferente de ≠ > maior que > < menor que < ≤ menor ou igual a ≤ ou <= ≥ maior ou igual a ≥ ou >= Exemplos: 4=2+2 Verdadeiro 6 ≠ (1 + 2 + 3) Falso 7 > (3 + 4) Falso -5 < 0 Verdadeiro 3 ≤ (1 + 1 + 1) Verdadeiro 4 ≥ (4 - (-4)) Falso “Ana Maria” = “Anamaria” Falso “Mario” > “Maria” Verdadeiro “a” < “A” Falso 35 As três últimas linhas estabelecem uma relação entre expressões literais. Para que os sistemas computacionais possam estabelecer uma “relação de ordem” entre os caracteres de um texto, foram criadas tabelas onde cada caractere recebe uma codificação numérica. As tabelas mais utilizadas são a Tabela ASCII e a Tabela UNICODE. Nessas tabelas os caracteres têm um código numérico que os identifica de forma única. A Tabela ASCII codifica os caracteres de 0 a 255. Os caracteres de 0 a 31 são caracteres de controle, como por exemplo: “beep” - número 7; “fim de uma linha de texto” – número 10; “enter” – número 13. Os códigos de 32 a 127 representam os caracteres utilizados na língua inglesa, como por exemplo: 48 a 57: 64: 65 a 90: “0” a “9”: “@” “A” a “Z” 97 a 122: “a” a “z” Cada linguagem de programação adota uma tabela para ordenar caracteres. Num sistema que use a Tabela ASCII o caractere “a” tem código numérico 97 e o caractere “A” tem código numérico 65. Por essa razão a última linha da tabela acima resultou em valor falso (97 < 65). Nessa apostila adotaremos a Tabela ASCII como padrão. OPERADORES LÓGICOS São operadores que estabelecem uma “conexão” entre expressões lógicas. Usaremos três operadores lógicos: NÃO, OU e E. O operador NÃO tem apenas um operando, o OU e o E têm dois operandos. Esses operadores produzem um resultado lógico (verdadeiro ou falso) e são representados também, pelos símbolos: NÃO „ (apóstrofo) E ^ OU Exemplo Sejam duas proposições, simbolizadas pelas letras p e q: p = fala inglês q = fala espanhol O uso de tabelas facilita o entendimento dos operadores lógicos: Operador NÃO fala inglês NÃO fala inglês V F F V 36 Ou de forma simbólica p p’ V F F V Operador E fala inglês fala espanhol fala inglês E fala espanhol p q p ^ q V V V V F F F V F F F F fala inglês fala espanhol fala inglês OU fala espanhol p q p q V V V V F V F V V F F F Operador OU Generalizando Sejam duas proposições quaisquer p e q p q p’ p q p ^ q V V F V V V F F V F F V V V F F F V F F ESTRUTURAS CONDICIONAIS SIMPLES Notação se (condição) bloco de comandos_1 fim se bloco de comandos_2 37 Funcionamento Se a condição entre parênteses for verdadeira será executado o bloco de comandos_1, e posteriormente o bloco de comandos_2, senão (condição falsa) a execução passará diretamente para o bloco de comandos_2. Exemplo: x 2012 //Atribui um valor à variável x y 1995 //Atribui um valor à variável y se (x > y) //Verifica se x é maior que y zx–y fim se //Se a condição acima é verdadeira calcula a diferença entre x e y e atribui // à variável z //fim da estrutura condicional se (x < y) zy–x //Verifica se x é menor que y //Se a condição acima é verdadeira calcula a diferença entre y e x e atribui à //variável z fim se //fim da estrutura condicional escreva (z) //Imprime o valor de z Como a primeira condição é verdadeira será executado o comando z x – y e o valor de z será 17, valor a ser impresso na tela. ESTRUTURAS CONDICIONAIS DUPLAS Notação se (condição) bloco de comandos_1 senão bloco de comandos_2 fim se 38 Funcionamento Se a condição, entre parênteses, for verdadeira será executado o bloco de comandos_1, se for falsa será executado o bloco de comandos_2. Exemplo: x 20 //Atribui um valor à variável x y 30 //Atribui um valor à variável y se (x > y) //Verifica se x é maior que y zx–y resultado z senão //Se a condição acima é verdadeira calcula a diferença entre y e x e atribui o //Se x é menor ou igual a y zy–x // Se a condição acima é falsa calcula a diferença entre y e x e atribui o // resultado z fim se //Fim da estrutura condicional escreva (z) //Imprime o valor de z Como a condição x > y é falsa, será executado o comando z y – x, e o valor de z será 10, valor a ser impresso na tela. 39 Apresentaremos a seguir alguns problemas com estruturas condicionais. 11. Programa para ler um número inteiro e escrever se ele negativo, nulo (zero) ou positivo. Análise do problema O algoritmo deve verificar se o número é menor que zero (negativo) ou igual a zero (nulo) ou maior que zero (positivo). /* Verificar se um número é negativo Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis real Numero //Entrada de dados leia (Numero) //Processamento e saída de resultados se (Numero < 0) escreva (“Numero negativo”) senão se (Numero = 0) escreva (“Numero nulo”) senão escreva (“Numero positivo”) fim se fim se Fim do algoritmo 40 16. Programa para ler a idade de uma pessoa e verificar se ela é ou não, maior de idade. Análise do problema Uma pessoa é maior de idade se possui 18 anos ou mais. Ler a idade de uma pessoa. Verificar se a idade dessa pessoa é maior ou igual a 18 anos ou não, escrevendo mensagem adequada. /* Verificar se uma pessoa é maior de idade ou não Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis inteiro Idade //Entrada de dados leia (Idade) //Processamento e saída de resultados se (Idade < 18) escreva (“Não é maior de idade”) senão escreva (“É maior de idade”) fim se Fim do algoritmo 41 13. Programa para ler do teclado dois números reais. Verificar se o segundo valor é diferente de zero. Em caso afirmativo calcular e escrever a razão entre o primeiro e o segundo. Análise do problema Ler dois valores numéricos. Verificar se o segundo é diferente de zero. Em caso afirmativo dividir o primeiro pelo segundo e escrever o resultado (quociente). Se o segundo valor for negativo escrever uma mensagem indicando que a operação é impossível. /* Calcular a razão entre dois números se o segundo é diferente de zero Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis real Numero1, Numero2, Razao //Entrada de dados leia (Numero1, Numero2) //Processamento e saída de resultados se (Numero2 <> 0) Razao Numero1 / Numero2 escreva (“A razão é: ”, Razao) senão escreva (“Impossível dividir por zero”) fim se Fim do algoritmo 42 14. Programa para ler um número inteiro e verificar se ele é divisível por 2 e por 11, imprimindo mensagem adequada. Análise do problema Usa-se a operação mod, resto da divisão inteira, para verificar se um número é divisível por outro. Se a mod b = 0, a é divisível por b. Nesse problema deve-se verificar se Numero é divisível por 2 e 11. /* Verificar se um número é divisível por 2 e 11 Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis inteiro Numero //Entrada de dados leia (Numero) //Processamento e saída de resultados escreva (Numero) se (Numero mod 2 = 0 e Numero mod 11 = 0) escreva (“é divisível por 2 e 11”) senão escreva ( “Não é divisível por 2 ou por 11 ou por ambos”) fim se Fim do algoritmo 43 15. Programa para ler um nome do teclado. Imprimir o telefone correspondente, de acordo com a lista: Artur Bernardo Caio Vinícius 9587-3663 9961-3400 8824-6146 9974-7609 Seguem dois algoritmos diferentes para esse programa: Análise do problema Na primeira versão cada nome será comparado com o nome digitado e se for igual a um dos nomes escrever o telefone correspondente. Se o nome digitado for diferente de todos os nomes da lista será impressa uma mensagem indicando que o nome não consta na lista. /* Imprimir telefone de pessoa cujo nome foi digitado – Versão 1 Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis literal NomeUsuario //Entrada de dados leia (NomeUsuario) //Processamento e saída de resultados se (NomeUsuario = “Artur”) escreva (“9587-3663”) fim se se (NomeUsuario = “Bernardo”) escreva (“9961-3400”) fim se se (NomeUsuario = “Caio escreva (“8824-6146”) fim se ”) se (NomeUsuario = “Vinicíus”) escreva (“9974-7609”) fim se se (NomeUsuario ≠ “Artur” e NomeUsuario ≠ “Bernardo” e NomeUsuario ≠ “Caio” NomeUsuario ≠ “Vinicíus”) escreva (“Não consta da lista”) fim se Fim do algoritmo e 44 Versão 2 do problema anterior Análise do problema: Na segunda versão cada nome será comparado com o nome digitado, se for igual escrever o telefone correspondente e encerra o programa, se for diferente comparar com o próximo nome. Se o nome digitado for diferente de todos os nomes da lista será impressa uma mensagem indicando que o nome não consta na lista. /* Imprimir telefone de pessoa cujo nome foi digitado - Versão 2 Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis literal NomeUsuario //Entrada de dados leia (NomeUsuario) //Processamento e saída de resultados se (NomeUsuario = “Artur”) escreva (“9587-3663”) senão se (NomeUsuario = “Bernardo”) escreva (“9961-3400”) senão se (NomeUsuario = “Caio”) escreva (“8824-6146”) senão se (NomeUsuario = “Vinicíus”) escreva (“9974-7609”) senão escreva(“Nome não consta da lista”) fim se //se Vinícius fim se //se Caio fim se //se Bernardo fim se //se Artur Fim do algoritmo O segundo algoritmo é mais eficiente que o primeiro, pois ao encontrar o nome digitado escreve o telefone e encerra o programa. O primeiro, mesmo encontrando o nome digitado, faz todas as comparações seguintes. 45 16. Programa para ler um caractere e imprimir se é um digito de “0” a “ ” uma letra maiúscula de “A” a “Z” ou uma letra minúscula de “a” a “z”. Análise do problema: As linguagens de programação utilizam tabelas com todos os caracteres hoje conhecidos nas diversas línguas ou ciências. Nessas tabelas cada caractere tem um número de ordem que facilita sua identificação. Assim os caracteres numéricos são ordenados de “0” a “9”. O alfabeto inglês tem os caracteres maiúsculos de “A” a “Z” e os minúsculos de “a” a “z”. Portanto é possível usar a relação de ordem “>”, maior, “<” menor, “=”, menor ou igual “≤” ou maior ou igual “≥” entre caracteres. /* Imprimir tipo de caractere digitado Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis literal Caractere //Entrada de dados leia (Caractere) //Processamento e saída de resultados se (Caractere ≥ “0” e Caractere ≤ “9”) escreva (“ALGARISMO”) senão se (Caractere ≥ “A” e Caractere ≤ “Z”) escreva (“LETRA MAIÚSCULA”) senão se (Caractere ≥ “a” e Caractere ≤ “z”) escreva (“LETRA MINÚSCULA”) senão escreva (“OUTRO CARACTERE”) fim se //a ... z fim se //A ... Z fim se //0 ... 9 Fim do algoritmo 46 LISTA DE EXERCÍCIOS NÚMERO 5 1. 2. Faça um algoritmo para ler o valor do custo fixo e o destino de um frete. Calcular e imprimir o custo de transporte (custo fixo + custo variável) de acordo com a tabela: DESTINO CUSTO VARIÁVEL Alfenas Araxá Corinto Ipatinga 0.5 * FIXO 0.3 * FIXO 0.2 * FIXO 0.1 * FIXO Um posto de combustíveis distribui brindes aos seus clientes de acordo com a quantidade de litros de combustível abastecidos: De 10 a 20 litros: um chaveiro Mais de 20 e menos de 30 litros: uma ducha 30 litros ou mais: um lanche Faça um algoritmo que: leia a quantidade de litros abastecidos e imprima uma mensagem dizendo o brinde ganho. 3. Em um clube há dois tipos de sócios: Proprietário e Usuário. Haverá um reajuste nas mensalidades de 15% para o sócio Proprietário e 12% para o sócio Usuário. Faça um algoritmo que: Leia o código do tipo de sócio: 1 – Proprietário 2 – Usuário Leia o valor da mensalidade Calcule e imprima o valor da mensalidade reajustada de acordo com o código lido. 4. Em uma locadora o valor que se cobra do cliente obedece à seguinte fórmula: Valor Cobrado = Quantidade de fitas X Quantidade de dias alugados X R$2,50 Nesta locadora existe uma promoção: os clientes que alugam 5 ou mais fitas de uma só vez ganham um desconto de 20 % no valor total. Levando em consideração esse desconto, faça um algoritmo que: Leia a quantidade de fitas alugadas Leia a quantidade de dias Calcule e imprima o valor a pagar 5. Em uma revenda de carros existem os seguintes planos de venda: De 6 a 24 parcelas: juros de 1.8% ao mês De 25 a 48 parcelas: juros de 2.1% ao mês De 49 a 72 parcelas: juros de 2.5% ao mês Faça um algoritmo que: Leia o valor do carro a ser financiado Leia o número de parcelas Calcule e imprima o valor da parcela, usando a fórmula da lista de exercícios 3. 6. Faça um algoritmo que leia a idade de uma pessoa, calcule e escreva o tipo de eleitor segundo a tabela: Menos de 16 anos: não eleitor De 16 ou 17 anos, ou mais de 69 anos: facultativo De 18 a 69: obrigatório 47 7. Faça um algoritmo que leia a altura (h) e o sexo de uma pessoa. Calcule e imprima o peso ideal desta pessoa de acordo com as fórmulas: Para homens: 72,7h – 58,0 Para mulheres: 62,1h – 44,7 8. Escreva um algoritmo para : Ler o número de LADOS de um polígono regular, número inteiro, maior ou igual a 3. Ler a medida do lado, número real. Calcular e escrever: A altura, se o número de lados é igual a 3 A área, se número de lados é igual a 4 O perímetro, se o número de lados é igual a 5 O raio do círculo circunscrito, se número de lados é igual a 6 9. Escreva um algoritmo para ler um número inteiro. Verificar se ele é par ou ímpar. 10. Escreva um algoritmo para ler um número real. Verificar se ele é positivo, negativo ou nulo. 48 LISTA DE EXERCÍCIOS NÚMERO 6 1) Escreva um algoritmo para ler três números reais. Determinar e imprimir o menor valor. 2) Escreva um algoritmo para ler três números reais. Verificar se eles podem ser lados de um triângulo. Em caso afirmativo, verificar se o triângulo é eqüilátero, isóscele ou escaleno, senão, imprimir uma mensagem adequada. 3) Escreva um algoritmo para ler três valores inteiros. Imprimi-los em ordem crescente. 4) Escreva um algoritmo que leia o nome e o salário bruto de um funcionário. Dados os descontos abaixo, calcule e escreva: O nome do funcionário O desconto de INSS O desconto de Imposto de Renda O salário bruto O salário líquido Salário bruto (SB) SB R$ 700,00 R$ 700,00 < SB R$ 2.800,00 SB > R$ 2.800,00 Imposto de Renda Isento 15% 27,5% INSS 8% 9% 10% 5) Escreva um algoritmo para verificar se um ano é bissexto, inserindo mensagem adequada. 6) Escreva um algoritmo para determinar e escrever as raízes reais ou complexas de uma equação do 2º grau. 7) Escreva um algoritmo para verificar se um sistema linear com duas equações e duas variáveis é DETERMINADO, INDETERMINADO ou IMPOSSÍVEL. 8) Escreva um algoritmo que leia a idade de uma pessoa e escreva na tela “Você é jovem” se idade for menor que 18 anos, “Você é adulto” se idade é maior ou igual a 18 e menor que 65 anos e “Você é idoso” se idade é maior ou igual a 65 anos. 9) Escreva um algoritmo que leia três notas de um aluno. Calcule e escreva a soma das duas maiores notas. 10) Escreva um algoritmo que leia uma senha, determine e escreva se ela é igual a “7531” (Permitir 3 tentativas) 49 ESTRUTURAS DE REPETIÇÃO Uma estrutura de repetição é utilizada quando um comando ou uma sequência de comandos de um algoritmo deve ser repetida. Cada linguagem de programação tem suas estruturas específicas de repetição. Nos algoritmos desse texto usaremos apenas duas: 1) Se o número de repetições é dependente de uma condição: estrutura de repetição “enquanto”. 2) Se o número de repetições é definido, isto é, se o número de repetições é controlado por uma variável: estrutura de repetição “para”. REPETIÇÕES DEPENDENTES DE CONDIÇÃO NO INÍCIO ESTRUTURA “enquanto” NOTAÇÃO enquanto (condição) bloco de comandos_1 fim enquanto bloco de comandos_2 Funcionamento Enquanto a condição entre parênteses for verdadeira o bloco de comandos_1 será executado e quando for falsa o processamento passará ao bloco de comandos_2. Exemplo x0 enquanto (x < 10) escreva (x) xx+1 fim enquanto //Novos comandos //Valor inicial de x //Verifica se x é menor que 10 //Se a condição do enquanto é verdadeira escreve x //Aumenta x em uma unidade //Termina a repetição quando x = 10 Esse trecho de algoritmo tem como objetivo escrever os números inteiros de 0 a 9. Para facilitar o entendimento numeramos as linhas de comandos. 1) 2) 3) 4) 5) 6) x0 enquanto (x < 10) escreva (x) xx+1 fim enquanto //Novos comandos 50 1) Atribui o valor inicial (0 – zero) à variável x. 2) Comando que verifica o valor da variável x, gerando um valor verdadeiro ou falso, que indicará se o processamento continuará na próxima linha de comandos (linha 3) ou se desviará para a linha 6. 3) Escreve o valor de x: 0, 1, 2, 3, 4, 5, 6, 7,8, 9 4) Aumenta uma unidade na variável x e coloca o resultado na própria variável x que passará a ser: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 (último valor que será o responsável pelo encerramento da estrutura de repetição). 5) Limita os comandos da estrutura de repetição. 6) Próximos comandos do algoritmo, fora da estrutura de repetição. PROGRAMAS EXEMPLOS DE ESTRUTURAS DE REPETIÇÃO 17. Programa para escrever na tela os números positivos ímpares menores que 100. Análise do problema: Os números impares menores que 100 são: 1, 3, 5, ..., 95, 97, 99 O primeiro número impar é 1 e os próximos são obtidos pelo acréscimo de 2 unidades ao anterior, até que o valor ultrapasse 99. /* Escrever na tela os números ímpares de 1 a 99 Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis inteiro Numero //Valor inicial Numero 1 //Processamento e saída de resultados enquanto (Numero < 100) escreva (Numero) Numero Numero + 2 fim enquanto Fim do algoritmo 51 18. Leia o nome e a altura de cinco pessoas. Determine e escreva o nome e a altura da pessoa mais alta Análise do problema: Uma variável deve armazenar o valor da maior altura e outra o nome da pessoa que a tem. A maior altura deve ser iniciada com o valor zero. A variável Contador controla a repetição para ler 5 nomes e alturas. /* Programa para ler o nome e a altura de cinco pessoas. Escrever o nome e a altura da pessoa mais alta Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis real Altura, Maior_Altura literal Nome, Nome_do_mais_Alto inteiro Contador Maior_Altura 0 Contador 1 //Processamento e saída de resultados enquanto (Contador <= 5) //Entrada de dados leia (Altura) leia (Nome) se (Altura > Maior_Altura) Maior_Altura Altura Nome_do_mais_Alto Nome fim se Contador Contador + 1 fim enquanto escreva (Maior_Altura, Nome_do_mais_Alto) Fim do algoritmo 52 19. Foi feita uma pesquisa com 150 pessoas sobre a aprovação ou não de um determinado governo. Escreva um programa que determine e escreva: O número de homens que respondeu à pesquisa O número de mulheres que respondeu à pesquisa O número de homens que respondeu SIM O número de mulheres que respondeu NÃO A porcentagem de pessoas que respondeu SIM Análise do problema: Sexo pode ser representado por 0 (zero) feminino e 1 (um) masculino e resposta 1 equivalendo a Sim e 0 a Não. Todos os contadores devem ser inicializados com 0. 53 /* Avaliação de pesquisa Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis inteiro Sexo, Resposta, Numero_do_Entrevistado, Numero_Homens, Numero_Mulheres, Numero_Homens_Sim, Numero_Muheres_Nao, Porcentagem_Sim, Total_Sim //Atribuição inicial de valor: “inicialização” Numero_do_Entrevistado 0 Numero_Homens 0 Numero_Muheres 0 Numero_Homens_Sim 0 Numero_Muheres_Nao 0 Total_Sim 0 //Entrada de dados e processamento enquanto (Numero_do_Entrevistado <= 150) Numero_do_Entrevistado Numero_do_Entrevistado + 1 leia (Sexo, Resposta) se (Resposta = 1) Total_Sim Total_Sim + 1 fim se se (Sexo = 0) Numero_Mulheres Numero_Mulheres + 1 se (Resposta = 0) Numero_Muheres_Nao Numero_Muheres_Nao + 1 fim se senão se (Resposta = 1) Numero_ Homens_Sim Numero_ Homens_Sim + 1 fim se fim se // Sexo = 0 Numero_do_Entrevistado Numero_do_Entrevistado + 1 fim enquanto Porcentagem_Sim (Total_Sim / 150) * 100 Numero_Homens 150 – Numero_Mulheres //Saída de resultados escreva (Numero_Homens, Numero_Mulheres, Numero_Muheres_Nao) escreva (Numero_ Homens_Sim, Porcentagem_Sim) Fim do algoritmo 54 20. Um material radioativo reduz-se à metade de sua massa a cada 40 segundos. Escreva um programa que leia a massa desse material, em quilogramas, calcule e escreva o tempo (horas, minutos e segundos) necessário para que a massa fique menor que 1 grama. Análise do problema: A cada 40 segundos a massa do material se reduz à metade da massa anterior. O algoritmo deve aumentar o tempo em 40 e reduzir a massa do material à metade (dividir por 2), até que a massa fique menor que 1 grama /* Programa para determinar tempo de desintegração de matéria Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis real Massa_Inicial, Massa_Atual inteiro Tempo, Horas, Minutos, Segundos, Tempo 0 //Entrada de dados leia (Massa_Inicial) Massa_Atual Massa_Inicial //Processamento e saída de resultados enquanto (Massa_Atual >= 1) Massa_Atual Massa_Atual / 2 Tempo Tempo + 40 fim enquanto Horas inteiro(Tempo / 3600) Minutos inteiro((Tempo – Horas * 3600) / 60) Segundos (Tempo – Horas * 3600 – Minutos * 60 escreva (Horas, Minutos, Segundos) Fim do algoritmo 55 ESTRUTURA DE REPETIÇÃO COM VARIÁVEL DE CONTROLE Quando o número de repetições é conhecido, pode-se usar a estrutura: para Var Valor_Inicial até Valor_Final passo p faça Bloco de comandos_1 fim para Bloco de comandos_2 Para cada valor de Var será executado o bloco de comandos_1. Var sofre um acréscimo p, positivo ou negativo, podendo ser omitido se a variável aumenta de 1 em 1. Alguns problemas anteriores podem ser resolvidos usando-se essa estrutura. 21. Faça um programa para imprimir a tabuada de multiplicação do número inteiro 9. Análise do problema: A “tabuada” de um número inteiro qualquer é composta do produto desse número pelos fatores 0, 1, 2, ..., 9. Assim, o algoritmo deve imprimir 0 x 9, 1 x 9, 2 x 9, ..., 8 x 9 e 9 x 9 /* Imprimir a tabuada de 9 Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis inteiro Multiplicador, Fator_Fixo, Produto Fator_Fixo 9 //Processamento e saída de resultados para Multiplicador 0 até 9 passo 1 faça Produto Multiplicador * Fator_Fixo escreva (Fator_Fixo, “*”, Multiplicador, “ = “, Produto) fim para Fim do algoritmo 56 22. Escreva um programa que leia um número inteiro e positivo N. Calcule e escreva a soma dos N primeiros termos da seqüência 1/2, 2/5, 3/8, 4/11, 5/14, 6/17, ... Análise do problema: Verificamos que cada termo da sequência é formada por um numerador e um denominador. O numerador tem valor inicial 1 e varia de 1 em 1 até N (passo ou acréscimo 1) e o denominador tem valor inicial 2 e cresce de 3 em 3 (passo ou acréscimo 3). O algoritmo consiste em calcular cada termo da sequência e acrescentar (somar) esse termo a variável (somatório), cujo valor inicial deve ser 0 (zero). /* Soma dos N primeiros termos da sequência: 1/2, 2/5, 3/8, 4/11, 5/14, 6/17, ... Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis inteiro Numerador, Denominador, N real Termo, Soma Soma 0 Numerador 1 Denominador 2 //Entrada de dados leia (N) //Processamento e saída de resultados para Numerador 1 até N faça Termo Numerador / Denominador Soma Soma + Termo Denominador Denominador + 3 fim para escreva (Soma) Fim do algoritmo uma 57 23. Escreva um programa para escrever todos os números inteiros palíndromos de 4 algarismos. Análise do problema: Um número palíndromo ou frase palíndroma é aquela que é idêntica se lida da direita para a esquerda ou da esquerda para a direita. Exemplos: “luz azul”, “acaiaca”, “ovo”, “ana”, “arara”, “socorram-me subi no onibus em marrocos” “12321”, “2002” Os números palíndromos de 4 algarismos seguem o padrão XYYX, onde X é um número inteiro de 1 a 9 e Y um número inteiro de 0 a 9. Assim cada número inteiro palíndromo de 4 algarismos terá a forma: N = 1000 X + 100 Y + 10 Y + X /* Números palíndromos de 4 algarismos Programador: Data: DD/MM/AAAA */ Algoritmo //Declaração de variáveis inteiro Numero, X, Y //Processamento e saída de resultados para X 1 até 9 faça para Y 0 até 9 faça Numero 1000 * X + 100 * Y + 10 * Y + X escreva (Numero) fim para fim para Fim do algoritmo 58 LISTA DE EXERCÍCIOS NÚMERO 7 Escreva um algoritmo que: 01) Determine e escreva todos os números inteiros positivos menores que 1000, divisíveis por 7 e por 17. 02) Leia uma seqüência indeterminada de números reais positivos. Determine e escreva o menor e o maior valor digitado. Use um “flag” adequado. 03) Leia a altura de um número indeterminado de pessoas, calcule e escreva a média aritmética das alturas. 04) Leia dois números inteiros A e B. Calcule e escreva a soma dos números ímpares entre A e B. 05) Leia dois números inteiros e positivos, calcule e escreva o MDC desses números, usando o método das subtrações sucessivas. 06) Calcule e escreva o fatorial de um número inteiro e positivo. 07) Calcule e escreva o fatorial dos números inteiros de 0 a 12. 08) Leia do teclado um número inteiro e positivo N (validar). Calcule e escreva a soma dos N primeiros termos da série: S 09) 2 34 3 4 5 4 5 6 5 6 7 6 7 8 ... Leia do teclado um número inteiro e positivo N (validar) e um número real x, positivo é positivo). Calcule e escreva a soma dos N primeiros termos da série: S 10) 1 2 3 x x 2 x3 x 4 x5 x 6 ... 1 3 5 7 9 11 Leia um número inteiro e positivo (validar), verifique se é primo ou não. (verificar se 59 LISTA DE EXERCÍCIOS NÚMERO 8 1) Faça um algoritmo para imprimir a raiz quadrada de todos os inteiros positivos menores que 21. 2) Faça um algoritmo para imprimir todos os divisores de um número inteiro lido do teclado. 3) O número 3025 possui a seguinte característica: 30 25 55 55 * 55 3025 Faça um algoritmo para escrever todos os números de 4 algarismos que apresentam tal característica. 4) Capicua (origem catalã: "cap i cua", cabeça e cauda) ou número palíndromo é um número (ou conjunto de números) cujo reverso é ele próprio (Wikipédia-12/12/2011) Exemplos: 9339, 55, 884488, 1234567890987654321 Faça um algoritmo para escrever todos os números “capicuas” de cinco algarismos. 5) Um determinado material radioativo perde metade de sua massa a cada 50 segundos. Escreva um algoritmo para: Ler a massa inicial desse material, em gramas. Determinar o tempo para que essa massa se torne menor que 0,5 gramas. Escrever na tela: A massa inicial A massa final Tempo calculado, em horas, minutos e segundos. 6) Escreva um algoritmo para imprimir os 20 primeiros termos da sequência de Fibonacci. Sequência de Fibonacci: 1, 1, 2, 3, 5, 8, 13, 21, 34, ... 7) Escreva um algoritmo para ler o sexo e a idade de um número indeterminado de pessoas, calcular e escrever: A média de idade dos homens. O número de mulheres com mais de 30 anos. O número de homens com idade acima de 17 anos e abaixo de 60 anos, A condição de encerramento do programa deve ser idade menor ou igual a 0. 8) Um país A tem 50 milhões de habitantes e cresce a uma taxa de 2% ao ano e outro país B tem 100 milhões de habitantes e cresce a uma taxa de 1,2% ao ano. Faça um algoritmo que calcule o tempo para que o país A ultrapasse o país B em número de habitantes. 9) Na terceira lista de exercícios foi dada uma fórmula para calcular o valor da prestação de um empréstimo bancário dados o valor a ser financiado, a taxa de juros e o tempo de financiamento. Escreva um algoritmo que leia do teclado uma taxa de juros e um valor a ser financiado, calcule e escreva o valor de prestações para financiamentos em 6, 12, 18, 24, 30, 36, 42 e 48 parcelas. 60 10) Uma editora presume que venderá 180 livros a R$ 100,00 a unidade e que a cada R$ 5,00 que diminuir no preço do livro aumenta as vendas em 30 unidades. Escreva um algoritmo que imprima uma tabela com o valor do lucro esperado, em função do número e do preço dos livros vendidos, supondo uma despesa fixa de R$ 40,00 no preço de cada livro. Calcule e escreva o lucro máximo esperado, o número e o preço do livro. Cópia autorizada para fins não comerciais. São bem-vindas críticas, sugestões e correções. [email protected] 16/02/2012