Escolar Documentos
Profissional Documentos
Cultura Documentos
Pg. 1
Tpicos
1. 2. 3. 4. 5. 6. 7. Introduo Instrues Compostas Instrues de Seleco Instrues Iterativas Desvio Incondicional Comandos Protegidos Concluses
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 2
1. Introduo
int firstBlankLine(vector<vector<int> > & v) { int i = 0; while(i < v.size()) { for(int j=0; j < v[i].size(); j++) { if(v[i][j]!=0) { goto rejeita; } else { continue; } cout << "Esta linha nunca executada"; } cout << "Primeira linha s com zeros: " << i; break; rejeita: i++; } }
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 3
1. Introduo
(cont.)
Fluxo de controle ao nvel de instruo sequncia de execuo entre as diversas instrues do programa.
Nveis de fluxo de controle:
1. Entre instrues do programa (Cap.7) 2. Dentro de expresses (Cap. 6) 3. Entre unidades de programa (Cap. 8 e 12)
+alto nvel
Pg. 4
1. Introduo
(cont.)
Evoluo: FORTRAN I - Instrues de controle eram baseados directamente no hardware do IBM 704 (anos 50); Muitas pesquisas/argumentos durante os anos 60; Resultado importante: foi provado que os fluxogramas pode ser codificado somente com instrues de seleco dupla (if ... else ) e laos pr-testados (while).
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 5
1. Introduo
(cont.)
Instrues de Controle meio de seleccionar um caminho entre diferentes caminhos de execuo, podendo por vezes provocar a repetio de conjunto de instrues (ex.: ifs, ciclos, gotos, switchs, ). Uma estrutura de controle uma instruo de controle e sua coleco de comandos que controla (que fazem parte da estrutura). Problema geral de projecto:
Quais as estruturas de controle que devem estar contidas numa L.P. alm de seleco e laos lgicos pr-testados?
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 6
2. Instrues Compostas
Instruo Composta mtodo para abstrair uma coleco de instrues como uma nica instruo
Um bloco uma Instruo Composta que pode definir um novo escopo (possui variveis locais).
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 7
3. Instrues de Seleco
Instrues de Seleco Bidirecionais instrues que permitem escolher entre dois caminhos de execuo, tendo em considerao o resultado duma expresso.
Consideraes de Projecto:
1. Qual a forma e o tipo da expresso de controle? 2. O que pode ser seleccionado? (Instrues simples/compostas, sequncia de comandos)? 3. Como deve ser especificado o aninhamento de instrues de seleco?
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 8
Ex. de Seleco
Exemplo em FORTRAN (unidireccional): IF (expresso booleana) instruo
Problema: selecciona somente uma nico instruo. Para seleccionar mais instrues, deve ser utilizado um "goto" como no seguinte exemplo:
Pg. 9
Ex. de Seleco
(cont.)
end Exemplo em ALGOL 60 (bidireccional): if (boolean_expr) then instruo (Clusula then) else instruo (Clusula else)
Pg. 10
mais prximo.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 11
(cont.)
Pg. 12
Ex. em Ada
Fechamento de seleco com palavra especial (trmino) FORTRAN 77, e Modula-2 tambm contm trminos
Em do Modula-2:
Utiliza a mesma palavra especial de trmino "END" para todas as estruturas de controle. Esta construo resulta em legibilidade pobre.
Pg. 14
Qual o tipo e forma da expresso de seleco? Que instrues so seleccionadas (simples, compostas, sequencias de instrues)? A estrutura de seleco encapsulada numa estrutura sintctica? O fluxo de execuo dentro da estrutura inclui apenas o segmento seleccionado? O que acontece quando o valor da expresso no est representado?
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 15
Selectores Mltiplos
Aspectos negativos:
No encapsulado (segmento seleccionado pode estar em qualquer lugar). Segmentos necessitam de GOTOs.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 16
Selectores Mltiplos
(cont.)
Pg. 17
Selectores Mltiplos
(cont.)
Pg. 18
Selectores Mltiplos
(cont.)
Pg. 19
Selectores Mltiplos
(cont.)
Expresso de controle somente do tipo inteiro; Segmentos seleccionados podem conter instrues simples/compostas ou sequncia de comandos; Construo encapsulada; Vrios segmentos podem ser executados em uma execuo da construo (no existe desvio implcito no final do segmento seleccionado);
Para evitar este efeito o programador deve usar o comando break no fim de cada segmento; um compromisso entre confiabilidade e flexibilidade.
Clusula "default" existe para valores no representados da expresso de controle (se no existe clusula default, o comando no faz nada).
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 20
10
Selectores Mltiplos
(cont.)
Selector similar ao case de Pascal, excepto que: Lista de constante pode incluir:
Lista de constante dever ser completa: - Normalmente realizado via clusula others; - Isto torna o comando mais confivel.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 21
Selectores Mltiplos
(cont.)
if (condio) then ... elsif (condio) then ... elsif (condio) then ... else ... end if
Muito mais confivel que aninhamento de ifs ; Permite sada de cada grupo seleccionado.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 22
11
4. Instrues Iterativas
Instrues Iterativas
Execuo repetida de instrues pode ser realizada por iterao ou recurso. Laos controlados por contador; Laos controlados logicamente;
Pg. 23
Instrues Iterativas
(cont.)
...
enquanto(condio)
Pg. 24
12
Consideraes de projecto:
Qual o tipo e o escopo da varivel do lao? Qual o valor da varivel de controle no final do comando? vlido alterar a varivel de controle do lao no corpo do comando? Em caso afirmativo o controle do lao afectado? Os parmetros do lao so somente avaliado uma nica vez ou a cada iterao?
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 25
Varivel de lao tem que ser do tipo INTEGER; Incremento pode ser qualquer valor diferente de zero; Parmetros (incio, fim) podem ser expresses.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 26
13
Pg. 27
Lao pode ser controlado ao mesmo tempo por contador e expresso booleana.
Pg. 28
14
Exemplos:
for index:=1, 2, 3, 4, 5 do //(index lista[index] = 0 for index:=1 step 2 until 100 do lista[index] = 0
= 1,2,3,4,5)
Expresso de controle pode ser int ou real; Varivel de controle retm o seu ltimo valor que lhe foi atribudo, aps o termino do lao; A varivel de lao no pode ser modificada no lao; Parmetros so avaliados em cada iterao, tornando-os complexos e de difcil leitura.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 29
Ex. em Pascal:
Sintaxe: for var := inicio (to | downto) final do comando Varivel do lao deve ser do tipo ordinal, de escopo visvel (local ou no local); Aps terminar de forma normal, o valor da varivel do lao indefinido; A varivel do lao no pode ser alterada no corpo do lao; Parmetros do lao so avaliados uma nica vez.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 30
15
Consideraes de Projecto:
Varivel de lao deve ser do tipo inteiro ou enumerao; A varivel de lao no existe fora do corpo do lao; A varivel de lao no pode ser alterada no lao; Varivel de lao avaliada uma nica vez.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 31
Ex. em C: Sintaxe:
for ([expr_1] ; [expr_2] ; [expr_3]) corpo do lao
As expresses [expr_1] e [expr_3]podem ser uma instrues simples, ou sequncia de instrues separadas por vrgulas; Todas as expresses so opcionais (podem ser nulas); A segunda expresso [expr_2] se omitida, gera um lao infinito.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 32
16
ex.: for (i = 0, j = 10; j == i; i++) ... No existe varivel de lao explcita; Valor da varivel de lao irrelevante; Tudo pode ser alterado no lao; Lao pr-testado; A 1 expresso avaliada uma nica vez, as restantes so avaliadas em cada iterao. Este comando iterativo o mais flexvel.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 33
Ex. do C++:
Difere de C em dois modos: 1. A expresso de controle pode ser lgica; 2. A expresso inicial pode incluir definio de varivel (com escopo vlido at o fim da funo em que a instruo est definida). Difere de C++ em dois modos: 1. Expresso de controle deve ser lgica; 2. Escopo de variveis definidas na expresso inicial somente o corpo da instruo.
Engenharia Informtica Linguagens de Programao 2002/2003
Ex. do Java:
Pg. 34
17
Consideraes de Projecto:
O teste do lao efectuado: No incio da instruo (pr-teste)? No fim da instruo (ps-teste)? O lao controlado logicamente deve ser uma forma especial do lao controlado por contador, ou uma nova instruo de iterativa?
Pg. 36
18
Exemplos em Pascal:
Pg. 37
Ex. do C/C++: Possuem as formas n e p: nwhile(condio==true) corpo do lao; pdo corpo do lao; while(condio==true); Ex. do Java:
Ex. do Ada:
como o C, excepto que a expresso de controle deve ser lgica. Possui a verso de pr-teste mas no a ps-teste. No possui este tipo de instrues (laos lgicos).
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 38
19
O programador deve poder escolher onde colocar o controle do lao, como por exemplo no meio do corpo do lao. O mecanismo condicional deve ser uma parte integrante da sada do lao? Pode este mecanismo estar presente num lao j controlado? Pode o controle ser transferido para fora de mais de um lao?
Engenharia Informtica Linguagens de Programao 2002/2003
Consideraes de Projecto:
Pg. 39
Exemplo em Ada
Trmino condicional ou incondicional, para qualquer lao e para qualquer quantidade de nveis. Trmino incondicional
for ... loop ... if soma > 1 then exit; ... end loop
Trmino condicional
for ... loop ... exit when soma > 1; ... end loop
Pg. 40
20
Trmino incondicional no rotulado, para qualquer lao ou "switch", em apenas um nvel. Em C/C++ existe tambm a instruo "continue" que termina as instrues e volta para o controle do lao.
while(soma < 1000) { getnext(valor); if (valor < 0 ) continue; soma += valor } Nota: Se valor for negativo a instruo de atribuio no executada.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 41
Trmino incondicional para qualquer lao, e qualquer nmero de nveis. FORTRAN 90 possui a instruo "CYCLE" (que tem a mesma semntica do "continue" do C).
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 42
21
A iterao est associada a uma estrutura de dados; A ordem dos elementos depende do iterador; O controle do lao dado pela existncia ou no de mais elementos na estrutura de dados; O mecanismo de controle uma chamada de funo que retorna o prximo elemento, em alguma ordem, desde que exista elementos, caso contrrio o lao termina.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 43
Ex. em C++
A instruo "for" do C++ pode ser utilizada para percorrer toda a estrutura de dados. char * nomes[]={"Jos","Joo","Joca",0}; for(char ** p = nomes; *p!= 0; p++) { cout << *p << endl; }
Ex. em Perl
Perl possui um iterador implcito para arrays e hashes. $nomes = {"Jos","Joo","Joca"}; foreach $nome (@nomes) { print $nome }
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 44
22
5. Desvio Incondicional
Uma instruo de desvio incondicional transfere o controle para outra posio do programa. A instruo de desvio incondicional (goto) a instruo mais poderosa para controle do fluxo de execuo (esta nasceu no FORTRAN). Problema:
Algumas linguagens no tm instrues de desvio incondicional, como por ex. Modula-2 e Java. Algol, Pascal, C e C++ permitem "goto" mas desaconselham a sua utilizao.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 45
Desvio Incondicional
Utilizado em Pascal. Ex. "100:" Utilizado em FORTRAN. Ex. "100" Utilizado em ALGOL 60, C e C++. Ex. "FIM:" Utilizado em Ada. Ex. "<<FIM>>" Utilizado em PL/I.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 46
23
O alvo de um goto no pode ser uma instruo, num grupo de instrues que no esteja activo (no iniciado). Pela razo anterior, o alvo no pode ser uma instruo de um grupo que esteja no mesmo nvel ou em nvel mais profundo que o nvel do goto. O alvo pode ser qualquer subprograma do escopo corrente (de qualquer nvel), desde que a instruo no seja uma instruo de grupo. O comando goto pode terminar qualquer nmero de subprogramas (neste caso, um goto para fora desses subprogramas) .
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 47
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:
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 48
24
6. Comandos Protegidos
Formas alternativas de estruturas de seleco e de lao foram sugeridas por Dijkstra (1975). Motivao: suportar uma metodologia de projecto de programao (verificao durante o desenvolvimento do programa).
Instruo de Seleco:
Exemplo em ADA:
if x >= y -> max := x [] y >= x -> max := y fi
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 49
Comandos Protegidos
Avaliar todas as expresses lgicas; Se mais de uma for verdadeira, escolher uma no deterministicamente; Se nenhuma for verdadeira temos um erro de execuo.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 50
25
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 construo escolhe nodeterministicamente a primeira ou a terceira instruo para ser executada; Se i for igual a j e diferente de zero, temos um erro pois nenhuma das expresses vlida.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 51
Comandos Protegidos
Instruo de Lao:
<boolean> -> <instruo> <boolean> -> <instruo> ... <boolean> -> <instruo>
(ordenar: n1 < n2 < n3)
do [] [] od
Exemplo em ADA:
do n1 > n2 -> max:= n1; n1:=n2; n2:=max; [] n3 > n2 -> max:= n3; n2:=n3; n3:=max; od
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 52
26
Comandos Protegidos
Semntica da instruo de lao: Avaliar todas as expresses lgicas; Se mais de uma for verdadeira, escolher uma, nodeterministicamente; em seguida reinicia o lao novamente; Se nenhuma for verdadeira, finaliza o lao.
Engenharia Informtica Linguagens de Programao 2002/2003
Pg. 53
7. Concluso
Concluses do Captulo:
A escolha das instrues de seleco e laos lgicos de pr-teste um compromisso entre tamanho da linguagem e escritabilidade. Ainda no existe um concordncia sobre a utilizao ou no de instrues de controle incondicional "goto" numa linguagem.
Pg. 54
27