Baixe o app para aproveitar ainda mais
Prévia do material em texto
MC 102 – Algoritmos e programac¸a˜o de computadores Tomada de deciso˜es • Voltemos ao problema de calcular as ra´ızes de uma equac¸a˜o de segundo grau. Foi feita uma simplificac¸a˜o em que supunhamos ∆ > 0 • Como resolver o problema para qualquer valor de ∆? • Como seria um algoritmo para resolver este problema? 1 MC 102 – Algoritmos e programac¸a˜o de computadores Estrutura condicional • Usada para decidir se uma determinada ac¸a˜o ira´ ocorrer. Esta decisa˜o depende do resultado de uma expressa˜o. 2 MC 102 – Algoritmos e programac¸a˜o de computadores Estrutura condicional • Usada para decidir se uma determinada ac¸a˜o ira´ ocorrer. Esta decisa˜o depende do resultado de uma expressa˜o. – A ac¸a˜o pode ser: ∗ um comando u´nico: uma expressa˜o terminada com ; ∗ um bloco de comandos: uma sequ¨eˆncia de comandos delimitada por { e }. 2 MC 102 – Algoritmos e programac¸a˜o de computadores Estrutura condicional • Usada para decidir se uma determinada ac¸a˜o ira´ ocorrer. Esta decisa˜o depende do resultado de uma expressa˜o. – A ac¸a˜o pode ser: ∗ um comando u´nico: uma expressa˜o terminada com ; ∗ um bloco de comandos: uma sequ¨eˆncia de comandos delimitada por { e }. – A expressa˜o pode ser: ∗ verdadeira: quando seu resultado e´ qualquer valor diferente de zero; ∗ falsa: quando seu resultado e´ igual a zero. 2 MC 102 – Algoritmos e programac¸a˜o de computadores if - else • Usado para expressar deciso˜es; • Sintaxe: if (expressa˜o) ac¸a˜o1 else ac¸a˜o2 • A expressa˜o e´ avaliada. – Se o resultado for diferente de 0, ela e´ verdadeira e a ac¸a˜o1 e´ executada. – Caso contra´rio, isto e´, quando o resultado for igual a 0, ela e´ falsa e a ac¸a˜o2 e´ executada. 3 MC 102 – Algoritmos e programac¸a˜o de computadores Exemplo if - else #include < stdio.h > int main() { int num; scanf(‘‘%d”,&num); if ((num % 2) == 0) printf(‘‘E´ \n”); else printf(‘‘E´ \n”); return 0; } 4 MC 102 – Algoritmos e programac¸a˜o de computadores Exemplo if - else #include < stdio.h > int main() { int num; scanf(‘‘%d”,&num); if (!(num % 2)) printf(‘‘E´ \n”); else printf(‘‘E´ \n”); return 0; } 5 MC 102 – Algoritmos e programac¸a˜o de computadores Programa das ra´ızes • Tarefa: caso em que as ra´ızes sa˜o iguais. #include < stdio.h > #include < math.h > int main() { float a, b, c; /* coeficientes */ float res1, res2; /* resultados */ float aux; /* auxiliares */ /* Leitura dos dados de entrada */ printf(‘‘\nDigite os coeficientes da equac¸a˜o: ”); scanf(‘‘%f %f %f”,&a,&b,&c); 6 MC 102 – Algoritmos e programac¸a˜o de computadores /* Ca´lculo das ra´ızes */ aux = b * b - 4 * a * c; /* Delta */ if (aux > 0) { /* ra´ızes reais */ aux = sqrt(aux); res1 = (-b + aux)/(2 * a); res2 = (-b - aux)/(2 * a); printf(‘‘\n %0.3f e %0.3f\n”,res1,res2); } else { /* ra´ızes complexas */ res1 = -b/(2 * a); res2 = sqrt(-aux)/(2 * a); printf(‘‘\n %0.3f+%0.3f i”,res1,res2); printf(‘‘ e %0.3f-%0.3f i\n”,res1,res2); } return 0; } 7 MC 102 – Algoritmos e programac¸a˜o de computadores O else e´ opcional #include < stdio.h > int main() { int num1, num2, num3, max; scanf(‘‘%d%d%d’’,&num1,&num2,&num3); max = num1; if (max < num2) max = num2; if (max < num3) max = num3; printf(‘‘O ma´ximo e´: %d’’,max); return 0; } 8 MC 102 – Algoritmos e programac¸a˜o de computadores Encadeamento de if’s • Ocorre quando a ac¸a˜o de uma certa estrutura condicional e´ outra estrutura condicional. if (n > 0) if (a > b) z = a; 9 MC 102 – Algoritmos e programac¸a˜o de computadores Encadeamento de if’s • Ocorre quando a ac¸a˜o de uma certa estrutura condicional e´ outra estrutura condicional. • Ambiguidade do else: if (n > 0) if (a > b) z = a; else z = b; 10 MC 102 – Algoritmos e programac¸a˜o de computadores Encadeamento de if’s • Ocorre quando a ac¸a˜o de uma certa estrutura condicional e´ outra estrutura condicional. • Ambiguidade do else: if (n > 0) if (a > b) z = a; else z = b; • E se vc precisa que o else fique associado ao if mais externo? 10 MC 102 – Algoritmos e programac¸a˜o de computadores Encadeamento de if’s • Ocorre quando a ac¸a˜o de uma certa estrutura condicional e´ outra estrutura condicional. • Ambiguidade do else: if (n > 0) if (a > b) z = a; else z = b; • E se vc precisa que o else fique associado ao if mais externo? if (n > 0) { ←− if (a > b) z = a; } ←− else z = b; 10 MC 102 – Algoritmos e programac¸a˜o de computadores Encadeamento de if’s • Ocorre quando a ac¸a˜o de uma certa estrutura condicional e´ outra estrutura condicional. • Ambiguidade do else: if (n > 0) if (a > b) z = a; else z = b; • E se vc precisa que o else fique associado ao if mais externo? if (n > 0) { ←− if (a > b) z = a; } ←− else z = b; • Exemplo de ordenar treˆs nu´meros. 10 MC 102 – Algoritmos e programac¸a˜o de computadores Entrada: Treˆs nu´meros (inteiros) n1, n2 e n3; Sa´ıda: A impressa˜o dos treˆs nu´meros em ordem na˜o decrescente. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 11 MC 102 – Algoritmos e programac¸a˜o de computadores Entrada: Treˆs nu´meros (inteiros) n1, n2 e n3; Sa´ıda: A impressa˜o dos treˆs nu´meros em ordem na˜o decrescente. 1. Ler treˆs nu´meros n1, n2 e n3. 2. Se n1 ≤ n2, enta˜o 3. se n2 ≤ n3, enta˜o n1 ≤ n2 ≤ n3 4. 5. 6. 7. 8. 9. 10. 11. 11 MC 102 – Algoritmos e programac¸a˜o de computadores Entrada: Treˆs nu´meros (inteiros) n1, n2 e n3; Sa´ıda: A impressa˜o dos treˆs nu´meros em ordem na˜o decrescente. 1. Ler treˆs nu´meros n1, n2 e n3. 2. Se n1 ≤ n2, enta˜o 3. se n2 ≤ n3, enta˜o n1 ≤ n2 ≤ n3 4. sena˜o →sabemos que n1 ≤ n2 e n3 < n2 5. 6. 7. 8. 9. 10. 11. 11 MC 102 – Algoritmos e programac¸a˜o de computadores Entrada: Treˆs nu´meros (inteiros) n1, n2 e n3; Sa´ıda: A impressa˜o dos treˆs nu´meros em ordem na˜o decrescente. 1. Ler treˆs nu´meros n1, n2 e n3. 2. Se n1 ≤ n2, enta˜o 3. se n2 ≤ n3, enta˜o n1 ≤ n2 ≤ n3 4. sena˜o →sabemos que n1 ≤ n2 e n3 < n2 5. se n1 ≤ n3, enta˜o n1 ≤ n3 < n2 6. 7. 8. 9. 10. 11. 11 MC 102 – Algoritmos e programac¸a˜o de computadores Entrada: Treˆs nu´meros (inteiros) n1, n2 e n3; Sa´ıda: A impressa˜o dos treˆs nu´meros em ordem na˜o decrescente. 1. Ler treˆs nu´meros n1, n2 e n3. 2. Se n1 ≤ n2, enta˜o 3. se n2 ≤ n3, enta˜o n1 ≤ n2 ≤ n3 4. sena˜o →sabemos que n1 ≤ n2 e n3 < n2 5. se n1 ≤ n3, enta˜o n1 ≤ n3 < n2 6. sena˜o n3 < n1 ≤ n2 7. 8. 9. 10. 11. 11 MC 102 – Algoritmos e programac¸a˜o de computadores Entrada: Treˆs nu´meros (inteiros) n1, n2 e n3; Sa´ıda: A impressa˜o dos treˆs nu´meros em ordem na˜o decrescente. 1. Ler treˆs nu´meros n1, n2 e n3. 2. Se n1 ≤ n2, enta˜o 3. se n2 ≤ n3, enta˜o n1 ≤ n2 ≤ n3 4. sena˜o →sabemos que n1 ≤ n2 e n3 < n2 5. se n1 ≤ n3, enta˜o n1 ≤ n3 < n2 6. sena˜o n3 < n1 ≤ n2 7. Sena˜o →sabemos que n2 < n1 8. 9. 10. 11. 11 MC 102 – Algoritmos e programac¸a˜o de computadores Entrada: Treˆs nu´meros (inteiros) n1, n2 e n3; Sa´ıda: A impressa˜o dos treˆs nu´meros em ordem na˜o decrescente. 1. Ler treˆs nu´meros n1, n2 e n3. 2. Se n1 ≤ n2, enta˜o 3. se n2 ≤ n3, enta˜o n1 ≤ n2 ≤ n3 4. sena˜o →sabemos que n1 ≤ n2 e n3 < n2 5. se n1 ≤ n3, enta˜o n1 ≤ n3 < n2 6. sena˜o n3 < n1 ≤ n2 7. Sena˜o →sabemos que n2 < n1 8. se n1 ≤ n3, enta˜o n2 < n1 ≤ n3 9. 10. 11.11 MC 102 – Algoritmos e programac¸a˜o de computadores Entrada: Treˆs nu´meros (inteiros) n1, n2 e n3; Sa´ıda: A impressa˜o dos treˆs nu´meros em ordem na˜o decrescente. 1. Ler treˆs nu´meros n1, n2 e n3. 2. Se n1 ≤ n2, enta˜o 3. se n2 ≤ n3, enta˜o n1 ≤ n2 ≤ n3 4. sena˜o →sabemos que n1 ≤ n2 e n3 < n2 5. se n1 ≤ n3, enta˜o n1 ≤ n3 < n2 6. sena˜o n3 < n1 ≤ n2 7. Sena˜o →sabemos que n2 < n1 8. se n1 ≤ n3, enta˜o n2 < n1 ≤ n3 9. sena˜o →sabemos que n2 < n1 e n3 < n1 10. 11. 11 MC 102 – Algoritmos e programac¸a˜o de computadores Entrada: Treˆs nu´meros (inteiros) n1, n2 e n3; Sa´ıda: A impressa˜o dos treˆs nu´meros em ordem na˜o decrescente. 1. Ler treˆs nu´meros n1, n2 e n3. 2. Se n1 ≤ n2, enta˜o 3. se n2 ≤ n3, enta˜o n1 ≤ n2 ≤ n3 4. sena˜o →sabemos que n1 ≤ n2 e n3 < n2 5. se n1 ≤ n3, enta˜o n1 ≤ n3 < n2 6. sena˜o n3 < n1 ≤ n2 7. Sena˜o →sabemos que n2 < n1 8. se n1 ≤ n3, enta˜o n2 < n1 ≤ n3 9. sena˜o →sabemos que n2 < n1 e n3 < n1 10. se n2 ≤ n3, enta˜o n2 ≤ n3 < n1 11. 11 MC 102 – Algoritmos e programac¸a˜o de computadores Entrada: Treˆs nu´meros (inteiros) n1, n2 e n3; Sa´ıda: A impressa˜o dos treˆs nu´meros em ordem na˜o decrescente. 1. Ler treˆs nu´meros n1, n2 e n3. 2. Se n1 ≤ n2, enta˜o 3. se n2 ≤ n3, enta˜o n1 ≤ n2 ≤ n3 4. sena˜o →sabemos que n1 ≤ n2 e n3 < n2 5. se n1 ≤ n3, enta˜o n1 ≤ n3 < n2 6. sena˜o n3 < n1 ≤ n2 7. Sena˜o →sabemos que n2 < n1 8. se n1 ≤ n3, enta˜o n2 < n1 ≤ n3 9. sena˜o →sabemos que n2 < n1 e n3 < n1 10. se n2 ≤ n3, enta˜o n2 ≤ n3 < n1 11. sena˜o n3 < n2 < n1 11 MC 102 – Algoritmos e programac¸a˜o de computadores #include <stdio.h> int main( ){ int n1, n2, n3; scanf(‘‘%d %d %d”,&n1,&n2, &n3); if (n1 <= n2) if (n2 <= n3) printf(‘‘%d %d %d\n”, n1, n2, n3); else if (n1 <= n3) printf(‘‘%d %d %d\n”, n1, n3, n2); else printf(‘‘%d %d %d\n”, n3, n1, n2); else if (n1 <= n3) printf(‘‘%d %d %d\n”, n2, n1, n3); else if (n2 <= n3) printf(‘‘%d %d %d\n”, n2, n3, n1); else printf(‘‘%d %d %d\n”, n3, n2, n1); return 0; } → Implemente tambe´m o outro algoritmo visto em sala. 12 MC 102 – Algoritmos e programac¸a˜o de computadores Else – If: estrutura aninhada • Construc¸a˜o que ocorre muito frequentemente e generaliza a ide´ia de mu´ltiplas opc¸o˜es/uma sa´ıda (mutuamente exclusivas). Sintaxe: if (expressa˜o 1 ) ac¸a˜o 1 else if (expressa˜o 2 ) ac¸a˜o 2 else if (expressa˜o 3 ) ac¸a˜o 3 . . . else if (expressa˜o n) ac¸a˜o n else ac¸a˜o • As expresso˜es sa˜o avaliadas em ordem. Quando uma expressa˜o e´ verdadeira a ac¸a˜o associada a`quela expressa˜o e´ executada e toda a cadeia de condicionais e´ encerrada. 13 MC 102 – Algoritmos e programac¸a˜o de computadores Exemplo: mapeamento nota → conceito 14 MC 102 – Algoritmos e programac¸a˜o de computadores Exemplo: mapeamento nota → conceito #include < stdio.h > int main() { float nota; scanf(‘‘%f’’,¬a); if (nota >= 8.5) printf(‘‘Conceito A.\n’’); else if (nota >=7.0) printf(‘‘Conceito B.\n’’); else if (nota >= 5.0) printf(‘‘Conceito C.\n’’); else printf(‘‘Conceito D.\n’’); return 0; } 14 MC 102 – Algoritmos e programac¸a˜o de computadores O que faz o programa abaixo? #include<stdio.h> int main(){ int x1, x2, op; printf(‘‘Digite:\n 1\t para ;\n 2\t para ;\n”); scanf(‘‘%d”, &op); if (op==1){ scanf(‘‘%d”, &x1); printf(‘‘Resultado: %d\n”, x1*x1); } if (op==2){ scanf(‘‘%d%d”, &x1, &x2); printf(‘‘Resultado: %d \n”, x1*x2); } return 0; } 15 MC 102 – Algoritmos e programac¸a˜o de computadores Exemplo Determinar o sala´rio semanal de um funciona´rio em termos de nu´meros de horas trabalhadas, considerando as seguintes regras: 1. A hora de trabalho normal e´ de R$100,00. 2. A hora de trabalho extra e´ de R$150,00. • Sa˜o consideradas horas extra, aquelas que excedem 40h semanais. 3. O funciona´rio na˜o pode receber mais do que o dobro do sala´rio que receberia por uma jornada normal de 40h. Entrada: Um inteiro na˜o negativo, representando o nu´mero total de horas trabalhadas na semana. Sa´ıda: O sala´rio do funciona´rio naquela semana. 16 MC 102 – Algoritmos e programac¸a˜o de computadores #include<stdio.h> #define HR TRB 100 #define HR EXT 150 int main() { int num t, salario = 0; printf(‘‘Digite o nu´mero total de horas trabalhadas: ”); scanf(‘‘%d”, &num t); if (num t > 0) { if (num t > 40) salario = 40*HR TRB + (num t-40)*HR EXT; else salario = num t*HR TRB; if (salario > 2 * 40 * HR TRB) salario = 2 * 40 * HR TRB; } printf(‘‘O trabalhador recebera´ %d reais.\n”, salario); return 0; } 17 MC 102 – Algoritmos e programac¸a˜o de computadores Exemplo - brincando de ora´culo Voceˆ e´ um ora´culo e o seu objetivo e´ adivinhar um nu´mero, no intervalo de 1 a 8, que o usua´rio vai escolher. Voceˆ pode fazer no ma´ximo treˆs perguntas. • Generalize o problema para nu´meros de 1 a 16, fazendo o menor nu´mero de perguntas poss´ıvel. 18 MC 102 – Algoritmos e programac¸a˜o de computadores Switch Estrutura de decisa˜o mu´ltipla que testa o resultado de uma expressa˜o com va´rios valores inteiros constantes e desvia o fluxo do programa de acordo com este resultado. Sintaxe: switch (expressa˜o) { case valor 1 : ac¸a˜o 1 case valor 2 : ac¸a˜o 2 . . . case valor k : ac¸a˜o k default: ac¸a˜o } 19 MC 102 – Algoritmos e programac¸a˜o de computadores Sera´ que funciona? #include<stdio.h> int main() { char vogal; printf(‘‘Digite uma vogal: ”); scanf(‘‘%c”,&vogal); switch (vogal) { case ’a’: vogal = ’e’; case ’e’: vogal = ’i’; case ’i’: vogal = ’o’; case ’o’: vogal = ’u’; case ’u’: vogal = ’a’; } printf(‘‘Subsequente: %c\n”,vogal); return 0; } Atenc¸a˜o: espac¸amento adaptado para caber no slide. 20 MC 102 – Algoritmos e programac¸a˜o de computadores E agora sera´ que funciona? int main() { char vogal; printf(‘‘Digite uma vogal: ”); scanf(‘‘%c”,&vogal); switch (vogal) { case ’a’: vogal = ’e’; break; case ’e’: vogal = ’i’; break; case ’i’: vogal = ’o’; break; case ’o’: vogal = ’u’; break; case ’u’: vogal = ’a’; break; } printf(‘‘Subsequente: %c.\n”,vogal); return 0; } 21 MC 102 – Algoritmos e programac¸a˜o de computadores Resolvemos? int main() { char vogal; printf(‘‘Digite uma vogal: ”); scanf(‘‘%c”,&vogal); switch (vogal) { case ’a’: case ’A’: vogal = ’e’; break; case ’e’: case ’E’: vogal = ’i’; break; case ’i’: case ’I’: vogal = ’o’; break; case ’o’: case ’O’: vogal = ’u’; break; case ’u’: case ’U’: vogal = ’a’; break;} printf(‘‘Subsequente: %c\n”,vogal); return 0; } 22 MC 102 – Algoritmos e programac¸a˜o de computadores E agora? #include<stdio.h> #include<ctype.h> int main() { char vogal; printf(‘‘Digite uma vogal: ”); scanf(‘‘%c”,&vogal); vogal = tolower(vogal); switch (vogal) { case ’a’: printf(‘‘Subsequente e´ ’e’. \n”); break; case ’e’: printf(‘‘Subsequente e´ ’i’. \n”); break; case ’i’: printf(‘‘Subsequente e´ ’o’. \n”); break; case ’o’: printf(‘‘Subsequente e´ ’u’. \n”); break; case ’u’: printf(‘‘Subsequente e´ ’a’. \n”); break; default: printf(‘‘Na˜o e´ vogal! \n”); break; } return 0; } /* esp./ind. - para caber no slide */ 23 MC 102 – Algoritmos e programac¸a˜o de computadores Switch – quadro resumo • Os valores dos casos devem ser diferentes. • O caso default e´ opcional. • O comando break causa a sa´ıda imediata do switch. – Apo´s o te´rmino da execuc¸a˜o dos comandos de um caso, a execuc¸a˜o prossegue para os comandos do pro´ximo caso,a menos que um comando de parada seja encontrado. • E´ poss´ıvel agrupar va´rios casos quando a sequeˆncia de comandos para estes casos e´ a mesma. Por exemplo: case ’0’: case ’1’: case ’3’: digito++; break; • O break do u´ltimo caso e´ colocado por convenc¸a˜o e precauc¸a˜o na˜o sendo necessa´rio do ponto de vista sinta´tico. 24 MC 102 – Algoritmos e programac¸a˜o de computadores Exemplo calculadorinha #include<stdio.h> int main() { float n1, n2; int op; printf(‘‘Digite:\n”); printf(‘‘1 \t para somar dois nu´meros;\n”); printf(‘‘2 \t para subtrair dois nu´meros;\n”); printf(‘‘3 \t para multiplicar dois nu´meros;\n”); printf(‘‘4 \t para dividir dois nu´meros;\n”); printf(‘‘Outro caracter para encerrar.\n”); scanf(‘‘%d”,&op); 25 MC 102 – Algoritmos e programac¸a˜o de computadores switch (op) { case 1: printf(‘‘Digite dois nu´meros: ”); scanf(‘‘%f%f”, &n1, &n2); printf(‘‘A soma de %f e %f ”, n1, n2); printf(‘‘e´ %f.\n”, n1 + n2); break; case 2: printf(‘‘Digite dois nu´meros: ”); scanf(‘‘%f%f”, &n1, &n2); printf(‘‘A subtrac¸a˜o de %f e %f ”, n1, n2); printf(‘‘e´ %f.\n”, n1 - n2); break; case 3: printf(‘‘Digite dois nu´meros: ”); scanf(‘‘%f%f”, &n1, &n2); printf(‘‘A multiplicac¸a˜o de %f e %f ”, n1, n2); printf(‘‘e´ %f.\n”, n1 * n2); break; 26 MC 102 – Algoritmos e programac¸a˜o de computadores case 4: printf(‘‘Digite dois nu´meros: ”); scanf(‘‘%f%f”, &n1, &n2); printf(‘‘A divisa˜o de %f por %f ”, n1, n2); printf(‘‘e´ %f.\n”, n1 / n2); break; default: printf(‘‘Calculadora encerrada.\n”); break; } return 0; } 27
Compartilhar