Estruturas de controle no nível de sentença



Documentos relacionados
Estruturas de controle no nível de sentença

Capítulo 8. Estruturas de Controle no Nível de Sentença

Linguagens de Programação

Os objetivos indicados aplicam-se a duas linguagens de programação: C e PHP

9 Comandos condicionais

Linguagem C: Estruturas de Controle. Prof. Leonardo Barreto Campos 1

OPERADORES E ESTRUTURAS DE CONTROLE

2 echo "PHP e outros.";

Desenvolvimento OO com Java 3 Estruturas de Controle e Programação Básica

Equivale a um conjunto de if 's encadeados, porém mais estruturado.

CONCEITOS DE LINGUAGEM DE PROGRAMAÇÃO CARACTERÍSTICAS. João Gabriel Ganem Barbosa

Expressões. Prof. Alberto Costa Neto Linguagens de Programação. Departamento de Computação Universidade Federal de Sergipe

Geração de código intermediário. Novembro 2006

Minicurso de Python Aula 1. Raphael Lupchinski Marcelo Millani

Programação WEB I Estruturas de controle e repetição

Python: Comandos Básicos. Claudio Esperança

Geração de código. Ivan Ricarte INTRODUÇÃO À COMPILAÇÃO

LÓGICA DE PROGRAMAÇÃO. PROFª. M.Sc. JULIANA H Q BENACCHIO

Curso: Ciência da Computação Disciplina: Construção de Compiladores Período: Prof. Dr. Raimundo Moura

JAVA NETBEANS PGOO Prof. Daniela Pires Conteúdo

Introdução a PHP (Estruturas de Controle)

Universidade da Beira Interior Cursos: Matemática /Informática e Ensino da Informática

Nesta aula serão apresentados alguns comandos de condição, repetição e gráficos.

Introdução ao Javascript. Parte 2 Prof. Victor Hugo Lopes

CAPITULO 5 COMANDO DE FLUXO IF

Introdução à Programação Aula 11 Mais sobre ciclos e iteração

Fundamentos de Programação. Turma CI-240-EST. Josiney de Souza.

AULA 1: PARADIGMAS DE PROGRAMAÇÃO

Conceitos de Linguagens de Programação

PL/SQL. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados PL/SQL

O código JavaScript deve ser colocado entre tags de comentário para ficar escondido no caso de navegadores antigos que não reconhecem a linguagem.

Curso C: Controle de Fluxo

PROGRAMA DE DISCIPLINA

Resumo da Matéria de Linguagem de Programação. Linguagem C

Universidade Federal de Minas Gerais Instituto de Ciências Agrárias

Aprendendo Python na Prática. Dante Moreira Zaupa Mestrando em Computação Aplicada Bolsista de Pesquisa

Prof Evandro Manara Miletto. parte 2

Pontifícia Universidade Católica de São Paulo Departamento de Ciência da Computação

Java Como Programar, 8/E

Programação por Objectos. Java

José Romildo Malaquias

Programação Básica em Arduino Aula 2

e à Linguagem de Programação Python

Utilizem a classe Aula.java da aula passada:

PYTHON LISTAS. Introdução à Programação SI2

Laboratório de Banco de Dados Prof. Luiz Vivacqua. PL/pgSQL A Linguagem de programação do PostgreSQL

Informática I. Aula 6. Aula 6-12/09/2007 1

Algoritmos e Estrutura de Dados. Introdução a Linguagem Python (Parte I) Prof. Tiago A. E. Ferreira

Linguagens de Programação Aula 10

APOSTILA PHP PARTE 1

FUNCTION ) RETURNS INTEGER AS $$ DECLARE

PROGRAMA DE DISCIPLINA

Javascript 101. Parte 2

UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET. Programação para Internet I

INTRODUÇÃO ÀS LINGUAGENS DE PROGRAMAÇÃO

Introdução ao PHP. Prof. Késsia Marchi

Expressões e sentença de atribuição

Bases de Dados 2007/2008. Aula 8

INTRODUÇÃO À LINGUAGEM C++

Técnicas de Teste de Software

Linguagens de Programação. Marco A L Barbosa

Hugo Pedro Proença, 2007

Apresentar os conceitos básicos e as estruturas de linguagem relacionadas à tomada de decisão ofertadas pela linguagem C, tais como:

Construção de Compiladores. Construção de Compiladores. Motivação. Motivação. Contexto Histórico. Classificações: Gerações 09/03/2010

Para testar seu primeiro código utilizando PHP, abra um editor de texto (bloco de notas no Windows) e digite o código abaixo:

Python Condicionais e Loops. Introdução à Programação SI1

Programação de Computadores

1.6. Tratamento de Exceções

JSP - ORIENTADO A OBJETOS

3/9/2010. Ligação da UCP com o barramento do. sistema. As funções básicas dos registradores nos permitem classificá-los em duas categorias:

Nomes, vinculações e escopos

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

Introdução. A verificação de tipos pode ser estática e dinâmica

Panorâmica geral sobre PHP. PHP é uma linguagem que permite fazer. um ficheiro em PHP contem código PHP misturado com HTML.

Apostila de Fundamentos de Programação I. Prof.: André Luiz Montevecchi

Organização de Computadores Software

Oficina de ShellScript

Nomes, vinculações e escopos

Programação: Estruturas de seleção

Introdução à Linguagem

Algoritmos e Estruturas de Dados I 01/2013. Estruturas Condicionais e de Repetição (parte 2) Pedro O.S. Vaz de Melo

Acumuladores. Paradigma de Programação Funcional. Marco A L Barbosa

Aula 02: C# - Estruturas de Decisão

Linguagem de Programação III Aula 2 - Apresentação da Disciplina

Sintaxe e Semântica. Fases da Compilação. programa fonte

Laboratório de Programação 02

Geração de Código Intermediário. Tradução dirigida por sintaxe. Código de três endereços - exemplo. Código de Três Endereços

Manipulando Strings no VBA (Replace, Mid e InStr)

Variáveis e estruturas de controlo. Introdução à Programação André L. Santos

História. Nasceu em 1993, numa discussão entre Yuhikiro Matsumoto e um colega.

Estruturas de Controle em c#

LINGUAGENS E PARADIGMAS DE PROGRAMAÇÃO. Ciência da Computação IFSC Lages. Prof. Wilson Castello Branco Neto

Bruno Jurkovski Lucas Fialho Zawacki. Site do curso:

Comandos de Manipulação

Programação de Computadores - I. Profª Beatriz Profº Israel

Programação Web com PHP. Prof. Wylliams Barbosa Santos Optativa IV Projetos de Sistemas Web

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Transcrição:

Estruturas de controle no nível de sentença Linguagens de Programação Marco A L Barbosa cba Este trabalho está licenciado com uma Licença Creative Commons - Atribuição-CompartilhaIgual 4.0 Internacional. http://github.com/malbarbo/na-lp-copl

Conteúdo Introdução Estruturas de seleção Estruturas iterativas Saltos Comandos guardados Referências

Introdução

Introdução O controle do fluxo em um programa ocorre em diversos níveis Dentro das expressões (capítulo 7) Entre as unidades de programas (capítulo 9) Entre as sentenças (capítulo 8 - o qual vamos estudar agora) 4 / 41

Introdução No passado, as instruções de controle das linguagens eram feitas baseadas nas instruções dos processadores Muita pesquisa e discussão entre meados de 1960 e meados 1970 Apenas um instrução de controle é necessária, o goto, mas esta instrução tem diversos problemas O goto pode ser substituído por duas instruções de controle: seleção e repetição Na prática, o aspecto importante não é a quantidade de instruções de controle, mas a facilidade de leitura e escrita 5 / 41

Introdução Uma estrutura de controle é uma instrução de controle e a coleção de instruções cuja a execução está sobre seu controle Questão de projeto relativa a todas as estruturas de controle A estrutura de controle tem múltiplas entradas? 6 / 41

Estruturas de seleção

Estruturas de seleção Uma instrução de seleção prove meios de escolher entre dois ou mais caminhos de execução no programa As instruções de seleção são divididas em duas categorias Duas vias Múltiplas vias 8 / 41

Instruções de seleção de duas vias Apesar das diferenças no projeto, as instruções de seleção de duas vias das linguagens contemporâneas são bastante semelhantes. A forma geral é: if control_expression then-clause else-clause 9 / 41

Instruções de seleção de duas vias Apesar das diferenças no projeto, as instruções de seleção de duas vias das linguagens contemporâneas são bastante semelhantes. A forma geral é: if control_expression then-clause else-clause Questões de projeto Qual é a forma e o tipo da expressão que controla a seleção? Como as cláusulas then e else são especificadas? Como o significado dos seletores aninhados devem ser especificados? 9 / 41

Instruções de seleção de duas vias A expressão de controle A expressão de controle é especificada entre parênteses se a palavra reservada then (ou outro marca sintática) não é usada Algumas linguagens permitem expressões aritméticas (C/C++, Python), outras permitem apenas expressões booleanas (Ada, Java, Ruby, C#) 10 / 41

Instruções de seleção de duas vias Forma da cláusula Em Perl, todas as cláusulas precisam ser instruções compostas A maioria das linguagens permitem instruções simples e instruções compostas As linguagens baseadas em C utilizam chaves para formar instruções compostas Em Fortran 95, Ada e Ruby as cláusulas then e else são sequências de instruções. A seleção completa acaba com uma palavra reservada Python usa indentação para especificar instruções compostas if x > y: x = y print "case 1" 11 / 41

Seletores aninhados Quando uma construção de seleção é aninhada com a cláusula then de outra construção de seleção, não fica claro com qual if a cláusula then deve ser associada 12 / 41

Seletores aninhados Exemplo: if (sum == 0) if (count == 0) result = 0; else result = 1; 13 / 41

Seletores aninhados Exemplo: if (sum == 0) if (count == 0) result = 0; else result = 1; Esta construção pode ser interpretada de duas formas: if (sum == 0) { if (count == 0) result = 0; } else result = 1; ou if (sum == 0) { if (count == 0) result = 0; else result = 1; } 13 / 41

Seletores aninhados Em Perl, as cláusulas then e else têm que ser compostas 14 / 41

Seletores aninhados Em Perl, as cláusulas then e else têm que ser compostas Em Java, a semântica estática especifica que a cláusula else faz par com o a claúsula then sem par mais próxima 14 / 41

Seletores aninhados Em Perl, as cláusulas then e else têm que ser compostas Em Java, a semântica estática especifica que a cláusula else faz par com o a claúsula then sem par mais próxima Uma alternativa sintática é o uso de uma palavra reservada para marcar o fim do seletor (Fortran 95, Ada, Ruby, Lua) 14 / 41

Seletores aninhados Exemplo em Ruby: if sum == 0 then if count == 0 then result = 0 else result = 1 end end ou if sum == 0 then if count == 0 then result = 0 end else result = 1 end 15 / 41

Seletores aninhados Em linguagens que a indentação é significativa, este problema não existe Exemplo em Python if sum == 0: if count == 0: result = 0 else: result = 1 ou if sum == 0: if count == 0: result = 0 else: result = 1 16 / 41

Instruções de seleção múltipla Uma construção de seleção múltipla permite a seleção de uma entre várias instruções (ou grupo de instruções) Questões de projeto Qual é a forma e o tipo da expressão que controla a seleção? Como os segmentos selecionáveis são especificados? O fluxo de execução através da estrutura é restrito a incluir apenas um segmento selecionável? Como os valores dos casos são especificados? Como os seletores de valores não apresentados deve ser tratados? 17 / 41

Instruções de seleção múltipla Exemplo das linguagens baseadas em C switch (index) { case 1: case 3: odd += 1 sumodd += index; break; case 2: case 4: even += 1; sumeven += index; break; default: printf("error in switch, index %d\n", index); } As expressões podem ser do tipo inteiro, caractere ou enumerado Mais que um segmento pode ser executado por vez Nem todos os casos precisam ser especificados 18 / 41

Instruções de seleção múltipla Exemplo em C# switch (value) { case -1: Negatives++; break; case 0: Zeros++; goto case 1; case 1: Positives++; break; default: Console.Writeln("Error in switch\n"); break; } Não é permitido a execução impĺıcita de mais de um segmento As expressões também podem ser strings 19 / 41

Instruções de seleção múltipla Exemplo em Ada case expression is when choice list => statement_sequence;... when choice list => statement_sequence; [when other => statement_sequence;] end case; A expressão tem que ser do tipo ordinal Apenas um segmento pode ser executado Lista de escolhas Um das formas 7, 10..15, 10 15 20 Os valores precisam ser mutuamente exclusivos Tem quer ser exaustiva 20 / 41

Instruções de seleção múltipla Exemplo em Ruby (semelhante a ifs aninhados) leap = case when year % 400 == 0 then true when year % 100 == 0 then false else year % 4 == 0 end 21 / 41

Instruções de seleção múltipla Exemplo em Ruby (semelhante a ifs aninhados) leap = case when year % 400 == 0 then true when year % 100 == 0 then false else year % 4 == 0 end Exemplo em Ruby (semelhante ao switch) case int_val when -1 then neg_count++ when 0 then zero_count++ when 1 then pos_count++ else puts "Error: int_val is out of range" end 21 / 41

Instruções de seleção múltipla Seleção múltipla usando if Exemplo em Python if count < 10: bag1 = True else: if count < 100: bag2 = True else: if count < 1000: bag3 = True if count < 10: bag1 = True elif count < 100: bag2 = True elif count < 1000: bag3 = True 22 / 41

Estruturas iterativas

Estruturas iterativas Uma instrução iterativa é aquela que causa a execução de uma instrução (ou coleção de instruções) zero, uma ou mais vezes Geralmente chamado de laço (loop) Questões de projeto Como a iteração é controlada? Onde o mecanismo de controle deve aparecer na construção do laço? O corpo de uma construção iterativa é a coleção de instruções cuja a execução é controlada pela instrução iterativa A instrução iterativa junto com o corpo é chamada de construção iterativa 24 / 41

Laços controlados por contador Uma instrução iterativa de contagem tem uma variável, chamada variável do laço, onde o valor da contagem é mantida Existe uma maneira de especificar o valor inicial, o valor final e o passo da variável do laço Questões de projeto Qual é o tipo e o escopo da variável do laço? A variável do laço pode ser alterada? Isto altera o controle do laço? Os parâmetros do laço devem ser avaliados uma única vez, ou em cada iteração? 25 / 41

Laços controlados por contador Exemplos em Fortran 95 Do label var = initial, terminal [, stepsize] Do var... End Do = initial, terminal [, stepsize] A variável do laço deve ser do tipo inteiro A variável do laço pode não ser alterada O parâmetros são avaliados apenas uma vez e podem ser alterados Não é possível saltar para dentro do laço 26 / 41

Laços controlados por contador Exemplo em Ada: for variable in [reverse] discrete_range loop... end loop; Count : Float := 1.35; for Count in 1..10 loop Sum := Sum + Count end loop; O tipo da variável do laço é definida pelo intervalo A variável do laço só existe dentro do laço e não pode ser alterada pelo programador O intervalo pode ser alterado, mas não afeta a execução do laço Não é possível saltar para dentro do laço 27 / 41

Laços controlados por contador Exemplo das linguagens baseadas em C: for (exp1; exp2; exp3) loop body for (count = 1; count <= 10; count++) {... } //C99, C++, Java for (int count = 1; count <= len; count++) {... } Não existe uma variável de laço específica exp1 é avaliada apenas uma vez antes da execução do laço exp2 e exp3 são avaliadas a cada iteração Qualquer expressão pode ser alterada 28 / 41

Laços controlados logicamente O controle do laço é baseado em uma expressão booleana (não em um contador) Questões de projeto O controle deve ser pré-testado ou pós-testado? O laço controlado logicamente deve ser uma forma especial de laço controlado por contador ou uma instrução separada? 29 / 41

Laços controlados logicamente Exemplo das linguagens baseadas em C while (control_expression) loop body do loop body while (control_expression); Fortran 95 não tem laço lógico Ada tem apenas um laço pré-testado 30 / 41

Laços com controles posicionados pelo usuário Em algumas situações é conveniente para o programador escolher o local do controle do laço Questões de projeto O mecanismo condicional deve ser parte integral da saída? Apenas um corpo de laço pode ser terminado, ou laços externos também podem ser terminados? 31 / 41

Laços com controles posicionados pelo usuário while (sum < 1000) { getnext(value); if (value < 0) continue; sum += value; } while (sum < 1000) { getnext(value); if (value < 0) break; sum += value; } outerloop: for (row = 0; row < numrows; row++) { for (col = 0; col < numcols; col++) { sum += mat[row][col]; if (sum > 1000.0) { break outerloop; } } } 32 / 41

Iteração baseada em estrutura de dados A iteração é controlada pelos elementos em uma estrutura de dados A função responsável por percorrer a estrutura de dados é chamada iterador No início de cada iteração o iterador é chamado, a cada chamada um valor é retornado (em uma ordem específica) Exemplos Devido a flexibilidade do for do C, ele pode ser usado para simular uma iteração definida pelo usuário for (ptr = root; ptr!= null; ptr = traverse(ptr))... 33 / 41

Iteração baseada em estrutura de dados Exemplo em PHP reset $list; print ("First number: " + current($list) + "<br />"); while ($current_value = next($list)) print ("Next number: " + $current_value + "<br />"); 34 / 41

Iteração baseada em estrutura de dados Exemplo em PHP reset $list; print ("First number: " + current($list) + "<br />"); while ($current_value = next($list)) print ("Next number: " + $current_value + "<br />"); Exemplo em C# String[] strlist == {"Bob", "Carol", "Ted"};... foreach (String name in strlist) Console.WriteLine("Name: {0}", name); 34 / 41

Saltos

Saltos Uma instrução de salto incondicional transfere o controle da execução para um local específico no programa Muito debatido no final da década de 1960 goto na maioria das linguagens É a instrução mais poderosa de controle de fluxo Linguagens sem goto: Java, Python, Ruby 36 / 41

Comandos guardados

Comandos guardados Sugerido por Dijkstra em 1975 A ideia era dar suporte a uma metodologia que garantisse a corretude durante o desenvolvimento Outra motivação era o não determinismo, que as vezes é necessário em programas concorrentes 38 / 41

Comandos guardados Construção de seleção if i = 0 -> sum := sum + i [] i > j -> sum := sum + j [] j > i -> sum := sum + i fi if x >= y -> max := x [] y >= x -> max := y fi 39 / 41

Comandos guardados Construção de seleção if i = 0 -> sum := sum + i [] i > j -> sum := sum + j [] j > i -> sum := sum + i fi if x >= y -> max := x [] y >= x -> max := y fi Construção de laço do q1 > q2 -> temp := q1; q1 := q2; q2 := temp; [] q2 > q3 -> temp := q2; q2 := q3; q3 := temp; [] q3 > q4 -> temp := q3; q3 := q4; q4 := temp; od 39 / 41

Referências

Referências Robert Sebesta, Concepts of programming languages, 9 a edição. Capítulo 8. 41 / 41