Anda di halaman 1dari 46

5- A Lgica da Programao Comandos If-else

Unesp Campus de Guaratinguet Curso de Programao Computadores Prof. Anbal Tavares Profa. Cassilda Ribeiro
1

5. A Lgica da programao 5.1 Introduo


!

Neste tpico comearemos a ver em detalhes, a lgica 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 tringulo (nas variveis LADO1 e LADO2), fazer um algoritmo para determinar e imprimir o comprimento do terceiro lado (HIPOTENUSA). Suponha que todas as variveis sejam inteiras.

lado1 lado2

hipotenusa

? H = (L12+L22)1/2
2

5.1 Introduo

Declaraes
Algoritmo: Pitgoras variveis 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 Instrues

5.1 Introduo

Algoritmo
Algoritmo: Pitgoras Declarar variveis; Inicio Leia (L1, L2); Q1 " L1 ! 2; Q2 " L2 ! 2; H" SQRT (Q1 + Q2); Escreva"(L1,L2,H); Fim

Cdigo C
// Dados os 2 catetos de um tringulo, //este programa calcula a hipotenusa! #include <stdio.h> #include <stdlib.h> #include <math.h> main() { //Inicio float L1, L2, H; printf(Fornea L1 e L2:); scanf(%f%f,&L1,&L2); H = sqrt(L1*L1 + L2*L2); printf( L1=%f, L2=%f, H=%f \n,L1,L2,H); system(pause); }//Fim 4

5. A Lgica da programao

5.2. Rastreando um Algoritmo


! Depois de elaborado um algortmo, como saber se ele faz o que se supe que faa?

Para se descobrir isto, deve-se rastrear o algoritmo, isto , execut-lo manualmente, com dados numricos, utilizando lpis e papel para registrar os valores tomados pelas variveis a cada passo.

Algoritmo

O exemplo 2 a seguir ilustra o rastreamento do algoritmo do exemplo 1.

5 4

5.2. Rastreando um Algoritmo Exemplo 2: Rastrear Pitgoras Suponha que conheamos os dois catetos de um tringulo retngulos cujas medidas so 3cm e 4cm. Ento os dados de entrada so 3 e 4.
Passo L1 1 2 3 4 L2 Q1 Q2 H Sada

Algoritmo
Algoritmo: Pitgoras Declarar variveis; Inicio Leia (L1, L2); Q1 " L1 ! 2; 1 Q2 " L2 ! 2; 2 H" SQRT (Q1 + Q2); 3 Escreva"(L1,L2,H); 4 Fim

3 3 3 3

4 4 4 4

9 ? ? ? 9 16 ? ? 9 16 5 ? 9 16 5 3,4,5

5.2. Rastreando um Algoritmo Exemplo 3: Calcular Mdia


Fazer um algortmo que leia quatro notas (NOTA1, NOTA2, NOTA3 e NOTA4 ) e calcula a nota mdia, armazena o resultado na varivel MEDIA. O resultado final deve ser impresso com uma mensagem explicativa. Toda as variveis so reais.

Algoritmo
Algoritmo Notas Variveis 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 mdia] MEDIA "( N1 + N2 + N3 + N4 ) / 4.0; 3. [Sair resultados] Escreva (Nota Final =`, MEDIA); Fim
7

Aqui est sendo dada uma ordem para que o computador leia os dados necessrios para calcular a mdia.

5.2. Rastreando um Algoritmo Exemplo 3: Calcular Mdia


Fazer um algortmo que leia quatro notas (NOTA1, NOTA2, NOTA3 e NOTA4 ) e calcula a nota mdia, armazena o resultado na varivel MEDIA. O resultado final deve ser impresso com uma mensagem explicativa. Toda as variveis so reais.

Algoritmo
Algoritmo Notas Variveis 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 mdia] MEDIA "( N1 + N2 + N3 + N4 ) / 4.0; 3. [Sair resultados] Escreva (Nota Final =`, MEDIA); Fim
8

Aqui est sendo dada uma ordem para que o computador escreva na tela o valor da mdia que ele calculou.

5.2. Rastreando um Algoritmo

Cdigo C
main() { float n1, n2, n3, n4, m; printf(Fornea n1, n2, n3 e n4:); 1 scanf(%f%f%f%f,&n1,&n2,&n3,&n4); m = (n1 + n2 + n3 + n2)/4.0; 2 printf( Nota Final = %f \n,m); system(pause); } Passo N1 N2 N3 N4 1 2 3 M 3

Algoritmo
Algoritmo Notas Variveis N1, N2, N3, N4, M; Inicio 1. [Ler as notas individuais] Escreva(fornea n1, n2, n3, n4) Leia ( N1, N2, N3, N4 ); 1 2. [Calcular a nota mdia] 2 MEDIA "( N1 + N2 + N3 + N4 ) / 4.0; 3 3. [Sair resultados] Escreva (Nota Final =`, MEDIA); Fim
9

Sada

6.0 6.5 8.0 9.5 ? ? 6.0 6.5 8.0 9.5 7.5 ? 6.0 6.5 8.0 9.5 7.5 7.5

5.3. Trabalhando com a Linguagem C


Uma outra forma de escrever em Linguagem C o programa associado ao algoritmo que resolve o Exemplo 3 : /* -------------------------------------------------* * Programa do exemplo 3- Tpico 5 * Aqui est sendo dada uma ordem para que o * Clculo da mdia final entre 4 notas * computador escreva a *---------------------------------------------------*/ frase DIGITE A NOTA1 #include <stdio.h> #include <stdlib.h> main() Aqui est sendo dada uma ordem para que o { computador guarde na float NOTA1, NOTA2, NOTA3, NOTA4, MEDIA; memria a NOTA1 que foi digitada printf("DIGITE A NOTA1 "); scanf("%f",&NOTA1); continua na pg. seguinte

10

5.3. Trabalhando com a Linguagem C


printf("NOTA1= % f\ n",NOTA1); printf("\ nDIGITE A NOTA2 "); scanf("% f",&NOTA2); printf("NOTA2= % f\ n",NOTA2); printf("\ nDIGITE A NOTA3 "); scanf("% f",&NOTA3); printf("NOTA3= % f\ n ,NOTA3); printf("\ nDIGITE A NOTA4 "); scanf("% f",&NOTA4); printf("NOTA4= % f\ n",NOTA4); ME DIA = (NOTA1+ NOTA2+ NOTA3+ NOTA4)/ 4.0; printf("\ n "); printf("NOTA FINAL = % f\ n", ME DIA); system("pause"); } Aqui est sendo dada uma ordem para que o computador escreva a frase NOTA1=, seguido do valor da varivel que est armazenado na memria.

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.

11

5.3. Trabalhando com a Linguagem C


Ao se executar o programa do exemplo 3, aparece a seguinte tela:

12

5.3. Trabalhando com a Linguagem C Exemplo 4: Fazer um algoritmo que leia uma temperatura na escala Celsius e a converta para a escala Fahrenheit. Todas as variveis em questo so reais.
Algoritmo Fahrenheit Variveis: TEMPCE, TEMPFA: real Inicio 1.[Ler a temperatura em celsius] Leia (TEMPCE) 2. [Converter a temperatura para fahrenheit] TEMPFA " ( 9.0 / 5.0 ) * TEMPCE + 32 3. [Sair resultados] Escreva (Temperatura em Fahrenheit =`, TEMPFA) Fim

O Exemplo 4 em Linguagem C torna-se:

13

5.3. Trabalhando com a Linguagem C / *= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * E ste o programa do exemplo 4-tpico 5 * *= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = */ #include < stdio.h> stdio.h> #include < stdlib.h> stdlib.h> main() main() { float TE MP CE , TE MP FA; printf ("DIGITE A TE MP E RATURA E M oC "); scanf ("% f",&TE MP CE ); printf ("\ n ");
Ordena ao computador que leia e armazene na memria o nmero digitado pelo usurio
14

Ordena ao computador que escreva na tela a frase em vermelho

printf ("Temperatura Lida, em Celsius = % f\ n", TE MP CE );

5.3. Trabalhando com a Linguagem C


Continuao do programa do exemplo 4

TE MP FA = (9.0/ 5.0) * TE MP CE + 32; printf ("\ n "); printf ("\ n "); system ("pause"); }

Calcula o valor da temperatura em Fahrenheit e a guarda na memria

printf ("Temperatura em Fahrenheit = % f\ n", TE MP FA);

Imprime valor da temperatura em Fahrenheit, calculada acima, bem como a frase em vermelho
15

5.3. Trabalhando com a Linguagem C Exemplo 5: Fazer um algoritmo que leia uma quantidade de chuvas em polegadas e converta para milmetros. Todas as variveis so reais. Todas as variveis em questo so reais.
Algoritmo Converte_Chuva Variveis: POL, MILIM: real. Inicio 1. [Ler dados conhecidos] Escreva ( Digite o valor da chuva em polegadas) Colocando o Exemplo 5 em Linguagem C Leia ( POL ) 2. [Converter polegadas em milmetros] MILIM " 25.4 * POL 3. [Sair resultado] Escreva (Quantidade de chuva em mm =`,MILIMETROS) Fim
16

5.3. Trabalhando com a Linguagem C


/*====================================== * Este o programa do exemplo 5 - tpico 5 * *======================================*/ # include <stdio.h> # include <stdlib.h> main() Programa do Exemplo 5 { 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 Milmetros = %f\n", MILIM); printf("\n "); system("pause"); }

17

5.3. Trabalhando com a Linguagem C


Programa do Exemplo 5 : Continuao

Ao se executar o programa do exemplo 5, aparece a seguinte tela:

18

5.3. Trabalhando com a Linguagem C : Algoritmo do Exemplo 6 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 variveis relativas a itens comprados so inteiras e as variveis relativas a custo so reais.
Algoritmo Lanchonete Variveis: HAM , CHE , C1, FRITAS, REFRI, MILK: inteiro CONTA, C1, C2, C3, C4, C5, CUSTO1 CUSTO2 CUSTO3 CUSTO4, CUSTO5 : real. inicio 1.[Ler dados de entrada] Leia ( HAM , C1 ) Leia ( CHE , C2 ) Leia (FRITAS , C3 ) Leia ( REFRI , C4 ) Leia ( MILK , C5 )
19

5.3. Trabalhando com a Linguagem C : Algoritmo do Exemplo 6


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. [Impresso de resultados] Escreva (Hambrguer (R$,C1`)`,CUSTO1) Escreva (Chesburguer (R$,C2`)`,CUSTO2) Escreva (Batatas fritas (R$,C3`)`,CUSTO3) Colocando o Exemplo 6 Escreva (Refrigerantes (R$,C4`)`,CUSTO4) em Linguagem C Escreva (Milkshake (R$,C5`)`,CUSTO5) Escreva (Total`,CONTA) Sada

20

5.3. Trabalhando com a Linguagem C : Programa do Exemplo 6 /* -----------------------------------* Programa do exemplo 6 - Tpico 5 * * Clculo da Conta de uma Lanchonete * *-------------------------------------*/ #include <stdio.h> #include <stdlib.h> main() { float C1, C2, C3, C4,C5, CONTA; //Declara variveis 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); 21 printf("\n\n");

Programa do Exemplo 6 : Continuao

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"); printf("DIGITE A quantidade de Milkshake\n"); printf("consumida e o seu custo unitario "); scanf("%d%f",&MILK,&C5);

22

Programa do Exemplo 6 : Continuao

/*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 : Continuao

/*Impresso 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 : Continuao

25

5.4 Seleo de Aes Alternativas

Suponha que temos duas variveis numricas, A e B, cujos valores so diferentes, e desejamos imprimir a maior delas. Neste caso utilizamos uma construo chamada Se_Ento_Seno
SIM A >B? NO

escreva (A)

escreva (B)
26

5.4 Seleo de Aes Alternativas

Em Linguagem Algortmica a construo Se_Ento_Seno tem o seguinte formato: Se condio ento alternativa verdadeira seno alternativa falsa Exemplo: Se A > B ento Escreva ( A ) seno Escreva ( B )
27

5.4 Seleo de Aes Alternativas

! Um conjunto especial de operadores relacionais solicitado para expressar condies. So eles:


Operador em Operador em Linguagem Linguagem C Algortmica > < = # " ! > < == >= <= !=

Significado maior do que menor do que igual a maior do que ou igual a menor do que ou igual a no igual ( diferente de )
28

5.4 Seleo de Aes Alternativas Exemplo 7: Fazer um algortmo em que dadas as trs notas individuais em trs aspectos do ano escolar (Lab, Exame_inter, Exame_final) para um estudante chamado Nome. O algortmo deve calcular a mdia final com pesos de 20%, 30% e 50%, respectivamente. O relatrio de sada deve fornecer o nome do aluno, suas notas individuais,sua mdia final e uma mensagem caso o aluno esteja reprovado. A varivel Mdia real. Algoritmo Relatrio Variveis: Lab, Exame_inter, Exame_final, Mdia : reais Nome : cadeia de caractere Incio 1. [Ler dados] Leia [Nome, Lab, Exame_inter, Exame_final] 2. [Calcular a mdia] Mdia " 0.2 * Lab + 0.3 * Exame_inter + 0.5 * Exame_final
29

5.4 Seleo de Aes Alternativas Exemplo 7: Continuao.... 3. [Imprimir resultados] Escreva (Nome estudante:, Nome) Escreva (Nota Laboratrio:`, Lab) Escreva (Exame Intermedirio:`, Exame_inter) Escreva (Exame Final`, Exame_final) Escreva ( Mdia Final:`, Mdia) 4. [Verificar se tem aluno reprovado] Se Media < 5.0 ento Escreva (Reprovado`) Fim
30

5.4 Seleo de Aes Alternativas


Exemplo 8: Faa um algoritmo que leia dois valores, determine o maior deles e o imprima com uma mensagem de identificao. Assumir que todas as variveis so inteiras. Algoritmo Mostre Variveis: Valor1, Valor2, Max : inteiras Incio 1. [Ler os valores] Leia ( Valor1, Valor2 ) 2. [Determinar o maior] Se Valor1 > Valor2 ento Max " Valor1 Escreva (O Primeiro valor maior`) seno Max " Valor2 Escreva (O Segundo Valor maior`) 3. [Imprimir o maior valor] Escreva (Maior Valor =`, Max) 4. [Terminar] Fim

31

5.4 Seleo de Aes Alternativas

Diagrama de blocos - Fluxograma


!

Como j foi dito anteriormente, antes de se fazer um programa, deve-se fazer um algoritmo de problema. Para tanto temos utilizado uma linguagem algortmica que tambm chamamos de portugol. Uma outra maneira de se escrever algoritmos atravs de fluxograma ou diagrama de bloco. No fluxograma, as aes a serem executadas so representadas de maneira grfica. Embora a linguagem algortmica seja mais utilizada, existem vrios livros que utilizam o fluxograma para explicar partes do algoritmo, devido ao seu forte apelo visual A seguir mostramos rapidamente as ferramentas utilizadas para 32 a confeco de um fluxograma.

5.4 Seleo de Aes Alternativas


5.4.1 Diagrama de blocos - Fluxograma

Smbolo
Inicio/Fim Leitura Cond Resultados Operacoes

Descrio
Delimita o incio ou o final das instrues. Leitura de dados (atravs do teclado, pex). Avaliao de uma condio. Apresentao de resultados. Atribuio ou operao de processamento. Fluxo de execuo. Conexo entre partes do algoritmo.
33

5.4 Seleo de Aes Alternativas

Problema Maior Suponha duas variveis numricas, A e B, com valores diferentes, e deseja-se imprimir a maior delas. Algoritmo Maior
Variaveis A, B; Inicio 1. Ler(A,B); 2. Se (A > B) entao imprimir A; Senao imprimir B; Fim

Inicio Ler A,B;

V
Escreva(A);

Se A>B

Escreva(B);

Final

34

5.4.2 Seleo de Aes Alternativas : Ses Encaixados

5.4.2 Ses Encaixados


Em algumas aplicaes, uma das alternativas de uma estrutura Se_Ento_Seno pode envolver outras decises
Exemplo 9 : Faa um algoritmo que leia trs nmeros A, B e C e imprima o valor do maior. Assumir valores distintos e reais. Algortmo Max_3 Variveis A, B, C, Max : reais Incio 1. [Ler dados] Leia (A, B, C)

35

5.4.2 Seleo de Aes Alternativas : Ses Encaixados Exemplo 9: Continuao.... 2. [Determinar o maior valor, comparando pares] Se A > B
V Se A > B Inicio Ler A,B,C; F

Ento Se A > C ento Max " A ( A > B,A > C ) seno Max " C ( C > A > B ) V V Se B > C Se A > C Seno Se B > C F F ento Max " B ( B > A, B > C ) A; C; B; C; seno Max " C ( C > B > A ) 3. [Imprimir o maior valor] Escreva (Maior valor =`, Max) Escreva(Max); 4. [Terminar] 36 Fim Final

5.4.2 Seleo de Aes Alternativas : Ses Encaixados

Cuidado com a paragrafao


Ex1: Se C1 ento Se C2 ento S1 seno S2 onde: C1 e C2 significam condies e S1 e S2, comandos

Em que condies S2 executado? Isso no fica claro.


37

5.4.2 Seleo de Aes Alternativas : Ses Encaixados

Ex2: Se C1 ento Se C2 ento S1 seno S2


Neste exemplo, o comando Se C2 s ser executado se a condio C1 for Verdadeira. Se C1 for falsa, nenhum comando ser Executado.

Se C1 ento Se C2 ento S1 seno S2

Neste exemplo, o comando Se C2 s ser executado se a condio C1 for verdadeira. Se ela for falsa, o comando S2 ser executado
38

5.4.2 Seleo de Aes Alternativas : Ses Encaixados


Exemplo 10: Uma empresa decidiu dar uma gratificao de Natal a seus funcionrios. Esta gratificao calculada com base no nmero de horas extras trabalhadas e o nmero de horas de falta. A frmula para se calcular o prmio a seguinte: Extra 2 /3 * Faltas. O prmio distribudo segundo a tabela a seguir:

Extra 2/3 * Faltas


> 40 horas > 30 mas <= 40 horas > 20 mas <= 30 horas > 10 mas <= 20 horas <= 10 horas

Prmio (R$)
50 40 30 20 10

Pede-se um algoritmo e um programa em C, para ler informaes de funcionrios e calcular o prmio a ser dado.

39

Exemplo 10: continuao


Algoritmo Bnus Variveis: Extras, Faltas, Pagamentos : reais Nome : cadeia Incio 1. [Ler informaes de um funcionrio] Leia (Nome, Extras, Faltas) 2. [Calcular o prmio] Se Extras (2/3.0) * Faltas > 40 Ento Pagamento " 50 Seno Se Extras (2/3.0) * Faltas >30 Ento Pagamento " 40 Seno Se Extras (2/3.0) * Faltas >20 Ento Pagamento " 30 Seno Se Extras (2/3.0)*Faltas>10 Ento Pagamento " 20 Seno Pagamento " 10 3. [Imprimir resultados] Escreva ( Prmio para`, Nome,`=R$`, Pagamento) Fim Se A > 40 F Se A > 30 F Se A > 20 F Se A > 10 F P10; V P40; V P30; V P20; V P50;

40

Exemplo 10: continuao (Extra (2/3.0) * Faltas) somente uma vez. Para isto vamos introduzir uma varivel temporria (Valor_teste).
2.1 [Calcular o valor teste] Valor_teste " Extras (2/3.0) * Faltas 2.2 [Calcular o prmio] Se Valor_teste > 40 Ento Pagamento " 50 Seno Se Valor_teste > 30 Ento Pagamento " 40 Seno Se Valor_teste > 20 Ento Pagamento " 30 Seno Se Valor_teste > 10 Ento Pagamento "20 Seno Pagamento "10

# Podemos melhorar este algortmo, calculando o valor do teste

41

5.4.3 Seleo de Aes Alternativas: O Comando if

Em linguagem C a construo Se Ento - Seno feita atravs do:


Comando if
Falso = 0 Verdadeiro 0

# Sintaxe:

if (expresso verdadeira)
execute comando ou bloco de comandos # Exemplo:
if (contador > 9) contador = 0;
42

5.4.3 Seleo de Aes Alternativas: O Comando if

OBS: Quando dentro do comando if, forem executados mais de um comando (bloco de comando) necessrio colocar chaves, {}, para marcar o inicio e o fim dos comandos a serem executados. # Exemplo:
Chave marcando o inicio da condio verdadeira Aqui tem duas aes sendo feitas dentro da condio verdadeira

Chave marcando o fim da condio verdadeira

if (contador >9) { contador = 0; soma = 32 }


43

5.4.3 Seleo de Aes Alternativas: O Comando if Exemplo 11 Fazer um programa em C que leia um nmero e imprima uma mensagem dizendo se ele maior que 10, menor ou igual a 10. Observe a chave { marcando o inicio do if
#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 e 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 e menor que 10"); system("pause"); }
44

5.4.4 Seleo de Aes Alternativas: O Comando else O Comando else pode ser considerado um complemento do comando if, cujos comandos sero executados SOMENTE SE a expresso, especificada aps o comando if, for 0 (falsa).

# Sintaxe:

if (expresso verdadeira) else

Falso = 0 Verdadeiro 0

execute comando1 ou bloco1 de comandos execute comando2 ou bloco2 de comandos

45

5.4.4 Seleo de Aes Alternativas: O Comando else


#include <stdio.h> #include <stdlib.h> main ( ) { int num; printf ("Digite um numero: "); scanf ("%d", &num); if (num == 10) {//inicio ento printf ("\n\n Voce acertou!\n"); printf ("O numero e igual a 10.\n"); }//fim ento else {//inicio seno printf ("\n\n Voce errou!\n"); printf ("O numero e diferente de 10.\\nn"); }//fim seno system("pause"); }

Exemplo 12

Refazer o programa em C do exemplo 11 anterior, utilizando o comando else

46

5.4.5 Seleo de Aes Alternativas: if-else encaixados

! possvel aninhar construes do tipo if-else em


diversos nveis.
if (cond1) if (cond2) else /* if1 */ /* if2 */ /* else2 */ /* else1 */ /* if3 */ /* if4 */ /* else4 */ /* else3 */
47

comando if2 ; comando else2 ;

else if (cond3) if (cond4) else else

comando if4 ; comando else4 ;

comando else3 ;

Exerccios-Comando If- else

Exemplo 13: Colocar o Exemplo 7 em Linguagem C


#include <stdlib.h> #include <stdio.h> main() { // declarar variveis float lab,exame1, exame_final, media; int nome; //1. [Ler dados] printf( "Digite o numero do aluno: " ); scanf("%d",&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 mdia] continua na pgina seguinte media= 0.2*lab + 0.3 * exame1 + 0.5*exame_final;

48

Continuao do Exemplo 13 // 3. [imprimir resultados] printf ("\nNo. estudante:%d\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

continuao

49

Exerccios-Comando If- else

Exemplo 14: Colocar o Exemplo 9 em Linguagem C

#include <stdlib.h> #include <stdio.h> main( ) { // declarar variveis float A, B, C, max; //1. [Ler dados] printf( "Digite tres numeros A, B, C\n" ); scanf("%f%f%f",&A,&B,&C);

Exemplo 9 : Faa um programa que leia trs nmeros A, B e C e imprima o valor do maior. Assumir valores distintos e reais.

continua na pgina 46
50

Continuao do Exemplo 14

// 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 pgina seguinte


51

Continuao do Exemplo14

else { if (B > C) // ( B > A, B > C ) { max = B; printf( "\nO maior valor eh o B\n" ); } else { max = C; // ( C > B > A ) printf( "\nO maior valor eh o C\n" ); } } // 3. [Imprimir o maior valor] printf ("\nMaior valor =%f\n\n", max); system("pause"); } //4. Fim do programa
52

Exerccios-Comando If- else

#include <stdlib.h> Exemplo 15: Refazer o programa do #include <stdio.h> exemplo 14 para imprimir os 3 main ( ) nmeros na ordem crescente. { int a, b, c, maior, meio, menor ; // declarao de variveis. // Leitura de dados printf(" Entre com tres numeros inteiros\n"); scanf("%d %d %d", &a, &b, &c); if ( a > b ) if ( a > c ) { maior = a; if ( b > c ) { meio = b; menor = c; } else { meio = c; menor = b; } } continua na prxima else { maior = c; meio = a; menor = b; } pgina

53

Exerccios-Comando If- else

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

54

Exerccios para Casa - Comando If- else


1) 2) 3) 4) Colocar em Linguagem C os algoritmos dos exemplos 8, e 10. Fazer um programa em C que leia 4 nmeros (A, B, C, D) e encontre o maior deles. Imprima uma mensagem dizendo qual deles o maior e o valor do maior. Faa um programa em C que calcule o aumento de salrio para o corrente ano. Se salrio >1000 o aumento de 5%. Seno o aumento de 7%. Preparar um algoritmo e um programa em C para ler os comprimentos dos trs lados de um tringulo (S1, S2, e S3) e determinar que tipo de tringulo 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. Ento: Se A ! B + C nenhum triangulo formado Se A2 = B2 + C2 um triangulo retangulo formado, Se A2 > B2 + C2 um triangulo obtusangulo formado Se A2 < B2 + C2 um triangulo acutangulo formado
55 54

Exerccios para Casa - Comando If- else 5) Faa um programa que leia dois valores, o primeiro servindo de indicador de operao e o segundo correspondendo ao raio de uma circunferncia. Caso o primeiro valor lido seja igual a 1, calcular e imprimir a rea desta circunferncia. Se o valor lido for 2, calcular e imprimir o permetro da circunferncia. E se o valor lido for diferente destes dois valores; imprimir uma mensagem dizendo que o indicador de operao foi mal fornecido. 6) Fazer um programa que: dada a altura e peso de uma pessoa, calcule seu ndice de massa corporal. Frmula: 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.
55 56

Exerccios para Casa - Comando If- else


7) Faa um programa que leia dois valores, o primeiro servindo de

indicador de operao e o segundo correspondendo ao raio de uma circunferncia. Caso o primeiro valor lido seja igual a 1, calcular e imprimir a rea desta circunferncia. Se o valor lido for 2, calcular e imprimir o permetro da circunferncia. E se o valor lido for diferente destes dois valores; imprimir uma mensagem dizendo que o indicador de operao foi mal fornecido.

8)Fazer um programa que resolva uma equao de segundo grau, realizando consistncias dos valores do discriminante e do coeficiente "a". Caso o discriminante seja negativo, dever apenas ser impressa a mensagem: " Esta equao no possui razes reais" . Caso o coeficiente "a" seja igual zero, dever ser impressa a mensagem: " Esta no uma equao 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" no for nulo, devero ser impressas: "as razes da equao: ax2 + bx + c = 0 so R1 = xxx e R2 = xxx".
56 57

Resoluo Exerccios 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"); }

Colocar o exemplo 8 em C

continua na prxima pgina


58

Resoluo Exerccio para Casa 1

else { Max = Valor2; printf ("\nO Segundo Valor eh maior\n"); } //3. [Imprimir o maior valor] printf("Maior Valor =%d\n\n", Max); //4. [Terminar] system("PAUSE"); }
59

Resoluo Exerccio para Casa: Exerccio 8


#include <stdlib.h> #include <stdio.h> #include <math.h> main() { int a, b, c; float delta, raiz1, raiz2; printf("digite os coeficientes a, b, c da equacao\n"); scanf("%d%d%d",&a,&b,&c); if(a==0) { printf(" esta equacao eh de 1o. grau\n"); raiz1= -c/b; printf(" sua raiz eh: %f \n", raiz1); } else { delta=(pow(b,2)-4*a*c); if(delta >= 0) { raiz1=(b+sqrt(delta))/(2*a); raiz2=(b-sqrt(delta))/(2*a); printf("as raizes sao:R1= %f,R2=%f \n",raiz1,raiz2); } else printf("Esta equacao nao possui raizes reais\n"); } system("PAUSE"); 60 }

5.4.6 Aplicao: O paradoxo da inovao 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 no estivessem processados em 1900.

Herman Hollerith (estatstico): Foi encarregado pela Agncia Estatstica dos EUA de desenvolver uma tcnica para acelerar o processamento dos dados do censo, levando apenas 3 anos.
61

5.4.6 Aplicao: O paradoxo da inovao Lei de Moore: O fundador da Intel, Gordon Moore, constatou que a capacidade de processamento dos computadores dobra a cada 1 ano, enquanto os custos permanecem fixos.

?
!

Problema: Imagine que uma tarefa deve ser processada e levar 8 anos e que no pode ser movida da mquina uma vez iniciada. De acordo com a Lei de Moore deve-se esperar a melhoria dos processadores ou deve-se comear hoje ? Soluo: O senso comum diz que melhor comear agora, mas antes de por a mo na massa bom olhar a Tabela dada a seguir:
62

5.4.6 Aplicao: O paradoxo da inovao Tempo de Desenvolvimento (anos) 0 1 2 3 4 Tempo de Processamento (anos) 8 4 2 1 0,5 Tempo Total (anos) 8 5 4 4 4,5

Incio 0. ano 1. ano 2. ano 3. ano 4. ano

Final 8. ano 5. ano 4. ano 4. ano 4. ano

Observao: melhor comear no 2. ou 3. Ano, pois com isso pode-se terminar antes a tarefa. Esta anlise tambm pode ser til para dividir recursos entre produo e pesquisa.

63

5.4.6 Aplicao: O paradoxo da inovao Forma Geral: O paradoxo da inovao pode ser formulado de acordo com trs parmetros: tempo de desenvolvimento t, taxa de aperfeioamento a e tempo de processamento p.

No caso anterior, os valores eram: p = 8 e a = 50% = 0.5. A frmula para o caso geral ser dada por:
Considerando-se t varivel, a e p fixos, para encontrar o menor tempo y, pode-se fazer dy/dt = 0.

8 y =t + t 2
p y=t+ (" / a ) t
Alternativa: Vale a pena esperar se 64 p/(1/a) > 1

5.4.6 Aplicao: O paradoxo da inovao

No caso anterior: 8/(1/0.5) = 4 > 1


Tempo de Desenvolvimento (anos) 0 1 2 3 4 Tempo de Processamento (anos) 8 4 2 1 0,5 Tempo Total (anos) 8 5 4 4 4,5

Incio 0. ano 1. ano 2. ano 3. ano 4. ano

Final 8. ano 5. ano 4. ano 4. ano 4. ano


65

5.4.6 Aplicao: O paradoxo da inovao Exemplo 16 Algoritmo: Inovao variveis: r,p,a: real; Inicio Escreva(Fornea a e p) Leia (a, p);
r " (p/(1/a)); Se (r > 1.0) Ento Escreva(Espere); Seno Escreva(Comece); Fim

Cdigo C
// Programa: paradoxo da inovao. #include <stdio.h> #include <stdlib.h> main() { float a, p, r; printf(Fornea a e p:); scanf(%f %f,&a,&p); r = p/(1/a); if (r > 1.0) printf(Espere); else printf(Comece); system(pause); }

66

5.4.6 Aplicao: Ano Bissexto Um problema simples: Ano Bissexto. Simples ?

Quantos dias demora a Terra para dar uma volta completa no Sol ?

67

5.4.6 Aplicao: Ano Bissexto


Egito Antigo: 365 dias 4 anos = 1 dia intercalar Calendrio Alexandrino Roma Antiga: 365,25 dias

4 anos = 1 ano bissexto Calendrio Juliano Mas o ano solar dura:

365,242199 dias !

Ou seja:

" " " " 365,242"99 365 + + 4 "00 400 3300

68

5.4.6 Aplicao: Ano Bissexto


Ano Calendrio 1 Ano 2 Ano 365 dias 2*365 dias Ano Solar

365 +

" " " " + 4 "00 400 3300

" " " " # & 2 * $ 365 + + ! 4 "00 400 3300 " %

3 Ano

3*365 dias

" " " " # & 3 * $ 365 + + ! 4 "00 400 3300 " %
4 * 365 + 4 " " # & " + 4*$ + ! 4 % "00 400 3300 "

4 Ano

4*365 dias Ano Bissexto !

Mais um dia no ano !


69

Mas e quanto aos demais termos ?

5.4.6 Aplicao: Ano Bissexto


Em 1582, Gregrio XIII: Nova definio para ano bissexto Calendrio Gregoriano

" " " " 365,242"99 365 + + 4 "00 400 3300


Cada 4 anos + 1 dia Cada 100 anos - 1 dia Cada 400 anos + 1 dia
70

5.4.6 Aplicao: Ano Bissexto


Em 1582, Gregrio XIII: Nova definio para ano bissexto Calendrio Gregoriano Exemplo 17- Ano Bissexto (a) No divisvel por 100 e divisvel por 4.
(b) Divisvel por 100 e 400. (c) Os demais anos no so Bissextos.

Algoritmo Se resto(ano/100) 0 ento Se (ano/400) = 0 ento bissexto; (b) Seno no_bissexto; (c) Seno Se (ano/4) = 0 ento bissexto; (a) Seno no_bissexto; (c)
71

OBSERVAO: Subtrair 1 dia do calendrio a cada 3300 anos

Exerccios - Comando If- else

//Exemplo 17 //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); else printf(" O Ano %d Nao e bissexto \n\n", ano);

72

Exerccios - Comando If- else

//continuao programa ano bissexto 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"); }

73

5.4.7 Seleo de Aes Alternativas: Condies Compostas

Utilizao de Condies Compostas


!

Alguns problemas ficam mais simples se utilizarmos condies compostas ao invs de relaes simples. As condies compostas podem ser do tipo e conjuno, ou disjuno e no negao.

Seja a varivel UM = ". As expresses a seguir resultam em:

a) Exemplo de Conjuno : UM < 2 e UM < 0 verdadeiro falso $ falso


74

5.4.7 Seleo de Aes Alternativas: Condies Compostas

b) Exemplo de disjuno : UM < 2 ou UM < 0 verdadeiro falso $ verdadeiro c) Exemplo de negao : No UM < 2 falso

OBS: As condies compostas podem ser utilizadas tanto nos comandos Se como nos repita condicionais.
75

5.4.7 Seleo de Aes Alternativas: Condies Compostas

") Suponha que I e J sejam variveis inteiras com valores 6 e "2, respectivamente. Quais das seguintes condies so verdadeiras? a) 2 * " " J

%Verdadeiro

b) 2 * I " < J %Verdadeiro c) I > 0 e I " "0

%Verdadeiro

d) I > 25 ou (I < 8 e J > "0) %Verdadeiro e) I < 4 ou J > 5

%Verdadeiro
76

f) No I > 6 %Verdadeiro

5.4.7 Seleo de Aes Alternativas: Condies Compostas

2) Assuma que A, B, C e D so variveis e S", S2 , S3 e S4 so comandos ou alternativas.


a) Usando condies compostas reescreva as instrues abaixo: Se A > B

Ento Se B " C ento Se C # D ento S" seno S2 seno S3 Seno S4


77

5.4.7 Seleo de Aes Alternativas: Condies Compostas

Soluo ": Se (A > B e B " C) Ento Se C # D ento S" seno S2 Seno Se (A > B e B > C) Ento S3 Se (A " B) Ento S4

Soluo 2:
Se (A > B e B " C ) e (C # D) ento S" Se (A > B e B " C ) e (C = D) ento S2 Se (A > B) e (B > C) ento S3 Se (A " B) ento S4
78

5.4.7 Seleo de Aes Alternativas: Condies Compostas

b) Reescrever a instruo abaixo, como uma estrutura Se utilizando somente condies simples. Se (A < B e C # D) e (B > D ou B = D) ento S" Soluo : Se A < B Ento Se C # D ento Se B # D ento S"
79

Operadores Lgicos em C
Operador && || ! Significado Conjuno lgica (and). Disjuno lgica (or). Negao lgica (not).

Conjuno
A Falso Verdade Falso Verdade B Falso Falso Verdade Verdade A&&B Falso Falso Falso Verdade A Falso Verdade Falso Verdade

Conjuno
B Falso Falso Verdade Verdade A||B Falso Verdade Verdade Verdade

Negao
A !A
80

Verdade Falso Falso Verdade

5.4.7 Seleo de Aes Alternativas: Condies Compostas

Refazer o programa do Ano Bissexto usando Condies Compostas


# 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"); }

81

5.4.7 Seleo de Aes Alternativas: Condies Compostas

Exemplo"8: Usando condies compostas, fazer um algoritmo em um programa em C que leia trs nmeros, A, B e C e imprima o maior deles. Assuma que os valores so diferentes. Algortmo Max_3 Variveis A, B, C, Max : real Incio ". [Ler dados] Leia ( A, B, C )
2. [Determinar o maior valor] Se (A > B e A > C) ento Max " A Se (B > A e B > C) ento Max " B Se (C > A e C > B) ento Max " C 3. [Imprimir maior valor] Escreva (Maior valor =`, Max ) 4. [Terminar] Fim 82

5.4.7 Seleo de Aes Alternativas: Condies Compostas

#include <stdlib.h> Programa em C #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"); }

83

5.4.7 Seleo de Aes Alternativas: Condies Compostas

Exemplo"9: Fazer um algoritmo e um programa em C, utilizando condies compostas, que leia trs nmeros e imprima o maior e menor deles. Assume-se que os valores so diferentes.
Algortmo Max_Min_3 Variveis A, B, C, Max, Min : real Incio 1. [Ler dados] Leia ( A, B, C ) 2. [Determinar o maior e menor valor] Se (A > B e A > C) e (B < C) ento Max " A Min " B Se (A > B e A > C) e (C < B) ento Max " A Min " C Se (B > A e B > C) e (A > C) ento Max " B Min " C

Se (B > A e B > C) e (A < C) ento Max " B Min " A Se (C > A e C > B) e (B > A) ento Max " C Min " A Se (C > A e C > B) e (B < A) ento Max " C Min " B 3. [Imprimir o maior e o menor valor] Escreva (Maior valor =`, Max ) Escreva (Menor valor =`, Min ) 4. [Terminar] Fim 84

5.4.7 Seleo de Aes Alternativas: Condies Compostas


#include <stdlib.h> #include <stdio.h> Programa em C 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; continua na prxima pg . . . Min =C;}

85

5.4.7 Seleo de Aes Alternativas: Condies Compostas


if(B > A && B > C && A < C) continuao {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"); }

86

5.4.8 Seleo de Aes Alternativas: Comando Switch

! Quando for necessrio escolher uma dentre vrias opes, ao invs de aninhar construes do tipo if-else em diversos nveis, pode ser prefervel utilizar o comando Switch.
switch (expresso) { case (constante 1): intrues 1; break; case (constante 2): intrues 2; break; ... case (constante n): intrues n; break; default: instrues; }
87

5.4.8 Seleo de Aes Alternativas: Comando Switch Exemplo 20: Estado Civil
Fazer um programa que leia um caractere ch indicando o estado civil e imprima uma mensagem de acordo com a correspondncia: Se (ch = C) Escreva(Casado); Se (ch = S) Escreva(Solteiro); Se (ch = D) Escreva(Divorciado); Se (ch = V) Escreva(Viuvo); Default Escreva(Estado Incorreto);

Programa: 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"); }

No esquecer o break !

88

5.4.8 Seleo de Aes Alternativas: Comando Switch Programa: 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); case S: printf (Solteiro \n); case D: printf (Divorcio \n); case V: printf (Viuvo \n); default: printf(Est. Inc.); }//fim switch system("pause"); }

Sem o break; todos os case abaixo do case selecionado sero executados.


Resultado da Execuo
Qual estado civil: C Casado Solteiro Divorcio Viuvo Pressione uma tecla para continuar
89

5.4.8 Seleo de Aes Alternativas: Mais exercicios


1) Escreva um programa que pede para o usurio entrar um nmero correspondente a um dia da semana e que ento apresente na tela o nome do dia, utilizando o comando switch. 2) Dadas as seguintes informaes de um funcionrio: Numero funcional, idade, cargo e o seu salrio bruto e considerando que: a)O salrio bruto teve um reajuste de 38%. b)O funcionrio receber uma gratificao de 20% do salrio bruto. c)O Salrio liquido total descontado em 15% Faa um programa para: Imprimir Numero funcional, idade e cargo. Imprimir o salrio bruto. Imprimir o salrio lquido.

90

Mas, Continua...

Fim do if

91