Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos 2.1 Tipos de Valores Um algoritmo, que conforme já visto, constitui-se em uma seqüência de instruções a serem executadas para a obtenção da solução de um determinado problema, pode manipular vários valores. Esses valores podem ser os dados apresentados pelo problema, ou dados intermediários gerados durante a execução do algoritmo, ou mesmo os valores que representam a solução do problema. Sejam, por exemplo, as informações relativas a um funcionário de uma empresa: Nome : José da Silva Idade : 25 Sexo : M Salário : 1200.00 Veja que, nesse pequeno exemplo, vários valores foram utilizados. Note que, José da Silva é um valor que representa o nome do funcionário, assim como 25 é um valor que representa a idade do funcionário. Com o valor 1200.00, que representa o salário do funcionário, poderíamos, por exemplo, efetuar uma multiplicação, se assim fosse necessário. Já com o valor José da Silva, essa operação não faria qualquer sentido. Assim, podemos concluir que os valores manipulados dentro de um algoritmo podem ser classificados em vários tipos, cada tipo com suas próprias características e operações. Cada linguagem de programação tem sua própria classificação. Em nosso pseudocódigo, classificaremos os valores nos seguintes tipos básicos: Inteiro Real Caractere Literal Lógico Valores tipo Inteiro São valores que representam quantidades numéricas inteiras, tais como a idade de uma pessoa, o número de funcionários de uma empresa, o número de páginas deste livro, etc. Exemplos de valores do tipo inteiro: 17 -5 +90 0 Valores tipo Real São valores que representam quantidades reais, ou seja, valores que apresentam parte decimal, tais como o salário de um funcionário, a média de um conjunto de valores, a altura de uma pessoa, etc. Vamos assumir que os valores reais serão sempre representados utilizando-se o ponto decimal. Exemplos de valores do tipo real: 4.5 1200.93 -0.00005 +15.0 0.0 Valores tipo Caractere São valores utilizados para representar informações onde apenas um caractere é necessário, tais como o valor do sexo de uma pessoa (M ou F), uma letra do alfabeto, etc. Todo valor do tipo caractere apresenta apenas um caractere. Vamos assumir que valores do tipo caractere devem sempre ser especificados entre apóstrofos. Veja que qualquer caractere constitui-se em um valor do tipo caractere. Exemplos de valores do tipo caractere: ‘*’ ‘I’ ‘5' 'i ' (espaço) Valores tipo Literal São utilizados na representação de informações onde se faz necessária a utilização de zero ou mais caracteres, tais como o nome de uma pessoa, o nome de uma cidade, uma determinada frase, etc. Um valor do tipo literal constitui-se em uma seqüência de zero ou mais caracteres especificados entre apóstrofos. Exemplos de valores do tipo literal: 'Antonio da Silva' 'Rua Felipe Schmidt' 'Olho d"agua' '1234' " (literal nulo) Valores tipo Lógico São apenas dois valores: Verdadeiro e Falso. São utilizados na representação do valor de uma expressão lógica ou afirmações, tais como 6 > 4 (Verdadeiro) ou "A terra gira em torno da lua" (Falso). 2.2 Variáveis Conforme apresentado anteriormente, uma posição de memória sempre armazena um determinado valor. Se outro valor for atribuído à posição, então o valor anterior será destruído. Assim, o conteúdo de uma posição de memória pode variar durante a execução de um algoritmo. Dessa forma, passaremos a denominar uma posição de memória de Variável. Nome das Variáveis Cada linguagem de programação tem suas próprias regras para formação do nome de uma variável. Assumiremos para o nosso pseudocódigo a seguinte regra: O nome de uma variável pode ser composto por letras, dígitos e o caractere sublinhado (_), sendo que o primeiro caractere deve ser uma letra. Assumiremos também que, para nomes de variáveis, o uso de letras maiúsculas ou minúsculas é indiferente. Assim, os nomes Salario e SALARIO identificam a mesma variável. Tipo das Variáveis Uma variável é uma posição de memória e, portanto, armazena sempre determinado valor. Assim, cada variável utilizada em um algoritmo deverá ser declarada de um determinado tipo, de acordo com o tipo de valor que irá armazenar. Dessa forma, se uma variável for declarada como sendo do tipo Inteiro, então esta só poderá receber valores do tipo inteiro. Considerando essas novas informações, o nosso algoritmo visto no Capítulo 1, que calcula a média aritmética de três valores inteiros, fica conforme segue. Algoritmo Media_Aritmetica Variáveis Valor_a, Valor_b, Valor_c, Soma : Inteiro Media : Real Inicio Leia Valor_a Leia Valor_b Leia Valor_c Soma Valor_a + Valor_b + Valor_c Media Soma/3 Escreva Media Fim Observe que demos um nome ao nosso algoritmo. Não colocamos comentários a respeito das instruções, os quais poderiam ser especificados entre chaves. A colocação de comentários, também chamada de documentação, é importante para análise e manutenção futura, pois conferirá maior clareza ao algoritmo. Todo comentário será especificado entre chaves. Observe também que cada uma das variáveis utilizadas no algoritmo foi declarada como sendo de um tipo. Assim, a declaração: Variáveis Valor_a, Valor_b, Valor_c, Soma : Inteiro Media : Real define que as variáveis Valor_a, Valor_b, Valor_c e Soma serão do tipo Inteiro, e, portanto, somente valores inteiros poderão ser armazenados nelas. Já a variável Media foi declarada como tipo Real e, portanto, somente pode receber valor do tipo Real. 2.3 Expressões Uma expressão constitui-se em um conjunto de variáveis e/ou valores, separados por caracteres especiais, que indicam as operações que devem ser executadas. Assim, a expressão: Valor_ a + Valor_ b + Valor_c indica o cálculo da soma dos conteúdos das variáveis Valor_a, Valor_b e Valor_c. Já o comando: Soma Valor_a+ Valor_b+ Valor_c indica que o valor da expressão Valor_a+ Valor_b+ Valor_c deve ser armazenado na variável Soma. Seja o comando: Resultado Valor_a < 10 Nesse caso, Valor_ a < 10 constitui-se em uma expressão cujo valor pode ser Verdadeiro ou Falso, dependendo do valor armazenado na variável Valor_a. Assim, a expressão Valor_a < 10 apresenta como resultado um valor do tipo Lógico. Na variável Resultado será armazenado o valor Verdadeiro, se o conteúdo da variável Valor_a for menor que 10. Caso o conteúdo de Valor_a não seja menor que 10, então o valor da expressão Valor_a < 10 será Falso e a variável Resultado, que deve ser declarada do tipo Lógico, receberá o valor Falso. Os operadores básicos utilizados em uma expressão podem ser classificados em: Aritméticos, Relacionais e Lógicos. Os operadores aritméticos especificam operações aritméticas, tal como em Valor_a + Valor_b. Os operadores relacionais especificam uma relação, tal como em Valor_a < 10. Os operadores lógicos especificam uma operação lógica, como no comando: Resultado (Valor_a > 10) E (Valor_a < 20) onde é utilizado o operador lógico E. Nesse exemplo, Resultado receberá o valor Verdadeiro se o conteúdo da variável Valor_a for maior que 10 e menor que 20; caso contrário, Resultado receberá o valor Falso. Operadores Aritméticos Expressam operações aritméticas. Operador Significado Exemplo Tipo de Operandos + Adição a + b Reais e/ou Inteiros - Subtração a - b Reais e/ou Inteiros * Multipilicação a * b Reais e/ou Inteiros / Divisao Real a / b Reais e/ou Inteiros DIV Divisao Inteira a DIV b Inteiros RESTO Resto da Divisão Inteira a RESTO b Inteiros ** Exponenciação a ** b Reais e/ou Inteiros Algoritmo Exemplo Variáveisa, b, d, Sobra : Inteiro c, f : Real Inicio a 22 b 4 c a/b d aDivb Sobra a Resto b f 2.0 ** b Fim Hierarquia das Operações Aritméticas Dentro de uma expressão aritmética podem aparecer várias operações. As operações aritméticas serão executadas de acordo com a seguinte ordem: 1°) O que estiver entre parênteses; 2°) Exponenciação; 3°) Multiplicação, ou divisão real, ou divisão inteira, ou resto da divisão inteira; 4°) Adição ou subtração. Quando aparecerem duas ou mais operações de mesma hierarquia, estas são executadas na ordem em que aparecem na expressão, da esquerda para direita. Considere, por exemplo, a fórmula a seguir: 32 3 2 xx b a y O comando para calcular o valor de y, de acordo com a fórmula acima, ficará: y (2+a)/(b-3)-2*x+x**3 De acordo com a hierarquia, no cálculo do valor da expressão, as operações serão executadas na seguinte ordem: 1°) (2 + a) 2°) (b - 3) 3°) x**3 4°) divisão do resultado de 1°) com resultado de 2°) 5°) 2*x 6°) subtração do resultado de 4°) com resultado de 5°) 7°) adição do resultado de 6°) com o resultado de 3°) Operadores Relacionais . Expressam operações de relação. Operadores lógicos Expressam operações lógicas. As linguagens de programação, em geral, apresentam vários operadores lógicos. Aqui, em nosso pseudocódigo, consideraremos apenas os operadores lógicos E, 0u e Não. Veja a seguir alguns exemplos de comandos, com expressões que usam operadores lógicos e relacionais. Operador Significado Exemplo > Maior que Idade > 18 >= Maior ou igual que Num_Dep >= 2 < Menor que Nota < 6.0 <= Menor ou igual que x <= 25 = Igual Nome = ‘Antonio’ <> Diferente Sexo <> ‘f’ Foi Aprovado (Media >= 6.0) E (Frequencia > 0.75) E_Contribuinte (Salario > 1000.00) Ou (Idade < 75) Tem Sol Não Esta Nublado Observe que os operadores lógicos Ou e E são aplicados sempre a dois operandos, enquanto que o operador Não é aplicado a um único operando. Esses operandos podem ser expressões, desde que tenham como resultado um valor lógico (Verdadeiro ou Falso). Operando 1 Operando 2 Resultado com E Resultado com OU Verdadeiro Verdadeiro Verdadeiro Verdadeiro Verdadeiro Falso Falso Verdadeiro Falso Verdadeiro Falso Verdadeiro Falso Falso Falso Falso Assim, a expressão (Media >= 6.0) E( Frequencia > 0.75) terá como resultado o valor Verdadeiro somente se as duas condições forem verdadeiras, isto é, se o conteúdo da variável Media for maior ou igual a 6.0 e, simultaneamente, se o conteúdo da variável Frequencia for maior que 0.75. Caso uma das condições seja falsa, ou mesmo se ambas forem falsas, então toda a expressão terá co mo resultado o valor Falso. Já a expressão (Salario > 1000.00) Ou (Idade < 75), terá como resultado o valor Verdadeiro, se uma das condições for verdadeira, ou se ambas forem verdadeiras. Assim, basta que o conteúdo da variável Salario seja maior que 1000.00 para que a expressão (Salario > 1000.00) Ou (Idade < 75) tenha o valor Verdadeiro. O operador Não, que deve ser aplicado a um único operando lógico, faz com que o resultado da operação seja o inverso do valor do operando. Assim, com a execução do comando: Tem_Sol Não_Esta_Nublado será armazenado o valor Verdadeiro na variável Tem_Sol se o conteúdo da variável Esta_Nublado for Falso. Veja que, se Esta_Nublado tem o valor Falso, então a expressão Não_Esta_Nublado tem o valor contrário, isto é, Verdadeiro. Quando uma expressão tem como resultado um valor lógico, então denomina-se essa expressão de expressão lógica. 2.4 Compatibilidade de Tipos O valor a ser armazenado em uma variável deve ser do mesmo tipo da variável. Assim, se em um algoritmo tivermos o comandos: A 10.5 Resultado 7/2 Aprovado (Media >= 6.0) E (Frequencia > 0.75) então as variáveis A e Resultado deverão ser declaradas do tipo Real, pois 10.5 é um valor real, e 7/2 dá como resultado também um valor real. Já a variável Aprovado deve ser declarada como sendo do tipo Lógico, pois a expressão (Media >= 6.0) E ( Frequencia > 0.75) tem como resultado um valor do tipo lógico, ou seja, é uma expressão lógica. Algoritmo Exemplo2_41 Variáveis Nom : Literal Peso, Num_Car, X : Real Num : Inteiro Inicio Num 5 Nom `Isto e um exemplo' Peso 100.1 Num_Car 20 X 3 Nom `Trocaram meu conteúdo' Peso (Peso/X) * 0.0 Num_Car Num * X X 10 - (X + 5) Num_Car Num_Car/3 Fim Veja na tabela seguinte o acompanhamento dos valores que as variáveis assumiram durante a execução desse algoritmo. A execução manual de um algoritmo com a observação dos valores assumidos pelas várias variáveis tem por objetivo verificar possíveis problemas no algoritmo. À execução manual de um algoritmo também denomina-se Teste de Mesa. Num Peso Num_Car X Nom 5 100.1 20.0 3.0 Isto é um Exemplo 0.0 15.0 2.0 Trocaram meu conteúdo 5.0 O algoritmo Exemplo2_41 mostra que, durante a sua execução, o conteúdo de uma variável pode mudar. Entretanto, cada novo valor armazenado na variável deve ser do mesmo tipo da variável. Como exceção, consideraremos em nosso pseudocódigo que é permitido atribuir um valor do tipo Inteiro a uma variável declarada como sendo do tipo Real. 2.5 Comandos de Entrada e Saída Um comando de entrada (leitura) tem por função transferir dados do meio externo para a memória de trabalho do computador. Vamos assumir em nosso pseudocódigo que os dados do meio externo entram no computador através de seu teclado. Assim, a execução do comando: Leia Numero_Dependentes faz com que o computador fique aguardando que um valor seja digitado. O valor digitado será armazenado na variável Numero_Dependentes. Um comando de leitura pode especificar a leitura de um ou vários valores. Assim, a execução do comando: Leia Nome, Numero_Dependentes, Salario faz com que o computador aguarde que três valores sejam digitados. O primeiro valor será armazenado na variável Nome, o segundo na variável Numero-Dependentes e o terceiro na variável Salario. Lembre-se que cada valor a ser digitado deve ser do mesmo tipo da variável que o recebe. Ao contrário de um comando de entrada, um comando de saída é utilizado quando necessitamos apresentar valores ao meio externo. Assumiremos que esses valores serão apresentados ao meio externo através da tela de um monitor. Assim, se quisermos que o computador mostre o valor que está armazenado na variável Soma, o seguinte comando deve ser executado: Escreva Soma Um comando Escreva pode especificar a saída de vários valores. Assim, o comando Escreva Nome, `Media : ', Media faz com que seja mostrado na tela o conteúdo da variável Nome, seguido do valor tipo literal 'Media:', e após, o conteúdo da variável Media. Assumiremos em nosso pseudocódigo que cada comando Escreva imprime uma linha na tela. Veja o algoritmo a seguir. Algoritmo Exemplo2_51 Variáveis Nome_do_Aluno : Literal Idade : Inteiro Nota : Real Inicio Leia Nome_do_Aluno Leia Idade Leia Nota Escreva `Nome do Aluno: `, Nome do_Aluno Escreva `Idade: ' , Idade Escreva `Nota da Prova: ` , Nota Fim Considerando que, ao executar os comandos de leitura, o usuário digite 'Joao' para Nome do_Aluno, 25 para Idade e 9.5 para Nota, a tela teria a seguinte aparência, após a execução das instruções desse algoritmo: Joao 25 9.5 Nome do Aluno: Joao Idade: 25 Nota da Prova: 9.5 2.6 Constantes Em muitas situações, ao escrevermos um algoritmo, necessitamos trabalhar com valores que não se alterarão durantetoda execução do algoritmo. A esses valores denominamos Constantes. Constante é uma quantidade fixa, invariável, cujo valor é definido no início do algoritmo, não podendo ser alterado durante a sua execução. Assim, se Sal_Mínimo identifica uma constante, então não será permitido que alguma instrução do algoritmo modifique o seu valor. Como uma constante constitui -se em um valor, esta poderá ser de qualquer um dos tipos já vistos Algoritmo Exemplo_de_Constante Constantes Sal_Minimo = 260.00 Mensagem = 'Resultados' Variáveis Salario : Real Quantidade :Inteiro Inicio Inicio Leia Salario Quantidade Salario Div Sal_Minimo Escreva Mensagem Escreva 'O funcionário tem salário de: ', Salario Escreva 'O qual eqüivale a ', Quantidade, ' Salários' Escreva 'Valor do salário mínimo:', Sal Minimo Fim No algoritmo 'Exemplo_de_Constante' são declaradas duas constantes, Mensagem e Sal_Minimo, que são utilizadas dentro do algoritmo e que, por definição, não poderão ser alteradas. A utilização de constantes para valores que não mudam durante a execução do algoritmo tem como vantagem a facilidade de futura manutenção do algoritmo. Assim, se o valor do salário-mínimo for alterado pelo governo, basta alterar-se o valor da constante Sal_Minimo que, automaticamente, todas as instruções que utilizam essa constante ficam atualizadas. Veja que, se não tivéssemos utilizado a constante Sal_Minimo, o valor 260,00 deveria ser especificado em vários pontos dentro do algoritmo, o que poderia resultar em possível erro por esquecimento, caso fosse necessário a sua alteração. Exercícios Resolvidos Exercício 01: Considere o problema de calcular as raízes de uma equação de segundo grau. Uma equação de segundo grau tem a seguinte forma geral: 02 cbxax As raízes podem ser representadas por meio da fórmula: a b x 2 , onde acb 42 Em nossa resolução, vamos assumir que as raízes de uma equação de segundo grau sejam sempre reais. Fazendo uma análise desse problema com o objetivo de determinar quais dados são necessários para a sua resolução, conclui-se que é necessário o conhecimento dos valores dos coeficientes A, B e C. Também pode-se concluir, pela definição do problema, que o objetivo é determinar as raízes da equação. Assim, tem-se: Entradas: Os coeficientes da equação (A , B , C). Saídas: As raízes da equação (x1 , x2). Estando claramente definido e analisado o problema, parte-se para a construção do algoritmo, o qual ficará como segue. Algoritmo Segundo_Grau Variáveis A,B,C,xl,x2 : Real Inicio Leia A, B, C xl (-B+(B**2-4*A*C)**0.5)/(2*A) x2 (-B-(B**2-4*A*C)**0.5)/(2*A) Escreva 'Raízes da equação fornecida' Escreva `Raiz 1 : ', xl Escreva `Raiz 2 : ', x2 Fim Exercício 02: Considere a determinação do salário líquido de um funcionário, assumindo que sobre seu salário bruto incide um desconto de 8.5% para a previdência. Feito o desconto para a previdência, sobre o restante é aplicado um desconto de 26,6%, a título de imposto de renda. O algoritmo deve mostrar o nome do funcionário, o seu salário bruto e o seu salário líquido. Fazendo uma análise desse problema, pode-se concluir que, para que seja possível a sua resolução, devemos ter como dados o nome do funcionário e o valor de seu salário bruto. Assim, tem - se: Entradas: Nome do funcionário Salário Bruto Pelo enunciado do problema, também facilmente pode-se concluir que a sua solução consiste em mostrar os valores do nome, salário bruto e salário líquido do funcionário. Assim, tem-se: Saídas: Nome do Funcionário Salário Bruto Salário Líquido Pela definição do problema, observa-se que o desconto para a previdência é calculado diretamente a partir do salário bruto. Já o desconto para o imposto de renda é calculado sobre o salário bruto menos o desconto da previdência. Por fim, o salário líquido será calculado a partir do salário bruto menos os descontos para a previdência e imposto de renda. O algoritmo fica como segue: Algoritmo Funcionario Variáveis Nome : Literal Sal_Bruto, Sal Liq, Inss, Irf : Real Inicio Leia Nome Leia Sal_Bruto Inss Sal-Bruto *8.5 / 100 Irf (Sal Bruto - Inss) * 26.6 / 100 Sal Liq Sal_Bruto - Inss - Irf Escreva `Funcionário : ', Nome Escreva 'Salario Bruto ; ', Sal Bruto Escreva `Salário Líquido : ', Sal Liq Fim Exercício 03: Considere o seguinte problema: dados os pontos A, de coordenadas A(x1, y1), e B, de coordenadas B(x2, y2), escreva um algoritmo que determine a distância entre os dois pontos. A distância entre dois pontos representados no sistema de coordenadas cartesianas é dada por: 2 12 2 12 )()( yyxxdist Pela definição do problema conclui-se que, para a sua resolução, deve-se ter como entradas as coordenadas de cada um dos pontos. Como saída tem-se o valor da distância entre os pontos. Assim, tem-se: Entradas: Coordenadas do ponto A, ou seja, x1 e y1 Coordenadas do ponto B, ou seja, x2 e y2 Saída: Distância entre A e B Algoritmo Distancia_Pontos Variáveis Dist, X1, Y1, X2, Y2 : Real Inicio Leia X1, Y1 Leia X2, Y2 Dist ((X2 - X1)**2 + (Y2 - Y1)**2) **0.5 Escreva 'Distância entre os pontos :', Dist Fim
Compartilhar