Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Algoritmos e programaçao, Notas de estudo de Algoritmos e Programação

ALGORITMOS E PROGRAMAÇAO

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 10/08/2010

andre-silva-ewy
andre-silva-ewy 🇧🇷

5

(5)

2 documentos

1 / 122

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
ALGORITMOS E PROGRAMAÇÃO
COM RESUMO DAS LINGUAGENS PASCAL E C
PROF. AFONSO INÁCIO ORTH
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe Algoritmos e programaçao e outras Notas de estudo em PDF para Algoritmos e Programação, somente na Docsity!

ALGORITMOS E PROGRAMAÇÃO

COM RESUMO DAS LINGUAGENS PASCAL E C

PROF. AFONSO INÁCIO ORTH

SUMÁRIO

  • Introdução
  • Capítulo I Conceitos Básicos de Algoritmos
    • Exercícios
  • Capítulo II Algoritmos Seqüenciais
    • Questionário
    • Exercícios
  • Capítulo III Algoritmos com Seleção
    • Questionário
    • Exercícios
  • Capítulo IV Algoritmos com Repetição
    • Questionário
    • Exercícios
  • Capítulo V Algoritmos de Manipulação de Matrizes
    • Exercícios
  • Capítulo VI Subalgoritmos
    • Subalgoritmos do Tipo Função
    • Subalgoritmos do Tipo Procedimento
    • Técnica Top-Down
    • Técnica Bottom-up
    • Questionário
    • Exercícios
  • Capítulo VII Algoritmos Recursivos
    • Exercícios
  • Capítulo VIII Algoritmos de Manipulação de Caracteres
    • Implementação de Cadeias de Caracteres usando Vetores
    • Exercícios
  • Capítulo IX Registros
    • Registro de Vetores
    • Vetor de Registros
    • Exercícios
  • Capítulo X Correção e outras qualidades de um algoritmo
    • Formas de melhoria da eficiência de um algoritmo
  • Apêndice A Tradução de Algoritmos para PASCAL
  • Apêndice B Tradução de Algoritmos para C
  • Bibliografia

CAPÍTULO I

CONCEITOS BÁSICOS DE ALGORÍTMOS

Este capítulo visa conceituar: constante, variável, operação, expressão e atribuição. Considerando-se a fórmula matemática simples do cálculo do volume de uma esfera têm-se:

V = (^) 34 π R 3

onde encontramos:

1 – valores que podem ser classificados como:

a) valores constantes, invariantes em todas as aplicações da fórmula, no caso, os valores 4, 3, e π, que, pelo fato de serem sempre os mesmos são denominados de constantes; b) valores a serem substituídos na fórmula, em cada aplicação que dela fazemos. A representação destes valores, usualmente é feita através do uso de letras ou combinações de letras e/ou dígitos numéricos, que recebem o nome de variáveis e tornam a fórmula genérica, isto é, possível de ser usada para resolver uma certa classe de problemas e não apenas um problema específico. No exemplo, V e R são denominados de variáveis. Outros exemplos de variáveis: a, b1, valor, x14, codigo10, etc.

2 - operações a serem executadas sobre determinados operandos ( valores ), para a obtenção da solução do problema. Na fórmula do volume da esfera estão representadas as operações de divisão, multiplicação e potenciação, efetuadas sobre os operandos 4, 3, π e R, numa seqüência pré-determinada, mas nem sempre rigorosa, devido às leis matemáticas da comutatividade e associatividade.

Uma fórmula matemática é simplesmente uma descrição de um conjunto de ações ( operações ) que devem ser executadas sobre um conjunto de objetos ( constantes e/ou variáveis).

É importante que os objetos sobre os quais as operações tem efeito sejam precisamente definidos. Existe uma outra relação que deve ser cuidada entre objetos e operações. Certas operações somente podem ser executadas sobre determinados objetos, se estes objetos satisfizerem certas condições como pode ser ilustrado nos exemplos abaixo:

Exemplo 1: a

A operação de radiciação somente pode ser executada sobre o objeto a , se este pertencer ao conjunto dos reais positivos R +.

Exemplo 2: n!

O conjunto de operações necessárias para o cálculo do fatorial de n só fará sentido prático se o objeto n pertencer ao conjunto dos inteiros positivos I+.

Exemplo 3: Arc sen x

A operação de determinação do arco do seno trigonométrico somente pode ser executada sobre o objeto x se este pertencer ao intervalo [ -1,1 ] do conjunto R.

Exemplo 4: Verificar a ocorrência da letra a em um dado texto.

A operação de comparação de cada um dos caracteres do texto com a letra a tem como resultado um valor lógico verdadeiro ou falso conforme o caracter a for ou não encontrado no texto. Entretanto, ela só fará sentido se o caracter a pertencer ao conjunto de símbolos possíveis de ocorrerem no texto. Nos exemplos apresentados, pode-se notar dois tipos de limitações:

  1. Limitações de classes de valores que podem ser:

Inteiros – quando pertencem aos conjuntos I ou Z. Reais – quando pertencem ao conjunto R. Lógicos – quando pertencem ao conjunto { verdadeiro, falso }. Literais – quando pertencem ao conjunto dos caracteres.

  1. Limitações de intervalo, pois, algumas operações não atuam sobre todo o conjunto, mas somente sobre parte dele.

O conjunto de valores que uma variável pode assumir poderá influir, inclusive, na maneira de se executar certas operações:

Exemplo: A B^ que pode assumir as seguintes variações de cálculo:

a) B inteiro e positivo : A B^ = A x A x A x … A

b) B inteiro e negativo : A B^ =

A

x

A

x

A

x … x

A

c) B real : A B^ = 10 B. log 10 A

d) B nulo : A B^ = 1

Uma constante é pois, um objeto invariante em cada execução de uma fórmula matemática, enquanto variável é um objeto que representa um valor que pode ser alterado a cada execução da fórmula que a contém.

Se for resolvida a expressão V = (^) 34 π R 3 para uma esfera de raio 3, por exemplo, teremos:

  1. Substituir R por 3 ( V = (^) 34 π 3 3 )
  2. Substituir π por 3,1416 ( V = (^) 34 3,1416. 3 3 )
  3. Calcular a potenciação ( V = (^) 34 3,1416. 27 )
  4. Calcular a divisão 4 por 3 ( V = 1,333. 3,1416. 27 )
  5. Calcular a primeira multiplicação ( V = 4,1885. 27 )
  6. Calcular a multiplicação restante ( V = 113,0895 )

Observa-se que neste caso, a existência de números como 34 = 1,3333… obrigou-nos ao estabelecimento de um

limite de precisão para que a seqüência de operações pudesse ser executada.

As variáveis podem ser visualizadas como receptáculos de valores. Cada receptáculo é identificado através de um nome e pode receber um valor de um determinado tipo.

Assim a fórmula V = (^) 34 π R 3 pode ser visualizada como segue:

Cada vez que a fórmula for utilizada, ocorrerá o seguinte:

V =^ 34 π R

Essa representação compacta pode ser substituída por outras, tais como:

Sn =

n

É importante notar que a representação compacta não diminui a quantidade de operações a serem feitas, isto é, não minimiza o esforço de cálculo, apenas minimiza o esforço de notação. A decomposição de uma expressão em passos mais elementares possibilita o emprego de máquinas simples para a solução de problemas de grande complexidade ou grande volume de cálculos repetitivos. São exemplos de Expressões Aritméticas, de acordo com a definição apresentada acima:

a

b + c

ac

b

( a + b ) 2

( − 2 a + 5 b )

  • 1

Na resolução de uma expressão aritmética deve-se seguir uma ordem pré-definida que depende dos operadores e de símbolos capazes de indicar alteração de ordem de resolução.

A prioridade natural dos operadores é a seguinte:

  1. Potenciações e ( - ) monádico
  2. Multiplicações e divisões
  3. Somas e subtrações
  4. Parênteses, colchetes ou chaves podem alterar esta ordem
  5. Segue-se da esquerda para a direita em caso de indeterminação ( mais de uma operação de mesma prioridade ).

Exemplo1 : Resolver

a

b ac

b 2

^

4 a

x

b

x

2 a

x

Considere-se esta outra expressão: ( a + b) 2

( 2 a + 5 b )

+1 que tem a seguinte ordem de operações:

A decomposição de uma expressão deverá atender sempre o seguinte princípio básico: a solução das sub- expressões deve conduzir à solução de toda a expressão. Tanto o resultado final da expressão quanto os resultados das sub-expressões devem ser armazenados em variáveis. O ato de armazenar ou escrever um valor em uma variável é chamado de atribuição de valor , sendo representado através de símbolos, tais como: Variável ← valor Variável := valor Variável = valor A atribuição compreende uma ação de substituição do conteúdo de uma variável cujo efeito é: após a atribuição, a variável passa a representar um novo valor, sendo “ perdido” o valor anterior. Assim, uma atribuição tal como:

PI = 3,

seguida de outra do tipo:

PI = 3,

fará com que a variável PI represente o valor 3,15 como resultado atual, perdendo o valor 3, anteriormente nela armazenado. Considere as atribuições:

A = 5 B = 2 C = 10

Se fizermos em seguida: A = B e B = C, teremos como resultados

A = 2 B = 10 C = 10

Fazendo-se, a seguir, as seguintes atribuições: B = C e A = B, teremos A = 10 B = 10 C = 10

a b 2 2 a 5 b 2 1

^

x x

x

EXERCÍCIOS

1) Conceitue constante.

  1. Conceitue variável.
  2. Conceitue operação.
  3. Qual o efeito de uma atribuição de valor a uma variável?
  4. Resolva as expressões abaixo para a = 5, b = 1 e c = 2, dando o valor de x e a ordem das operações.

X =

2

b

c

a b

X =

( a + b^2 )( a − b )+ 4 a − 5 b + c

6 ) Conceitue Expressão Aritmética. 7 ) Que são operadores monádicos e diádicos? 8 ) Além das expressões aritméticas que outro tipo de expressões são usadas em algoritmos? 9 ) Qual a seqüência de operações necessárias para intercambiar os valores de 3 variáveis a, b, c de modo que a fique com o valor de b , b fique com o valor de c e c fique com o valor de a?

  1. Se X possui o valor 15 e se forem executadas as seguintes atribuições na ordem em que aparecem:

X = X + 3 X = X – 6 X = X/ X = 3X Qual será o valor armazenado em X?

CAPÍTULO II

ALGORITMOS SEQÜENCIAIS

Este capítulo visa conceituar algoritmo, formalizar este conceito, caracterizar algoritmos seqüenciais, bem como, iniciar a apresentação de uma linguagem algorítmica a ser utilizada ao longo do livro. Nada é mais básico em computação do que o conceito de algoritmo.

“ Um conjunto finito de regras, bem definidas, para a solução de um problema em um tempo finito.”

Este conceito, aparentemente simples, pode ser formalizado matematicamente com grande precisão, edificando-se sobre a definição toda uma teoria de algoritmos. Considere o seguinte problema: Dados 3 valores positivos, a , b , c , determinar a sua média aritmética, harmônica, geométrica e ponderada com pesos respectivos de 1, 2 e 3. As tarefas a serem executadas para a solução deste problema, podem ser descritas da seguinte forma:

  1. Obter os valores de a, b, c

  2. Calcular a média aritmética pela fórmula ma =

a + b + c

  1. Calcular a média harmônica pela fórmula mh =

a b c

4) Calcular a média geométrica pela fórmula mg = 3 axbxc

  1. Calcular a média ponderada pela fórmula mp =

xa + xb + xc

  1. Comunicar os resultados obtidos: ma,mh,mg,mp

  2. Terminar

A seqüência de tarefas acima, especificadas passo a passo, é um algoritmo, pois é formado por um conjunto finito de regras que podem ser consideradas bem definidas e cuja execução produz a solução do problema proposto, após um tempo finito. A execução da tarefa, neste caso, é corretamente cumprida, se executarmos todos os passos (instruções) na seqüência em que elas aparecem, da primeira até a última, sem omissões e sem repetições. Um algoritmo com estas características é denominado de algoritmo seqüencial. No passo 1 do algoritmo é indicada a ação de “ obter valores “. Para efetuar os cálculos indicados nos passos 2, 3e 4 a pessoa, máquina de calcular ou computador que deverá executar estas tarefas necessita receber os valores de a, b, c. Aos valores recebidos por um algoritmo dá-se o nome de Entradas. Deve-se ter o cuidado de definir claramente o conjunto ou intervalo de conjunto ao qual pertencem as Entradas. No algoritmo acima, a, b, c podem assumir qualquer valor real, exceto o zero, pois, o inverso de zero não está definido e com isso a média harmônica não poderia ser calculada. Todo algoritmo possui pelo menos um resultado. O algoritmo do cálculo das médias possui como resultados os valores das médias ma, mh, mg e mp. Os resultados fornecidos por um algoritmo recebem o nome de Saídas. É importante que num algoritmo cada passo esteja precisamente definido não deixando margem a ambigüidades. Muitos conjuntos de regras encontradas no dia a dia, tais como, receitas, descrições de usos de aparelhos, etc. pecam por definições imprecisas de um ou mais de seus passos. Assim, uma receita que se refere a uma “pitada de sal” ou “mexa até que fique em ponto de caramelo” não define claramente o quanto isto representa, de forma que cada usuário da receita deve interpretá-lo. Para precisar o conceito de algoritmo é necessário que ele satisfaça à propriedade da efetividade ( não confundir com eficiência ), isto é, todas as operações especificadas no algoritmo devem ser suficientemente básicas para que possam ser, pelo menos em princípio, executadas de maneira exata e num tempo finito. Deve-se observar que na prática não basta que um algoritmo seja de execução finita. Um algoritmo útil precisa terminar não apenas em um tempo finito, mas em um tempo “ muito finito “. Por exemplo, dada uma partida de xadrez, existe um algoritmo que determina se as peças brancas podem ou não forçar uma vitória. Eis um algoritmo que pode resolver um problema de grande interesse para um bom número de pessoas. No entanto, não teremos a resposta, pois, tal algoritmo requer um tempo fantasticamente grande, ainda que finito, para chegar a esta conclusão. Não possui a efetividade.

Solução 2

Solução 3

Solução 4

Onde mod é a função módulo ( resto inteiro da divisão de “m” por “n”), Esta solução é a forma recursiva para se calcular o máximo divisor comum entre m e n.

Certamente estas soluções não são as únicas soluções para se resolver este problema.

Quando se dispõe de vários algoritmos para solucionar o mesmo problema, entram em consideração os critérios de escolha do melhor algoritmo. Deve-se, porém, verificar primeiramente se todos os algoritmos são corretos, isto é, resolvem exatamente todo o problema proposto e, somente depois, levam-se em conta os critérios de escolha tais como, tempo de execução, legibilidade, adaptabilidade, elegância, simplicidade, etc.

Para ter-se um algoritmo é necessário:

**1) Que se tenha um número finito de passos.

  1. Que cada passo esteja precisamente definido, sem possíveis ambigüidades.
  2. Que existam zero, uma ou mais Entradas tomadas de conjuntos bem definidos.
  3. Que existam uma ou mais Saídas.
  4. Que o conjunto de passos nos leve, passo a passo, à execução de uma tarefa útil.
  5. Que exista uma condição de fim sempre atingida para quaisquer Entradas e num tempo finito.**

Se “m” ≥ “n” fazer “m” igual ao resto de “m” dividido por “n” e repetir este mesmo passo.

Trocar os valores de “m” e “n” entre si.

Se “n” = 0 então escrever “m” como resposta e terminar.

Voltar ao passo inicial.

Dividir “m” por “n” e fazer “r” ser o resto.

Se r = 0 escrever “n” como resposta e terminar.

Dividir “n” por “r” e fazer “m” ser o resto.

Dividir “r” por “m” e fazer “n” ser o resto.

Se m = 0 escrever “r” como resposta e terminar.

Se n = 0 escrever “m” como resposta e terminar.

Voltar ao passo inicial.

Se n ≠ 0 então MDC = MDC( n, mod( m,n )) Senão MDC = m.

Um método para a construção de algoritmos pode, simplificadamente, ser descrito pelos seguintes passos:

  1. Ler atentamente o enunciado.
  2. Descobrir no enunciado o conjunto de entradas ( dados que são fornecidos ).
  3. Descobrir no enunciado o conjunto de saídas ( resultados que devem ser produzidos ).
  4. Determinar o que deve ser feito para transformar as entradas nas saídas desejadas.
  5. Construir o algoritmo.
  6. Executar o algoritmo verificando se produz os resultados desejados.

Nos exemplos de algoritmos até agora apresentados foi utilizada uma linguagem usual, sem maiores formalismos. Contudo, para um melhor entendimento dos próprios algoritmos, para poder compará-los com outros algoritmos que foram escritos por colegas e que solucionam o mesmo problema, é, se não necessário, ao menos altamente conveniente formalizar a linguagem algorítmica usada. Como já visto, um algoritmo geralmente possui uma ou mais entradas. Uma operação de dar entrada de valores será indicada no algoritmo pela seguinte instrução:

Onde lista de variáveis é uma variável ou várias variáveis separadas por vírgulas.

Exemplos: Ler ( a ) Ler ( a, b, c ) Ler ( numero, nome, salário )

Todo algoritmo deve produzir pelo menos um resultado, denominado de saída. Uma operação de saída, no algoritmo, será indicada pela instrução:

Onde lista de expressões é uma constante ou uma variável ou constantes e/ou variáveis e/ou expressões, separadas por vírgulas.

Exemplos: Escrever ( 5 ) Escrever ( x ) Escrever ( x, y, z ) Escrever ( “ Matrícula = “, m, “ Nota = “, n ) Escrever ( “ Faculdade de Informática “ )

Escrever (

a + b

, 2ab, b 2 -4ac )

Num algoritmo existem, geralmente, um ou mais passos indicando cálculos que devem ser realizados. Uma operação de cálculo será indicada pela instrução de atribuição:

Exemplos: a = 5 x = y d = b 2 – 4ac nome = “João“

Como, após a execução de um certo número de passos, o algoritmo, deve chegar à condição de tarefa realizada, isto é, termino da execução do algoritmo. Esta operação será indicada pela instrução:

Ler (< lista de variáveis >)

Escrever ( < lista de expressões > )

Variável = Expressão

Fim

QUESTIONÁRIO

  1. Conceitue algoritmo, enumerando os principais elementos que são significativos neste conceito.
  2. Em que consiste a propriedade da efetividade de um algoritmo?
  3. Que é um procedimento?
  4. Quando é que um algoritmo é dito correto?
  5. Cite 3 outros critérios que podem ajudar na escolha do melhor algoritmo para solucionar um determinado problema.
  6. Que é um algoritmo seqüencial?
  7. Que tipos de instruções aparecem num algoritmo seqüencial?
  8. Qual a principal dificuldade que pode aparecer em algoritmos seqüenciais?
  9. Por que é interessante formalizar-se a linguagem algorítmica utilizada?
  10. Por que é necessário definir-se os tipos de valores que as variáveis podem assumir?

EXERCÍCIOS

  1. Reescrever o algoritmo que calcula as médias, apresentado no início deste capítulo, utilizando a linguagem apresentada.
  2. Escrever um algoritmo que lê o número de um funcionário, seu número de horas trabalhadas, o valor que recebe por hora, o número de filhos com idade menor do que 14 anos e o valor do salário família ( pago por filho com menos de 14 anos ). Calcular o salário total deste funcionário e escrever o seu número e o seu salário total.
  3. Escrever um algoritmo que calcula e escreve o fatorial de 5.
  4. Escrever um algoritmo que lê 3 valores reais a , b , c e calcula: A área do triângulo que tem a por base e b por altura; A área do círculo de raio c ; A área do trapézio que tem a e b por bases e c por altura; A área do quadrado de lado b; A área do retângulo de lados a e b ; A área da superfície de um cubo que tem c por aresta.
  5. Escrever um algoritmo que escreve os números ímpares entre 10 e 20.
  6. Escrever um algoritmo que lê p , u e r respectivamente o primeiro termo de uma progressão aritmética, o último termo da progressão e a sua razão. Determinar e escrever a soma dos termos desta progressão.
  7. Escrever um algoritmo que lê o número de peças do tipo 1, o valor de cada peça do tipo 1, o número de peças do tipo 2, o valor de cada peça do tipo 2 e o percentual do IPI a ser acrescentado. Calcula e escreve o valor total a ser pago por esta compra.
  8. Um avião em linha reta, a uma altitude a passa sobre um ponto p situado no solo, num instante t = 0. Se a velocidade é v , calcular a distância d do avião ao ponto p após 30 segundos. Escrever um algoritmo que lê v e a e calcula e escreve a distância do avião ao ponto p após 30 segundos.
  9. Uma farmácia paga o seu funcionário a cada sexta-feira e deseja deixar pronto o envelope de pagamento. Escrever um algoritmo que lê o valor do salário do funcionário em cruzeiros e calcula qual o menor número possível de notas de 100, 50, 10, 5 e 1, em que o valor lido pode ser decomposto. Escrever o valor lido e o número de notas de cada tipo que compõe o envelope de pagamento.
  10. Escrever um algoritmo que lê o número de um vendedor, o seu salário fixo, o total de vendas por ele efetuadas e o percentual que ganha sobre o total de suas vendas. Calcular o salário total do vendedor e escrever o número e o salário do vendedor.
  11. Escrever um algoritmo que lê 3 valores a, b, c que são lados de um triângulo e calcula e escreve a área deste triângulo.

Área = s ( s − a )( s − b )( s − c )

Onde s = semiperímetro.

  1. O custo ao consumidor, de um carro novo, é a soma do custo de fábrica com a percentagem do distribuidor e o percentual dos impostos ( aplicados ao custo de fábrica ). Escrever um algoritmo que lê o custo de fábrica, o percentual do distribuidor e o percentual dos impostos e calcula e escreve o valor a ser pago pelo consumidor por este carro.
  2. Uma revendedora de carros usados paga a seus funcionários vendedores, um salário fixo por mês, mais uma comissão também fixa para cada carro vendido e mais 5% do valor das vendas por ele efetuadas. Escrever um algoritmo que lê o número do vendedor, o número de carros por ele vendidos, o valor de cada carro, o salário

fixo e o valor que recebe por carro vendido e calcula o salário a ser pago a este vendedor, escrevendo o número do vendedor e seu salário total.

  1. Considerando que o aumento dos funcionários de uma empresa tenha sido definido da seguinte forma: 80% de um índice chamado INTEMP e mais um percentual de produtividade discutido com a empresa por ocasião do dissídio da categoria. Escrever um algoritmo que lê o número do funcionário, seu salário atual, o valor do INTEMP e o índice de produtividade conquistado e escreve o número do funcionário, seu aumento e seu novo salário.
  2. Escrever um algoritmo que lê as coordenadas de dois pontos no plano cartesiano e calcula e escreve a distância entre estes dois pontos, sabendo-se que a fórmula da distância entre dois pontos P1( X1,Y1) e P2( X2,Y2) é

Distância = ( X 2 − X 1 )^2 +( Y 2 − Y 1 )^2

  1. Escrever um algoritmo que lê 3 valores a, b, c e os escreve. Encontre, a seguir, o maior dos 3 valores e o escreva com a mensagem: “ É O MAIOR”

Maior =

a + b +| a − b |

  1. Escrever um algoritmo que lê o valor de uma compra em dólares e a taxa do dólar no dia da compra e calcula e escreve o valor a ser pago em reais.
  2. Um hotel com 42 apartamentos resolveu fazer promoções para os fins de semana for a da alta temporada, isto é, nos meses de abril, maio, junho, agosto, setembro outubro e novembro. A taxa da promoção é de 22% da diária normal. A expectativa é aumentar a taxa de ocupação de 40 para 70%. Supondo que as expectativas se confirmem, escrever um algoritmo que lê a diária normal e calcula e escreve as seguintes informações:

a) O valor da diária no período da promoção. b) O valor médio arrecadado sem a promoção, durante um mês. c) O valor médio arrecadado com a promoção, durante um mês. d) O lucro ou prejuízo mensal com a promoção.

  1. Escrever um algoritmo que lê a hora de início de um jogo e a hora de fim do jogo, considerando apenas horas inteiras e jogos que começam e terminam no mesmo dia, calcular e escrever o tempo de duração do jogo em horas.
  2. O mesmo problema anterior, mas escrevendo o tempo do jogo em minutos.
  3. Escrever um algoritmo que lê um número de 3 dígitos e o inverte, escrevendo o número lido e o número invertido.

As inter-relações entre as proposições são feitas através de operadores lógicos. Um operador lógico é um operador cujos operandos são expressões lógicas e cujo resultado é um valor lógico verdadeiro ( V ) ou falso ( F ).

Expressões Lógicas

Dados dois valores lógicos quaisquer, T1 e T2, e um operador L, o resultado da expressão lógica T1 L T2 tem valor verdadeiro ( V ) ou falso ( F ). Devido ao restrito domínio dos valores lógicos, é possível definir os resultados das operações de forma compacta, através de “ tabelas-verdade “. Este tipo de tabela mostra o resultado das operações, para todas as possíveis combinações dos operandos. A tabela-verdade para os três principais operadores lógicos, a negação, o produto lógico e a soma lógica, pode ser representada como segue:

T1 T2 ~T1 T1 ^T2 T1 ∨ T

V V F V V

V F F F V

F V V F V

F F V F F

Sendo: T1 e T2 operandos lógicos ~ operador unário de negação ( “ não “ ) ^ operador de produto lógico ( “ e “ ) ∨ operador de soma lógica ( “ ou “ )

As relações também podem fazer parte das expressões lógicas, como operandos, uma vez que seu resultado é lógico. As relações são definidas entre expressões aritméticas, por meio de operadores relacionais. Dados dois valores E1 e E2, e um operador relacional R, o resultado da expressão E1 R E2 tem o valor verdadeiro ( V ) ou falso ( F ). Os operadores relacionais são:

  • maior ( > )
  • menor ( < )
  • igual ( = )
  • maior ou igual ( ≥ )
  • menor ou igual ( ≤ )
  • diferente ( ≠ )

Enquanto os operadores lógicos atuam sobre operandos lógicos, os peradores relacionais atuam sobre operandos aritméticos, como pode ser visto na expressão abaixo:

Proposição : X ∈ [ 1; -1 ], isto é

“ X pertence ao intervalo [ 1 ; -1 ] ”, cuja expressão lógica correspondente é:

X ≥ -1 ^ X ≤ 1 R1 R

R1 e R2 são relações que fornecem como resultado um valor lógico V ou F. O operador lógico ^ (“e”) dará como resultado o valor lógico V somente se ambas as relações R1 e R2 forem verdadeiras. Os operadores relacionais “ ≤ “ e “ ≥ “ atuam sobre os valores X, 1 e –1, que são expressões aritméticas e não lógicas. Nos algoritmos a correta formulação de condições, isto é, expressões lógicas, é de fundamental importância, visto que as estruturas de seleção e também as de repetição ( que serão vistas adiante ), são baseadas nelas.

Portanto, condição é

  • ou uma comparação de expressões aritméticas ( relações ) por meio de operadores relacionais (=, <,

    , ≥, ≤, ≠ );

  • ou uma combinação de comparações por meio de operadores lógicos ( ~, ^, ∨ ).

As diversas formulações das condições podem levar a algoritmos distintos. Considere-se o problema:

“ Dado um par de valores X, Y , que representam as coordenadas de um ponto no plano, determinar o quadrante ao qual pertence o ponto, ou então, se está sobre algum dos eixos cartesianos ou na origem ”.

A solução do problema consiste em determinar todas as combinações de X e Y para as classes de valores positivos, negativos e nulos. A tabela, a seguir, mostra todas as entradas e saídas possíveis:

Entradas X Y

Mensagem de Saída

= 0 = 0 Ponto na origem = 0 (^) ≠ 0 Ponto sobre o eixo Y ≠ 0 = 0^ Ponto sobre o eixo X

0 > 0 Ponto no Quadrante 1 < 0 > 0 Ponto no Quadrante 2 < 0 < 0 Ponto no Quadrante 3 0 < 0 Ponto no Quadrante 4

Os algoritmos podem ser baseados em estruturas concatenadas ( uma em seqüência a outra ) ou em estruturas aninhadas ( uma dentro da outra ), de acordo com a formulação das condições.

Algoritmo 3.1: Estruturas concatenadas

Algoritmo 3.2: Estruturas aninhadas

É importante notar que é possível obter diversos algoritmos para a solução deste problema, através de diferentes combinações de formulações de condições.

Algoritmo PosiçãoPonto x, y : Inteiros Início Ler ( x, y ) Se x = 0 e y = 0 então escrever ( “ Ponto na origem “ ) Se x = 0 e y ≠ 0 então escrever (“ Ponto sobre o eixo y ” ) Se x ≠ 0 e y = 0 então escrever (“ Ponto sobre o eixo x “) Se x > 0 e y > 0 então escrever (“ Ponto no quadrante 1 “ ) Se x < 0 e y > 0 então escrever (“ Ponto no quadrante 2 “ ) Se x < 0 e y < 0 então escrever (“ Ponto no quadrante 3 “ ) Se x > 0 e y < 0 então escrever (“ Ponto no quadrante 4 “ ) Fim

Algoritmo PosiçãoPonto x, y : Inteiros Início Ler ( x, y ) Se x ≠ 0 então se y = 0 então escrever (“ Ponto sobre o eixo x “ ) senão se x > 0 então se y > 0 então escrever ( “ Ponto no quadrante 1 “ ) senão escrever (“ Ponto no quadrante 4 “) senão se y > 0 então escrever (“ Ponto no quadrante 2”) senão escrever ( “ Ponto no quadrante 3 “) senão se y = 0 então escrever (“ Ponto na origem “) senão escrever (“ Ponto sobre o eixo y “) Fim