1 / 51

Estruturas de Controle entre Instruções

Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática. Estruturas de Controle entre Instruções. Paradigmas de Programação Prof. Gláucya Carreiro Boechat glaucyacboechat@gmail.com. Exemplo de Estruturas de Controle. Fluxo de controle ao nível de instrução.

loren
Download Presentation

Estruturas de Controle entre Instruções

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. Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática Estruturas de Controle entre Instruções Paradigmas de Programação Prof. Gláucya Carreiro Boechat glaucyacboechat@gmail.com

  2. Exemplo de Estruturas de Controle Paradigmas de Programação - prof Gláucya Carreiro Boechat

  3. Fluxo de controle ao nível de instrução • Estrutura de controle é uma instrução de controle e sua coleção de comandos cuja execução ela controla • Níveis de fluxo de controle: • Entre unidades de programa • Entre instruções do programa • Dentro de expressões • Regra de Associatividade • Regra de Precedência Paradigmas de Programação - prof Gláucya Carreiro Boechat

  4. Evolução • FORTRAN I – • Instruções de controle eram baseados diretamente no hardware do IBM 704 (anos 50); • Muita pesquisa e discussão acerca desse assunto nos anos 60 • Resultado importante : Foi aprovado que todos os algoritmos representados por um fluxograma podem ser codificados usando apenas duas instruções de controle: • Somente com instrução dupla (if ... else ...) • Laços pré-testados (while) Paradigmas de Programação - prof Gláucya Carreiro Boechat

  5. Instruções Compostas • Questão de projeto • Uma estrutura de controle pode ter múltiplas entradas? • Instrução Composta – • método para abstrair uma coleção de instruções como uma única instrução • introduzido no ALGOL 60 na forma de: begin comando 1 ... comando n end • Um bloco é uma Instrução Composta que pode definir um novo escopo (possui variáveis locais). Paradigmas de Programação - prof Gláucya Carreiro Boechat

  6. Instruções de Seleção • Uma instrução de seleção oferece os meios de escolher entre dois ou mais caminhos de execução em um programa • Duas categorias gerais: • Seleção bidirecional • Seleção n-dimensional ou múltipla Paradigmas de Programação - prof Gláucya Carreiro Boechat

  7. Instruções de Seleção Bidirecional • Permitem escolher entre dois ou mais caminhos de execução em programa. • Forma geral: • if (expressão booleana) • instrução • Else instrução • Questões de projeto: • Qual é a forma e o tipo da expressão que controla a seleção? • O que pode ser selecionado? (Instruções simples/compostas, seqüência de instruções)? • Como o significado de seletores aninhados pode ser especificado? Paradigmas de Programação - prof Gláucya Carreiro Boechat

  8. Exemplo Bidirecionais • Exemplo em FORTRAN (unidirecional): • IF (expressão booleana) instrução • Problema: • seleciona somente uma único instrução. • Para selecionar mais instruções, deve ser utilizado um "goto" como no seguinte exemplo: IF (.NOT. condição) GOTO 20 I = 1 J = 2 20 CONTINUE Paradigmas de Programação - prof Gláucya Carreiro Boechat

  9. Exemplo Bidirecionais • ALGOL 60 (unidireccional): if (expressão booleana) then begin ... end • ALGOL 60 (bidireccional): if (expressão booleana) then instrução (Cláusula then) else instrução (Cláusula else) • A Instrução poderia ser simples ou composta. Paradigmas de Programação - prof Gláucya Carreiro Boechat

  10. Aninhando Seletores • Exemplo em Java if (sum == 0) if (count == 0) result = 0; else result = 1; • O else pertence a qual dos ifs? • Java possui uma regra semântica estática • O else é associado ao if mais próximo Paradigmas de Programação - prof Gláucya Carreiro Boechat

  11. Aninhando Seletores • Exemplo em Pascal (aninhamento direto de seletores): if ... then if ... then ... else ... • Qual then associa-se com else? • Regra do Pascal: • else associa-se com o then mais próximo. Paradigmas de Programação - prof Gláucya Carreiro Boechat

  12. Aninhando Seletores • Para forçar uma semântica alternativa, uma forma sintática diferente é necessária, na qual o if-then é colocado em uma instrução composta: if (sum == 0) { if (sum == 0) { if (count == 0) result = 0; } else result = 1; • A solução acima é usada em C, C++ e C# • Perl requer que todas as cláusulas then e else sejam compostas Paradigmas de Programação - prof Gláucya Carreiro Boechat

  13. Ex. em ALGOL 60: • Não permite aninhamento direto • É preciso ser colocado em uma instrução composta Aninhado ao 2º if Aninhado ao 1º if if ... then if ... then begin begin if ... then if ... then ... … else … end end else … Paradigmas de Programação - prof Gláucya Carreiro Boechat

  14. Construções de Seleção Múltipla • Permite a seleção de uma instrução, dentre qualquer número de instruções ou de grupos de instruções • Questões de Projeto: • Qual é a forma e o tipo da expressão que controla que controla a seleção? • Que instruções são selecionadas (simples, compostas, seqüências de instruções)? • O fluxo de execução através da estrutura limita-se a incluir apenas um único segmento selecionável? • O que é acontece quando o valor da expressão não está representado? Paradigmas de Programação - prof Gláucya Carreiro Boechat

  15. Seletores Múltiplos Antigos • FORTRAN - IF aritmético • IF (expressão aritmética) N1, N2, N3 • Exemplo – Determinar valor númerico é > 0 , = 0, < 0 IF (expressão) 10, 20, 30 10 ... ... GO TO 40 20 ... ... GO TO 40 30 ... ... 40 ... • Aspectos negativos • Segmentos requerem GOTOs • Sem encapsulamento, ou seja, os segmentos selecionáveis podem estar em qualquer lugar no código Paradigmas de Programação - prof Gláucya Carreiro Boechat

  16. Seletores Múltiplos Modernos • Pascal "case" • Sintaxe: case expressão of constante_1 : instrução_1; ... constante_n : instrução_n end Paradigmas de Programação - prof Gláucya Carreiro Boechat

  17. Seletores Múltiplos Modernos • C switch switch (expression) { switch (expression) { case const_expr_1: stmt_1; ... case const_expr_n: stmt_n; [default: stmt_n+1] Paradigmas de Programação - prof Gláucya Carreiro Boechat

  18. Seletores Múltiplos Modernos • Escolhas de projeto para o switch do C / C++ • A expressão de controle pode ser apenas do tipo inteiro • As instruções selecionáveis podem ser seqüências de instruções ou blocos de Seletores Múltiplos • não existe desvio implícito no final do segmento selecionado • Deve usado o comando break no final de cada segmento; • A cláusula default serve para valores que não foram representados (se não existir default, nada é feito) Paradigmas de Programação - prof Gláucya Carreiro Boechat

  19. Seletores Múltiplos: • Instrução case na Ada case expression is whenchoicelist => stmt_sequence; … whenchoicelist => stmt_sequence; whenothers => stmt_sequence;] end case; Paradigmas de Programação - prof Gláucya Carreiro Boechat

  20. Seletores Múltiplos usando if • Seletores múltiplos podem ser construídos como extensões diretas de seletores bidirecionais, usando cláusulas else-if, por exemplo em Ada: if ... then ... elsif ... then ... else ... endif Paradigmas de Programação - prof Gláucya Carreiro Boechat

  21. Instruções Iterativas • Execução de zero ou mais repetição de uma instrução ou bloco de instrução • Realizada através de: • Iteração • recursão Paradigmas de Programação - prof Gláucya Carreiro Boechat

  22. Instruções Iterativas • Tipos de Instruções Iterativas: • Laços controlados por contador; • Laços controlados logicamente; • De forma iterativa; • De forma recursiva. • Laços controlados por iterador. Paradigmas de Programação - prof Gláucya Carreiro Boechat

  23. Instruções Iterativas • Considerações de projeto (para iteração): • Como a iteração é controlada? • Contador; • Expressão lógica (booleana) ou relacional. • Onde colocar a condição de controle do laço? • No início do laço (laço pré-testado); • No fim do laço (laço pós-testado). Paradigmas de Programação - profGláucya Carreiro Boechat

  24. Laços controlados por contador • Uma instrução iterativa de contagem possui uma variável do laço, e meios de especificar os valores inicial e terminal, e o tamanho do passo • Questões de projeto: • Qual é o tipo e o escopo da variável do laço? • Que valor a variável do laço tem na sua finalização? • Deve ser legal que a variável de laço ou os seus parâmetros sejam mudados no laço e, se assim for, a mudança afeta o seu controle? • Os parâmetros do laço devem ser avaliados somente uma vez, ou uma vez para cada iteração? Paradigmas de Programação - prof Gláucya Carreiro Boechat

  25. Laços controlados por contador • Instrução for do Pascal • for variavel := inicial (to | downto) final do comando • Questões de Projeto "for" do Pascal: • Variável do laço deve ser do tipo ordinal, de escopo visível (local ou não local); • Após terminar de forma normal, o valor da variável do laço é indefinido; • A variável do laço não pode ser alterada no corpo do laço; • Parâmetros do laço são avaliados uma única vez. Paradigmas de Programação - prof Gláucya Carreiro Boechat

  26. Laços controlados por contador • Ex. em FORTRAN 77 e FORTRAN 90 • Sintaxe: • do label var = início, fim [, incremento] • Variável de laço pode ser do tipo INTEGER, REAL,DOUBLE • Ex. em FORTRAN 90 (outro DO) • Sintaxe: [nome:] DO var = inicio, término [,incremento] ... END DO [nome] • Variável de laço tem que ser do tipo INTEGER; • Incremento pode ser qualquer valor diferente de zero; • Parâmetros (início, fim) podem ser expressões. Paradigmas de Programação - prof Gláucya Carreiro Boechat

  27. Laços controlados por contador • Instrução for do C, do C++ e do Java for ([expr_1] ; [expr_2] ; [expr_3]) comando Exemplo for (int cont = 0; cont < comp; cont++) {…} • Todas as variáveis envolvidas podem ser alteradas no corpo do laço • A primeira expressão é avaliada apenas uma vez, mas as outras duas são avaliadas em cada iteração Paradigmas de Programação - prof Gláucya Carreiro Boechat

  28. Laços controlados por contador Paradigmas de Programação - prof Gláucya Carreiro Boechat

  29. Laços Controlados Logicamente • O controle da repetição baseia-se em uma expressão booleana e não em um contador • Considerações de Projeto: • O teste do laço é efetuado: • No início da instrução (pré-teste)? • No fim da instrução (pós-teste)? • O laço controlado logicamente deve ser uma forma especial do laço controlado por contador, ou uma nova instrução de iterativa? Paradigmas de Programação - prof Gláucya Carreiro Boechat

  30. Laços Controlados Logicamente • Exemplos em Pascal: • Pascal possui instruções separadas para • pré-teste • pós-teste Paradigmas de Programação - prof Gláucya Carreiro Boechat

  31. Laços Controlados Logicamente • C e C++ também possuem, mas a expressão de controle para o pós-teste é tratada como no pré-teste While (condição == true) corpo do laço; do corpo do laço; while (condição == true); Paradigmas de Programação - prof Gláucya Carreiro Boechat

  32. Laços Controlados Logicamente • Ex. do Ada: • Possui a versão de pré-teste mas não a pós-teste. • Ex. do FORTRAN 77 e 90: • Não possui este tipo de instruções (laços lógicos). Paradigmas de Programação - prof Gláucya Carreiro Boechat

  33. Mecanismo de Controle de Laços Localizados pelo Usuário • programador deve escolher a localização do controle do laço (outra que não o topo ou a base) • Considerações de Projeto: • O mecanismo condicional deve ser uma parte integrante da saída do laço? • Pode este mecanismo estar presente num laço já controlado? • Pode o controle ser transferido para fora de mais de um laço? Paradigmas de Programação - prof Gláucya Carreiro Boechat

  34. Mecanismo de Controle de Laços Localizados pelo Usuário (break e continue) • C , C++ e Java: break • incondicional; • para qualquer laço ou switch; um nível apenas • Java e C# possuem uma instrução break rotulada: • o controle é transferido para o rótulo • Uma alternativa: continue • ela pula o resto das instruções da iteração, mas não sai do laço Paradigmas de Programação - prof Gláucya Carreiro Boechat

  35. Mecanismo de Controle de Laços Localizados pelo Usuário • Exemplo da instrução "break": while ( soma < 1000) { getnext(valor); if (valor < 0 ) break; soma += valor } • se valor for negativo o laço é finalizado. Paradigmas de Programação - prof Gláucya Carreiro Boechat

  36. Mecanismo de Controle de Laços Localizados pelo Usuário • Exemplo do FORTRAN 90 (EXIT): • Término incondicional para qualquer laço, e qualquer número de níveis. • FORTRAN 90 possui a instrução "CYCLE“ • Possui a mesma semântica do "continue" do C). Paradigmas de Programação - prof Gláucya Carreiro Boechat

  37. Iteração baseada em Estruturas de Dados • A iteração está associada a uma estrutura de dados; • A ordem dos elementos depende do iterador; • O mecanismo de controle é uma chamada de função que retorna o próximo elemento, em alguma ordem, desde que exista elementos, caso contrário o laço termina. Paradigmas de Programação - prof Gláucya Carreiro Boechat

  38. Iteração baseada em Estruturas de Dados • O for do C, do C++ e do Java pode ser usado para simular uma instrução de Instruções iterativas: for (p=root; p==NULL; traverse(p)){ ... } Paradigmas de Programação - prof Gláucya Carreiro Boechat

  39. Iteração baseada em Estruturas de Dados • Ex. em C++ (mostrar todos os elementos de um array): • A instrução "for" do C++ pode ser utilizada para percorrer toda a estrutura de dados. char * nomes[]={"José","João","Joca",0}; for(char ** p = nomes; *p!= 0; p++) { cout << *p << end; } Paradigmas de Programação - prof Gláucya Carreiro Boechat

  40. Iteração baseada em Estruturas de Dados • Ex. em Perl (mostrar todos os elementos de um array): • Perl possui um iterador implícito para arrays e hashes. $nomes = {"José","João","Joca"}; foreach $nome (@nomes) { print $nome } Paradigmas de Programação - prof Gláucya Carreiro Boechat

  41. Iteração baseada em Estruturas de Dados • A instrução foreachdo C# itera nos elementos de vetores: Strings[] = strList = {“Bob”, “Carol”, “Ted”}; • Instruções iterativas: Iteração baseada em Estruturas de Dados foreach (Strings name in strList) Console.WriteLine (“Name: {0}”, name); Paradigmas de Programação - prof Gláucya Carreiro Boechat

  42. Desvio Incondicional • Uma instrução de desvio incondicional transfere o controle para outra posição do programa. • Mecanismo mais conhecido: • instrução goto • Problema -> Legibilidade Paradigmas de Programação - prof Gláucya Carreiro Boechat

  43. Desvio Incondicional • Algumas linguagens não têm instruções de desvio incondicional • Modula-2 • Java. • Linguagem que permitem "goto" mas desaconselham a sua utilização. • Algol • Pascal • C • C++ Paradigmas de Programação - prof Gláucya Carreiro Boechat

  44. Desvio Incondicional • Exemplo de "goto" em C: printf("Enterm for mesg, or e to end:"); scanf("%c",&letter); if(letter=='m') goto A; else goto B; A: printf("\nHello!, you pressed m"); goto FIM; B: printf("\nBye!, endingprogram"); FIM: Paradigmas de Programação - prof Gláucya Carreiro Boechat

  45. Comandos Protegidos • Propósito • Fornecer instruções de controle que suportem uma metodologia de projeto que assegure a exatidão d • Sugeridos por Dijkstra • Commun. ACM 18 (1975), 8: 453–457 • http://www.cs.utexas.edu/users/EWD/ewd04xx/EWD472.PDFur Paradigmas de Programação - prof Gláucya Carreiro Boechat

  46. Comandos Protegidos • Semântica da instrução de seleção: • Avalie todas as expressões booleanas • Se mais de uma for verdadeira • escolha uma de forma não determinística • Se nenhuma for verdadeira • um erro em tempo de execução é gerado Paradigmas de Programação - prof Gláucya Carreiro Boechat

  47. Comandos Protegidos: instrução de seleção Paradigmas de Programação - prof Gláucya Carreiro Boechat

  48. Comandos Protegidos • Exemplo em Ada: if i =0 -> soma := soma + i [] i > j -> soma := soma + j [] j > i -> soma := soma + i fi • Se i = 0 e j > i, a construção escolhe não deterministicamente a primeira ou a terceira instrução para ser executada; • Se i for igual a j e diferente de zero, temos um erro pois nenhuma das expressões é válida. Paradigmas de Programação - prof Gláucya Carreiro Boechat

  49. Comandos Protegidos • Semântica da instrução de laço: • Avaliar todas as expressões lógicas; • Se mais de uma for verdadeira, escolher uma, não deterministicamente; • em seguida reinicia o laço novamente; • Se nenhuma for verdadeira, finaliza o laço. Paradigmas de Programação - prof Gláucya Carreiro Boechat

  50. Comandos Protegidos • Instrução de Laço: do <boolean> -> <instrução> [] <boolean> -> <instrução> ... [] <boolean> -> <instrução> od • Exemplo em ADA: (ordenar: n1 < n2 < n3) do n1 > n2 -> max:= n1; n1:=n2; n2:=max; [] n3 > n2 -> max:= n3; n2:=n3; n3:=max; od Paradigmas de Programação - prof Gláucya Carreiro Boechat

More Related