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

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

Linguagens de Programação Conceitos e Técnicas Comandos Prof. Isabel Cafezeiro

Apresentações semelhantes


Apresentação em tema: "Linguagens de Programação Conceitos e Técnicas Comandos Prof. Isabel Cafezeiro"— Transcrição da apresentação:

1 Linguagens de Programação Conceitos e Técnicas Comandos Prof. Isabel Cafezeiro isabel@dcc.ic.uff.br

2 Linguagens de Programação “Once a programmer has understood the use of variables, he has understood the essence of programming.’’ Edsger Dijkstra No paradigma imperativo !!! Comandos 2

3 Linguagens de Programação No paradigma imperativo: Um comando é uma instrução do programa capaz de atualizar variáveis ou controlar o fluxo da execução. Classificação: Simples ou Compostos Comandos

4 Linguagens de Programação No paradigma imperativo: Um comando é uma instrução do programa capaz de atualizar variáveis ou controlar o fluxo da execução. Classificação: Simples ou Compostos Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos

5 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos E os comandos de E/S? Cobol, Fortran, PL1 possuem comandos de E/S !!! Pascal, C, Java não possuem comandos de E/S !!!

6 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Em Pascal: Program Vazio; begin writeln('testando...'); ;; end. Sem efeito !!!! Atualizar variáveis ou controlar o fluxo da execução ?

7 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Produz uma referência Produz um valor Em ML: i := !i + 1 Derreferenciamento explícito Em Ada: get(n); n := n + 1; put(n); Valor !!! Referência !!! Atualizar variáveis ou controlar o fluxo da execução ?

8 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos = ou := ? Em C : if (a = 10) a += 3; Em C : void f(char *q, char *p) { for (;*q=*p; q++,p++); } Provável erro: a condição é sempre satisfeita ! Cópia de strings ! Atualizar variáveis ou controlar o fluxo da execução ?

9 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos = ou := ? Em linguagens algoritmicas:  Atualizar variáveis ou controlar o fluxo da execução ?

10 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Simples Múltipla Condicional Composta Unária Expressão Em Pascal: a := b + 3 * c;

11 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Simples Múltipla Condicional Composta Unária Expressão Em C: a = b = 0;

12 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Simples Múltipla Condicional Composta Unária Expressão Em ML: (if a < b then a else b) := 2;

13 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Simples Múltipla Condicional Composta Unária Expressão Em C: a += 3; // a = a+3

14 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Simples Múltipla Condicional Composta Unária Expressão Em C:++a; b = a++ // um sinal, duas atribuições

15 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Simples Múltipla Condicional Composta Unária Expressão Em C: while (( ch = getchar ( ) ) != EOF ) { printf(“%c”, ch); } printf("%d",a=2); // imprime 2

16 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Aplica um procedimento aos argumentos P (a1,..., an) Atualização de variáveis: através do acesso global em parâmetros Atualizar variáveis ou controlar o fluxo da execução ?

17 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos C1 ; C2 Primeiro C1, depois C2 Atualizar variáveis ou controlar o fluxo da execução ? Operador de sequenciamento em Pascal, C, Java

18 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos C1, C2 C1ou C2, em qualquer ordem Atualizar variáveis ou controlar o fluxo da execução ? Operador colateral Não determinismo: não se sabe o que será feito primeiro a = 0; a = 3, a = a+1; Resulta em 3 ou 4?

19 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Determinísticas; Não determinísticas; Efetivamente determinísticas. Atualizar variáveis ou controlar o fluxo da execução ? As LP's, ou seus comandos podem ser: A ordem em que os comandos serão executados é conhecida. A execução gera sempre o resultado previsto.

20 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Determinísticas; Não determinísticas; Efetivamente determinísticas. Atualizar variáveis ou controlar o fluxo da execução ? As LP's, ou seus comandos podem ser: A ordem em que os comandos serão executados NÃO é conhecida. Há possibilidade da execução gerar resultados diferentes.

21 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Determinísticas; Não determinísticas; Efetivamente determinísticas. Atualizar variáveis ou controlar o fluxo da execução ? As LP's, ou seus comandos podem ser: A ordem em que os comandos serão executados NÃO é conhecida, mas o efeito da execução não se altera

22 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Determinísticas; Não determinísticas; Efetivamente determinísticas. Atualizar variáveis ou controlar o fluxo da execução ? As LP's, ou seus comandos podem ser: Comandos colaterais de ML não podem ter um valor definido e usado em vários componentes

23 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Atualizar variáveis ou controlar o fluxo da execução ? Seleção de um ramo Seleção de dois ramos Seleção de múltiplos ramos Seleção não determinística Estrutura “Caso” if (E) C1

24 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Atualizar variáveis ou controlar o fluxo da execução ? Seleção de um ramo Seleção de dois ramos Seleção de múltiplos ramos Seleção não determinística Estrutura “Caso” if (E) C1else C2

25 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Atualizar variáveis ou controlar o fluxo da execução ? Seleção de um ramo Seleção de dois ramos Seleção de múltiplos ramos Seleção não determinística Estrutura “Caso” if (E1) C1 else if (E2) C2... else if (En) Cn else C0

26 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Atualizar variáveis ou controlar o fluxo da execução ? Seleção de um ramo Seleção de dois ramos Seleção de múltiplos ramos Seleção não determinística Estrutura “Caso” if (E1) C1 or if (E2) C2... or if (En) Cn As condições são avaliadas colateralmente. A primeira Ei verdadeira causa a execução de Ci.

27 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Atualizar variáveis ou controlar o fluxo da execução ? Seleção de um ramo Seleção de dois ramos Seleção de múltiplos ramos Seleção não determinística Estrutura “Caso” Normalmente tipo discreto Em Ada: Case E is when v1 => C1... when vn => Cn when others => C0 end case;

28 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Atualizar variáveis ou controlar o fluxo da execução ? Seleção de um ramo Seleção de dois ramos Seleção de múltiplos ramos Seleção não determinística Estrutura “Caso” Em C: switch (n) { case v1: C1;... case vn: Cn; break; default: C0 } Necessita break

29 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Atualizar variáveis ou controlar o fluxo da execução ? Não definidos Definido Pré teste Pós teste Em Pascal: while (E) do begin... end Em Pascal: repeat... until (E)

30 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Atualizar variáveis ou controlar o fluxo da execução ? Não definidos Definido Em Pascal: for var := val1 to val2 do begin... end

31 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Atualizar variáveis ou controlar o fluxo da execução ? Não definidos Definido Em Pascal: for i := 1 to 5 do begin... end Qual é o valor de i após o loop: 5 ou 6? Qual é o valor de i após o loop se houver um desvio interno? Pode haver atribuição a i?

32 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Atualizar variáveis ou controlar o fluxo da execução ? Não definidos Definido Em Ada, o controle é declarado implicitamente no próprio comando como uma nova constante a cada iteração. O controle não pode ser acessado fora do loop Não pode haver atribuição ao controle

33 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Atualizar variáveis ou controlar o fluxo da execução ? Não definidos Definido Em C, C++ e Java, a repetição definida funciona como uma abreviação para uma repetição indefinida. Em C: for (;;) {printf ("%d\n",1);} for (i=1,j=20;i 5;i++,j--) {printf ("%d %d\n",i,j);} for (i=1; i<=5; i++) {printf ("%d \n",i);};printf ("%d \n",i); Loop ! Conjunção dos testes ! i vale 6 ao final do loop !

34 Linguagens de Programação Comandos Skips Atribuições Chamadas de Procedimentos Sequenciais Colaterais Condicionais Iterativos Atualizar variáveis ou controlar o fluxo da execução ? Não definidos Definido Iterações sobre coleções Determinística: se a coleção é ordenada (array, listas) Em Java: for (Date date : dates) System.out.println(date); Array de datas Em Perl: @dias = ("Dom", "Seg", "Ter", "Qua","Qui", "Sex", "Sab"); foreach $dia (@dias) { print $dia } Não Determinística: se a coleção não é ordenada (set)

35 Linguagens de Programação Expressões comando produzem um valor, mas para isto, atualizam variáveis, causam efeitos colaterais !!! Comandos Em Pascal: function fat(n:integer): integer; var f,i: integer; begin f := 1; for i:= n downto 2 do begin write(i,' * '); f := f*i; end; writeln('1'); fat := f end; begin writeln(fat(5)); end.

36 Linguagens de Programação Efeitos Colaterais em expressões Além de retornar o valor efetuam alguma outra tarefa...... inesperada?? Comandos Em C x = 3.2 * c++; x = 2; y = 4; z = (y = 2 * x + 1) + y; Expressão que retorna o valor de c...... e o incrementa !!! Atribuição que atualiza uma variável e...... retorna um valor !!! Z finaliza com 9 ou 10?

37 Linguagens de Programação Efeitos Colaterais em funções atualização de variável global em função passagem por referência em função entrada/saída em função Comandos A função realiza sua tarefa e...... altera o ambiente externo !!! Descaracteriza o papel da função enquanto caixa preta. Em C fgetc(f);

38 Linguagens de Programação Linguagens orientadas à expresões Todos os enunciados devem resultar em valor atribuições ==> atribuições expressão procedimentos ==> funções loop ==> nil? 0?... ==>.... Comandos Evita a duplicação de conceitos em comandos e expressões Incentivo à programação por efeitos colaterais !!! Em C: while ((ch = getchar(f)) != NUL) putchar(ch);


Carregar ppt "Linguagens de Programação Conceitos e Técnicas Comandos Prof. Isabel Cafezeiro"

Apresentações semelhantes


Anúncios Google