7 – Testes e Condições
Unesp – Campus de Guaratinguetá
Curso de Programação Computadores
Prof. Aníbal Tavares
Profa. Cassilda Ribeiro
Ministrado por: Prof. André Amarante
7 Seleção de Ações Alternativas
Suponha que temos duas variáveis numéricas, A e B,
cujos valores são diferentes, e desejamos imprimir a
maior delas.
Neste caso utilizamos uma construção chamada
Se_Então_Senão
SIM
A >B?
NÃO
escreva (A)
escreva (B)
Testes e Condições
2
7 Seleção de Ações Alternativas
Em Linguagem Algorítmica a construção Se_Então_Senão
tem o seguinte formato:
Se “condição”
então “alternativa verdadeira”
senão “alternativa falsa”
Exemplo:
Se A > B
então Escreva ( A )
senão Escreva ( B )
Testes e Condições
3
7 Seleção de Ações Alternativas
 Um conjunto especial de operadores relacionais é
solicitado para expressar condições. São eles:
Operador em Operador em
Linguagem
Linguagem C
Algorítmica
Significado
>
>
maior do que
<
<
menor do que
=
==
igual a
≥
>=
maior do que ou igual a
≤
<=
menor do que ou igual a
≠
!=
não igual ( diferente de )
Testes e Condições
4
7 Seleção de Ações Alternativas
Exemplo 1: Fazer um algorítmo em que dadas as três notas individuais em
três aspectos do ano escolar (Lab, Exame_inter, Exame_final) para um estudante
chamado Nome. O algorítmo deve calcular a média final com pesos de 20%,
30% e 50%, respectivamente. O relatório de saída deve fornecer o nome do aluno,
suas notas individuais,sua média final e uma mensagem caso o aluno esteja
reprovado. A variável Média é real.
Algoritmo Relatório
Variáveis: Lab, Exame_inter, Exame_final, Média : reais
Nome : cadeia de caractere
Início
1. [Ler dados]
Leia [Nome, Lab, Exame_inter, Exame_final]
2. [Calcular a média]
Média  0.2 * Lab + 0.3 * Exame_inter + 0.5 * Exame_final
Testes e Condições
5
7 Seleção de Ações Alternativas
Exemplo 1: Continuação....
3. [Imprimir resultados]
Escreva (´Nome estudante:´, Nome)
Escreva (´Nota Laboratório:`, Lab)
Escreva (´Exame Intermediário:`, Exame_inter)
Escreva (´Exame Final`, Exame_final)
Escreva ( ´Média Final:`, Média)
4. [Verificar se tem aluno reprovado]
Se Media < 5.0
então Escreva (´Reprovado`)
Fim
Testes e Condições
6
7 Seleção de Ações Alternativas
Exemplo 2: Faça um algoritmo que leia dois valores, determine o maior
deles e o imprima com uma mensagem de identificação. Assumir que
todas as variáveis são inteiras.
Algoritmo Mostre
3. [Imprimir o maior valor]
Variáveis: Valor1, Valor2, Max : inteiras
Escreva (´Maior Valor =`, Max)
Início
4. [Terminar]
1. [Ler os valores]
Fim
Leia ( Valor1, Valor2 )
2. [Determinar o maior]
Se Valor1 > Valor2
então Max  Valor1
Escreva (´O Primeiro valor é maior`)
senão Max  Valor2
Escreva (´O Segundo Valor é maior`)
Testes e Condições
7
7.1 Diagrama de blocos - Fluxograma

Como já foi dito anteriormente, antes de se fazer um programa,
deve-se fazer um algoritmo de problema. Para tanto temos
utilizado uma linguagem algorítmica que também chamamos de
portugol.

Uma outra maneira de se escrever algoritmos é através de
fluxograma ou diagrama de bloco. No fluxograma, as ações a
serem executadas são representadas de maneira gráfica.

Embora a linguagem algorítmica seja mais utilizada, existem
vários livros que utilizam o fluxograma para explicar partes do
algoritmo, devido ao seu forte apelo visual

A seguir mostramos rapidamente as ferramentas utilizadas para a
8
confecção de um fluxograma.Testes e Condições
7.1 Diagrama de blocos - Fluxograma
Símbolo
Descrição
Inicio/Fim
Delimita o início ou o final das instruções.
Leitura
Leitura de dados (através do teclado, pex).
Cond
Avaliação de uma condição.
Resultados
Apresentação de resultados.
Operacoes
Atribuição ou operação de processamento.
Fluxo de execução.
Conexão entre partes do algoritmo.
Testes e Condições
9
7.1 Diagrama de blocos - Fluxograma
Problema Maior
Suponha duas variáveis
numéricas, A e B, com
valores diferentes, e
deseja-se imprimir a
maior delas.
Algoritmo Maior
Variaveis A, B;
Inicio
1. Ler(A,B);
2. Se (A > B)
entao imprimir A;
Senao imprimir B;
Fim
Inicio
Ler A,B;
V
Se A>B
F
Escreva(A);
Testes e Condições
Escreva(B);
Final
10
7.2 Seleção de Ações Alternativas : Ses Encaixados
7.2 Seleção de Ações Alternativas : Ses Encaixados
Em algumas aplicações, uma das alternativas de uma
estrutura Se_Então_Senão pode envolver outras decisões
Exemplo 3 : Faça um algoritmo que leia três números A, B e C e imprima
o valor do maior. Assumir valores distintos e reais.
Algorítmo Max_3
Variáveis A, B, C, Max : reais
Início
1. [Ler dados]
Leia (A, B, C)
Testes e Condições
11
7.2 Seleção de Ações Alternativas : Ses Encaixados
Inicio
Exemplo 3: Continuação....
2. [Determinar o maior valor, comparando pares]
Se A > B
Ler A,B,C;
V
F
Se A > B
Então Se A > C
então Max  A ( A > B,A > C )
senão Max  C ( C > A > B ) V
V
Se B > C
Se A > C
Senão Se B > C
F
F
então Max  B ( B > A, B > C )
A; C;
B;
C;
senão Max  C ( C > B > A )
3. [Imprimir o maior valor]
Escreva (´Maior valor =`, Max)
Escreva(Max);
4. [Terminar]
Testes e Condições
12
Fim
Final
7.2 Seleção de Ações Alternativas : Ses Encaixados
Cuidado com a paragrafação (indentação)
Ex1: Se C1
então Se C2
então S1
senão S2
onde: C1 e C2 significam
condições e S1 e S2,
comandos
Em que condições S2 é executado?
Isso não fica claro.
Testes e Condições
13
7.2 Seleção de Ações Alternativas : Ses Encaixados
Ex2:
Se C1
então Se C2
então S1
senão S2
Neste exemplo, o comando
Se C2 só será executado
se a condição C1 for
Verdadeira. Se C1 for falsa,
nenhum comando será
Executado.
Se C1
então Se C2
então S1
senão S2
Neste exemplo, o comando
Se C2 só será executado se a
condição C1 for verdadeira. Se
ela for falsa, o comando S2 será
executado
Testes e Condições
14
7.2 Seleção de Ações Alternativas : Ses Encaixados
Exemplo 4: Uma empresa decidiu dar uma gratificação de Natal
a seus funcionários. Esta gratificação é calculada com base no
número de horas extras trabalhadas e o número de horas de
falta. A fórmula para se calcular o prêmio é a seguinte:
Extra – 2 /3 * Faltas.
O prêmio é distribuído segundo a tabela a seguir:
Extra – 2/3 * Faltas
Prêmio (R$)
> 40 horas
50
> 30 mas <= 40 horas
40
> 20 mas <= 30 horas
30
> 10 mas <= 20 horas
20
<= 10 horas
10
Pede-se um algoritmo e
um programa em C, para
ler informações de
funcionários e calcular o
prêmio a ser dado.
Testes e Condições
15
Exemplo 4: continuação
Algoritmo Bônus
Variáveis: Extras, Faltas, Pagamentos : reais
Se A > 40
Nome : cadeia
F
Início
1. [Ler informações de um funcionário]
Leia (Nome, Extras, Faltas)
Se A > 30
2. [Calcular o prêmio]
Se Extras – (2/3.0) * Faltas > 40
F
Então Pagamento  50
Senão Se Extras – (2/3.0) * Faltas >30
Se A > 20
Então Pagamento  40
Senão Se Extras – (2/3.0) * Faltas >20
F
Então Pagamento  30
Senão Se Extras – (2/3.0)*Faltas>10
Se A > 10
Então Pagamento  20
Senão Pagamento  10
F
3. [Imprimir resultados]
Escreva ( ´Prêmio para`, Nome,`=R$`, Pagamento)
Testes e Condições P10;
Fim
V
P50;
V
P40;
V
P30;
V
P20;
16
Exemplo 4: continuação
 Podemos melhorar este algorítmo, calculando o valor do teste
(Extra – (2/3.0) * Faltas) somente uma vez. Para isto vamos
introduzir uma variável temporária (Valor_teste).
2.1 [Calcular o valor teste]
Valor_teste  Extras – (2/3.0) * Faltas
2.2 [Calcular o prêmio]
Se (Valor_teste > 40)
Então Pagamento  50
Senão Se Valor_teste > 30
Então Pagamento  40
Senão Se Valor_teste > 20
Então Pagamento  30
Senão Se Valor_teste > 10
Então Pagamento 20
Testes e Condições
Senão Pagamento 10
17
7.3 Seleção de Ações Alternativas: O Comando if
Em linguagem C a construção Se – Então - Senão
é feita através dos comandos if-else:
Comando if
Falso = 0
Verdadeiro  0
# Sintaxe:
if (expressão é verdadeira)
execute comando ou bloco de comandos
# Exemplo:
if (contador > 9)
contador = 0;
Testes e Condições
18
7.3 Seleção de Ações Alternativas: O Comando if
OBS: Quando dentro do comando if, forem executados
mais de um comando (bloco de comando) é
necessário colocar chaves, {}, para marcar o
início e o fim dos comandos a serem executados.
Aqui tem duas ações
sendo feitas dentro da
condição verdadeira
# Exemplo:
Chave marcando o início
da condição verdadeira
Chave marcando o fim
da condição verdadeira
if (contador >9)
{
contador = 0;
soma = 32
}
Testes e Condições
19
7.3 Seleção de Ações Alternativas: O Comando if
Exemplo 5
Fazer um
programa em C
que leia um
número e imprima uma mensagem dizendo se
ele é maior,
menor ou igual
a 10.
Observe a
chave {
marcando o
início do if
#include <stdio.h>
#include <stdlib.h>
main ()
{ /* Início do programa */
int num;
printf ("Digite um numero: ");
scanf ("%d",&num);
if (num > 10)
printf ("\n\n O numero digitado eh maior que 10");
if (num == 10) { /* Início do if */
printf ("\n\n Voce acertou!\n");
printf ("O numero digitado e igual a 10.");
} /* fim do if*/
if (num < 10)
printf ("\n\n O numero digitado eh menor que 10");
system("pause");
}
Testes e Condições
20
7.4 Seleção de Ações Alternativas: O Comando else
O Comando else pode ser considerado um complemento do
comando if, cujos comandos serão executados
SOMENTE SE a expressão, especificada após o
comando if, for 0 (falsa).
# Sintaxe:
if (expressão é verdadeira)
Falso = 0
Verdadeiro  0
execute comando1 ou bloco1 de comandos
else
execute comando2 ou bloco2 de comandos
Testes e Condições
21
7.4 Seleção de Ações Alternativas: O Comando else
#include <stdio.h>
#include <stdlib.h>
main ( )
{
int num;
printf ("Digite um numero: ");
scanf ("%d", &num);
if (num == 10) {//início então
printf ("\n\n Voce acertou!\n");
printf ("O numero e igual a 10.\n");
}//fim então
else {//início senão
printf ("\n\n Voce errou!\n");
printf ("O numero eh diferente de 10.\\nn");
}//fim senão
system("pause");
}
Testes e Condições
Exemplo 6
Refazer o programa
em C do exemplo 5
anterior, utilizando
o comando else
22
7.5 Seleção de Ações Alternativas: if-else encaixados
 É possível aninhar construções do tipo if-else em
diversos níveis.
if (cond1)
if (cond2)
comando if2 ;
else
comando else2 ;
else
if (cond3)
if (cond4)
comando if4 ;
else
comando else4 ;
else
comando else3 ;
/* if1 */
/* if2 */
/* else2 */
/* else1 */
/* if3 */
/* if4 */
/* else4 */
/* else3 */
Testes e Condições
23
7.6- Exercícios resolvidos - Comando If-else
Exercício 1: Colocar o Exemplo 1 em Linguagem C
#include <stdlib.h>
#include <stdio.h>
main()
{
// declarar variáveis
float lab,exame1, exame_final, media;
char nome[30];
//1. [Ler dados]
printf( "Digite o nome do aluno: " );
scanf("%s",&nome);
printf("\n\n" );
printf("Digite as notas de: lab, exame1 e exame_final, do aluno:%d\n", nome);
scanf("%f%f%f",&lab,&exame1,&exame_final);
//2. [Calcular a média]
continua na página seguinte
media= 0.2*lab + 0.3 * exame1 + 0.5*exame_final;
24
7.6- Exercícios resolvidos - Comando If-else
// 3. [imprimir resultados]
Continuação do Exercício 1
printf ("\nNome. estudante:%s\n",nome);
printf("\n");
printf("Nota Laboratorio: %f\n\n",lab);
printf("Exame1: %f\n\n",exame1);
printf("Exame Final: %f\n\n",exame_final);
printf("Media Final: %f\n\n",media);
if(media < 5.0 )
printf("Reprovado\n\n\n");
else
printf("Aprovado\n\n");
system("PAUSE");
Testes e Condições
25
}// fim programa
7.6- Exercícios resolvidos - Comando If-else
Exercício 2: Colocar o Exemplo 3 em Linguagem C
#include <stdlib.h>
#include <stdio.h>
Exemplo 3 : Faça um programa
main( )
que leia três números A, B e C e
{// declarar variáveis
imprima o valor do maior.Assumir
float A, B, C, max;
valores distintos e reais.
//1. [Ler dados]
printf( "Digite tres numeros A, B, C\n" );
scanf("%f%f%f",&A,&B,&C);
// 2. [Determinar o maior valor, comparando pares]
if (A > B)
{ if (A > C)
{ max = A ; //( A > B , A > C )
printf( "\nO maior valor eh o A\n" );
}
else
{ max = C ; // (A > B e C >A )
continua na próxima
printf( "\nO maior valor eh o C\n" );
página
}
Testes e Condições
}

26
7.6- Exercícios resolvidos - Comando If- else
else
Continuação do Exercício 2
{ if (B > C) // ( B > A, B > C )
{ max = B;
printf( "\nO maior valor eh o B\n" );
}
else
{
max = C; // ( C > B > A )
printf( "\nO maior valor eh o C\n" );
}
}
// 3. [Imprimir o maior valor]
printf ("\nMaior valor =%f\n\n", max);
system("pause");
} //4. Fim do programa
Testes e Condições
27
7.6- Exercícios resolvidos - Comando If- else
#include <stdlib.h> Exercício 3: Refazer o programa do
#include <stdio.h>
Exercício 2 para imprimir os 3
main ( )
números na ordem crescente.
{
int a, b, c, maior, meio, menor ; // declaração de variáveis.
// Leitura de dados
printf(" Entre com tres numeros inteiros\n");
scanf("%d%d%d",&a,&b,&c);
if ( a > b )
if ( a > c )
{
maior = a;
if ( b > c ) { meio = b; menor = c; }
else { meio = c; menor = b; }
}
continua na próxima
else { maior = c; meio = a; menor = b; }
página

Testes e Condições
28
7.6- Exercícios resolvidos - Comando If- else
Continuação do Exercício 3
else
if ( a > c ) { maior = b; meio = a; menor = c; }
else
{
menor = a;
if ( b > c ) { maior = b; meio = c; }
else { maior = c; meio = b; }
}
printf("Em ordem crescente: %d %d %d\n\n", menor, meio, maior);
system("pause");
} //fim programa
Testes e Condições
29
7.7- Exercícios para Casa - Comando If-else
1)
2)
3)
4)
Colocar em Linguagem C os algoritmos dos exemplos 2, e 4.
Fazer um programa em C que leia 4 números (A, B, C, D) e encontre
o maior deles. Imprima uma mensagem dizendo qual deles é o maior
e o valor do maior.
Faça um programa em C que calcule o aumento de salário para o
corrente ano. Se salário >1000 o aumento é de 5%. Senão o
aumento é de 7%.
Preparar um algoritmo e um programa em C para ler os
comprimentos dos três lados de um triângulo (S1, S2, e S3) e
determinar que tipo de triângulo temos, com base nos seguintes
casos. Sejam A o maior dos lados de S1, S2, e S3 e B e C os outros
dois lados. Então:
Se A ≥ B + C nenhum triangulo é formado
Se A2 = B2 + C2 um triangulo retangulo é formado,
Se A2 > B2 + C2 um triangulo obtusangulo é formado
Se A2 < B2 + C2 um triangulo acutangulo é formado
Testes e Condições
30
53
7.7- Exercícios para Casa - Comando If-else
5) Faça um programa que leia dois valores, o primeiro servindo de
indicador de operação e o segundo correspondendo ao raio
de uma circunferência. Caso o primeiro valor lido seja igual a
1, calcular e imprimir a área desta circunferência. Se o valor
lido for 2, calcular e imprimir o perímetro da circunferência. E
se o valor lido for diferente destes dois valores; imprimir uma
mensagem dizendo que o indicador de operação foi mal
fornecido.
6) Fazer um programa que: dada a altura e peso de uma pessoa,
calcule seu índice de massa corporal. Fórmula: peso dividido
por altura ao quadrado. Faixas: <= 18,5 - abaixo do peso
normal; > 18,5 e <= 25 - peso normal; > 25 e <=30 - peso
acima do normal; acima de 30 - peso excessivo.
Testes e Condições
54 31
7.7- Exercícios para Casa - Comando If-else
7) Faça um programa que leia dois valores, o primeiro servindo de
indicador de operação e o segundo correspondendo ao raio de
uma circunferência. Caso o primeiro valor lido seja igual a 1,
calcular e imprimir a área desta circunferência. Se o valor lido for 2,
calcular e imprimir o perímetro da circunferência. E se o valor lido
for diferente destes dois valores; imprimir uma mensagem dizendo
que o indicador de operação foi mal fornecido.
8)Fazer um programa que resolva uma equação de segundo grau,
realizando consistências dos valores do discriminante e do
coeficiente "a". Caso o discriminante seja negativo, deverá apenas
ser impressa a mensagem: " Esta equação não possui raízes reais"
. Caso o coeficiente "a" seja igual à zero, deverá ser impressa a
mensagem: " Esta não é uma equação de segundo grau" e deverá
ser fornecido o valor da única raiz. Se o discriminante for maior ou
igual a zero e o coeficiente "a" não for nulo, deverão ser impressas:
"as raízes da equação: ax2 + bx + c = 0 são R1 = xxx e R2 = xxx".
Testes e Condições
55 32
Resolução Exercícios para Casa (1)
#include <stdlib.h>
#include <stdio.h>
// Programa: Mostre o maior de 2 números
main()
{
int Valor1, Valor2, Max;
//1. [Ler os valores]
printf("Digite dois numeros \n");
scanf("%d%d",&Valor1,&Valor2 );
//2. [Determinar o maior]
if (Valor1 > Valor2)
{ Max = Valor1;
printf ("\nO Primeiro valor eh maior\n");
Testes e Condições
}
Ex casa 1: Colocar
o exemplo 2 em C

continua
na próxima
página
33
Resolução Exercício para Casa (1)
else
{ Max = Valor2;
printf ("\nO Segundo Valor eh maior\n");
}
//3. [Imprimir o maior valor]
printf("Maior Valor =%d\n\n", Max);
//4. [Terminar]
system("PAUSE");
}
Testes e Condições
34
Resolução Exercício para Casa (8)
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
main()
{ int a, b, c;
float delta, raiz1, raiz2;
printf("digite os coeficientes a, b, c da equacao\n");
scanf("%d%d%d",&a,&b,&c);
if(a==0)
{ printf(" esta equacao eh de 1o. grau\n");
raiz1= -c/b;
printf(" sua raiz eh: %f \n", raiz1);
}
else
{ delta=(pow(b,2)-4*a*c);
if(delta >= 0)
{ raiz1=(b+sqrt(delta))/(2*a);
raiz2=(b-sqrt(delta))/(2*a);
printf("as raizes sao:R1= %f,R2=%f \n",raiz1,raiz2);
}
else printf("Esta equacao nao possui raizes reais\n");
}
system("PAUSE");
Testes e Condições
35
}
7.8 Aplicação: O paradoxo da inovação
Os dados do censo (que ocorre a cada 10 anos) de 1880
dos EUA levaram quase 8 anos para serem processados.
Temia-se que os dados do censo de 1890 não estivessem
processados em 1900.
Herman Hollerith (estatístico):
Foi encarregado pela Agência Estatística
dos EUA de desenvolver uma técnica
para acelerar o processamento dos dados
do censo, levando apenas 3 anos.
Testes e Condições
36
7.8 Aplicação: O paradoxo da inovação
Lei de Moore: O fundador da Intel, Gordon Moore, constatou
que a capacidade de processamento dos computadores dobra
a cada 1 ano, enquanto os custos permanecem fixos.
?
Problema: Imagine que uma tarefa deve ser processada e
levará 8 anos e que não pode ser movida da máquina uma vez
iniciada. De acordo com a Lei de Moore deve-se esperar a
melhoria dos processadores ou deve-se começar hoje ?
!
Solução: O senso comum diz que é melhor começar agora,
mas antes de por a mão na massa é bom olhar a Tabela dada
a seguir:
Testes e Condições
37
7.8 Aplicação: O paradoxo da inovação
Início
Tempo de
Desenvolvimento
(anos)
Tempo de
Processamento
(anos)
Tempo
Total
(anos)
Final
0º. ano
0
8
8
8º. ano
1º. ano
1
4
5
5º. ano
2º. ano
2
2
4
4º. ano
3º. ano
3
1
4
4º. ano
4º. ano
4
0,5
4,5
4º. ano
!
Observação: É melhor começar no 2º. ou 3º. Ano, pois com
isso pode-se terminar antes a tarefa. Esta análise também
pode ser útil para dividir recursos entre produção e pesquisa. 38
7.8 Aplicação: O paradoxo da inovação
Forma Geral: O paradoxo da inovação pode ser formulado
de acordo com três parâmetros: tempo de desenvolvimento t,
taxa de aperfeiçoamento a e tempo de processamento p.
No caso anterior, os valores eram:
p = 8 e a = 50% = 0.5.
A fórmula para o caso geral
será dada por:
Considerando-se t variável, a e p
fixos, para encontrar o menor
tempo y, pode-se fazer dy/dt =Testes
0. e Condições
8
y t  t
2
p
y t
t
(1 / a )
Alternativa: Vale
a pena esperar se
39
p/(1/a) > 1
7.8 Aplicação: O paradoxo da inovação
No caso anterior: 8/(1/0.5) = 4 > 1
Início
Tempo de
Desenvolvimento
(anos)
Tempo de
Processamento
(anos)
Tempo
Total
(anos)
Final
0º. ano
0
8
8
8º. ano
1º. ano
1
4
5
5º. ano
2º. ano
2
2
4
4º. ano
3º. ano
3
1
4
4º. ano
4º. ano
4
0,5
4,5
4º. ano
Testes e Condições
40
7.8 Aplicação: O paradoxo da inovação
Exemplo 7
Algoritmo: Inovação
variáveis: r,p,a: real;
Inicio
Escreva(“Forneça a e p”)
Leia (a, p);
r  (p/(1/a));
Se (r > 1.0)
Então Escreva(‘Espere’);
Senão
Escreva(‘Comece’);
Fim
Código C
// Programa: paradoxo da inovação.
#include <stdio.h>
#include <stdlib.h>
main()
{
float a, p, r;
printf(“Forneça a e p:”);
scanf(“%f %f”,&a,&p);
r = p/(1/a);
if (r > 1.0)
printf(“Espere”);
else
printf(“Comece”);
system(“pause”);
Testes e Condições
}
41
Unesp-Campus de Guaratinguetá
7 – Testes e Condições
FIM
Aula 7
Referências dos slides
Curso de Programação de Computadores
Prof. Aníbal Tavares
Profa. Cassilda Ribeiro
Prof. Décio Mourão
Testes e Condições
Prof. Galeno Sena
42
Download

07 - UNESP