Buscar

Algoritmos e Estruturas de Decisão

Prévia do material em texto

1
Algoritmos e 
Técnicas de 
Programação
Estruturas de Decisão e de Repetição
Profa. Dra. Jenai Oliveira Cazetta
Contextualização
REFLITA
• Quando você liga um computador, tablet ou smartphone
centenas de processos são inicializados e passam a
competir o processador para que possam ser
executados.
• Resultados obtidos por meio do processamento de
dados são necessários recursos que permitam
implementar soluções otimizadas para o processamento.
Fonte: https://cutt.ly/WESKxi0
Otimização
É o emprego de técnicas para seleção das 
melhores alternativas, com o propósito de alcançar 
os objetivos.
Fonte: https://cutt.ly/lfXXis4
Instruções
• Comandam o funcionamento da máquina e determinam
a maneira como devem ser tratados os dados;
• Específicas para cada modelo de computador tipo de
processador;
• Conjunto de valores, operações, relações.
Estruturas de 
decisão
Estruturas 
condicional 
encadeada
Estruturas de 
repetição
Nossa teleaula
Estrutura de decisão 
condicional simples
2
Estrutura de decisão
• Condicionais estão por toda parte, seja nos fornecendo uma solução ou 
várias possibilidades de solução. 
Se você decidiu estudar Matemática, 
então é porque, de alguma forma, isso vai 
contribuir para sua formação profissional, 
senão faria outro curso ou seguiria outros rumos.
Operadores relacionais e operadores lógicos
Operador C
maior >
menor <
maior ou igual >=
menor ou igual <=
igual ==
diferente !=
Operador C
Conjunção && binário
Disjunção  binário 
Negação ! unário
Estrutura de decisão simples
Condição
Comandos
Início
Fim
V
F
Condições && e ∥
Teste lógico!!!
Fonte: https://cutt.ly/EfFOiyK
if <(condição)>
{
<conjunto de comandos>;
}
se (condição) então
<conjunto de comandos>;
Exemplo
Antônio comprou o seu
primeiro carro. Mas será
que ele já pode dirigí-lo?
Idade >= 18 e 
com carteira de 
habilitação
Você pode 
dirigir!!!
V
F
int main() 
{
//declarando variáveis
int idade;
int carteira;
//lendo dados e armazenando
printf(" \nDigite sua idade: ");
scanf("%d",&idade);
printf(" \nDigite 1 caso tenha carteira: ");
scanf("%d",&carteira);
3
//verificando condições necessárias para dirigir
if (idade>=18 && carteira=1)
{ 
printf(“ \nVoce pode dirigir!");
}
//encerrando o programa
printf(“ \n Pressione a tecla enter para encerrar!");
return 0;
}
Estrutura de decisão 
condicional composta
Estrutura de decisão condicional composta
Comandos 2
Início
Fim
F V
Comandos 1
Condição
if <(condição)>
{
<1º conjunto comandos>;
}
else
{
<2º conjunto comandos>;
}
se (condição) então
<1º conjunto comandos>;
senão
<2º conjunto comandos>;
Exemplo
Maria e João estão se preparando para uma viagem,
porém, se o orçamento final deles for igual ou maior que
R$ 10.000,00 eles farão uma viagem internacional, senão
deverão fazer uma viagem nacional.
Viagem 
nacional
Início
Fim
F V
Viagem 
internacional
orcamento
>= 10000
4
#include <stdio.h>
int main() 
{
//declarando variáveis
float orcamento;
//armazenando dados
printf("Digite o valor do seu orcamento: \n");
scanf("%f", &orcamento);
//verificando condições para a viagem
if (orcamento >=10000)
{
printf(“ \nViagem internacional. Orcamento é de R$ 
%f”,orcamento);
}
else
{
printf(“ \nViagem nacional. Orcamento é de R$ 
%f",orcamento);
}
//encerrando o programa
printf(“ \nPressione a tecla enter para encerrar!);
return 0; 
} Estrutura condicional 
encadeada
Estrutura condicional encadeada – ifs aninhados
• Ifs aninhados comando if é o objeto de outros ifs e
elses;
• Um comando else sempre estará ligado ao comando if
de seu nível de aninhamento.
if (condição)
comandos1;
else
if (condição) 
comandos2;
else
if (condição) 
comandos3;
...
F
F
Comandos 3
V
Comandos 2
V
Comandos 1
Caso 1
Caso 2
Pode ser preciso colocar { e } entre os blocos, caso haja mais 
de um comando a ser realizado!
5
Estrutura condicional de seleção de casos
switch-case;
Comando break é utilizado para 
forçar a saída do laço de decisão 
ele sai do comando sem 
executar as próximas instruções. 
• Testa, sucessivamente, o valor de uma 
expressão contra uma lista de constantes
(inteiras ou caracteres); 
• Os comandos são executados até o ponto 
em que o comando break seja localizado;
• Caso nenhum dos valores seja encontrado 
comando default será executado.
switch (variável)
{
case constante1:
<comandos>;
break;
case constante2:
<comandos>;
break;
//...
default: <comandos>
}
Comandos NV
F
F
F
V Comandos 1
V Comandos 2
Caso1
Caso2
CasoN
Comando
Condição
Exemplo
Descobrir o desconto
que o cliente terá de 
acordo com a cor da 
etiqueta do produto.
#include <stdlib.h>
int main() 
{
//declarando variáveis
char x;
float valor,desc,total;
//armazenando o valor da compra
printf(“ \nDigite o valor da compra: ");
scanf("%f",&valor);
//mostrando as opções e armazenando a escolha
printf(“ \nMenu: Desconto de acordo com a cor");
printf(“ \nA: azul");
printf(“ \nV: vermelho");
printf(“ \nDigite sua opcao: ");
scanf("%s",&x);
//estrutura de condição
switch(x)
{
case ‘A':
printf(“ \nAzul: desconto de 30%.");
desc = valor*0.30;
total = valor – desc;
printf(“ \nValor a pagar: %.2f", total);
break;
case ‘V’:
printf(“ \nVermelho: desconto de 20%. ");
desc = valor*0.20;
total = valor – desc;
printf(“ \nValor a pagar: %.2f",total);
break;
default:
printf(“ \nOpcao invalida.");
}
//encerrando o programa
printf(“ \nPressione a tecla enter para sair!");
return 0;
}
Cálculo do salário de 
um funcionário
6
Atividade
• Programa que calcule o valor do salário líquido de um
funcionário, levando em consideração os descontos de
INSS e Imposto de Renda.
• Faça dois grupos de ifs aninhados:
(1) para o cálculo do inss;
(2) para o cálculo do imposto de renda.
Salário de contribuição (R$) Alíquota/INSS
Até 1.693,72 8,0%
De 1.693,73 até 2.822,90 9,0%
De 2.822,91 até 5.646,80 11,0%
Acima de 5.646,80 R$ 621,04 (invariavelmente)
Salário de contribuição (R$) Alíquota/IR
Até 1.903,98 -
De 1.903,99 até 2.826,65 7,5%
De 2.826,66 até 3.751,05 15,0%
De 3.751,06 até 4.664,68 22,5%
Acima de 4.664,68 27,5%
#include <stdio.h>
#include <stdlib.h>
int main()
{
//declarando variáveis
float salario,inss,ir,liquido;
//entrando e armazenando dados
printf(" \nDigite o Salario Bruto: ");
scanf("%f",salario);
//cálculo do desconto do INSS
if (salario <= 1693.72)
inss = salario*0.08;
else
if (salario >= 1693.73 && salario <= 2822.90)
inss = salario*0.09;
else
if (salario >= 2822.91 && salario <= 5645.80)
inss = salario*0.11;
else
inss = 621.04;
//cálculo do desconto do IR
if (salario <= 1903.98)
ir = salario*0;
else
if (salario >= 1903.99 && salario <= 2826.65)
ir = salario*0.075;
else
if (salario >= 2826.66 && salario <= 3751.05)
ir = salario*0.15;
else
if (salario >= 3751.06 && salario <= 4664.68)
ir = salario*0.225;
else
if (salario > 4664.69 )
ir = salario*0.275;
//cálculo do Salario Liquido
liquido = (salario – inss) – ir;
//imprimindo resultados
printf(" \nSalaria Bruto: %.2f",salario);
printf(" \nDesconto do INSS: %.2f",inss);
printf(" \nDesconto do Imposto de Renda: %.2f",ir);
printf(" \nSalario Liquido: %.2f",liquido);
//encerrando o programa
printf(" \nPressione a tecla enter para sair!”);
return 0;
} 
7
Comando if
Comando de decisão condicional
Se você decidiu estudar Matemática, 
então é porque, de alguma forma, isso vai contribuir 
para sua formação profissional, 
senão faria outro curso ou seguiria outros rumos.
Se ... então ... senão ...
Não deveria ser?
if... then... else...
Fonte: https://bit.ly/3aLma1D
Estruturas de 
repetição condicional 
(1)
Estruturas de repetição
• Laços, looping, malha ou ciclo;
• Capacidade de trechos de programas poderem ser
repetidos de forma iterativa quando uma sequência
de comandos deve ser executada repetidas vezes;
• A estrutura de repetição, assim como a de decisão,
envolve sempre a avaliação de uma condição;
• Objetivo otimizar as soluções de problemas!
• Exemplos:
• cadastrar 100 clientes;
• ordenar um vetor de caracteres;• calcular a média de 𝑛 números;
• entrar com os dados de uma matriz para o cálculo de seu 
determinante... 
• Laços determinísticos quando se sabe o número de
vezes que o laço será executado;
• Laços indeterminados quando não se sabe quantas
vezes o laço será executado depende de uma
resposta do usuário para fazê-lo laço pré-teste e laço
pós-teste.
8
Laço (loop) pré-teste – enquanto – while
• Algo será repetidamente executado enquanto uma condição verdadeira
for verificada somente após a sua negativa, essa condição será 
interrompida.
O programa não executará 
nenhuma repetição (ações 
que ali dentro estiverem 
programadas) sem antes 
testar uma condição.
Fonte: https://cutt.ly/EfFOiyK
V
F
Condição
Comandos a 
serem 
repetidos
enquanto <condição> faça
//conjunto de comandos
fim_enquanto;
while (<condição>)
{
//comando 1
//comando 2
//...
//comando n
}
Exemplo
Imprimir números inteiros de 1 até 10.
V
F
numero 
<= 10 numero
numero = numero +1
//iniciando o contador
numero=1;
//iniciando o loop
while (numero<=10)
{
printf(“%d”,numero);
//incrementando o contador
numero=numero+1;
}
//...
Estruturas de 
repetição condicional 
(2)
Laço pós-teste – faça_enquanto – do-while
• Analisa a condição ao final do laço os comandos são
executados antes do teste de condição;
• Condição condição de interrupção do laço;
• As ações serão executadas pelo menos uma vez antes
do teste condicional.
V
F
Condição 
fim da repetição
Comandos a 
serem repetidos
Início da repetição repita
//grupo de comandos
até_que <condição>;
do
{
//grupo de comandos
}
while (<condição>);
9
Exemplo
Imprimir números inteiros de 1 a 10.
V
F
numero 
<=10 
fim da repetição
numero = numero + 1
Início da repetição
numero
//iniciando o contador
numero=1;
//iniciando o loop
do
{
printf(“%d”,numero);
//incrementando o contador
numero=numero+1;
}
while (numero<=10);
Loop infinito
• Para que isso não aconteça, pode-se utilizar os seguintes recursos:
• Contador utilizado para controlar as repetições quando são 
determinadas;
• Incremento e decremento trabalham o número do contador, 
seja aumentando-o ou diminuindo-o;
• Acumulador irá somar as entradas de dados de cada iteração da repetição, 
gerando um somatório a ser utilizado quando da saída da 
repetição;
• Condição de parada utilizada para determinar o 
momento de parar quando não se tem um valor exato
desta repetição.
Incremento e decremento
Descrição Exemplo Resultado Obs.
+ +
pós incremento 𝑥 + +
𝑥 + 1
após 1ª execução
pré incremento + +𝑥 antes da 1ª execução
− −
pós incremento 𝑦 − −
𝑦 − 1
após 1ª execução
pré incremento − −𝑦 antes da 1ª execução
Estruturas de 
repetição 
determinísticas
Repetição com variáveis de controle – loop for
• Geralmente usado para repetir uma informação por um
número fixo de vezes podemos determinar quantas
vezes acontecerá a repetição;
• Baseia-se estritamente em numa variável de controle
(contador), a qual pode ser aumentada ou diminuída cada
vez que o looping for executado;
• Entre as diversas aplicações, o comando é muito utilizado
em programas para cálculos de séries matemáticas
acumulativas.
V
F
Inicializando a variável
Condição Comandos Incrementa a 
variável
Condição
10
variável  valor_inicial, valor_final, incremento
comandos
V
F
para <variável>  <valor inicial> até <valor final> passo <incremento> faça
//bloco de comandos
fim_para;
for (inicialização; condição final; incremento)
{
//bloco de comandos
}
• Inicialização executada uma única vez antes de começar o laço.
• Condição final teste que determina se a condição é verdadeira ou
falsa: 
• Verdadeira permanece no laço; 
• Falsa encerra o laço e passa para a próxima instrução.
• Incremento é possível incrementar uma repetição de acordo com um 
contador específico o incremento é executado depois 
dos comandos.
Cálculo do fatorial de um número
𝑁! = 𝑁 𝑁 − 1 𝑁 − 2 … 3 2 1
5! = 5 . 4 . 3 . 2 . 1 = 120
0! = 1
j  N, 1, -1
fat fat*j
𝑁! = 𝑁 𝑁 − 1 𝑁 − 2 … 3 2 1
//inicializando variáveis
fat=1;
j=N;
//iniciando o loop
for (fat=1; j>0; j--)
{
fat=fat*j;
}
//...
𝑓𝑎𝑡 = 1
𝑗 = 2
𝑓𝑎𝑡 = 1 ∗ 2 = 2
𝑗 = 2– 1 = 1
𝑓𝑎𝑡 = 2 ∗ 1 = 2
𝑗 = 1– 1 = 0
2!
Convertendo números 
da base 10 para a 
base 2
11
Atividade
• Programa Conversão de um número inteiro 
decimal para um número binário utilizando 
estruturas de repetição.
255 2
2
2
2
2
2
2
1271
631
311
151
71
31
11
A divisão chega ao final quando o resto da 
divisão é menor que o valor da base!
Exemplo: 255
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(void)
{
//declarando variáveis
int i=0;
int N,bin,bits;
printf(“ \nConversao de um decimal para um binario.");
//lendo e armazenando variáveis
printf(" \nDigite um numero inteiro diferente de zero: ");
scanf("%d",&N);
//perguntando sobre a representação binária
printf(" \nVoce quer a representacao em quantos bits? ");
scanf("%d",&bits);
//iniciando o loop
while(i<bits)
{
//armazenando/imprimindo o resto da divisão do número
bin=N%2;
printf(" \n%d",bin);
N=N/2;
i=i+1;
}
//informando ao usuário o resutado
if (N!=1) 
{
printf(" \n\nO numero nao pode ser representado em 
%d",bits);
printf(" bits");
}
else
{
printf(" \n\nRepresentacao bem sucedida.");
printf(" \n\nO numero deve ser lido de baixo para cima!");
}
//encerrando o programa
printf(" \nPressione a tecla enter para sair!”);
return (0);
} Término de um 
programa
12
Término de um programa
• É considerada uma boa técnica de
programação que o código interaja
bastante com o usuário seja dizendo o que
o usuário deva fazer, como também,
mostrando os resultados detalhados;
• Um opção muito interessante é perguntar
ao usuário, no final do programa, se ele
quer finalizar o programa ou inserir novos
dados para obter novos resultados.
Qual a estrutura 
que você usaria?
Fonte: https://bit.ly/3aLma1D
Fonte: https://cutt.ly/EfFOiyK
Recapitulando
Estrutura de decisão condicional
if <(condição)>
{
//comandos1
}
else
{
//comandos2
}
Condições && e ∥
Estrutura condicional encadeada
if (condição1) 
//comandos1
else
if (condição2)
//comandos2
else
//comandos3
Estrutura condicional de seleção de casos
switch (variável)
{
case constante1:
//comandos1
break;
case constante2:
//comandos1 
break;
default: 
//comandos1
}
Estrutura de repetição condicional – enquanto
while (<condição>)
{
//comando 1
//comando 2
//...
//comando n
}
13
Estrutura de repetição condicional – faça_enquanto
do
{
//comando 1
//comando 2
//...
//comando n
}
while(<condição>);
Estrutura de repetição determinística – para
for (inicialização; condição final; incremento)
{
//comando 1
//...
//comando n
}

Mais conteúdos dessa disciplina