Algoritmos de Programação
Prof. Alan Alves Oliveira
Algoritmos
“A arte de programar consiste na arte de
organizar e dominar a complexidade”
Dijkstra
Algoritmos
• Definição:
“Um algoritmo é a descrição de um padrão de comportamento, expressado em termos de um repertório bem definido e finito de ações primitivas, das quais damos por certo que elas podem ser executadas.”
(GUIMARÃES; LAGES, 1994, p.4)
Algoritmos
• Definição:
“Algoritmo é a descrição de um conjunto de comandos que, obedecidos, resultam numa sucessão finita de ações.”
(FARRER et al., 1999 p.14)
“Um algoritmo pode ser definido como uma seqüência de passos que visam a atingir um objetivo bem definido.”
(FORBELLONE; EBERSPACHER, 2005, p.3)
Algoritmos
• Questão para discussão:
– Você já teve contato com algum tipo de algoritmo?
Algoritmos
• Apesar de estar intimamente ligado à programação de computadores, o termo algoritmo surgiu muito antes que isso;
• Rotinas simples do dia a dia podem ser descritas em algoritmos:
– Trocar de roupa;
– Escovar os dentes;
– Tomar banho;
– Etc.
Algoritmos
• Várias áreas do conhecimento utilizam algoritmos:
– Administração: um plano de ação é um algoritmo;
– Matemática: diversos cálculos e teoremas são algoritmos;
– Manufatura: a ficha técnica (ou engenharia) de um produto é um algoritmo.
Algoritmos
• Características (CUNHA; MELLO, 2009, p. 8):
– Finitude:
• Um algoritmo deve sempre terminar após um número finito de passos.
– Definição:
• Cada passo de um algoritmo deve ser precisamente definido. As ações devem ser definidas rigorosamente, sem ambiguidades.
Algoritmos
• Características (CUNHA; MELLO, 2009, p. 8):
– Entradas:
• Um algoritmo deve ter zero (0) ou mais entradas, isto é, quantidades que lhe são fornecidas antes do algoritmo iniciar.
– Saídas:
• Um algoritmo deve ter uma ou mais saídas, isto é, quantidades que têm uma relação específica com as entradas.
Algoritmos
• Características (CUNHA; MELLO, 2009, p. 8):
– Efetividade:
• ... todas as operações devem ser suficientemente básicas de modo que possam ser ... executadas com precisão, em um tempo finito, por uma pessoa usando papel e lápis.
Algoritmos
• Abstração:
– Um algoritmo é um modelo que representa algo do mundo real;
– Modelos servem para que possamos abstrair uma realidade e nos focar apenas nos detalhes que nos interessam.
Algoritmos
• Atividade:
– Em uma folha do seu caderno, escreva, em forma de passos sequenciais, como é feita a troca de um pneu furado em um carro.
Algoritmos
• O algoritmo e o computador:
– O algoritmo é bastante utilizado no meio computacional, seja para construir hardware (processadores), seja para desenvolver programas;
– “... computadores são seguidores de algoritmos.” (CUNHA; MELLO, 2009, p. 9);
Algoritmos
• O algoritmo e o computador:
– Para se escrever um algoritmo computacional deve-se (CUNHA; MELLO, 2009, p. 9):
• Definir o problema;
• Planejar um algoritmo de solução;
• Codificar a solução;
• Testar o programa;
• Completar a documentação.
Algoritmos
• O algoritmo e o computador:
– Um algoritmo escrito com a finalidade de construir um programa pode ser implementado em qualquer linguagem de programação sequencial (C, C++, C#, Delphi, Java, Pascal, Visual Basic, etc.)
Algoritmos
• O algoritmo como software:
– Texto finito:
• Como já foi ressaltado antes, um algoritmo, assim como um software, possui um conjunto finito de instruções (ações) a serem executadas.
– Instruções elementares:
• A exemplo do software o algoritmo possui comandos e/ou informações que devem ser fornecidos ao executor. No caso do software o executor é o computador.
Algoritmos
• O algoritmo como software:
– Receita metódica:
• Texto ou instruções precisas. No caso do software, estas instruções são escritas em uma linguagem de programação.
– Terminação:
• No caso do uso de estruturas de repetição (loops ou laços), deve haver a terminação, ou seja, a execução também é finita.
Algoritmos
• Questão para discussão:
– Um programa de computador, é um algoritmo?
Algoritmos
• Tipos de algoritmos:
– Algoritmo gráfico:
• Representado através de diagramas de blocos ou diagramas de quadros;
• Um diagrama de bloco bastante conhecido é o fluxograma;
Algoritmos
• Tipos de algoritmos:
– Algoritmo gráfico:
• Exemplo: um algoritmo para verificar se o aluno foi aprovado:
Início
Nota 1,Nota 2,Nota 3
SomaNota 1 + Nota
2 + Nota 3
Soma >= 60
Aprovado Reprovado
Verdadeiro Falso
Fim
Algoritmos
• Tipos de algoritmos:
– Algoritmo descritivo:
• Expresso em forma de texto;
• O texto deve conter todos os passos a serem executados, incluindo as entradas, decisões e saídas;
• Pode ser representado em linguagem natural ou em alguma linguagem técnica estruturada (pseudolinguagem ou pseugocódigo ou portugol);
Algoritmos
• Tipos de algoritmos:
– Algoritmo descritivo:
• Exemplo: utilizando o mesmo algoritmo para verificar se o aluno foi aprovado:
1. Obter as notas 1, 2 e 3.
2. Efetuar o cálculo da soma.
3. Se a soma for maior ou igual a 60 o aluno
está aprovado.
4. Se a soma for menor que 60 o aluno está
reprovado.
Algoritmos
• Tipos de algoritmos:
– Algoritmo descritivo:
• Perceba que o exemplo anterior foi escrito em linguagem natural, sem preocupação com formalização ou estruturação.
Algoritmos
• Tipos de algoritmos:
– Algoritmo codificado:
• Expresso em uma linguagem de programação específica;
• Representa o próprio programa;
Algoritmos
• Tipos de algoritmos:
– Algoritmo codificado:
• Exemplo: ainda para verificar se o aluno foi aprovado:
Algoritmos
• Tipos de algoritmos:
– Algoritmo codificado:
• O algoritmo apresentado na tela anterior foi escrito na linguagem de programação Java;
• A entrada dos dados é feita através de caixas de texto apresentadas ao usuário;
• A saída (mensagem informando se o aluno está aprovado ou reprovado) é feita no console do sistema.
Algoritmos
• Formas de representação:
– Um algoritmo pode ser representado de diversas formas;
– A escolha da melhor forma dependerá da finalidade do algoritmo;
– Manuais, receitas e guias, por exemplo, são geralmente escritos em linguagem natural;
Algoritmos
• Formas de representação:
– Esquemas e modelos são geralmente representados através de uma forma gráfica (fluxograma);
– Para a programação, a melhor forma de representar algoritmos é da forma descritiva, utilizando-se uma linguagem estruturada, conhecida por pseudolinguagem, pseudocódigo ou portugol;
Algoritmos
• Formas de representação:
– O pseudocódigo está bastante próximo das linguagens de programação sequenciais e, ao mesmo tempo, da linguagem natural;
– O pseudocódigo possui regras para sua escrita, isso o diferencia da linguagem natural;
Algoritmos
• Formas de representação:
– De agora em diante, vamos adotar o pseudocódigo como forma de representação. Para mais detalhes sobre as outras formas, consulte Cunha; Melo (2009, pp. 11-15).
Algoritmos
• Estrutura de um algoritmo em pseudocódigo:
– A palavra reservada Programa inicia o algoritmo e, logo após ela, deve colocado o nome do programa que está sendo feito;
Programa <nome>
<declarações de variáveis>
<subalgoritmos>
Início
<comandos>
Fim
Algoritmos
• Estrutura de um algoritmo em pseudocódigo:
– O nome do programa é dado pelo
programador e deve seguir algumas regras:
• Deve começar com uma letra ou sublinhado;
• Não deve conter caracteres especiais como *, $, #, @, etc.;
• Não deve conter espaços em branco;
• Pode conter números, porém, não pode começar com um.
Algoritmos
• Estrutura de um algoritmo em pseudocódigo:
– Entre as palavras reservadas Programa e Início
devem ser feitas as declarações de variáveis e definidos os subalgoritmos, quando for o caso;
– As instruções ou comandos são colocados entre as palavras reservadas Início e Fim.
Programa <nome>
<declarações de variáveis>
<subalgoritmos>
Início
<comandos>
Fim
Algoritmos
• Estrutura de um algoritmo em pseudocódigo:
– Observação importante:
• Não existe um padrão ou estrutura únicos para a criação de algoritmos. Podem ser encontradas diferenças de padrão de um autor para o outro;
• Utilizaremos um conjunto de regras, porém, o que realmente importa é que o aluno entenda a lógica da criação do algoritmo. Assim, ele poderá interpretar qualquer algoritmo, mesmo com pequenas variações de padrão.
Tipos de dados
• Um algoritmo pode manipular diversos valores para chegar ao resultado desejado;
• Definir tipos de dados é uma forma de tornar o algoritmo mais claro e mais efetivo;
• Em ciência da computação isso se chama tipagem de dados;
Tipos de dados
• Tipos de dados são, portanto, um conjunto de valores sobre os quais pode ser aplicado um conjunto de operações;
• A princípio, vamos trabalhar com três
conjuntos de tipos de dados:
– Numéricos;
– Alfanuméricos (literais) e
– Lógicos.
Tipos de dados
• Tipos de dados numéricos:
– Inteiro: {..., -2, -1, 0, 1, 2, ...};
– Real: abrange o conjunto de números inteiros, fracionários e irracionais.
• Tipos de dados literais:
– Literal: consiste em uma cadeia de caracteres alfanuméricos, incluindo caracteres especiais. Os valores literais devem estar sempre entre aspas duplas;
Tipos de dados
• Tipos de dados lógicos:
– Lógico: esse tipo de dados, a exemplo do que acontece com o computador em nível físico, só pode assumir um entre dois valores: verdadeiro
ou falso (o computador, em nível físico, só entende zeros e uns)
Variáveis e Constantes
• A equação do segundo grau é representada, matematicamente, pela seguinte expressão: (ax2 + bx + c = 0);
• As letras a, b e c poderão assumir qualquer valor, dependendo do cálculo a ser feito;
• Portanto, estas letras podem ser chamadas de variáveis;
Variáveis e Constantes
• O conceito de variável na programação é o mesmo;
• Podemos dizer que variáveis são símbolos que podem assumir diversos valores durante o seu tempo de vida (veremos tempo de vida de uma variável mais adiante);
Variáveis e Constantes
• Toda e qualquer variável a ser utilizada no algoritmo precisa ser declarada no local especificado anteriormente, entre as palavras reservadas Programa e Início;
• Na declaração de uma variável é obrigatória a definição do seu tipo, de acordo com os tipos de dados já vistos;
Variáveis e Constantes
• Vamos utilizar duas formas de declarar variáveis e o aluno terá liberdade para escolher qualquer uma delas. Porém, quando utilizar uma das formas, torne-a padrão, ou seja, não utilize, em um mesmo algoritmo, as duas formas;
• Opção 1 (Java, C++):
– <Tipo> <Lista de variáveis>
Inteiro a, b, c; // Declara as variáveis: a, b e c
Variáveis e Constantes
• Opção 2 (Pascal):
– <Lista de variáveis> : <Tipo>
a, b, c : Inteiro; // Declara as variáveis: a, b e c
Variáveis e Constantes
• Vejamos um exemplo no contexto do
algoritmo:
Programa Exemplo
// Declaração de variáveis nas linhas abaixo
Inteiro Num1, Num2;
Literal Nome;
Início
<comandos>
Fim
Variáveis e Constantes
• As constantes, assim como as variáveis, são símbolos que podem representar algum valor, porém, esse valor é dado a ela na sua declaração e não pode mais ser alterado;
• Para declarar uma constante acrescentamos, antes da declaração, a palavra const. Lembrando que o valor da constante deve ser dado na sua declaração;
Variáveis e Constantes
• Exemplo:
Programa ExemploConstante
Inteiro Num1, Num2;
Const Real Pi <- 3.14; // Declaração da constante
Início
<comandos>
Fim
Instruções primitivas
• Para fazer nossos primeiros algoritmos precisamos aprender três comandos básicos:
• O comando Escreva:
– É um comando de saída que permite que alguma mensagem (geralmente o resultado do algoritmo) seja dada ao usuário;
Instruções primitivas
• O comando Escreva:
– Exemplos:
// Escreve uma mensagem na tela
Escreva("Meu primeiro programa");
// Escreve o valor de uma variável na tela
Escreva(Num1);
// Escreve uma mensagem e logo após o valor de uma
// variável
Escreva("O resultado é:", Soma);
Instruções primitivas
• O comando Escreva:
– Exemplos:
// Um programa completo com o comando Escreva
Programa PrimeiroPrograma
Início
Escreva("Olá mundo!");
Fim
Instruções primitivas
• O comando <- (atribuição):
– Em muitos momentos no nosso algoritmo precisaremos atribuir valores a variáveis. Isso é feito através do comando de atribuição;
– Esse comando é representado por uma seta que aponta para a esquerda (para representar esta seta no computador, utilize o sinal de menor
seguido pelo hífen);
Instruções primitivas
• O comando <- (atribuição):
– Exemplos:
// Atribui um valor a uma variável
Num1 <- 100;
// Declara uma constante com atribuição de valor
Const Real Pi <- 3.14;
// Atribui uma expressão a uma variável
Soma <- Num1 + Num2;
Instruções primitivas
• O comando <- (atribuição):
– Exemplos:
// Um programa completo com o comando <-
Programa PrimeiroPrograma
Literal Msg;
Início
Msg <- "Olá mundo!“;
Escreva(Msg);
Fim
Instruções primitivas
• O comando Leia:
– O comando Leia é um comando de entrada, ou seja, a forma como iremos solicitar dados do usuário;
Instruções primitivas
• O comando Leia:
– Exemplos:
// Lê uma informação e atribui à variável
Leia(Num1);
// Lê três informações e atribui às variáveis.
// A primeira informação digitada vai para a
// primeira variável e assim por diante
Leia(Num1, Num2, Num3);
Instruções primitivas
• O comando Leia:
– Exemplos:
// Um programa completo com o comando Leia
Programa PrimeiroPrograma
Inteiro Num1, Num2, Num3, Soma;
Início
Leia(Num1, Num2, Num3);
Soma <- Num1 + Num2 + Num3;
Escreva("A soma é: ", Soma);
Fim
Instruções primitivas
• Perceba que no final de cada comando, inclusive da declaração de variáveis, utilizamos um ponto-e-vírgula;
• O ponto-e-vírgula define que o comando terminou.
Comentários
• Para facilitar o entendimento do nosso algoritmo e da lógica que foi utilizada para solucionar um problema, podemos comentar as ações;
• Os comentários, como você já deve ter percebido nos exemplos, é feito após duas barras (//);
Comentários
• Todas as linhas que começam com (//) são ignoradas como ações, ou seja, não são executadas;
• O programa abaixo não faz nada:
Programa Inútil
Início
// Escreva("Olá mundo");
Fim
Expressões
• Expressões aritméticas:
– Por hora, para fazermos nossos primeiros exercícios com algoritmos, vamos aprender as expressões aritméticas;
– Uma expressão aritmética é aquela que envolve somente números, sejam eles do tipo real ou inteiro;
Expressões
• Expressões aritméticas:
– Para realizar uma expressão aritmética, precisaremos conhecer os operadores:
Operador Descrição
+ Soma e identificação de números positivos
- Subtração e identificação de números negativos
* Multiplicação
/ Divisão
DIV Parte inteira do quociente de uma divisão
MOD (Módulo) Resto da divisão
Expressões
• Expressões aritméticas:
– A expressão pode manipular valores, de forma direta, ou variáveis, por exemplo:
// Uma expressão que manipula valores
(10 + 30) / 2
// Uma expressão que manipula valores contidos em
// variáveis
(a + b) / c
– Observação: A precedência matemática deve ser obedecida;
Expressões
• Expressões aritméticas:
– Conforme já foi dito, uma expressão pode conter operadores inteiros ou reais;
– Uma expressão que contém operadores inteiros retornará, sempre, o resultado inteiro. Veja o exemplo:
// Uma divisão com dois operadores inteiros
// O resultado dessa divisão é 0, porque os dois
// operadores são inteiros
2 / 4
Expressões
• Expressões aritméticas:
– Para garantir que o resultado retornará um número real, se for o caso, pelo menos um dos operadores deve ser, explicitamente, real. Veja o exemplo:
// Uma divisão com um operador real e um inteiro
// O resultado dessa divisão é 0.5
2.0 / 4
Expressões
• Mais adiante, veremos expressões literais e expressões lógicas.
Boas práticas
• Recuo:
– Um algoritmo representado em pseudolinguagem, assim como o programa que será desenvolvido com ele, deve ser visualmente organizado;
– Essa regra não afeta o resultado do algoritmo, porém, é extremamente importante para quem vai analisá-lo;
Boas práticas
• Recuo:
– Até agora estamos vendo algoritmos simples, de poucas linhas, mas, imagine um algoritmo ou programa de 100 linhas sem uma organização visual;
Boas práticas
• Recuo:
– Vamos ver dois exemplos:
Programa Resultado
Inteiro nota1, nota2, nota3, soma;
Literal resultado;
Início
Leia(nota1, nota2, nota3);
soma <- nota1 + nota2 + nota3;
Se (soma >= 60) Então
resultado <- "Aprovado“;
Senão
Resultado <- "Reprovado“;
Fim_se
Escreva(resultado);
Fim
Programa Resultado
Inteiro nota1, nota2, nota3, soma;
Literal resultado;
Início
Leia(nota1, nota2, nota3);
soma <- nota1 + nota2 + nota3;
Se (soma >= 60) Então
resultado <- "Aprovado“;
Senão
resultado <- "Reprovado“;
Fim_se
Escreva(resultado);
Fim
Boas práticas
• Recuo:
– Os dois algoritmos fazem exatamente a mesma coisa, porém, o primeiro deles (da esquerda) não utiliza recuo;
– O algoritmo da direita está utilizando recuos e os blocos ficam bastante perceptíveis, facilitando a leitura.
Boas práticas
• Nomes de variáveis:
– Procure dar nomes significativos para as suas variáveis;
– Isso facilita o entendimento de programa mais complexos;
– Ao mesmo tempo, por questões de praticidade, evite nomes muito extensos;
– Os nomes de variáveis devem seguir as mesmas regras aplicadas aos nomes dos programas.
Boas práticas
• Inicialização de variáveis:
– Ao ser declarada, uma variável não contém um valor conhecido;
– Não é garantido (e isso depende da linguagem de programação) que uma variável declarada com Inteiro, por exemplo, antes de ser iniciada, contenha valor zero;
– Para evitar surpresas, inicie a variável no início do programa;
Boas práticas
• Inicialização de variáveis:
– Vamos trabalhar com duas formas de
inicialização de variáveis:
• Inicialização na declaração:
Programa Exemplo
Real base <- 0, altura <- 0;
Início
<comandos>
Fim
Boas práticas
• Inicialização de variáveis:
– Vamos trabalhar com duas formas de
inicialização de variáveis:
• Inicialização no corpo do programa:
Programa Exemplo
Real base, altura;
Início
base <- 0;
altura <- 0;
...
Fim
Atividades
1. Desenvolva um algoritmo que leia o nome de uma pessoa e o escreva na tela.
2. Um professor de matemática está precisando urgentemente de três programas:
a) O primeiro é para calcular a área de retângulos, que é obtida pela expressão (� � ��), onde � é a base e � é a altura do retângulo.
b) O segundo é para calcular a área de círculos, que é data pela expressão (� � ��2), onde
� é uma constante que vale 3.14159 e � é o raio.
c) O terceiro programa deve calcular e apresentar o resultado das quatro operações matemáticas básicas, efetuadas com dois números. O resultado desejado pelo professor deverá ser apresentando conforme abaixo:O primeiro número é: 6
O segundo número é: 4
Os resultados são:
Soma: 10
Subtração: 2
Multiplicação: 24
Divisão: 1.5
Observação: Por hora, não se preocupe com a possibilidade de divisão por zero.
Atividades
3. Dois candidatos concorreram a uma eleição sindical. Além dos votos dados a cada um dos candidatos, foram computados também votos nulos e brancos. Faça um programa que leia o nome de cada candidato e a quantidade de votos que ele obteve. O programa deverá ler também a quantidade de votos nulos e brancos. O resultado a ser apresentado pelo programa deverá ser conforme abaixo:Total de votos: 150
Total de votos válidos: 100
Votos brancos: 30
Votos nulos: 20
Resultado absoluto por candidato:
João da Silva: 45
Joaquim Manoel: 55
Resultado relativo em relação aos votos válidos:
João da Silva: 45 %
Joaquim Manoel: 55 %
Resultado relativo em relação ao total de votos:
João da Silva: 30 %
Joaquim Manoel: 37 %
Estruturas de decisão
• Agora, vamos aprender como montar estruturas de decisão em um algoritmo;
• Para tanto, precisaremos montar expressões condicionais (condições);
• Uma expressão condicional é uma expressão que resulta um valor lógico, portanto, verdadeiro ou falso;
Estruturas de decisão
• Para fazer expressões condicionais precisamos conhecer os operadores relacionais com os quais podemos trabalhar:
Operador Descrição
= Igual a
> Maior que
< Menor que
>= Maior ou igual a
<= Menor ou igual a
<> Diferente de
Estruturas de decisão
• Exemplos de expressões condicionais:Expressão Significado
a = b Testa se o valor da variável a é igual ao valor da variável b
a > b Testa se o valor da variável a é maior que o valor da variável b
a <= b Testa se o valor da variável a é menor ou igual ao valor da variável b
a <> b Testa se o valor da variável a é diferente do valor da variável b
Estruturas de decisão
• Além dos operadores relacionais, precisamos conhecer os operadores lógicos que podem estar presentes entre duas expressões condicionais:
Operador Descrição
e Avalia duas expressões lógicas e retorna verdadeiro se e somente se todas elas forem verdadeiras
ou Avalia duas expressões lógicas e retorna verdadeiro se pelo menos uma delas for verdadeira
não Nega (inverte) uma expressão lógica
Estruturas de decisão
• Exemplos de expressões condicionais com operadores lógicos:
Expressão Significado
(a = b) e (a = c) Testa se o valor da variável a é igual ao valor da variável b e também se o valor da variável a é igual ao valor da variável c. O retorno será verdadeiro somente se as duas expressões simples retornarem verdadeiro.
(a = b) e (a = c) Testa se o valor da variável a é igual ao valor da variável b e também se o valor da variável a é igual ao valor da variável c. O retorno será verdadeiro se pelo menos uma delas for verdadeira.
não (a = b) Inverte o resultado da expressão (a = b). Portanto, se o valor da variável a for igual ao valor da variável b, o resultado da expressão será falso, caso contrário, será verdadeiro.
Estrutura condicional simples
• A estrutura condicional simples para algoritmos, é a seguinte:
...
Se (Expressão_lógica) Então
<comandos para expressão lógica verdadeira>
FimSe
...
Estrutura condicional simples
• Um exemplo:
Programa Exemplo
Inteiro a;
Início
Escreva("Digite um número:");
Leia(a);
Se (a >= 0) Então
Escreva("O número não é negativo!");
FimSe
Se (a < 0) Então
Escreva("O número é negativo!");
FimSe
Fim
Estrutura condicional composta
• O exemplo do slide anterior utilizou duas estruturas condicionais simples, porém, podemos abrir mão de uma estrutura condicional composta, conforme abaixo:
...
Se (Expressão_lógica) Então
<comandos para expressão lógica verdadeira>
Senão
<comandos para expressão lógica falsa>
FimSe
...
Estrutura condicional composta
• Um exemplo:
Programa Exemplo
Inteiro a <- 0;
Início
Escreva("Digite um número:");
Leia(a);
Se ((a Mod 2) = 0) Então
Escreva("O número é par!");
Senão
Escreva("O número é impar!");
FimSe
Fim
Atividades
1. Faça um programa que receba as medidas dos lados de um quadrilátero e retorne: (1) a área do quadrilátero e (2) uma mensagem informando se esse quadrilátero é um quadrado.
2. Faça um programa que, a partir da idade de um nadador, informada pelo usuário, faça a sua classificação como abaixo:
Infantil A: 5 – 7 anos Juvenil B: 14 – 17 anos
Infantil B: 8 – 10 anos Adulto: 18 anos ou mais
Juvenil A: 11 – 13 anos
Atividades
3. Uma empresa precisa de um programa para calcular a premiação de seus vendedores. O usuário irá digitar a média de vendas (R$) e o programa deverá calcular o valor da premiação com base em um percentual, definido na tabela abaixo. O valor da premiação tem um teto de R$ 2.000,00 e deve ser apresentado pelo programa no final da execução.
Média de vendas (R$) Premiação (%)
De 0 a 5.000,00 0
De 5.000,01 a 10.000,00 1
De 10.000,01 a 20.000,00 2
De 20.000,01 a 30.000,00 3
Acima de 30.000,00 4
Estrutura condicional composta
• Encadeamento de estruturas condicionais:
– É perfeitamente possível utilizar uma estrutura condicional dentro de outra, aninhando-as para obter o resultado desejado;
– As boas práticas de programação dizem que o aninhamento de grau maior que três torna o programa complexo e deve ser evitado;
Estrutura condicional composta
• Encadeamento de estruturas condicionais:– Um exemplo:
Programa Exemplo
Inteiro a <- 0, b <- 0;
Início
Escreva("Digite dois números:");
Leia(a, b);
Se (a > b) Então
Escreva("O primeiro número é maior que o segundo");
Senão
Se (a < b) Então
Escreva("O primeiro número é menor que o segundo");
Senão
Escreva("Os números são iguais");
FimSe
FimSe
Fim
Estrutura condicional composta
• O SenãoSe:
– A estrutura condicional Se...Então...Senão...FimSe exige um fechamento para cada Se. Além disso, o Senão
não permite a utilização de uma expressão lógica depois dele;
– Porém, há casos em que pode ser interessante fazer um novo teste lógico logo após um Senão, sem encadear as estruturas explicitamente;
Estrutura condicional composta
• O SenãoSe:
– O SenãoSe é um comando que permite que seja colocada uma nova expressão lógica (um novo teste) logo após o senão;
– O FimSe continua sendo utilizado, porém, só para fechar o Se. Ou seja, não se utiliza FimSe
para fechar o SenãoSe;
Estrutura condicional composta
• O SenãoSe:– Um exemplo:
Programa Exemplo
Inteiro a <- 0, b <- 0;
Início
Escreva("Digite dois números:");
Leia(a, b);
Se (a > b) Então
Escreva("O primeiro número é maior que o segundo");
SenãoSe (a < b) Então
Escreva("O primeiro número é menor que o segundo");
Senão
Escreva("Os números são iguais");
FimSe
Fim
Estrutura condicional composta
• O SenãoSe:– Outro exemplo:
Programa Exemplo
Inteiro preco <- 0, desconto <- 0;
Início
Escreva("Digite o preço do produto:");
Leia(preco);
Se (preco >= 100) Então
desconto <- preco * 0.05;
SenãoSe ((preco > 100) E (preco <= 500)) Então
desconto <- preco * 0.1;
SenãoSe (preco > 500) Então
desconto <- preco * 0.2;
FimSe
Escreva("Preço líquido: ", (preco – desconto));
Fim
Estrutura condicional de múltipla escolha
• Em situações em que o número de escolhas é grande, pode ser interessante utilizar uma estrutura condicional de múltipla escolha;
• A estrutura é:
...
Escolha <variáve>
Caso <valor 1>: <lista de comandos 1>
Caso <valor 1>: <lista de comandos 2>
Caso <valor 1>: <lista de comandos 3>
...
Caso Senão: <lista de comandos n>
FimEscolha
...
Estrutura condicional de múltipla escolha
• Veja um exemplo onde só se utiliza uma linha de comando para cada caso de escolha:
...
Escolha mes
Caso 1: descricaoMes <- "Janeiro";
Caso 2: descricaoMes <- "Fevereiro";
Caso 3: descricaoMes <- "Março";
...
Caso 12: descricaoMes <- "Dezembro";
FimEscolha
...
Estrutura condicional de múltipla escolha
• Para mais de uma linha de comando para cada caso de escolha, faça conforme o exemplo abaixo:
...
Escolha mes
Caso 1:
descricaoMes <- "Janeiro";
mensagem <- "Primeiro mês do ano";
Caso 2:
descricaoMes <- "Fevereiro";
mensagem <- "Segundo mês do ano";
...
Caso 12:
descricaoMes <- "Dezembro";
mensagem <- "Terceiro mês do ano";
FimEscolha
...
Estrutura condicional de múltipla escolha
• Vamos a um exemplo completo onde o programa deve retornar o preço de um produto de acordo com o código digitado pelo usuário:
Código Preço (R$)
1 5,00
2 10,00
3 12,50
4 8,00
Estrutura condicional de múltipla escolha
// Usando SenãoSe
Programa CalculaPreco
Inteiro codigo <- 0;
Real preco <- 0;
Início
Escreva("Digite o código do produto:");
Leia(codigo);
Se (codigo = 1) Então
preco <- 5.00;
SenãoSe (codigo = 2) Então
preco <- 10.00;
SenãoSe (codigo = 3) Então
preco <- 12.50;
SenãoSe (codigo = 4) Então
preco <- 8.00;
FimSe
Escreva("O preço é: ", preco);
Fim
Estrutura condicional de múltipla escolha
// Usando Escolha
Programa CalculaPreco
Inteiro codigo <- 0;
Real preco <- 0;
Início
Escreva("Digite o código do produto:");
Leia(codigo) ;
Escolha codigo
Caso 1: preco <- 5.00;
Caso 2: preco <- 10.00;
Caso 3: preco <- 12.50;
Caso 4: preco <- 8.00;
FimEscolha
Escreva("O preço é: ", preco);
Fim
Atividades
1. Faça um algoritmo que receba como parâmetro o número de um mês do ano e retorne o nome desse mês ao usuário. Se o usuário digitar um valor inválido, ele deve ser informado. Utilize a estrutura Se...Então...SenãoSe...Senão...FimSe.
2. Refaça o algoritmo da atividade anterior agora utilizando a estrutura Escolha...Caso...CasoSenão...FimEscolha.
Estruturas de repetição
• Para começar, uma questão para discussão:
– Com o que vimos até agora, se você fosse solicitado a desenvolver um programa para ler o nome de um usuário e escrevê-lo na tela 100 vezes, o que faria?
Estruturas de repetição
• É comum que os programas ou partes deles precisem ser executados por várias vezes;
• As estruturas de repetição permitem que os programas façam esta execução utilizando um mesmo trecho. Quando isso acontece, dizemos que o programa tem um laço ou loop;
Estruturas de repetição
• Utilizando nossa questão inicial desse capítulo, você concorda que ler o nome do usuário é uma ação a ser executada uma única vez?
• Porém, escrever o nome desse usuário é uma ação única, bem definida, que deve ser repetida por 100 vezes;
• Então, nesse caso, só uma parte do programa deve ter repetição.
Estruturas de repetição
• Tipos de estruturas de repetição:
– Repetição controlada por variável;
– Repetição condicional com teste no início;
– Repetição condicional com teste no fim.
Repetição controlada por variável
• Esse tipo de repetição é ideal para ser utilizado quando os comandos precisam ser repetidos por um número de vezes dado por um limite inicial e um limite final;
• Ou seja, tendo-se os limites inicial e final, o trecho de repetição sempre será repetido entre esses limites;
Repetição controlada por variável
• Estrutura:
...
Para <variável> De <início> Até <fim> Passo <incremento> Faça
<comandos>
FimPara
...
– No campo <variável> deve ser indicada uma variável que fará o controle do laço. Para evitar problemas, essa variável não deve receber atribuição de valor dentro do laço;
Repetição controlada por variável
• Estrutura:
– No campo <início> deve ser indicado o limite inicial do laço, ou seja, a partir de qual valor inicial a variável começa a ser incrementada;
– No campo <fim> define-se o limite final até quando a repetição será executada. O intervalo é aberto, ou seja, o intervalo de repetição inclui os valores de início e fim;
Repetição controlada por variável
• Estrutura:
– No campo <incremento>, devemos indicar qual será o incremento da variável a cada iteração, ou seja, de quanto a variável será acrescida ou decrescida quando passar pelo laço.
– Observação importante: o incremento é feito pela própria estrutura de repetição. Não é necessário atribuir valores à variável, nessa estrutura, durante a execução do laço.
Repetição controlada por variável
• Um exemplo:
Programa Exemplo
Inteiro i <- 0;
Início
Para i De 0 Até 10 Incremento 1
Escreva(i);
FimPara
Fim
Repetição controlada por variável
• Outro exemplo:
Programa Exemplo
Inteiro i <- 0;
Início
Para i De 0 Até 10 Incremento 2
Escreva(i);
FimPara
Fim
Repetição controlada por variável
• Mais um exemplo:
Programa Exemplo
Inteiro i <- 0;
Início
Para i De 10 Até 0 Incremento -1
Escreva(i);
FimPara
Fim
Repetição controlada por variável
• Outro exemplo:
Programa Exemplo
Inteiro i <- 0, n <- 0;
Início
Escreva("Digite um número inteiro:");
Leia(n);
Para i De 0 Até n Incremento 1
Escreva(i);
FimPara
Fim
Atividades
1. Escreva um algoritmo para ler o nome de uma pessoa e imprimi-lo na tela 100 vezes;
2. Refaça o algoritmo acima de modo que o número de vezes que o nome vai ser impresso seja definido pelo usuário.
Observação: utilize a estrutura de repetição controlada por variável.
Repetição condicional
• A repetição condicional é controlada por uma expressão lógica;
• Os comandos que estão dentro da estrutura são repetidos de acordo com o resultado dessa expressão;
Repetição condicional com teste no início
• Estrutura:
...
Enquanto <expressão lógica> Faça
<comandos>
FimEnquanto
...
– Executa os comandos da estrutura de repetição enquanto a <expressão lógica> for verdadeira;
Repetição condicional com teste no início
• Estrutura:
– A exemplo de qualquer estrutura de repetição, deve-se tomar o devido cuidado para não causar um loop infinito;
– Observação importante: a estrutura de repetição condicional não incrementa
automaticamente nenhuma variável.
Repetição condicional com teste no início
• Um exemplo:
Programa Exemplo
Inteiro i <- 0;
Início
Enquanto (i <= 10) Faça
Escreva(i);
i = i + 1;
FimEnquanto
Fim
Repetição condicional com teste no início
• Outro exemplo:
Programa Exemplo
Inteiro i <- 10;
Início
Enquanto (i >= 0) Faça
Escreva(i);
i = i – 1;
FimEnquanto
Fim
Repetição condicional com teste no início
• Mais um exemplo:
Programa Exemplo
Literal continua <- "s“;
Inteiro a <- 0;
Início
Enquanto (continua = "s") Faça
Escreva("Digite um número: ");
Leia(a);
Escreva("O número digitado é: ", a);
Escreva("Deseja continuar (s/n)?");
Leia(continua);
FimEnquanto
Fim
Repetição condicional com teste no final
• Estrutura:
...
Faça
<comandos>
Enquanto <expressão lógica>
...
– Executa os comandos da estrutura de repetição pelo menos uma vez;
– Causa a repetição dos comandos enquanto a <expressão lógica> for verdadeira;
Repetição condicional com teste no final
• Estrutura:
– A exemplo de qualquer estrutura de repetição, deve-se tomar o devido cuidado para não causar um loop infinito;
– Observação importante: a estrutura de repetição condicional não incrementa
automaticamente nenhuma variável.
Repetição condicional com teste no final
• Um exemplo:
Programa Exemplo
Inteiro i <- 0;
Início
Faça
Escreva(i);
i = i + 1;
Enquanto (i <= 10)
Fim
Repetição condicional com teste no final
• Outro exemplo:
Programa Exemplo
Inteiro i <- 10;
Início
Faça
Escreva(i);
i = i – 1;
Enquanto (i >= 0)
Fim
Repetição condicional com teste no final
• Mais um exemplo:
Programa Exemplo
Literal continua <- "s“;
Inteiro a <- 0;
Início
Faça
Escreva("Digite um número: ");
Leia(a);
Escreva("O número digitado é: ", a);
Escreva("Deseja continuar (s/n)?");
Leia(continua);
Enquanto(continua = "s")
Fim
Repetição condicional com teste no final
• Pode-se encontrar também a seguinte estrutura:
...
Repita
<comandos>
AtéQue <expressão lógica>
...
• A diferença fundamental dessa estrutura para a anterior é que, nesse caso, a repetição acontecerá enquanto a <expressão lógica> for falsa.
Estrutura condicional
• Questão para discussão:
– Qual é a diferença básica entre as estruturas de repetição condicional com teste no início e teste no fim?