5- a lógica da programação comandos if -else - feg.unesp.br · 04/05/2011 · 1 unesp – campus...

28
1 Unesp – Campus de Guaratinguetá Curso de Programação Computadores Profa. Cassilda Ribeiro 5- A Lógica da Programação Comandos If Comandos If - - else else 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 = (L 1 2 +L 2 2 ) 1/2 3 Algoritmo: Pitágoras variáveis LADO1, LADO2, Q1, Q2: inteiros. HIPOTENUSA:real; Inicio 1. [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; Inicio Leia (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

Upload: dinhhuong

Post on 07-Nov-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

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