Unesp – Campus de Guaratinguetá
Curso de Programação Computadores
Prof. Aníbal Tavares
Profa. Cassilda Ribeiro
Ministrado por: Prof. André Amarante
7 – Testes e Condições
Testes e Condições 2
Suponha que temos duas variáveis numéricas, A e B,
cujos valores são diferentes, e desejamos imprimir a
maior delas.
7 Seleção de Ações Alternativas
Neste caso utilizamos uma construção chamada
Se_Então_Senão
SIM NÃO
A > B ?
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 4
Um conjunto especial de operadores relacionais é
solicitado para expressar condições. São eles:
!= <= >= == < > Operador em Linguagem C
não igual ( diferente de ) ≠
menor do que ou igual a ≤
maior do que ou igual a ≥ igual a = menor do que < maior do que > Significado Operador em Linguagem Algorítmica
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 6
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
Exemplo 1: Continuação....
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
Variáveis: Valor1, Valor2, Max : inteiras Início
1. [Ler os valores]
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`)
3. [Imprimir o maior valor]
Escreva (´Maior Valor =`, Max) 4. [Terminar]
Fim
Testes e Condições 8
7.1
7.1
Diagrama de blocos
Diagrama de blocos
-
-
Fluxograma
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
S
S
í
í
mbolo
mbolo
Descri
Descri
ç
ç
ão
ão
Inicio/Fim Delimita o início ou o final das instruções.
Leitura de dados (através do teclado, pex).
Leitura
Avaliação de uma condição.
Cond
Apresentação de resultados.
Resultados
Operacoes Atribuição ou operação de processamento.
Fluxo de execução.
Conexão entre partes do algoritmo.
Testes e Condições 10
Suponha duas variáveis
numéricas, A e B, com
valores diferentes, e
deseja-se imprimir a
maior delas.
Problema Maior
Variaveis A, B; Inicio 1. Ler(A,B); 2. Se (A > B) entao imprimir A; Senao imprimir B; FimAlgoritmo Maior
V
Inicio
Ler A,B;
Se A>B
Escreva(B); Escreva(A);Final
F
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)
Em algumas aplicações, uma das alternativas de uma
estrutura Se_Então_Senão pode envolver outras decisões
7.2 Seleção de Ações Alternativas :
Ses Encaixados
7.2 Seleção de Ações Alternativas : Ses Encaixados
Testes e Condições 12
2. [Determinar o maior valor, comparando pares] Se A > B
Então Se A > C
então Max A ( A > B,A > C )
senão Max C ( C > A > B ) Senão Se B > C
então Max B ( B > A, B > C )
senão Max C ( C > B > A )
3. [Imprimir o maior valor]
Escreva (´Maior valor =`, Max) 4. [Terminar] Fim Exemplo 3: Continuação.... Se A > B Se A > C F V V V A; B; Se B > C F C; C; F Inicio Ler A,B,C; Escreva(Max); Final
Ex1: Se C1
então Se C2
então S1
senão S2
Em que condições S2 é executado?
Cuidado com a paragrafação (indentação)
onde: C1 e C2 significam
condições e S1 e S2,
comandos
Isso não fica claro.
Testes e Condições 14
Ex2:
Se C1
Se C1
então Se
C2
então
Se
C2
então
S1
então S1
senão
S2
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.
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
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:
10 <= 10 horas 20 > 10 mas <= 20 horas 30 > 20 mas <= 30 horas 40 > 30 mas <= 40 horas 50 > 40 horas Prêmio (R$)
Extra – 2/3 * Faltas 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 16
Algoritmo Bônus
Variáveis: Extras, Faltas, Pagamentos : reais Nome : cadeia
Início
1. [Ler informações de um funcionário] Leia (Nome, Extras, Faltas)
2. [Calcular o prêmio]
Se Extras – (2/3.0) * Faltas > 40 Então Pagamento 50
Senão Se Extras – (2/3.0) * Faltas >30 Então Pagamento 40
Senão Se Extras – (2/3.0) * Faltas >20 Então Pagamento 30
Senão Se Extras – (2/3.0)*Faltas>10 Então Pagamento 20
Senão Pagamento 10 3. [Imprimir resultados]
Escreva ( ´Prêmio para`, Nome,`=R$`, Pagamento) Fim Exemplo 4: continuação Se A > 40 Se A > 30 Se A > 20 Se A > 10 V F F F V V F V P50; P40; P30; P20; P10;
Podemos melhorar este algorítmo, calculando o valor do teste (Extra – (2/3.0) * Faltas) somente uma vez. Para isto vamosintroduzir 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 Exemplo 4: continuação
Testes e Condições 18
Comando
if
# Sintaxe:
if (
expressão é verdadeira
)
execute comando ou bloco de comandos
# Exemplo:
Falso = 0
Verdadeiro 0
if (contador > 9)
contador = 0;
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:
# Exemplo:
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.
if (contador >9) {
contador = 0; soma = 32
}
Aqui tem duas ações sendo feitas dentro da condição verdadeira
Chave marcando o fim da condição verdadeira Chave marcando o início da condição verdadeira
Testes e Condições 20 Fazer um programa em C que leia um número e impri-ma uimpri-ma mensa-gem dizendo se ele é maior, menor ou igual a 10. #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"); } Observe a chave { marcando o início do if
Exemplo 5
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
)
execute comando1 ou bloco1 de comandos
else
execute comando2 ou bloco2 de comandos
Falso = 0
Verdadeiro 0
7.4 Seleção de Ações Alternativas: O Comando
else
Testes e Condições 22 #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"); }
Refazer o programa
em C do exemplo 5
anterior, utilizando
o comando
else
Exemplo 6
Exemplo 6
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) /* if1 */ if (cond2) /* if2 */ comando if2 ; else /* else2 */ comando else2 ; else /* else1 */ if (cond3) /* if3 */ if (cond4) /* if4 */ comando if4 ; else /* else4 */ comando else4 ; else /* else3 */ comando else3 ;24
7.6- Exercícios resolvidos - Comando
If
If
-
-
else
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ção do Exercício 1
// 3. [imprimir resultados]
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 26
Exercício 2: Colocar o Exemplo 3 em Linguagem C
#include <stdlib.h> #include <stdio.h> main( ) {// declarar variáveis float A, B, C, max; //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 )
printf( "\nO maior valor eh o C\n" ); }
}
continua na próxima páginaExemplo 3 : Faça um programa que leia três números A, B e C e imprima o valor do maior.Assumir valores distintos e reais.
Continuação do Exercício 2 else
{ 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 28
#include <stdlib.h>
#include <stdio.h>
main ( )
{
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; }
}
else { maior = c; meio = a; menor = b; }
continua na próxima página Exercício 3: Refazer o programa doExercício 2 para imprimir os 3 números na ordem crescente.
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
Continuação do Exercício 3
Testes e Condições 30
7.7- Exercícios para Casa - Comando
If
If
-
-
else
else
1) Colocar em Linguagem C os algoritmos dos exemplos 2, e 4.
2) 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.
3) 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%.
4) 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
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 32
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".
55
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"
);
continua na próximapágina
Ex casa 1: Colocar o exemplo 2 em C
Testes e Condições 34
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"
);
}
#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"); }
Testes e Condições 36
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.
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:
!
38 Tempo Total (anos) Tempo de Desenvolvimento (anos) Tempo de Processamento (anos) 0 8 8 1 4 5 Início 0º. ano 1º. ano 2 2 4 2º. ano Final 8º. ano 5º. ano 4º. ano 3 1 4 3º. ano 4º. ano 4 0,5 4,5 4º. ano 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.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.
t
a
p
t
y
)
/
1
(
No caso anterior, os valores eram:
p = 8 e a = 50% = 0.5.
t
t
y
2
8
A fórmula para o caso geral
será dada por:
Considerando-se t
variável, a
e p
fixos, para encontrar o menor
Alternativa: Vale
a pena esperar se
Testes e Condições 40 Tempo Total (anos) Tempo de Desenvolvimento (anos) Tempo de Processamento (anos) 0 8 8 1 4 5 Início 0º. ano 1º. ano 2 2 4 2º. ano Final 8º. ano 5º. ano 4º. ano 3 1 4 3º. ano 4º. ano 4 0,5 4,5 4º. ano 4º. ano
No caso anterior: 8/(1/0.5) = 4 > 1
// 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”);
Código C
Algoritmo: Inovação variáveis: r,p,a: real; InicioEscreva(“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
Exemplo 7
Testes e Condições 42
Unesp-Campus de Guaratinguetá
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
Prof. Galeno Sena