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

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

Estruturas de Controle entre Instruções

Apresentações semelhantes


Apresentação em tema: "Estruturas de Controle entre Instruções"— Transcrição da apresentação:

1 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

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

12 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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 ... 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 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Seletores Múltiplos: Instrução case na Ada case expression is when choice list => stmt_sequence; when others => 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 ... else ... end if 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 prof Glá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) [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 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 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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 { print $nome } Paradigmas de Programação prof Gláucya Carreiro Boechat

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

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

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

46 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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 Paradigmas de Programação - prof Gláucya Carreiro Boechat
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 Paradigmas de Programação - prof Gláucya Carreiro Boechat
Comandos Protegidos Instrução de Laço: do <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; Paradigmas de Programação prof Gláucya Carreiro Boechat

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


Carregar ppt "Estruturas de Controle entre Instruções"

Apresentações semelhantes


Anúncios Google