DSCCCTUFCG rangeldsc ufpb br Profs Jos Eustquio Rangel
DSC/CCT/UFCG rangel@dsc. ufpb. br Profs. : José Eustáquio Rangel de Queiroz Roberto Medeiros de Faria, Ulrich Schiel Carga Horária: 60 h
DSC/CCT/UFCG Introdução à Programação rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br Tópicos 4. 1 4. 2 4. 3 4. 4 4. 5 4. 6 4. 7 4. 8 4. 9 4. 10 4. 11 Introdução Fundamentos da Repetição Controlada por Contador Estrutura de Repetição For Estrutura For : Notas e Observações Exemplos de Uso da Estrutura For Estrutura de Seleção Multipla Switch Estrutura de Repetição Do/While Instruções Break e Continue Operadores Lógicos Confusão entre os Operadores de Igualdade (==) e de Atribuição (=) 4. 12 Resumo de Programação Estruturada 2
4. 1 Introdução DSC/CCT/UFCG ± Tópicos abordados rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ° Estruturas adicionais de controle de repetição ² For ² Do/while ° Estrutura de seleção múltipla switch ° Instrução break ² ° Usada para sair imediata e rapidamente de certas estruturas de controle Instrução continue ² Usada para saltar o restante do corpo de uma estrutura de repetição, procedendo com a próxima iteração do laço 3
4. 2 Fundamentos da Repetição DSC/CCT/UFCG ± Laço rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ° Grupo de instruções que o computador executa repetidamente enquanto alguma condição permanece verdadeira ± Repetição controlada por contador ° Repetição definida Conhecimento do número de vezes de execução do laço ° Uso de variável de controle Contagem do número de repetitições 4
DSC/CCT/UFCG 4. 2 Fundamentos da Repetição rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ± Repetição controlada por sentinela ° Repetição indefinida ° Uso Falta de conhecimento prévio do número de repetições ° Valor da sentinela Término dos dados 5
DSC/CCT/UFCG 4. 3 Fundamentos da Repetição Controlada por Contador ± Exigências da repetição controlada por rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br contador ° Nome de uma variável de controle (ou contador de laço) ° Valor inicial da variável de controle ° Condição de teste do valor final da variável de controle (i. e. se o laço deve continuar) ° Incremento (ou decremento) para a alteração da variável de controle a execução do laço (iteração) 6
DSC/CCT/UFCG 4. 3 Fundamentos da Repetição Controlada por Contador ± Exemplo rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br int contador = 1; // inicialização while (contador <= 10) { // condição de repetição printf( "%dn", contador ); ++contador; // incremento } ° Declaração int contador = 1; ² Fornecimento do nome contador para a variável ² Declaração de um tipo (inteiro) para a variável ² Reserva de espaço para armazenamento da variável na memória ² Definição do valor inicial da variável como 1 7
DSC/CCT/UFCG 4. 4 Estrutura de Repetição for ± Formato geral dos laços for (inicialização; teste_de_continuação_do_laço; incremento) instrução rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ± Exemplo for (contador = 1; contador <= 10; contador++) printf("%dn", contador); ° Impressão dos inteiros de 1 a 10 Sem ponto-e-vírgula (; ) após a última expressão 8
DSC/CCT/UFCG 4. 4 Estrutura de Repetição for ± Possibilidade de eventual substituição de rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br laços for por laços while inicialização; while (teste_de_continuação_do_laço){ instrução; incremento; (ou decremento; ) } ± Inicialização e incremento ° Possibilidade de uso de listas separadas por vírgulas ° Exemplo for (i = 0, j = 0; j + i <= 10; j++, i++) printf("%dn", j + i); Separação por vírgula (, ) 9
DSC/CCT/UFCG 4. 5 Estrutura for: Notas e Observações ± Expressões Aritméticas rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ° Possibilidade de inclusão de expressões aritméticas à inicialização, condição de continuação do laço e ao incremento/decremento ² Se x igual a 2 e y igual a 10 for (j = x; j <= 4 * x * y; j += y / x é equivalente a for (j = 2; j <= 80; j += 5 10
4. 5 Estrutura for: Notas e Observações DSC/CCT/UFCG rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ± Notas sobre a estrutura for ° Incremento pode ser negativo (decremento) ° Se a condição de continuação do laço é inicialmente falsa ² ² ° O corpo da estrutura for não é realizada A execução prossegue com a próxima instrução após a estrutura for Variável de Controle ² Freqüentemente (mas não necessáriamente) impressa ou usada dentro do corpo 11
4. 5 Estrutura for: Notas e Observações rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br DSC/CCT/UFCG 01 02 03 04 05 06 07 08 09 10 11 12 13 15 /* Soma com for */ #include <stdio. h> int main() { int soma = 0, numero; for (numero = 2; numero <= 100; numero += 2) soma += numero; printf( “A soma eh %dn", soma ); return 0; } A soma eh 2550 12
DSC/CCT/UFCG 4. 7 Estrutura de Seleção Múltipla switch ± Switch ° rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br Uso em contextos de testes separados para cada um dos valores passíveis de serem assumidos por uma variável ou expressão Decisões múltiplas ± Formato ° Série de rótulos case e um rótulo opcional default switch (valor) { case '1': ações case '2': ações default: ações } ° break; Abandono da estrutura 13
DSC/CCT/UFCG 4. 7 Estrutura de Seleção Múltipla switch ± Fluxograma da estrutura switch break ações do case a V case a F rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br break ações do case b V case b F break ações do case z V case z F ações default 14
rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br DSC/CCT/UFCG 4. 5 Estrutura switch: Notas e Observações 01 Contagem de conceitos */ 02 #include <stdio. h> 03 04 int main() 05 { 06 int conceito; 07 int conta. A = 0, conta. B = 0, conta. C = 0, 08 conta. D = 0, conta. F = 0; 09 10 printf("Entre com os conceitos. n" ); 11 printf("Entre com o caractere EOF para o final das entradas. n"); 12 while ((conceito = getchar()) != EOF) { 13 switch (conceito) { /* switch aninhado em um while */ 14 case 'A': case 'a': /* conceito foi A maiúsculo ou minúsculo */ 15 ++conta. A; /* incremento do contador de As */ 16 break; 17 case 'B': case 'b': /* conceito foi B maiúsculo ou minúsculo */ 18 ++conta. B; /* incremento do contador de Bs */ 19 break; 20 case 'C': case 'c': /* conceito foi C maiúsculo ou minúsculo */ 21 ++conta. C; /* incremento do contador de Cs */ 22 break; 23 case 'D': case 'd': /* conceito foi D maiúsculo ou minúsculo */ 24 ++conta. D; /* incremento do contador de Ds */ 25 break; 15
rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br DSC/CCT/UFCG 4. 5 Estrutura switch: Notas e Observações 26 case ‘F’: case ‘f’: /* conceito foi B maiúsculo ou minúsculo */ 27 ++conta. F; /* incremento do contador de Fs */ 28 break; 29 case ‘n': case ‘ ’: /* entradas ignoradas */ 30 break; 31 default: /* demais conceitos */ 32 printf(“Fornecido um conceito incorreto. ”); 33 printf(“Entre com um novo conceito. n”); 34 break; 35 } 36 } 37 printf( "n. Totais para cada letra de conceito são: n" ); 38 printf( "A: %dn", conta. A ); 39 printf( "B: %dn", conta. B ); 40 printf( "C: %dn", conta. C ); 41 printf( "D: %dn", conta. D ); 42 printf( "F: %dn", conta. F); 43 return 0 44 } 16
4. 5 Estrutura switch: Notas e Observações DSC/CCT/UFCG rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ± Resultado Entre com os conceitos. Entre com o caractere EOF para o final das entradas. A B C C A D F C E Fornecido um conceito incorreto. Entre com um novo conceito. D A B Totais para cada letra de conceito sao: A: 3 B: 2 C: 3 D: 2 F: 1 17
4. 8 Estrutura de Repetição do/while DSC/CCT/UFCG ± A estrutura de repetição do/while ° ° rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br Similar à estrutura do while Teste da condição para repetição Após a execução do corpo do laço ² Realização ° das ações Pelo menos uma vez Formato do { instrução; } while (condição); 18
4. 8 Estrutura de Repetição do/while DSC/CCT/UFCG ± Exemplo int contador = 1; do { printf("%d ", contador); } while (++contador <= 10); rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ° Resultado Impressão dos inteiros de 1 a 10 19
DSC/CCT/UFCG 4. 8 Estrutura de Repetição do/while ± Fluxograma do/while da estrutura de repetição rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ações V condição F 20
rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br DSC/CCT/UFCG 01 02 03 04 05 06 07 08 09 10 14 4. 5 Estrutura do/while: Notas e Observações /* Uso da estrutura de repetição do/while */ #include <stdio. h> int main() { int contador = 1; do { printf( "%d ", contador ); } while (++contador <= 10); return 0; } 1 2 3 4 5 6 7 8 9 10 21
4. 9 Instruções break e continue DSC/CCT/UFCG ± Break ° rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ° ° Saída imediata de uma estrutura while, for, do/while ou switch Continuação da execução do programa a partir da primeira instrução após a estrutura Usos comuns da instrução break ² Saída prematura de um laço ² Desconsideração switch do restante de uma estrutura 22
4. 9 Instruções break e continue DSC/CCT/UFCG ± Continue ° Desconsideração das instruções restantes do corpo de uma estrutura while, for ou do/while rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ² ° Prosseguimento com a próxima iteração do laço while e do/while ² Avaliação do teste de continuação do laço imediatamente após a execução da instrução continue ° For ² Execução das expressões de incremento, após o que ocorre a avaliação do teste de continuação do laço 23
4. 9 Instruções break e continue rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br DSC/CCT/UFCG 01 02 03 04 05 06 07 08 09 10 11 12 13 14 /*Uso da instrução continue em uma estrutura for */ #include <stdio. h> int main() { int x; for (x = 1; x <= 10; x++) { if (x == 5) continue; /* ignora o código restante em um laço somente se x=5*/ printf("%d ", x); } printf("n. Continue é usado para saltar a impressão do 5n" ); return 0; } 1 2 3 4 6 7 8 9 10 Continue é usado para saltar a impressão do 5 24
DSC/CCT/UFCG 4. 10 Operadores Lógicos ± && (E lógico) ° Retorna verdadeiro se ambas as condições são verdadeiras ± || (OU lógico) rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ± ° Retorna verdadeiro pelo condições são verdadeiras menos uma das ± ! (NÃO lógico, negação lógica) ° Inverte a verdade/falsidade de sua condição ° Operador unário, tem um único operando 25
DSC/CCT/UFCG 4. 10 Operadores Lógicos rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ± Uso típico como condições em laços Expressão Resultado verdadeiro && falso verdadeiro || falso !verdadeiro !falso verdadeiro 26
4. 11 DSC/CCT/UFCG Confusão entre os Operadores de Igualdade (==) e Atribuição (=) rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ± Erro perigoso!!! ° Comumente não causa erro de sintaxe ° Qualquer expressão que produz um valor pode ser usado em estruturas de controle ° ° Valores diferentes de zero são verdadeiros, valores zero são falsos Exemplo de uso do operador de igualdade (==) if (codigo_de_pagamento == 4) printf(“Você obteve um bônus!n"); de codigo_de_pagamento, se ele é um 4 então é premiado com um bônus ² Verificação 27
4. 11 DSC/CCT/UFCG ° Confusão entre os Operadores de Igualdade (==) e Atribuição (=) Exemplo de substituição de == por = if (codigo_de_pagamento = 4) printf(“Voce obteve um bônus!n"); ² Atribuição do valor 4 a codigo. De. Pagamento rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ² 4 é diferente de zero; Assim, a expressão é verdadeira e sempre haverá a premiação com o bônus, não importando qual era o valor de codigo. De. Pagamento ° Erro de lógica, não erro de sintaxe 28
4. 11 DSC/CCT/UFCG Confusão entre os Operadores de Igualdade (==) e Atribuição (=) rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ± lvalues (valores esquerdos) ° Expressões que podem esquerdo de uma equação ° Seus valores podem ser alterados, assim como os nomes de variáveis ² aparecer no lado x = 4; 29
4. 11 DSC/CCT/UFCG Confusão entre os Operadores de Igualdade (==) e Atribuição (= ) rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ± rvalues (valores direitos) ° Expressões que só podem aparecer no lado direito de uma equação ° Constantes, tais como números ° ² Não se pode escrever 4 = x; ² Deve-se escrever x = 4; lvalues podem ser usados como rvalues, mas não o contrário ² y = x; 30
4. 12 DSC/CCT/UFCG ± Programação Estruturada ° rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ± Resumo de Programação Estruturada Maior facilidade de compreensão, teste, depuração e alteração de programas Regras para programação estruturada ° Regras desenvolvidas programação pela comunidade de ° Uso exclusivo de estruturas de controle com única entrada/única saída 31
4. 12 DSC/CCT/UFCG ° Resumo de Programação Estruturada Regras 1. Ponto de Partida Fluxograma mais simples rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br 2. Substituição de qualquer retângulo (ação) por dois retângulos (ações) em seqüência 3. Substituição de qualquer retângulo (ação) por qualquer estrutura de controle (seqüência, if/else, switch, while, do/while ou for) 4. Aplicação das regras 2 and 3 em qualquer ordem e múltiplas vezes 32
4. 12 DSC/CCT/UFCG Resumo de Programação Estruturada ± Regra 1 rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ° ± Regra 2 Início a partir do fluxograma mais simples Regra 2 ° Substituição de qualquer retângulo por dois retângulos em seqüência Regra 2 33
4. 12 DSC/CCT/UFCG Resumo de Programação Estruturada ± Regra 3 ± Substituição de qualquer retângulo por uma estrutura de controle rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br Regra 3 34
4. 12 DSC/CCT/UFCG Resumo de Programação Estruturada rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ± Formas de controle de programas ° Seqüência Manipulação automática pelo compilador ° ° Seleção Repetição ° Possibilidade de combinação Apenas de duas maneiras if, if/else ou switch while, do/while ou for ³ Aninhamento (regra 3) ³ Alinhamento (regra 2) 35
4. 12 DSC/CCT/UFCG Resumo de Programação Estruturada rangel@dsc. ufpb. br rangel@lmrs-semarh. ufpb. br ± Formas de controle de programas ° Alternativas, condicionais Possibilidade de reescrita como uma instrução if / else ° Repetição Possibilidade de reescrita como uma instrução while 36
DSC/CCT/UFCG José Eustáquio Rangel de Queiroz Roberto Medeiros de Faria Ulrich Schiel UNIVERSIDADE FEDERAL DE CAMPINA GRANDE CENTRO DE CIÊNCIAS E TECNOLOGIA rangel@dsc. ufpb. br DEPARTAMENTO DE SISTEMAS E COMPUTAÇÃO
- Slides: 37