1
Unesp – Campus de Guaratinguetá
Curso de Programação Computadores
Profa. Cassilda Ribeiro
5- A Lógica da Programação
Comandos IfComandos If--elseelse
2
5. A Lógica da programação
� Neste tópico começaremos a ver em detalhes, a lógica que está por traz dos programas computacionais. Para tanto vamos, ao mesmo tempo, aprender a fazer algoritmos e a colocá-los em linguagem C.
Exemplo 1: Dados os comprimentos dos lados de um triângulo (nas variáveis LADO1 e LADO2), fazer um algoritmo para determinar e imprimir o comprimento do terceiro lado (HIPOTENUSA). Suponha que todas as variáveis sejam inteiras.
5.1 Introdução
lado1
lado2
hipotenusa ?
H = (L12+L2
2)1/2
3
Algoritmo: Pitágorasvariáveis LADO1, LADO2, Q1, Q2: inteiros.HIPOTENUSA:real;Inicio1. [Ler dados conhecidos]
Leia (LADO1, LADO2);2. [Calcular os quadrados dos lados conhecidos]
Q1 � LADO1 ↑ 2;Q2 � LADO2 ↑ 2;
3. [Calcular o comprimento do terceiro lado]HIPOTENUSA� SQRT (Q1 + Q2);
4. [Sair resultado]Escreva� (´Lados =`, LADO1, LADO2, HIPOTENUSA);
Fim
Declarações
Instruções
5.1 Introdução
4
Algoritmo: Pitágoras
Declarar variáveis;
InicioLeia (L1, L2);
Q1 � L1 ↑ 2;Q2 � L2 ↑ 2; H� SQRT (Q1 + Q2);
Escreva�(L1,L2,H);Fim
Algoritmo
5.1 Introdução
Código C// Dados os 2 catetos de um triângulo,
//este programa calcula a hipotenusa!
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
main()
{ //Inicio
float L1, L2, H, Q1,Q2;
printf(“Forneça L1 e L2:”);
scanf(“%f%f”,&L1,&L2);
Q1=pow(L1,2);
Q2=pow(L2,2);
H = sqrt(Q1 + Q2);
printf(“L1=%f, L2=%f, H=%f \n”,L1,L2,H);
system(“pause”);
}//Fim
5
Para se descobrir isto, deve-se rastrear o algoritmo, isto é, executá-lo manualmente, com dados numéricos, utilizando lápis e papel para registrar os valores tomados pelas variáveis a cada passo.
5.2. Rastreando um Algoritmo
O exemplo 2 a seguir ilustra o rastreamento do algoritmo do exemplo 1.
L1=3L2=4
Algoritmo H=5
4
5.2. Rastreando um Algoritmo
�Depois de elaborado um algoritmo, como saber se ele faz o que se supõe que faça?
6
Algoritmo: Pitágoras
Declarar variáveis;
InicioLeia (L1, L2);
Q1 � L1 ↑ 2;Q2 � L2 ↑ 2; H� SQRT (Q1 + Q2);
Escreva�(L1,L2,H);Fim
Algoritmo
Q2
?
Passo L1 L2 Q1 H Saída
3 4 9 ? ?1
3 4 9 16 ? ?2
5.2. Rastreando um Algoritmo
Suponha que conheçamos os dois catetos de um triânguloretângulos cujas medidas são 3cm e 4cm. Então os dados de entrada são 3 e 4.
Exemplo 2: Rastrear Pitágoras
1
3 4 9 16 5 ?3
3 4 9 16 5 3,4,54
23
4
7
5.2. Rastreando um Algoritmo
Fazer um algorítmo que leiaquatro notas (NOTA1, NOTA2, NOTA3 e NOTA4 ) e calcula a nota média,armazena o resultado navariável MEDIA. Oresultado final deve ser
impresso com uma mensagem explicativa. Toda
as variáveis são reais.
Exemplo 3: Calcular Média
Algoritmo Notas
Variáveis N1, N2, N3, N4, MEDIA;
Inicio
1. [Ler as notas individuais]
Escreva(“digite as 4 notas”)
Leia ( N1, N2, N3, N4 );
2. [Calcular a nota média]
MEDIA �( N1 + N2 + N3 + N4 ) / 4.0;
3. [Sair resultados]
Escreva (´Nota Final =`, MEDIA);
Fim
Algoritmo
Aqui está sendo dada uma ordem para que o computador leia osdados necessários para calcular a média.
8
Fazer um algorítmo que leiaquatro notas (NOTA1, NOTA2, NOTA3 e NOTA4 ) e calcula a nota média,armazena o resultado navariável MEDIA. Oresultado final deve ser
impresso com uma mensagem explicativa. Toda
as variáveis são reais.
Exemplo 3: Calcular MédiaAlgoritmo Notas
Variáveis N1, N2, N3, N4, MEDIA;
Inicio
1. [Ler as notas individuais]
Escreva(“digite as 4 notas”)
Leia ( N1, N2, N3, N4 );
2. [Calcular a nota média]
MEDIA �( N1 + N2 + N3 + N4 ) / 4.0;
3. [Sair resultados]
Escreva (´Nota Final =`, MEDIA);
Fim
Algoritmo
Aqui está sendo dada uma ordem para que o computador escreva na tela o valor da média que ele calculou.
5.2. Rastreando um Algoritmo
9
Exemplo 3: Código C
include<stdlib.h>
include<stdio.h>
main()
{
float n1, n2, n3, n4,media;
printf(“Forneça as notas n1, n2, n3 e n4:”);
scanf(“%f%f%f%f”,&n1,&n2,&n3,&n4);
media = (n1 + n2 + n3 + n2)/4.0;
printf(“ Nota Final = %f \n”,media);
system(“pause”);
}
Passo N1 N2 N3 N4 M Saída
6.0 6.5 8.0 9.5 ? ?1
6.0 6.5 8.0 9.5 7.5 ?2
6.0 6.5 8.0 9.5 7.5 7.53
1
2
3
5.2. Rastreando um Algoritmo
10
Uma outra forma de escrever em Linguagem C o programa associado ao algoritmo que resolve o Exemplo 3 é:
/* -------------------------------------------------** Programa do exemplo 3- Tópico 5 * * Cálculo da média final entre 4 notas **--------------------------------------------------*/#include <stdio.h>
#include <stdlib.h>
main(){
float N1, N2, N3, N4, MEDIA;printf("DIGITE A NOTA1 ");scanf("%f",&N1);
Aqui está sendo dada uma ordem para que o computador escreva a frase “DIGITE A NOTA1”
Aqui está sendo dadauma ordem para que o computador guarde namemória a NOTA1que foi digitada
5.3. Trabalhando com a Linguagem C
continua na pg. seguinte
11
printf("NOTA1=%f\n",NOTA1);
printf("\nDIGITE A NOTA2 ");
scanf("%f",&N2);
printf("NOTA2=%f\n",NOTA2);
printf("\nDIGITE A NOTA3 ");
scanf("%f",&N3);
printf("NOTA3=%f\n“ ,NOTA3);
printf("\nDIGITE A NOTA4 ");
scanf("%f",&N4);
printf("NOTA4=%f\n",NOTA4);
MEDIA = (N1+N2+N3+N4)/4.0;
printf("\n ");
printf("NOTA FINAL = %f\n", MEDIA);
system("pause");
}
Aqui está sendo dada uma ordem para que o computador escreva a frase “NOTA1=”, seguido do valor da variável que está armazenado na memória.
Aqui está sendo calculado o valor da MEDIA
Aqui está sendo dada uma ordem para que o computador escreva a frase “NOTA FINAL=”, seguido do valor da MEDIA que foi calculada anteriormente.
5.3. Trabalhando com a Linguagem C
12
Ao se executar o programa do exemplo 3, aparece a seguinte tela:
5.3. Trabalhando com a Linguagem C
13
Exemplo 4: Fazer um algoritmo que leia um valor em dólar e o converta para real.
O Exemplo 4 em
Linguagem C torna-se:
Algoritmo ConversãoVariáveis: Qdolar, Qreal,taxa: realInicio
1.[Ler a taxa e quantidade Qdolar]
Leia (taxa, Qdolar)
2. [Converter dolar para real]
Qreal � taxa * Qdolar.
3. [Sair resultados]
Escreva (Qdolar“dolar =Qreal reais)
Fim
5.3. Trabalhando com a Linguagem C
14
/*====================================* Este eh o programa do exemplo 4- tópico 5 **====================================*/#include <stdio.h>#include <stdlib.h>main(){ float taxa, Qdolar, Qreal;//ler dadosprintf("digite o valor da taxa em reais\n");scanf("%f",&taxa);printf("digite a quantidade de dolares que deseja trocar\n"); scanf("%f",&Qdolar);//Converter dolar para real
Qreal = taxa * Qdolar;// Sair resultados
printf ("%.2f dolares = %.2f reais\n",Qdolar,Qreal);system("pause");
}//Fim
Ordena ao computador que escreva na tela a frase em vermelho
Ordena ao computador que leia e armazene na memória o número digitado pelo usuário
5.3. Trabalhando com a Linguagem C
15
Algoritmo Converte_ChuvaVariáveis: POL, MILIM: real.Inicio1. [Ler dados conhecidos]
Escreva (“ Digite o valor da chuva em polegadas”)Leia ( POL )
2. [Converter polegadas em milímetros]MILIM � 25.4 * POL
3. [Sair resultado]Escreva (´Quantidade de chuva em mm =`,MILIMETROS)
Fim
Exemplo 5: Fazer um algoritmo que leia uma quantidade de chuvas em polegadas e converta para milímetros. Todas as variáveis são reais. Todas as variáveis em questão são reais.
Colocando o Exemplo 5em Linguagem C
5.3. Trabalhando com a Linguagem C
16
Programa do Exemplo 5
/*======================================* Este é o programa do exemplo 5 - tópico 5 **======================================*/# include <stdio.h># include <stdlib.h>main(){float POL,MILIM;printf("Digite o valor da chuva em polegadas=");scanf("%f",&POL);printf("\n ");printf("Chuva em Polegadas = %f\n", POL);MILIM = 25.4 * POL;printf ("\n");printf("Chuva em Milímetros = %f\n", MILIM);printf("\n ");system("pause");}
5.3. Trabalhando com a Linguagem C
17
Programa do Exemplo 5 : Continuação
Ao se executar o programa do exemplo 5, aparece a seguinte tela:
5.3. Trabalhando com a Linguagem C
18
Algoritmo LanchoneteVariáveis: HAM , CHE , C1, FRITAS, REFRI, MILK: inteiro
CONTA, C1, C2, C3, C4, C5, CUSTO1 CUSTO2 CUSTO3 CUSTO4, CUSTO5 : real.
inicio1.[Ler dados de entrada]
Leia ( HAM , C1 )
Leia ( CHE , C2 )
Leia (FRITAS , C3 )
Leia ( REFRI , C4 )
Leia ( MILK , C5 )
Exemplo 6: Fazer um algoritmo que leia uma quantidade de itens comprados ( HAM, CHE, FRITAS, REFRI, MILK ), bem como seus custos ( C1, C2, C3, C4, C5 ) e calcule a conta final. As variáveis relativas a itens comprados são inteiras e as variáveis relativas a custo são reais.
: Algoritmo do Exemplo 6 5.3. Trabalhando com a Linguagem C
19
2. [Calcular o custo total de cada item]
CUSTO1 � HAM * C1
CUSTO2 � CHE * C2
CUSTO3 � FRITAS * C3
CUSTO4 � REFRI * C4
CUSTO5 � MILK * C5
3. [Calcular a conta final]
CONTA � CUSTO1 + CUSTO2 + CUSTO3 + CUSTO4 + CUSTO5
4. [Impressão de resultados]
Escreva (´Hambúrguer (R$´,C1`)`,CUSTO1)
Escreva (´Chesburguer (R$´,C2`)`,CUSTO2)
Escreva (´Batatas fritas (R$´,C3`)`,CUSTO3)
Escreva (´Refrigerantes (R$´,C4`)`,CUSTO4)
Escreva (´Milkshake (R$´,C5`)`,CUSTO5)
Escreva (´Total`,CONTA)
Saída
Algoritmo do Exemplo 6
Colocando o Exemplo 6em Linguagem C
5.3. Trabalhando com a Linguagem C :
20
Programa do Exemplo 6
/* ------------------------------------* Programa do exemplo 6 - Tópico 5 * * Cálculo da Conta de uma Lanchonete **-------------------------------------*/#include <stdio.h>
#include <stdlib.h>
main()
{
float C1, C2, C3, C4,C5, CONTA; //Declara variáveis
float CUSTO1, CUSTO2, CUSTO3, CUSTO4,CUSTO5;
int HAM, CHE, FRITAS, REFRI, MILK;
/*Ler dados de entrada*/
printf("DIGITE A quantidade de hamburgueres\n");
printf("consumida e o seu custo unitario ");
scanf("%d%f",&HAM,&C1);
printf("\n\n");
5.3. Trabalhando com a Linguagem C :
21
Programa do Exemplo 6 : Continuação
printf("DIGITE A quantidade de Chesburgueres\n");
printf("consumida e o seu custo unitario ");
scanf("%d%f",&CHE,&C2);
printf("\n\n");
printf("DIGITE A quantidade de Fritas\n");
printf("consumida e o seu custo unitario ");
scanf("%d%f",&FRITAS,&C3);
printf("\n\n");
printf("DIGITE A quantidade de Refrigerantes\n");
printf("consumida e o seu custo unitario ");
scanf("%d%f",&REFRI,&C4);
printf("\n\n");
22
Programa do Exemplo 6 : Continuação
printf("DIGITE A quantidade de Milkshake\n");
printf("consumida e o seu custo unitario ");
scanf("%d%f",&MILK,&C5);
/*Calcular o custo de cada item*/
CUSTO1 = HAM * C1;
CUSTO2 = CHE * C2;
CUSTO3 = FRITAS * C3;
CUSTO4 = REFRI * C4;
CUSTO5 = MILK * C5;
/*Calcular a conta final*/
CONTA = CUSTO1 + CUSTO2 + CUSTO3 + CUSTO4 + CUSTO5;
23
Programa do Exemplo 6 : Continuação
/*Impressão de resultados*/
printf("===================================\n\n");
printf ("Hamburguer (%f R$) = %f\n",C1,CUSTO1);
printf ("Chesburguer (%f R$) = %f\n",C2,CUSTO2);
printf ("Batatas fritas(%f R$) = %f\n",C3,CUSTO3);
printf ("Refrigerantes (%f R$) = %f\n",C4,CUSTO4);
printf ("Milkshake (%f R$) = %f\n",C5,CUSTO5);
printf ("==================Total = %f\n\n",CONTA);
system("pause");
}
Ao se executar o programa do exemplo 6, aparece a seguinte tela:
24
Programa do Exemplo 6 : Continuação
25
Suponha que temos duas variáveis numéricas, A e B, cujos valores são diferentes, e desejamos imprimir amaior delas.
5.4 Seleção de Ações Alternativas
Neste caso utilizamos uma construção chamadaSe_Então_Senão
SIM NÃOA > B ?
escreva (A) escreva (B)
26
Em Linguagem Algorítmica a construção Se_Então_Senãotem 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 )
5.4 Seleção de Ações Alternativas
27
� 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
5.4 Seleção de Ações Alternativas
28
Exemplo 7: 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 : reaisNome : 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
5.4 Seleção de Ações Alternativas
29
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
5.4 Seleção de Ações Alternativas
Exemplo 7: Continuação....
30
5.4 Seleção de Ações Alternativas
Exemplo 8: Faça um algoritmo que leia dois valores, determine o maior deles e o imprima com uma mensagem de identificação. Assumir quetodas 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
31
5.4.1 5.4.1 Diagrama de blocos Diagrama de blocos -- FluxogramaFluxograma
5.4 Seleção de Ações Alternativas
� 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 aconfecção de um fluxograma. 32
SímboloSímbolo DescriçãoDescriçã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.
5.4.1 Diagrama de blocos - Fluxograma
33
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;
Fim
Algoritmo Maior V
Inicio
Ler A,B;
Se A>B
Escreva(B);Escreva(A);
Final
F
5.4.1 Diagrama de blocos - Fluxograma
34
Exemplo 9 : 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
5.4.2 Seleção de Ações Alternativas : Ses Encaixados
5.4.2 Seleção de Ações Alternativas : Ses Encaixados
35
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 9: Continuação....
Se A > B
Se A > C
FV
V V
A; B;
Se B > C
F
C;C;
F
Inicio
Ler A,B,C;
Escreva(Max);
Final
5.4.2 Seleção de Ações Alternativas : Ses Encaixados
36
Ex1: Se C1então Se C2então S1senão S2
Em que condições S2 é executado?
Cuidado com a paragrafação
onde: C1 e C2 significam condições e S1 e S2, comandos
Isso não fica claro.
5.4.2 Seleção de Ações Alternativas : Ses Encaixados
37
Ex2:Se C1 Se C1então Se C2 então Se C2
então S1 então S1senão S2 senão S2
5.4.2 Seleção de Ações Alternativas : Ses Encaixados
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
38
5.4.2 Seleção de Ações Alternativas : Ses Encaixados
Exemplo 10: 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.
39
Algoritmo Bônus
Variáveis: Extras, Faltas, Pagamentos : reaisNome : 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 > 40Então Pagamento � 50Senão Se Extras – (2/3.0) * Faltas >30
Então Pagamento � 40Senão Se Extras – (2/3.0) * Faltas >20
Então Pagamento � 30Senão Se Extras – (2/3.0)*Faltas>10
Então Pagamento � 20Senão Pagamento � 10
3. [Imprimir resultados]Escreva ( ´Prêmio para`, Nome,`=R$`, Pagamento)Fim
Exemplo 10: continuação
Se A > 40
Se A > 30
Se A > 20
Se A > 10
V
F
F
F
V
V
F
V
P←←←←50;
P←←←←40;
P←←←←30;
P←←←←20;
P←←←←10; 40
� 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
Senão Pagamento �10
Exemplo 10: continuação
41
Comando if
# Sintaxe:if (expressão é verdadeira)
execute comando ou bloco de comandos
# Exemplo:
Falso = 0Verdadeiro ≠ 0
if (contador > 9)
contador = 0;
5.4.3 Seleção de Ações Alternativas: O Comando if
Em linguagem C a construção Se – Então - Senãoé feita através do:
42
# Exemplo:
OBS: Quando dentro do comando if, forem executados mais de um comando (bloco de comando) é necessário colocar chaves, {}, para marcar o inicio 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 inicio da condição verdadeira
5.4.3 Seleção de Ações Alternativas: O Comando if
43
Fazer um programa em C que leia um número e impri-ma uma mensa-gem dizendo se ele é maior que 10, menor ou igual a 10.
#include <stdio.h>#include <stdlib.h>main () { /* Inicio 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) { /* Inicio 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 inicio do if
Exemplo 11
5.4.3 Seleção de Ações Alternativas: O Comando if
44
5.4.4 Seleção de Ações Alternativas: O Comando elseelse
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 = 0Verdadeiro ≠ 0
45
#include <stdio.h>#include <stdlib.h>main ( ) {int num;printf ("Digite um numero: ");scanf ("%d", &num);if (num == 10) {//inicio então
printf ("\n\n Voce acertou!\n");printf ("O numero e igual a 10.\n");
}//fim entãoelse {//inicio senão
printf ("\n\n Voce errou!\n");printf ("O numero eh diferente de 10.\\nn");
}//fim senãosystem("pause");
}
Refazer o programa
em C do exemplo 11
anterior, utilizando
o comando else
Exemplo 12Exemplo 12
5.4.4 Seleção de Ações Alternativas: O Comando elseelse
46
5.4.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 ;
47
5.4.6- Exercícios resolvidos - Comando IfIf-- elseelse
Exercício 1: Colocar o Exemplo 7 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]
media= 0.2*lab + 0.3 * exame1 + 0.5*exame_final; continua na página seguinte 48
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");
}// fim programa
5.4.6- Exercícios resolvidos - Comando IfIf-- elseelse
49
Exercício 2: Colocar o Exemplo 9 em Linguagem C
#include <stdlib.h>#include <stdio.h>main( )
{// declarar variáveisfloat 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 página 50
Exemplo 9 : Faça um programa que leia três números A, B e C eimprima o valor do maior.Assumir valores distintos e reais.
5.4.6- Exercícios resolvidos - Comando IfIf-- elseelse
50
Continuação do Exercício 2else
{ 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
5.4.6- Exercícios resolvidos - Comando IfIf-- elseelse
51
#include <stdlib.h>#include <stdio.h>main ( ){
int a, b, c, maior, meio, menor ; // declaração de variáveis.// Leitura de dadosprintf(" 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 do Exercício 2 para imprimir os 3 números na ordem crescente.
5.4.6- Exercícios resolvidos - Comando IfIf-- elseelse
52
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
5.4.6- Exercícios resolvidos - Comando IfIf-- elseelse
53
5.4.7- Exercícios para Casa - Comando IfIf-- elseelse
1) Colocar em Linguagem C os algoritmos dos exemplos 8, e 10.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 maiore 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 é formadoSe A2 = B2 + C2 um triangulo retangulo é formado,Se A2 > B2 + C2 um triangulo obtusangulo é formadoSe A2 < B2 + C2 um triangulo acutangulo é formado
5354
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.
54
5.4.7- Exercícios para Casa - Comando IfIf-- elseelse
55
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 dizendoque 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
5.4.7- Exercícios para Casa - Comando IfIf-- elseelse
56
Resolução Exercícios para Casa (1)
#include <stdlib.h>
#include <stdio.h>
// Programa: Mostre o maior de 2 numeros
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óxima
página
Ex casa 1: Colocar o exemplo 8 em C
57
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");
}
Resolução Exercício para Casa 1
58
#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");
}
Resolução Exercício para Casa (8)
59
5.4.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 estivessemprocessados em 1900.
Herman Hollerith (estatístico):
Foi encarregado pela Agência Estatísticados EUA de desenvolver uma técnica para acelerar o processamento dos dadosdo censo, levando apenas 3 anos.
60
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 elevará 8 anos e que não pode ser movida da máquina uma veziniciada. De acordo com a Lei de Moore deve-se esperar amelhoria 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 dadaa seguir:
!
5.4.8 Aplicação: O paradoxo da inovação
61
Tempo Total
(anos)
Tempo deDesenvolvimento
(anos)
Tempo deProcessamento
(anos)
0 8 8
1 4 5
Início
0º. ano
1º. ano
2 2 42º. ano
Final
8º. ano
5º. ano
4º. ano
3 1 43º. ano 4º. ano
4 0,5 4,54º. 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.
5.4.8 Aplicação: O paradoxo da inovação
62
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.
ta
pty
)/1(+=
No caso anterior, os valores eram:
p = 8 e a = 50% = 0.5.t
ty2
8+=
A fórmula para o caso geralserá dada por:
Considerando-se t variável, a e pfixos, para encontrar o menor tempo y, pode-se fazer dy/dt = 0.
Alternativa: Valea pena esperar se
p/(1/a) > 1
5.4.8 Aplicação: O paradoxo da inovação
63
Tempo Total
(anos)
Tempo deDesenvolvimento
(anos)
Tempo deProcessamento
(anos)
0 8 8
1 4 5
Início
0º. ano
1º. ano
2 2 42º. ano
Final
8º. ano
5º. ano
4º. ano
3 1 43º. ano 4º. ano
4 0,5 4,54º. ano 4º. ano
No caso anterior: 8/(1/0.5) = 4 > 1
5.4.8 Aplicação: O paradoxo da inovação
64
// 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çãovariá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 12
5.4.8 Aplicação: O paradoxo da inovação
65
Um problema simples: Ano Bissexto. Simples ?
Quantos dias demora a Terra para dar uma volta completa no Sol ?
5.4.8 Aplicação: Ano Bissexto
66
Egito Antigo: 365 dias
Roma Antiga: 365,25 dias
4 anos = 1 dia intercalar
Calendário Alexandrino
Calendário Juliano
4 anos = 1 ano bissexto
Mas o ano solar dura: 365,242199 dias !
3300
1
400
1
100
1
4
1365 365,242199 −+−+≅
Ou seja:
5.4.8 Aplicação: Ano Bissexto
67
Ano Calendário Ano Solar
1º Ano
2º Ano
3º Ano
4º Ano
−+−+
3300
1
400
1
100
1
4
1365*2
3300
1
400
1
100
1
4
1365 −+−+
−+−+
3300
1
400
1
100
1
4
1365*3
365 dias
2*365 dias
−+−++
3300
1
400
1
100
1*4
4
4365*4
3*365 dias
4*365 dias
Mais um dia no ano !Ano Bissexto !
Mas e quanto aos demais termos ?
5.4.8 Aplicação: Ano Bissexto
68
Em 1582, Gregório XIII:
Calendário Gregoriano
Nova definição para ano bissexto
3300
1
400
1
100
1
4
1365 365,242199 −+−+≅
Cada 4 anos + 1 dia
Cada 100 anos - 1 dia
Cada 400 anos + 1 dia
5.4.8 Aplicação: Ano Bissexto
69
Algoritmo
OBSERVAÇÃO: Subtrair 1 dia do calendário a cada 3300 anos
Se resto(ano/100) é 0 entãoSe (ano/400) = 0
então bissexto; (b)Senão não_bissexto; (c)
SenãoSe (ano/4) = 0
então bissexto; (a)Senão não_bissexto; (c)
(a) Não divisível por 100 e divisível por 4.
(b) Divisível por 100 e 400.
(c) Os demais anos não são Bissextos.
Exemplo 16- Ano Bissexto
Em 1582, Gregório XIII:
Calendário Gregoriano
Nova definição para ano bissexto
5.4.8 Aplicação: Ano Bissexto
70
//Exemplo 13: Programa que calcula quando um ano é Bissexto
# include <stdio.h># include <stdlib.h>main ( ){ int ano, resto;
printf("Forneca o ano:"); scanf("%d",&ano);if (ano%100 == 0)
if (ano%400 == 0)printf("O Ano %d eh bissexto \n\n", ano);
elseprintf(" O Ano %d Nao eh bissexto \n\n", ano);
else
if (ano%4 == 0)
printf("O Ano %d eh bissexto \n\n", ano );
else
printf(" O Ano %d nao eh bissexto \n", ano);
system("pause");
}
5.4.8 Aplicação: Ano Bissexto- Programa em C
71
a) Exemplo de Conjunção :
UM < 2 e UM < 0
verdadeiro falso � falso
5.4.9 Seleção de Ações Alternativas: Condições Compostas
Utilização de Condições CompostasUtilização de Condições Compostas
� Alguns problemas ficam mais simples se utilizarmos condições compostas ao invés de relações simples.
� As condições compostas podem ser do tipo “e” conjunção, “ou” disjunção e “não” negação.
Seja a variável UM = 1. As expressões a seguir resultam em:
72
b) Exemplo de disjunção :
UM < 2 ou UM < 0
verdadeiro falso � verdadeiro
c) Exemplo de negação :
Não UM < 2
falso
OBS: As condições compostas podem ser utilizadas tanto nos comandos “Se” como nos “repita condicionais”.
5.4.9 Seleção de Ações Alternativas: Condições Compostas
73
1) Suponha que I e J sejam variáveis inteiras com valores 6
e 12, respectivamente. Quais das seguintes condições
são verdadeiras?
a) 2 * 1 ≤ J
b) 2 * I – 1 < J
c) I > 0 e I ≤ 10
d) I > 25 ou (I < 8 e J > 10)
e) I < 4 ou J > 5
f) Não I > 6
�Verdadeiro
�Verdadeiro
�Verdadeiro
�Verdadeiro
�Verdadeiro
�Verdadeiro
5.4.9 Seleção de Ações Alternativas: Condições Compostas
74
2) Assuma que A, B, C e D são variáveis e S1, S2 , S3 e S4 são
comandos ou alternativas.
a) Usando condições compostas reescreva as instruções
abaixo:
Se A > B
Então Se B ≤ C
então Se C ≠ D
então S1
senão S2
senão S3
Senão S4
5.4.9 Seleção de Ações Alternativas: Condições Compostas
75
Solução 1:
Se (A > B e B ≤ C)
Então Se C ≠ D
então S1
senão S2
Senão Se (A > B e B > C)
Então S3
Se (A ≤ B)
Então S4
Solução 2:
Se (A > B e B ≤ C ) e (C ≠ D)
então S1
Se (A > B e B ≤ C ) e (C = D)
então S2
Se (A > B) e (B > C)
então S3
Se (A ≤ B) então S4
5.4.9 Seleção de Ações Alternativas: Condições Compostas
76
b) Reescrever a instrução abaixo, como uma estrutura “Se”
utilizando somente condições simples.
Se (A < B e C ≠ D) e (B > D ou B = D)
então S1
Solução :
Se A < B
Então Se C ≠ D
então Se B ≥ D
então S1
5.4.9 Seleção de Ações Alternativas: Condições Compostas
77
Operadores Lógicos em COperadores Lógicos em C
Operador Significado
&& Conjunção lógica (“and”).
|| Disjunção lógica (“or”).
! Negação lógica (“not”).
A !A
Verdade Falso
Falso Verdade
Negação
A B
Falso Falso
Verdade Falso
Conjunção
Falso Verdade
Verdade Verdade
A&&B
Falso
Falso
Falso
Verdade
A B
Falso Falso
Verdade Falso
Conjunção
Falso Verdade
Verdade Verdade
A||B
Falso
Verdade
Verdade
Verdade
5.4.9 Seleção de Ações Alternativas: Condições Compostas
78
# include <stdio.h># include <stdlib.h>main ( ){
int ano, resto;printf("Forneca o ano:"); scanf("%d",&ano);if ((ano%100 == 0) && (ano%400 == 0))
printf("O Ano %d eh bissexto \n\n", ano);else { if ((ano%4 == 0) && (ano%100 != 0))
printf("O Ano %d eh bissexto \n\n", ano ); else
printf(" O Ano %d nao eh bissexto \n", ano); }system("pause");
}
Exemplo14: Refazer o programa do Ano Bissexto usando Condições Compostas
5.4.9 Seleção de Ações Alternativas: Condições Compostas
79
Exemplo15: Usando condições compostas, fazer um algoritmo em um
programa em C que leia três números, A, B e C e imprima o maior
deles. Assuma que os valores são diferentes.
Algorítmo Max_3
Variáveis A, B, C, Max : real
Início
1. [Ler dados]
Leia ( A, B, C )
2. [Determinar o maior valor]
Se (A > B e A > C) então Max � A
Se (B > A e B > C) então Max � B
Se (C > A e C > B) então Max � C
3. [Imprimir maior valor]
Escreva (´Maior valor =`, Max )
4. [Terminar]
Fim
5.4.9 Seleção de Ações Alternativas: Condições Compostas
80
#include <stdlib.h>#include <stdio.h>main()
{ //Inicio
float A, B, C, Max;
// 1. [Ler dados]
printf("Digite tres numero diferentes\n");
scanf("%f%f%f",&A,&B,&C );
//2. [Determinar o maior valor]
if (A > B && A > C) Max = A;
if (B > A && B > C) Max = B;
if (C > A && C > B) Max = C;
//3. [Imprimir maior valor]
printf("Maior valor =%3.1f\n\n", Max )
system("pause");
}
Programa em C
5.4.9 Seleção de Ações Alternativas: Condições Compostas
81
Exemplo16: Fazer um algoritmo e um programa em C, utilizando
condições compostas, que leia três números e imprima o maior e
menor deles. Assume-se que os valores são diferentes.
Algorítmo Max_Min_3
Variáveis A, B, C, Max, Min : real
Início
1. [Ler dados]
Leia ( A, B, C )
2. [Determinar o maior e menor valor]
Se (A > B e A > C) e (B < C) então Max � A
Min � B
Se (A > B e A > C) e (C < B) então Max � A
Min � C
Se (B > A e B > C) e (A > C) então Max � B
Min � C
Se (B > A e B > C) e (A < C) então Max � B
Min � A
Se (C > A e C > B) e (B > A) então Max � C
Min � A
Se (C > A e C > B) e (B < A) então Max � C
Min � B
3. [Imprimir o maior e o menor valor]
Escreva (´Maior valor =`, Max )
Escreva (´Menor valor =`, Min )
4. [Terminar]
Fim
5.4.9 Seleção de Ações Alternativas: Condições Compostas
82
#include <stdlib.h>
#include <stdio.h>
main()
{
float A,B, C,Max, Min;
//1. [Ler dados]
printf("Digite tres numeros diferentes\n" );
scanf("%f%f%f",&A,&B,&C);
//2. [Determinar o maior e menor valor]
if(A > B && A > C && B > C)
{ Max = A;
Min = C;}
if(A > B && A > C && B < C)
{ Max = A;
Min = B;}
if(B > A && B > C && A > C)
{ Max = B;
Min =C;} continua na próxima pg . . .
Programa em C
5.4.9 Seleção de Ações Alternativas: Condições Compostas
83
if(B > A && B > C && A < C) …continuação{Max= B;
Min = A;
}
if(C > A && C > B && B >A)
{ Max =C;
Min= A;
}
if (C > A && C > B && B < A)
{Max = C;
Min = B;
}
//3. [Imprimir o maior e o menor valor]
printf("Maior valor =%4.1f\n\n",Max);
printf("Menor valor =%4.1f\n\n", Min);
system( "PAUSE");
}
5.4.9 Seleção de Ações Alternativas: Condições Compostas
84
5.4.10 Seleção de Ações Alternativas: Comando SwitchSwitch
O Comando SwitchSwitch
� Quando for necessário escolher uma dentre várias opções, ao invés de aninhar construções do tipo if-else em diversos níveis, pode ser preferível utilizar o comando Switch. A sintaxe do switch é dada por:
switch (expressão){case (constante 1): intruções 1; break; case (constante 2): intruções 2; break; ...case (constante n): intruções n; break; default: instruções;
}
85
5.4.10 Seleção de Ações Alternativas: Comando SwitchSwitch
� A palavra expressão indica qualquer avaliação cujo resultado seja um valor numérico dos tipos char, int ou long.
� O switch compara o resultado da expressão com o valor de cada constante que segue a cada um dos case. Se o valor não for igual a nenhuma das constantes apresentadas pelos case, então, são executadas as instruções que seguem o default.
� A utilização do comando default é opcional.
� Cada case do switch só pode avaliar uma única constante do tipochar, int ou long
Observação importante: Após um comando case ser selecionado, se não existir o break, todos os cases subseqüentes e suas instruções serão executados. 86
Fazer um programa que leia um caractere ch indicando o estado civil e imprima uma mensagem de acordo com a correspondência:
Se (ch = C) Escreva(‘Casado’);Se (ch = S) Escreva(‘Solteiro’);Se (ch = D) Escreva(‘Divorciado’);Se (ch = V) Escreva(‘Viuvo’);Default Escreva(‘Estado Incorreto’);
Exemplo 17: Estado Civil#include <stdio.h>#include <stdlib.h>main ( ) {char ch;printf (“Qual estado civil: ");scanf ("%c", &ch);switch (ch) {case ‘C’: printf (“Casado \n”); break;case ‘S’: printf (“Solteiro \n”); break;case ‘D’: printf (“Divorcio \n”); break;case ‘V’: printf (“Viuvo \n”); break;default: printf(“Est. Inc.”); break;}//fim switch
system("pause");}
Programa: Estado Civil
Não esquecer o break !
5.4.10 Seleção de Ações Alternativas: Comando SwitchSwitch
87
#include <stdio.h>#include <stdlib.h>main ( ) {char ch;printf (“Qual estado civil: ");scanf ("%c", &ch);switch (ch) {case ‘C’: printf (“Casado \n”);case ‘S’: printf (“Solteiro \n”); case ‘D’: printf (“Divorcio \n”);case ‘V’: printf (“Viuvo \n”);default: printf(“Est. Inc.”); }//fim switch
system("pause");}
Programa: Estado Civil
Qual estado civil: CCasadoSolteiroDivorcioViuvoPressione uma tecla para continuar…
Resultado da Execução
!Sem o break; todos oscase abaixo do caseselecionado serão
executados.
5.4.10 Seleção de Ações Alternativas: Comando SwitchSwitch
88
5.4.10 Seleção de Ações Alternativas: Comando SwitchSwitch
OBS: o comando break interrompe a execução do switch, e continua a execução do programa na instrução seguinte ao switch
Ex. 1) Escreva um programa que pede para o usuário entrar um número correspondente a um dia da semana e que então apresente na tela o nome do dia, utilizando o comando switch.
89
5.4.11 Exercícios Seleção de Ações Alternativas
// programa exemplo 1 switch
#include <stdio.h>#include <stdlib.h>main ()
{ int dia;char ch;printf("\tDigite o dia da semana:\n ");
printf("\t1==> para segunda feira\n");
printf("\t2==> para terca feira\n");
printf("\t3==> para quarta feira\n");
printf("\t4==> para quinta feira\n");
printf("\t5==> para sexta feira\n");
printf("\t6==> para sabado\n");
printf("\t7==> para domingo\n");
scanf ("%d",&dia); 90
switch (dia) {case 1: printf (" O dia escolhido eh Segunda Feira\n");break;case 2: printf (" O dia escolhido eh Terca Feira\n");break; case 3: printf (" O dia escolhido eh Quarta Feira\n"); break;case 4: printf (" O dia escolhido eh Quinta Feira\n"); break;case 5: printf (" O dia escolhido eh Sexta Feira\n");break;case 6: printf (" O dia escolhido eh Sabado\n");break;case 7: printf (" O dia escolhido eh Domingo\n");break;default: printf(" Dia Inexistente\n"); }//fim switch
system("pause");}
Ex 1- Continuação
5.4.11 Exercícios Seleção de Ações Alternativas
91
Ex. 2) Dadas as seguintes informações de um funcionário: Nome, Numero funcional, idade, cargo e o seu salário bruto e considerando que:
a) O salário bruto teve um reajuste de 38%.b) O funcionário receberá uma gratificação de 20% do salário
bruto.c) O Salário liquido total é descontado em 15%Faça um programa para:•Imprimir Nome, Numero funcional, idade e cargo.•Imprimir o salário bruto.•Imprimir o salário líquido.
5.4.11 Exercícios sobre Seleção de Ações Alternativas
92
#include <stdlib.h>
#include <stdio.h>
main()
{ int num_func, idade;
float Sal_Bruto, Reajuste,Sal_liq,GRAT,Desconto;
char nome[30], cargo[30];
printf("digite o nome do funcionario\n");
gets(nome);
printf("digite o cargo do funcionario\n");
gets(cargo);
printf("digite o numero funcional\n");
scanf("%d",&num_func);
printf("digite o valor do salario bruto %s\n",nome);
scanf("%f",&Sal_Bruto);
Solução Ex. 2
5.4.11 Exercícios sobre Seleção de Ações Alternativas
93
5.4.11 Exercícios sobre Seleção de Ações Alternativas
Reajuste = Sal_Bruto*0.38;GRAT = Sal_Bruto * 0.20;Sal_Bruto = Sal_Bruto+GRAT+Reajuste;Desconto = Sal_Bruto*0.15;Sal_liq = Sal_Bruto - Desconto;
printf("\n\n");printf("Nome:%s cargo:%s No. Funcional:%d\n", nome, cargo,num_func);printf("===================================================\n"); printf("salario Bruto \t%.2f\n",Sal_Bruto);printf("Reajuste \t%.2f\n",Reajuste); printf("Gratificacao \t%.2f\n",GRAT); printf("Desconto \t%.2f\n",Desconto); printf("Salario Liquido \t%.2f\n",Sal_liq);printf("====================================================\n");system("PAUSE");}
Solução Ex. 2 - Continuação
94
5.4.11 Exercícios sobre Seleção de Ações Alternativas
95
3) O salário liquido de um professor da rede pública é calculado da seguinte maneira:
Os vencimentos recebidos são: Salário Base inicial (SBI), Gratificação de representação(GRAT), Qüinqüênio (QUIN) e Sexta parte (SEXT_P).
A gratificação de representação (GRAT) é paga na sua totalidade para quem está exercendo um cargo de chefia. Se a pessoa não está exercendo o cargo de chefia, mas já exerceu, ela recebe 20% do valor total da gratificação para cada dois ano exercido, assim se ela exerceu o cargo por 4 anos, ela recebe 20% do valortotal da gratificação.
A cada 5 anos a pessoa recebe 5% de aumenta relativo ao qüinqüênio (QUIN), assim quem está trabalhando a 17 anos recebe 15% de aumento relativo a 3 qüinqüênios.
Depois de 20 anos de serviço a pessoa recebe mais a sexta parte do salário, calculado do seguinte modo:
SEXT_P= (SBI+QUIN+GR)/6. 84
5.4.11 Exercícios sobre Seleção de Ações Alternativas
96
Os descontos efetuados são IAMSP, Previdência e Imposto de renda.
O desconto relativo ao IAMSP é de 2% e o da previdência é de 11%. Isto é feito sobre o total de vencimentos (SBT),onde: SBT=SBI+GRAT+SEXT_P+QUIN.
O desconto do IR é feito sobre o SBT-IAMSP-PREV-150.69* numero de dependentes., de acordo com a tabela abaixo:
692.7827.5Acima de 37432.19
505.6222.5De 2995,70 à 37432.19
280.9415.0De 2246.75 à 2995.70
112.437.5De 1499.15 à 2246.75
--Até 1499.15
Parcela a deduzir do imposto em R$Alíquota %Base de Cálculo em R$
5.4.11 Exercícios sobre Seleção de Ações Alternativas
97
Isto é, verificar em qual faixa o VALOR=(SBT-IAMSP-PREV-150.69* N_dep) se encaixa.
Por exemplo, se VALOR >= à 3743.19 reais, o imposto a ser pago será:
IR = (VALOR*0.275)-692.78.O salário liquido final será: SL=SBT-IAMSP-PREV
Fazer um programa em C que leia o nome do professor, seu cargo, seu salário base inicial, o número de seus dependentes, o tempo de serviço em anos, se está ou não exercendo cargo de chefia ou se já exerceu e por quanto tempo e a seguir calcule e imprima o seu salário bruto, cada um dos descontos efetuados, o total de descontos e por fim o salário liquido.
5.4.11 Exercícios sobre Seleção de Ações Alternativas
98
Para fazer esse programa é necessário começar a pensar em quais variáveis precisam ser criadas. São necessárias as seguintes variáveis:
SBI ⇒⇒⇒⇒ para armazenar o valor do salário inicialGRAT ⇒⇒⇒⇒ para armazenar o valor da gratificação relativo a cargo de
chefia.QUIN ⇒⇒⇒⇒ para armazenar o valor do acréscimo salarial relativo ao
tempo de serviçoSBT ⇒⇒⇒⇒ para armazenar o valor do salário bruto total. Lembre-se que
SBL=(SBI+GRAT+QUIN+SEXT_P)SL ⇒⇒⇒⇒ para armazenar o valor do salário LiquidoSEXT_P ⇒⇒⇒⇒ para armazenar o valor do acréscimo salarial relativo a
sexta parte por 20 anos de serviçoIAMSP ⇒⇒⇒⇒ para armazenar o desconto relativo ao iamsp que é de
2% de (SBI+GRAT)PREV ⇒⇒⇒⇒ para armazenar o desconto relativo a previdencia que é de
11% de (SBI+GRAT)
5.4.11 Exercícios sobre Seleção de Ações Alternativas
99
IR ⇒⇒⇒⇒ para armazenar o valor do imposto de renda a ser pago.SL ⇒⇒⇒⇒ para armazenar o valor do salário liquido que é obtido pelo
SBT-IAMSP-PREV-IR.
Todas essas variáveis devem ser do tipo float porque elas representam dinheiro.
Para se calcular o valor da gratificação GRAT será necessário criar as seguintes variáveis: chefe, nchefe, perc_grat. A variável chefevai ser lida e seu valor será zero se o funcionário não estáexercendo atualmente um cargo de chefia ou 1 caso contrário. Se a pessoa estiver exercendo o cargo de chefia, GRAT = 1046.1. Se a pessoa não está exercendo, mas já exerceu cargo de chefia, ela receberá 20% de 1046.1 R$, a cada 2 anos que esteve como chefe, e esta porcentagem é armazenada em perc_grat. Então essa porcentagem é calculada da seguinte maneira:
perc_grat= 20*(nchefe/2), onde nchefe é o numero de anos que a pessoa esteve como chefe.
5.4.11 Exercícios sobre Seleção de Ações Alternativas
100
Observe que nchefe é uma variável do tipo inteira que está sendo dividida pelo numero inteiro 2. O resultado dessa divisão é um numero inteiro. Assim, se a pessoa esteve como chefe por 3 anos, a divisão de nchefe/2 será 1, porque divisão de inteiro por inteiro resulta na parte inteira da divisão. Neste caso a variável perc_grat será:
perc_grat= 20*(nchefe/2) = 20*(3/2) = 20 E a gratificação será de GRAT=(1046.1*20)/100.0;
Para se calcular o valor do aumento relativo aos qüinqüênios (QUIN) énecessário calcular o numero de qüinqüênios, para tanto são necessárias as variáveis nquin, e Temp_serv, ambas do tipo inteiro.Temp_serv vai armazenar quantos anos de serviço tem o funcionário, e este valor deve ser lido, isto é o usuário vai fornecer via teclado este valor. Deste modo o numero de qüinqüênios seránquin = Temp_serv/5. Como Temp_serv é inteira e está sendo dividida por 5 inteiro, o valor armazenado em nquin será a parte inteira divisão. Assim, se Temp_serv=9, nquin = 1. Deste modo o valor
5.4.11 Exercícios sobre Seleção de Ações Alternativas
101
Do aumento relativo aos qüinqüênios é dado por: QUIN= (SBI+GRAT)*(Nquin*0.05);
Observe que antes de se calcular o valor do qüinqüênio foi calculado o valor da gratificação GRAT.
O calculo da Sexta Parte deve ser feito somente após o calculo do qüinqüênio, pois a sexta parte é calculada por:
Se o tempo de serviço for maior ou igual 20 anosSEXT_P=(SBI+GRAT+QUIN)/6.0..
Senão SEXT_P=0.0No calculo do imposto de Renda (IR), serão necessárias as variáveis
Valor, Alíquota, Parcela, todas do tipo float para armazenar respectivamente, o Valor para se calcular em qual faixa o funcionário se encontra e assim calcular a Alíquota a ser paga e a Parcela a se deduzir do imposto. Será necessário também a variável N-dep, do tipo int para armazenar o numero de dependentes do funcionário. Este numero deve ser lido. A variável valor será calculada por:
Valor = SBT-IAMSP-PREV-150.69*N_dep;
5.4.11 Exercícios sobre Seleção de Ações Alternativas
102
Observe que para se calcular a variável valor é necessário ter calculado antes as variáveis:
SBT= salário bruto total, IAMSP e PREV
O valor do salário liquido será : SL = SBT-IAMSP-PREV-IR;
A seguir é apresentado o programa, solicitado, bem como a execução de exemplo.
5.4.11 Exercícios sobre Seleção de Ações Alternativas
103
#include <stdlib.h>
#include <stdio.h>
main()
{ int N_dep, Nquin, Temp_serv,chefe, nchefe, perc_grat;
float SBI,SBT, Valor, QUIN, SEXT_P, IAMSP, PREV,IR,SL;
float GRAT, Aliquota, Parcela;
char nome[30], cargo[30];
printf("digite o nome do funcionario\n");
gets(nome);
printf("digite o cargo do funcionario\n");
gets(cargo);
printf("digite o valor do salario base inicial do %s\n",nome);
scanf("%f",&SBI);
printf("digite o numero de dependentes do %s\n", nome);
scanf("%d",&N_dep);
printf("digite o tempo de servico do %s\n", nome);
scanf("%d",&Temp_serv);
Solução Exercício 3
5.4.11 Exercícios sobre Seleção de Ações Alternativas
104
printf("O funcionario em questao esta exercendo algum cargo de chefia?\n");
printf("digite 1 para sim e zero para nao\n");
scanf(" %d",&chefe); //Calculo da gratificação
if(chefe==1)
GRAT=1046.1;
else
{ nchefe=0;
printf("Se o funcionario exerceu no passado algum cargo de chefia,\n digite o
numero de anos.\n");
scanf("%d",&nchefe);
perc_grat= 20*(nchefe/2);
GRAT=(1046.1*perc_grat)/100.0;
}
Solução Exercício 3 - Continuação
5.4.11 Exercícios sobre Seleção de Ações Alternativas
105
// Calculo do quinquenio
Nquin= Temp_serv/5;
QUIN= (SBI+GRAT)*(Nquin*0.05);
// Calculo da Sexta Parte.
if(Temp_serv >= 20)
SEXT_P=(SBI+GRAT+QUIN)/6.0;
else SEXT_P=0.0;
// Calculo do Salario bruto total
SBT=(SBI+GRAT+QUIN+SEXT_P);
//calculo dos descontos IAMSP, PREV
IAMSP=SBT*0.02;
PREV=SBT*0.11;
Solução Exercício 3 - Continuação
5.4.11 Exercícios sobre Seleção de Ações Alternativas
106
//Calculo do IR
Valor = SBT-IAMSP-PREV-150.69*N_dep;
if( Valor< 1499.15)
{ Aliquota=0;
Parcela=0;}
else if( Valor< 2246.75)
{Aliquota=0.075;
Parcela=112.43;}
else if( Valor< 2995.7)
{Aliquota=0.15;
Parcela=280.94;}
else if( Valor< 3743.19)
{Aliquota=0.225;
Parcela=505.62;}
else
{Aliquota=0.275;
Parcela=692.78;}
IR=(Valor*Aliquota)-Parcela;
SL = SBT-IAMSP-PREV-IR;
Solução Exercício 3 - Continuação
5.4.11 Exercícios sobre Seleção de Ações Alternativas
107
printf("Nome:%s cargo:%s\n", nome, cargo);
printf("==============================================\n");
printf("Vencimento \t%.2f\n",SBI);
printf("Gratif. de representacao\t%.2f\n",GRAT);
printf("Adicional Tempo Servico \t%.2f\n",QUIN);
printf("Sexta Parte \t%.2f\n",SEXT_P);
printf("Salario Bruto \t%.2f\n",SBT);
printf("======= Descontos==============================\n");
printf("Contribuicao Previdencia\t%.2f\n",PREV);
printf("IAMSP \t%.2f\n",IAMSP);
printf("IMPOSTO DE RENDA \t%.2f\n",IR);
printf("==============================================\n");
printf("Total de Descontos \t%.2f\n",PREV+IAMSP+IR);
printf("==============================================\n");
printf("Salario Liquido \t%.2f\n",SL);
printf("===============================================\n\n\n");
system("PAUSE");
} Solução Exercício 3 - Continuação
5.4.11 Exercícios sobre Seleção de Ações Alternativas
108
Solução Exercício 3 - Resultado
109
Mas, Continua...
Fim do ifFim do ifFim do ifFim do ifEste material foi Este material foi Este material foi Este material foi desenvolvido por: desenvolvido por: desenvolvido por: desenvolvido por: Aníbal Aníbal Aníbal Aníbal Aníbal Aníbal Aníbal Aníbal Tavares de Azevedo e Tavares de Azevedo e Tavares de Azevedo e Tavares de Azevedo e Tavares de Azevedo e Tavares de Azevedo e Tavares de Azevedo e Tavares de Azevedo e Cassilda Maria RibeiroCassilda Maria RibeiroCassilda Maria RibeiroCassilda Maria RibeiroCassilda Maria RibeiroCassilda Maria RibeiroCassilda Maria RibeiroCassilda Maria Ribeiro