Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... ·...

63
i Algoritmos Notas de aulas Prof. Aluísio Eustáquio da Silva Betim, Fevereiro de 2012

Transcript of Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... ·...

Page 1: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

i

Algoritmos

Notas de aulas

Prof. Aluísio Eustáquio da Silva

Betim, Fevereiro de 2012

Page 2: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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

Page 3: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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

Page 4: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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 pseudo-

linguagem, 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.

Page 5: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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)

Page 6: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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

Page 7: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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 indu-

ará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 1 1 2 2

Valores 48 28 20 8 4

Resto 20 8 4 0

● A = 48 e B = 28; 48 / 28 = 1 e “sobra” um resto R = 20

● A = B e B = R ou seja, A = 28 e B = 20. 28 / 20 = 1 e sobra um resto R = 8

● A = B e B = R ou seja, A = 20 e B = 8. 20 / 8 = 2 e sobra um resto R = 4

● A = B e B = R ou seja, A = 8 e B = 4. 8 / 4 = 2 e sobra um resto R = 0

● MDC é o último valor de B, ou seja 4.

MDC (28, 48) = 4

Page 8: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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

Page 9: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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

Page 10: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

7

Nos algoritmos desse texto usaremos os tipos de dados abaixo relacionados:

Tipos básicos de dados

(variáveis e constantes)

Designação nos algoritmos

Números inteiros inteiro

Números reais real

Seqüência de caracteres literal

Variáveis lógicas 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.

Page 11: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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 N, Idade, Numero_Habitantes, Contador, Maior_Valor

real Salario, Desconto, X, Altura, Hipotenusa, Angulo

lógico Achou, Idoso, Colorido, Alto, Ligado, Branco, Transparente, Teste

literal 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

x 4

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

Page 12: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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.

Da mesma forma bababab

a ,: ,/ , , significam a dividido por 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 6 = 5, que é o resto da divisão de 17 por 6.

18 mod 2 = 0, resto da divisão por 2

15 mod 20 = 15 (Por quê ?)

234abc7 mod 2 = 1, quaisquer que sejam os algarismos a, b e c. (Por quê ?)

^ Exponenciação

mod Resto da divisão inteira

Page 13: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

10

Exemplos

Sejam os valores:

inteiro a, b,

real x, y, z

a 8

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

Page 14: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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. 4)( 2 xxf

é 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.

2 n se ),1(

2 n se ,1)(

nnfnf

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.

Page 15: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

12

Relacionamos abaixo algumas funções matemáticas e as correspondentes formas que usaremos nos

algoritmos.

Matemática Função Algoritmos

|x| 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)

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)

Page 16: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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)

Page 17: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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 //Inicio do algoritmo

inteiro Nota1, Nota2 //duas notas de um aluno

inteiro Soma //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

*/

Page 18: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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

Page 19: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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.

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, //Peso da pessoa em kg

Altura, //Altura da pessoa em m

Massa_Corporal //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

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:

Page 20: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

17

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

2. Algoritmo para ler a capacidade de armazenamento de um Pendrive, em Gigabytes, calcular e escrever

sua capacidade em bytes.

Page 21: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

18

Análise do problema

O usuário deve digitar o valor da hora de trabalho e o número de horas trabalhadas. O algoritmo

determina o valor a receber multiplicando o valor da hora trabalhada pelo número de horas de

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

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.

Page 22: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

19

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 de 5%

Desconto_7 (Preco * 7) / 100 //Desconto de 7%

Desconto_10 (Preco * 10) / 100 //Desconto de 10%

Novo_Preco_5 Preco - Desconto_5 //Preco menos desconto de 5%

Novo_Preco_7 Preco - Desconto_7 // Preco menos desconto de 7%

Novo_Preco_10 Preco – Desconto_10 / 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

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.

Page 23: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

20

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

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).

Page 24: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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) //Cálculo da quantidade de notas de 50 reais

Resto ← Valor mod 50 //Cálculo do resto da divisão do valor digitado por 50

Nota_20 ← Inteiro (Resto / 20) // Cálculo da quantidade de notas de 20 reais

Resto ← Resto mod 20 //Cálculo do resto da divisão do resto anterior por 20

Nota_10 ← Inteiro (Resto / 10) //Cálculo da quantidade de notas de 10 reais

Resto ← Resto mod 10 //Cálculo do resto da divisão do resto anterior por 10

Nota_5 ← Inteiro (Resto / 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

Page 25: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

22

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 //Cálculo da area

Diagonal ← Raiz(Lado * Lado + Lado * Lado) //Cálculo da diagonal

Perimetro ← 4 * Lado // Cálculo do perímetro

//Saída de resultados

escreva (Area, Diagonal, Perimetro)

Fim do algoritmo

6. Escreva um programa para calcular a área, o perímetro e a diagonal de um quadrado, dado o lado

(lido do teclado).

Page 26: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

23

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 //Fórmula dada acima

//Saída de resultados

escreva (Radianos)

Fim do algoritmo

7. Escreva um programa para transformar a medida de um arco de graus para radianos.

Page 27: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

24

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

8. Escreva um programa para transformar milhas náuticas em metros.

Page 28: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

25

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

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.

Page 29: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

26

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

10. O dígito verificador do código de 4 algarismos de cada produto de uma loja de informática, é calculado da

seguinte forma:

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, usando a regra

acima.

Page 30: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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.

Page 31: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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.

Page 32: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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:

Page 33: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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.

Page 34: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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:

parcelas de número t e financiadoValor VF

juros de mensal taxa Taxa 100), / Taxa (1 k prestação, P sendo

1

)1(

tk

kVFP

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.

Page 35: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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.

Page 36: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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 uma determinada ação é

condicionada a determinados fatores. Vejamos alguns exemplos:

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

Page 37: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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

Operador

Significado 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

Page 38: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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: “0” a “9”:

64: “@”

65 a 90: “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

Page 39: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

36

Ou de forma simbólica

Operador E

fala inglês

p

fala espanhol

q

fala inglês E fala espanhol

p ^ q

V V V

V F F

F V F

F F F

Operador OU

fala inglês

p

fala espanhol

q

fala inglês OU fala espanhol

p q

V V V

V F V

F V V

F F F

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

p p’

V F

F V

Page 40: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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

z x – y //Se a condição acima é verdadeira calcula a diferença entre x e y e atribui

fim se // à variável z

//fim da estrutura condicional

se (x < y) //Verifica se x é menor que y

z y – x //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

Page 41: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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

z x – y //Se a condição acima é verdadeira calcula a diferença entre y e x e atribui o

resultado z senão //Se x é menor ou igual a y

z y – 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.

Page 42: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

39

Apresentaremos a seguir alguns problemas com estruturas condicionais.

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

11. Programa para ler um número inteiro e escrever se ele negativo, nulo (zero) ou positivo.

Page 43: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

40

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

16. Programa para ler a idade de uma pessoa e verificar se ela é ou não, maior de idade.

Page 44: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

41

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

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.

Page 45: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

42

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

14. Programa para ler um número inteiro e verificar se ele é divisível por 2 e por 11, imprimindo

mensagem adequada.

Page 46: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

43

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” e

NomeUsuario ≠ “Vinicíus”)

escreva (“Não consta da lista”)

fim se

Fim do algoritmo

15. Programa para ler um nome do teclado. Imprimir o telefone correspondente, de acordo com a lista:

Artur 9587-3663

Bernardo 9961-3400

Caio 8824-6146

Vinícius 9974-7609

Page 47: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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.

Page 48: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

45

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

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”.

Page 49: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

46

LISTA DE EXERCÍCIOS NÚMERO 5

1. 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:

2. 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

DESTINO CUSTO VARIÁVEL

Alfenas 0.5 * FIXO

Araxá 0.3 * FIXO

Corinto 0.2 * FIXO

Ipatinga 0.1 * FIXO

Page 50: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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.

Page 51: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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) Imposto de Renda INSS

SB R$ 700,00 Isento 8%

R$ 700,00 < SB R$ 2.800,00 15% 9%

SB > R$ 2.800,00 27,5% 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)

Page 52: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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

x 0 //Valor inicial de x

enquanto (x < 10) //Verifica se x é menor que 10

escreva (x) //Se a condição do enquanto é verdadeira escreve x

x x + 1 //Aumenta x em uma unidade

fim enquanto //Termina a repetição quando x = 10

//Novos comandos

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) x 0

2) enquanto (x < 10)

3) escreva (x)

4) x x + 1

5) fim enquanto

6) //Novos comandos

Page 53: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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

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

17. Programa para escrever na tela os números positivos ímpares menores que 100.

Page 54: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

51

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

18. Leia o nome e a altura de cinco pessoas.

Determine e escreva o nome e a altura da pessoa mais alta

Page 55: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

52

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.

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

Page 56: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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

Page 57: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

54

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

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.

Page 58: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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.

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

21. Faça um programa para imprimir a tabuada de multiplicação do número inteiro 9.

Page 59: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

56

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 uma

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

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, ...

Page 60: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

57

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

23. Escreva um programa para escrever todos os números inteiros palíndromos de 4 algarismos.

Page 61: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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:

...

87

6

76

5

65

4

54

3

43

2

32

1

S

09) Leia do teclado um número inteiro e positivo N (validar) e um número real x, positivo (verificar se

é positivo). Calcule e escreva a soma dos N primeiros termos da série:

...

1197531

65432

xxxxxx

S

10) Leia um número inteiro e positivo (validar), verifique se é primo ou não.

Page 62: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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:

302555*55

552530

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.

Page 63: Notas de aulas Prof. Aluísio Eustáquio da Silva - Bem-vindo!adriano/aulas/lc/2015/Extras/... · título de livros, nome de disciplinas, e designação de cursos. Muitas vezes a

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