A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Estruturas de Controle entre Instruções Paradigmas de Programação Prof. Gláucya Carreiro Boechat Universidade Federal Rural de.

Apresentações semelhantes


Apresentação em tema: "Estruturas de Controle entre Instruções Paradigmas de Programação Prof. Gláucya Carreiro Boechat Universidade Federal Rural de."— Transcrição da apresentação:

1 Estruturas de Controle entre Instruções Paradigmas de Programação Prof. Gláucya Carreiro Boechat Universidade Federal Rural de Pernambuco Departamento de Estatística e Informática

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

3 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

4 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)

5 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).

6 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

7 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?

8 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

9 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.

10 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 if s ? Java possui uma regra semântica estática  O else é associado ao if mais próximo

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

12 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 (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

13 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º ifAninhado ao 1º if if... then begin if... then...… else … end end else …

14 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?

15 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, GO TO GO TO  Aspectos negativos Segmentos requerem GOTOs Sem encapsulamento, ou seja, os segmentos selecionáveis podem estar em qualquer lugar no código

16 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

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

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 18

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

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... end if Paradigmas de Programação - prof Gláucya Carreiro Boechat 20

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 21

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 22

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 - prof Gláucya Carreiro Boechat 23

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 24

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 25

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 26

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 27

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

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 29

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 30

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 31

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 32

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 33

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 34

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 35

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 36

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 37

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 38

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 39

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 { print $nome } Paradigmas de Programação - prof Gláucya Carreiro Boechat 40

41 Iteração baseada em Estruturas de Dados A instrução foreach do 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 41

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 42

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 43

44 Desvio Incondicional Exemplo de "goto" em C: printf("Enter m 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!, ending program"); FIM: Paradigmas de Programação - prof Gláucya Carreiro Boechat 44

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 r Paradigmas de Programação - prof Gláucya Carreiro Boechat 45

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 46

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

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 48

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 49

50 Comandos Protegidos Instrução de Laço: do -> [] ->... [] -> 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 50

51 Paradigmas de Programação - prof Gláucya Carreiro Boechat 51 Comandos Protegidos: instrução de laço


Carregar ppt "Estruturas de Controle entre Instruções Paradigmas de Programação Prof. Gláucya Carreiro Boechat Universidade Federal Rural de."

Apresentações semelhantes


Anúncios Google