1 / 46

CES-10 INTRODUÇÃO À COMPUTAÇÃO

CES-10 INTRODUÇÃO À COMPUTAÇÃO. Capítulo IV Comandos de Controle de Fluxo. Capítulo IV – Comandos de Controle de Fluxo. 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos 4.5 – Comandos de escape

iola-sosa
Télécharger la présentation

CES-10 INTRODUÇÃO À COMPUTAÇÃO

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CES-10 INTRODUÇÃO À COMPUTAÇÃO Capítulo IV Comandos de Controle de Fluxo

  2. Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos 4.5 – Comandos de escape 4.6 – Comandos de seleção 4.7 – Introdução à metodologia top-down

  3. 4.1 – Comandos Compostos 4.1.1 – Definição • Comando composto: sequência linear de comandos delimitada por abre e fecha-chaves (‘{’ e ‘}’) • Muitas vezes o escopo de um comando condicional ou repetitivo é um comando composto

  4. 4.1.2 – Descrições sintáticas informais de comandos tradicionais • CmdComposto → { Comando Comando ... Comando } • Comando → CmdComposto | CmdCondicional | CmdRepetitivo | CmdSeleção | CmdAtribuição | CmdEntrada | CmdSaída | CmdEscape | ChamadaFunção | CmdReturn | CmdVazio • CmdAtribuição → Variável = Expressão ; • CmdVazio → ; As descrições de CmdCondicional, CmdRepetivo e outros serão vistas oportunamente

  5. Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos 4.5 – Comandos de escape 4.6 – Comandos de seleção 4.7 – Introdução à metodologia top-down

  6. 4.2 – Comandos Condicionais 4.2.1 – Descrição sintática • CmdCondicional → if( Expressão ) Comando | if ( Expressão ) Comando else Comando

  7. 4.2.2 – Fluxogramas • if ( Expressão ) Comando • if ( Expressão ) Comando else Comando V F F Expressão Expressão V Comando Comando Comandos

  8. 4.2.3 – Ambiguidade • O seguinte esqueleto tem dupla interpretação: if ( Expr1 ) if (Expr2) Comando else Comando A qual dos dois if’s corresponde o else?

  9. O else corresponde ao 1º if Fluxogramas alternativos if ( Expr1 ) if (Expr2) Cmd1 else Cmd2 F F V V V F F V Expr2 Expr2 Expr1 Expr1 Cmd2 Cmd1 Cmd2 Cmd1 O else corresponde ao 2º if

  10. Regra desambiguificadora: O ‘else’ deve corresponder ao último ‘if’ if ( Expr1 ) if (Expr2) Cmd1 else Cmd2 if ( Expr1 ) if (Expr2) Cmd1 else Cmd2 F V V F Expr2 Expr1 Cmd2 Cmd1

  11. Para que o ‘else’ corresponda ao primeiro ‘if’: if (Expr1) { if (Expr2) Cmd1 } else Cmd2 if ( Expr1 ) if (Expr2) Cmd1 else Cmd2 F V F V Expr2 Expr1 Cmd2 Cmd1

  12. Exercícios 4.2: • Fazer um programa que ao ler a quantidade de segundos de um dia, apresente o resultado na forma hh:mm:ss. Por exemplo, para 34247s deve ser impresso 09:30:47. Deve haver uma mensagem de erro caso a quantidade de segundos seja maior que aqueles correspondentes às 24 horas do dia.

  13. Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos 4.5 – Comandos de escape 4.6 – Comandos de seleção 4.7 – Introdução à metodologia top-down

  14. 4.3 – Expressões Condicionais • São expressões especiais da Linguagem C • Forma: Expr1 ? Expr2 : Expr3 • Calcula-se Expr1 • Se Expr1 ≠ 0 (True), calcula-se o valor de Expr2, que será o valor da expressão condicional • Se Expr1 = 0 (False), calcula-se o valor de Expr3, que será o valor da expressão condicional

  15. Exemplo: seja o programa: #include <stdio.h> #include <stdlib.h> int main () { int a, b, x; a = 2; b = 3; x = a > b ? a + b : b - a; printf ("a = %d; b = %d; x = %d;", a, b, x); printf ("\n\n"); system ("pause"); return 0; } Resultado: a = 2; b = 3; x = 1; Pressione . . .

  16. Alguns comandos if-elsesimples podem ser substituídos por expressões condicionais a = 2; b = 3; a > b ? (a = 5, b = 15) : (a = 50, b = 100); printf ("a = %d; b = %d;\n", a, b); a = 2; b = 3; if (a > b) {a = 5; b = 15;} else {a = 50; b = 100;} printf ("a = %d; b = %d;\n", a, b); Trechos equivalentes

  17. Exercícios 4.3: • Sabe-se que a operação matemática min (x, y) pode ser implementada pela seguinte expressão condicional: (x < y) ? x : y De modo similar, usando somente expressões condicionais, implementar as seguintes operações matemáticas: min (x, y, z) emax (x, y, z, w)

  18. Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos 4.5 – Comandos de escape 4.6 – Comandos de seleção 4.7 – Introdução à metodologia top-down

  19. 4.4 – Comandos Repetitivos 4.4.1 – Descrição sintática • CmdRepetitivo → CmdWhile | CmdDoWhile | CmdFor • CmdWhile → while ( Expressão ) Comando • CmdDoWhile → do Comando while ( Expressão ) ; • CmdFor: visto mais adiante

  20. 4.4.2 – Comandos while e do-while • while ( Expressão ) Comando • do Comando while ( Expressão ) ; F Expressão Comando V V Comando Expressão F

  21. Sejam os seguintes comandos: int n, i, soma; scanf (“%d”, &n); i = 1; soma = 0; while (i <= n) { scanf (“%d”, &num); soma += num; i++; } printf (“soma = %d”, soma) ; Eles podem ser escritos usando-se o comando for: scanf (“%d”, &n); for (i = 1, soma = 0; i <= n; i++) { scanf (“%d”, &num); soma += num; } ou: for (scanf (“%d”, &n), i = 1, soma = 0; i <= n; soma += num, i++) scanf (“%d”, &num); 4.4.3 – Comando for

  22. Sejam os seguintes comandos: int n, i, soma; scanf (“%d”, &n); i = 1; soma = 0; while (i <= n) { scanf (“%d”, &num); soma += num; i++; } printf (“soma = %d”, soma) ; Ou for (scanf (“%d”, &n), i = 1, soma = 0; i <= n; scanf (“%d”, &num), soma += num, i++) ; Ou até: scanf (“%d”, &n); i = 1; soma = 0; for ( ; i <= n ; ) { scanf (“%d”, &num); soma += num; i++; } 4.4.3 – Comando for

  23. Descrição sintática do comando for: • CmdFor → for ( Inicializações ; Expressão ; Atualizações ) Comando • Inicializações e Atualizações: • Listas de zero ou mais CmdAtribuição’s,CmdEntrada’s, CmdSaída’s ou ChamadaFunção’s • Separados por vírgula e não por ponto e vírgula • O CmdForacima equivale a Inicializações while ( Expressão ) { Comando Atualizações }

  24. Fluxograma do comando for: • for ( Inicializações ; Expressão ; Atualizações ) Comando

  25. Exemplo: uso do “for” no programa da soma da PA Seja o programa já visto com “while” #include <stdio.h> #include <stdlib.h> intmain () { int a1, r, n, soma, aq, i; printf (“PROGRESSAO ARITMETICA”); printf (“\n\n\tDigite o primeiro termo, o n.o de termos e a razao: ”); scanf (“%d%d%d”, &a1, &n, &r); soma = 0; aq = a1; i = 1; while (i <= n) { soma += aq; aq += r; i++; } printf (“\nProgressaoaritmetica:\n\nPrimeiro termo: %d”, a1); printf (“\nRazao: %d\nNumero de termos: %d”, r, n); printf (“\n\nSoma: %d”, soma); printf (“\n\n”); system (“pause”); return 0; } O trecho em amarelo pode usar o comando for

  26. #include <stdio.h> #include <stdlib.h> int main () { int a1, r, n, soma, aq, i; printf ("PROGRESSAO ARITMETICA"); printf ("\n\n\tDigite o primeiro termo, o n.o de termos e a razao: "); scanf ("%d%d%d", &a1, &n, &r); for (soma = 0, aq = a1, i = 1; i <= n; i++) { soma += aq; aq += r; } printf ("\nProgressaoaritmetica:\n\nPrimeiro termo: %d", a1); printf ("\nRazao: %d\nNumero de termos: %d", r, n); printf ("\n\nSoma: %d", soma); printf ("\n\n"); system ("pause"); return 0; } O trecho marcado ainda pode ser substituído por: for (scanf ("%d%d%d", &a1, &n, &r), soma = 0, aq = a1, i = 1; i <= n; soma += aq, aq += r, i++); (o escopo do for ficou vazio)

  27. Exemplo: cálculo do MDC de vários pares de nos lidos • Método: ilustrado com o cálculo de MDC(-48, 64) Para números negativos, toma-se o módulo; então MDC(-48, 64) = MDC(48, 64) 16 48 64 48 16 64 48 16 0 48 16 0

  28. a = abs(a); b = abs(b); while (b > 0) { resto = a % b; a = b; b = resto; } printf ("MDC: %d", a); MDC(-48, 64) = MDC(48, 64) 16 48 64 48 64 48 16 0 48 16 0

  29. Esqueleto para vários pares de números #include <stdio.h> #include <stdlib.h> #include <math.h> int main () { int a, b, resto; char c, lixo; printf ("Calculo de MDC ? (s/n): "); do scanf ("%c", &c); while (c != 's' && c != 'n'); while (c == 's') { printf ("\n\nPar de numeros: "); scanf("%d%d%c",&a,&b,&lixo); Calculo do MDC e sua escrita; printf ("Calculo de MDC ? (s/n) "); do scanf ("%c", &c); while (c != 's' && c != 'n'); } printf ("\n\n"); system ("pause"); return 0; } Substitui-se a frase em amarelo pelo trecho já estabelecido anteriormente

  30. Usando a seguir o comando for #include <stdio.h> #include <stdlib.h> #include <math.h> int main () { int a, b, resto; char c, lixo; printf ("Calculo de MDC ? (s/n): "); do scanf ("%c", &c); while (c != 's' && c != 'n'); while (c == 's') { printf ("\n\nPar de numeros: "); scanf("%d%d%c",&a, &b,&lixo); a = abs(a); b = abs(b); while (b > 0) { resto = a % b; a = b; b = resto; } printf ("MDC: %d", a); printf ("Calculo de MDC ? (s/n) "); do scanf ("%c", &c); while (c != 's' && c != 'n'); } printf ("\n\n"); system ("pause"); return 0; }

  31. #include <stdio.h> #include <stdlib.h> #include <math.h> int main () { int a, b, resto; char c, lixo; printf ("Calculo de MDC ? (s/n): "); do scanf ("%c", &c); while (c != 's' && c != 'n'); while (c == 's') { printf ("\n\nPar de numeros: "); scanf("%d%d%c",&a,&b,&lixo); for (a = abs(a), b = abs(b); b > 0; b = resto) { resto = a % b; a = b; } printf ("MDC: %d", a); printf ("Calculo de MDC ? (s/n) "); do scanf ("%c", &c); while (c != 's' && c != 'n'); } printf ("\n\n"); system ("pause"); return 0; }

  32. aux 48728  10 Exemplo: inversão dos dígitos de um no inteiro • Método: ilustrado com a inversão do número 48728 para 82784 8 4872  10 2 487  10 7 48  10 inv 8 4  10 0 * 10 + 8 4 0 8 * 10 + 2 aux 82 * 10 + 7 827 * 10 + 8 aux = num; inv = 0; while (aux != 0) { inv = 10 * inv + aux % 10; aux = aux/10; } num 8278 * 10 + 4 48728 inv 82784

  33. Esqueleto para vários números #include <stdio.h> #include <stdlib.h> int main () { int num, aux, inv; char c, lixo; printf ("Inverter numero? (s/n): "); do scanf ("%c", &c); while (c != 's' && c != 'n'); while (c == 's') { printf ("\n\n\tNumero: "); scanf("%d%c",&num,&lixo); Obter o inverso de num; printf ("\n\t%d invertido torna-se %d", num, inv); printf ("\n\nInverter numero? (s/n): "); do scanf ("%c", &c); while (c != 's' && c != 'n'); } printf ("\n\n"); system ("pause"); return 0; } Substitui-se a frase em amarelo pelo trecho já estabelecido anteriormente

  34. Usando a seguir o comando for #include <stdio.h> #include <stdlib.h> int main () { int num, aux, inv; char c, lixo; printf ("Inverter numero? (s/n): "); do scanf ("%c", &c); while (c != 's' && c != 'n'); while (c == 's') { printf ("\n\n\tNumero: "); scanf("%d%c",&num,&lixo); aux = num; inv = 0; while (aux != 0) { inv = 10 * inv + aux % 10; aux = aux/10; } printf ("\n\t%d invertido torna-se %d", num, inv); printf ("\n\nInverter numero? (s/n): "); do scanf ("%c", &c); while (c != 's' && c != 'n'); } printf ("\n\n"); system ("pause"); return 0; }

  35. #include <stdio.h> #include <stdlib.h> int main () { int num, aux, inv; char c, lixo; printf ("Inverter numero? (s/n): "); do scanf ("%c", &c); while (c != 's' && c != 'n'); while (c == 's') { printf ("\n\n\tNumero: "); scanf("%d%c",&num,&lixo); for (aux = num, inv = 0; aux != 0; aux = aux/10) inv = 10 * inv + aux % 10; printf ("\n\t%d invertido torna-se %d", num, inv); printf ("\n\nInverter numero? (s/n): "); do scanf ("%c", &c); while (c != 's' && c != 'n'); } printf ("\n\n"); system ("pause"); return 0; }

  36. Exercícios 4.4: • Considerando o programa da figura do próximo slide: • Determinar qual será a sua saída, se a entrada for 1325 • Trocar o comando “for” desse programa por um trecho equivalente contendo um comando “while”, sem alterar a funcionalidade do programa • Trocar o comando “do-while” desse programa por um trecho equivalente contendo um comando “while”, sem alterar a funcionalidade do programa

  37. #include <stdio> int main () { long a, b, c, d, e, f, g; scanf("%d", &a); b = 0; g = 0; do { f = a / 10; e = a; for (c=0, d=0; d<10; d=d+1, e=e-f) {c = c + b;} b = e + c; a = f; g = g + e; printf("%d\t%d\n", e, g); } while (a != 0); printf("%d\n", b); printf ("\n\n"); system ("pause"); return 0; }

  38. Seja a equação Ax + By + Cz + D = 0, onde A, B, C e D são números inteiros. Fazer um programa para encontrar todas as soluções inteiras [x, y, z] dessa equação, que obedecem às restrições 0 xn, 0 yn e 0 zn, onde n é inteiro e n > 0. O programa deve ter um aninhamento de menor número possível de comandos repetitivos. Os valores de A, B, C, D e de n devem ser digitados durante a execução. • Palíndromoé um número tal que, invertendo-se a ordem de seus dígitos, o número obtido é igual ao original. Escrever umprograma para ler vários números inteiros e verificar se cada um é palíndromo

  39. Escrever um programa para ler vários números inteiros e dizer se cada um é primo • Escrever um programa em C para ler um número inteiro, positivo e guardá-lo na variável n e depois, calcular e imprimir o valor do seguinte somatório: • Fazer um programa para calcular o seno e o cosseno de vários ângulos dados em graus, usando séries de MacLaurin. Quando um ângulo é dado em radianos as Séries de MacLaurin são:

  40. Um distribuidor de brinquedos fez um acordo de compra de vários brinquedos pequenos, embalados em caixas de formato de paralelepípedo de tamanhos variados. Ele pretende colocar essas caixas em embalagens esféricas de plástico, coloridas, e revendê-las como pacotes surpresa. As esferas são fornecidas em 4 diâmetros internos diferentes: 10, 15, 20 e 25 centímetros. Para pedir as esferas, ele precisa saber quantas de cada diâmetro ele necessita. Para dimensioná-las, ele precisa determinar a maior medida de cada caixa, que é a sua diagonal, usando as dimensões de cada caixa (comprimento, largura e altura). Fazer um programa para ler o número de brinquedos e as dimensões de cada caixa, determinar e imprimir o número de esferas de cada tamanho necessárias para embalar as caixas de brinquedos, bem como o número de caixas que não cabem na esfera de maior dimensão. Observação: uma caixa que cabe numa esfera de tamanho x não deve ser guardada numa esfera de tamanho y, sendo y>x, sendo x e y dois dos 4 tamanhos especificados.

  41. Capítulo IV – Comandos de Controle de Fluxo 4.1 – Comandos compostos 4.2 – Comandos condicionais 4.3 – Expressões condicionais 4.4 – Comandos repetitivos 4.5 – Comandos de escape 4.6 – Comandos de seleção 4.7 – Introdução à metodologia top-down

  42. 4.5 – Comandos de Escape 4.5.1 – Descrição sintática • CmdEscape → CmdGoto | CmdBreak | CmdContinue • CmdGoto → goto Rótulo ; • CmdBreak → break ; • CmdContinue → continue ;

  43. goto Rótulo ; 4.5.2 – Comando goto • É um desvio incondicional para um comando rotulado • Exemplo: i = 0; scanf (“%d”, &n); Rot1: n--; if (i > n) goto Rot2; else { i++; goto Rot 1; } Rot 2: printf (“i = %d; n = %d;”, i, n); Quando usado sem critério, o comando goto desestrutura muito os programas Rótulos e goto não serão usados em CES-10

  44. break ; 4.5.3 – Comando break • É uma saída anormal de um comando repetitivo ou de seleção mais interno • Exemplo: O comando break só será usado em CES-10 para cooperar na boa estruturação dos comando de seleção (switch-case – Tópico 4.6)

  45. continue ; 4.5.4 – Comando continue • Encerra a repetição corrente e inicia a repetição seguinte • Exemplo: trechos equivalentes: for (Expr1; Expr2; Expr3) { Comandos 1 if ( ...... ) continue; Comandos 2 } Expr1; while (Expr2) { Comandos 1 if ( ...... ) goto next; Comandos 2 next: Expr3; } O comando continue não será usado em CES-10

  46. Exercícios 4.5: • Reescrever os dois trechos de programa a seguir, eliminando e evitando o uso dos comandos break, continue e goto: scanf (“%c%c”, &c, &lixo); cont = contdig = 0; while (c) { if (c == ‘E’) break; cont++;if (c >= ‘0’ && c <= ‘9’) contdig++; scanf (“%c%c”, &c, &lixo); } i = -5; n = 50; while (i < n) { i++; if (i == 0) continue; total += i; printf (“i = %d; total = %d\n”, i, total); }

More Related