Estruturas de Controle entre Instruções

Slides:



Advertisements
Apresentações semelhantes
IFTO ESTRUTURA DE DADOS AULA 05 Prof. Manoel Campos da Silva Filho
Advertisements

Estruturação de Linguagens (Pascal e C++)
Programação em Java Prof. Maurício Braga
Programação em Java Prof. Maurício Braga
Software Básico Silvio Fernandes
Introdução à Programação Engenharia da Computação
Estruturas de Controle
Programação em Java Prof. Maurício Braga
Estruturas de Repetição
14/10/09 Uma animação possui: Início; Passo; Fim; 1.
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INSTRUÇÕES DE CONTROLE – PARTE II Prof. Thiago Pereira Rique
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INSTRUÇÕES DE CONTROLE – PARTE I Prof. Thiago Pereira Rique
Pearson Education Slide 1. Pearson Education Slide 2 Capítulo 2 Criado por Frederick H. Colclough, Colorado Technical University Fluxo de Controle.
Ludwig Krippahl, 2007 Programação para as Ciências Experimentais 2006/7 Teórica 3.
Software Básico Silvio Fernandes
Universidade Federal de São Carlos Introdução à Linguagem C Comandos.
Campus Curitiba Departamento Acadêmico de Matemática Angela Olandoski Barboza UTFPR – Damat.
Algoritmos e Programação Linguagens de Programação Teoria Aula 5 (05/05) Universidade Federal do Vale do São.
Introdução à Computação - Jorge Macêdo
Árvores.
EXPRESSÕES ARITMÉTICAS
EXPRESSÕES ARITMÉTICAS
Claudio Esperança Python: Comandos Básicos. Primeiros passos em programação Até agora só vimos como computar algumas expressões simples Expressões são.
ALGOL Luccas L. L. M. Martins Raoní Galvão Renato Evangelista
Linguagem C Estruturas de Controle de Fluxos
Rodrigo de Toledo (original: Claudio Esperança)
9 Controle de fluxo Seqüenciadores. Jumps. Escapes. Exceções.
Aula 4 Nomes, Vinculações, Tipos e Escopos
1 Aula 7 ImplementandoSubprogramas Universidade do Vale do Rio dos Sinos
Introdução ao JavaScript
Programação Baseada em Objectos Desenho de TAD
Revisão da Linguagem C.
Classes e objetos Arrays e Sobrecarga
Estrutura de decisão e repetição em JAVA
Classes e objetos P. O. O. Prof. Grace.
Tópicos Tipos de Dados Variáveis por Valor Variáveis por Referência
O Portal do Estudante de Computação
João Lucas de Oliveira Torres
Semana 03: Comandos de desvio de fluxo. Expressões lógicas.
Fundamentos de Engenharia de SW
FTIN Formação Técnica em Informática
Universidade Federal de Alagoas – UFAL Centro de Tecnologia – CTEC
SISTEMAS DIGITAIS ALGEBRA DE BOOLE E SIMPLIFICAÇÃO DE CIRC. LÓGICOS
LINGUAGENS DE PROGRAMAÇÃO PROF. DANIELA PIRES
Estruturas de Dados Módulo 3 – Controle de Fluxo
Semana 03 Comandos de desvio de fluxo. Expressões lógicas.
Tipos de Dados Paradigmas de Programação
Sintaxe e Semântica Prof.: Gláucya Carreiro Boechat
Tipos Abstratos de Dados
Expressões e Instrução de Atribuição
Paradigmas de Linguagens de Programação Linguagem Imperativa 1
Instituto Federal de Santa Catarina
Paradigmas de Programação - prof Gláucya Carreiro Boechat1 Elaborando um Programa Prof.: Gláucya Carreiro Boechat Universidade.
Aula 6 - Estruturas de Controle
Algoritmo e Programação
BC-0505 Processamento da Informação
Algoritmos e Estruturas de Dados
Introdução a Algoritmos
Aula prática 2 Operadores e Expressões Comandos de Decisão Comentários
A Linguagem de Máquina – Desvios e Laços
Comando CASE Desvio por seleção múltipla
Fundamentos de linguagens de programação
Profa. Maria Augusta Constante Puget
PARADIGMAS DE LINGUAGENS EXPRESSÕES E INSTRUÇÕES DE ATRIBUIÇÃO
Programação para Web I AULA 4 ESTRUTURAS DE CONTROLE.
11 Revisão da Linguagem C Prof. Kariston Pereira Adaptado de Material gentilmente fornecido pelo Prof. Rui Tramontin (DCC/UDESC)
Linguagem de Programação 11 Estruturas de Decisão e Repetição. Prof. Luiz José Hoffmann Filho
1 Estruturas de Controle Algoritmos Algoritmos –Série de ações em uma ordem específica As ações executadas Ordem na qual as ações são executadas.
Ambientação com a Sintaxe de Java: parte 2 Prof. Gustavo Wagner Slides Originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB  Centro de.
IF E ITERAÇÃO WHILE Dilvan Moreira (baseado no livro Big Java e T. Munzner)
Transcrição da apresentação:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 http://www.cs.utexas.edu/users/EWD/ewd04xx/EWD472.PDFur Paradigmas de Programação - prof Gláucya Carreiro Boechat

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

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

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

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

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

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