Unesp Campus de Guaratinguet Curso de Programao Computadores Prof. Anbal Tavares Profa. Cassilda Ribeiro
1
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
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
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
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.
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.
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
10
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
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
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
TE MP FA = (9.0/ 5.0) * TE MP CE + 32; printf ("\ n "); printf ("\ n "); system ("pause"); }
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
17
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
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");
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
23
/*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
25
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
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
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
31
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.
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
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
V
Escreva(A);
Se A>B
Escreva(B);
Final
34
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
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
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
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
41
# Sintaxe:
if (expresso verdadeira)
execute comando ou bloco de comandos # Exemplo:
if (contador > 9) contador = 0;
42
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
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:
Falso = 0 Verdadeiro 0
45
Exemplo 12
46
comando else3 ;
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
#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" ); } }
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
#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
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 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
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
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
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
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 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
Quantos dias demora a Terra para dar uma volta completa no Sol ?
67
365,242199 dias !
Ou seja:
68
365 +
" " " " # & 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
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
//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
//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
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.
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
") Suponha que I e J sejam variveis inteiras com valores 6 e "2, respectivamente. Quais das seguintes condies so verdadeiras? a) 2 * " " J
%Verdadeiro
%Verdadeiro
%Verdadeiro
76
f) No I > 6 %Verdadeiro
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
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
81
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
#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
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
85
86
! 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);
No esquecer o break !
88
90
Mas, Continua...
Fim do if
91