Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação...

34
Programação T. 02 – Fundamentos de Linguagens Mestrado Integrado em Engenharia Aeronáutica – 1º ano, 1º semestre

Transcript of Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação...

Page 1: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Programação

T. 02 – Fundamentos de Linguagens

Mestrado Integrado em Engenharia Aeronáutica – 1º ano, 1º semestre

Page 2: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Sumário

…:

– Linguagem, alfabeto e gramática

– TabelaASCII

– Componentes de uma linguagem: léxico, sintaxe e semântica

– Entidades: nomes/identificadores, operadores e literais

– Termos, expressões e tipos de expressões

– Instruções e tipos de instruções

– Instrução de bloco

– Instrução de atribuição

– Variáveis e declarações de variáveis

– Constantes e declarações de constantes

– Tipos de dados básicos: char, int, float e double

– Modelos de programação

– Princípio fundamental da programação imperativa

T.02 Fundamentos de Linguagens

2

Page 3: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Linguagens de programação

– Programas são escritos numa linguagem de programação.

– Linguagem de programação

▪▪ Alfabeto

▪▪ Gramática

– Alfabetos:

▪▪ {0,1} : linguagem máquina (ling.baixo-nível)

▪▪ código ASCII : Pascal, C, Java, etc. (linguagens de alto-nível)

▪▪ A .. Z : Português, Inglês, Espanhol,etc.

– Gramática: diagramas de sintaxe

3

T.02 Fundamentos de Linguagens

Page 4: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Tabela ASCII de símbolosASCII - American Standard Code for Information Interchange

4

Page 5: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Tabela ASCII de símbolos: códigos adicionais

ASCII - American Standard Code for Information Interchange

5

T.02 Fundamentos de Linguagens

Page 6: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Alfabeto (em C)

- O conjunto básico de caracteres gráficos da linguagem C é o seguinte:

Forma Membros

letra A B C D E F G H I J K L M

N O P Q R S T UV W XY Z

a b c d e f g h i j k l m

n o p q r s t u v w x y z

dígito 0 1 2 3 4 5 6 7 8 9

underscore _

Pontuação ! " # % & ' ( ) * + , - . / : ; < = > ? [ \ ] ^ { | } ~

http://www-ccs.ucsd.edu/c/charset.html

6

T.02 Fundamentos de Linguagens

Page 7: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Componentes de uma linguagem

- Léxico: conjunto de palavras duma linguagem, i.e. o dicionário.

- Sintaxe: conjunto de regras de construção das frases dum texto, i.e. a gramática. Estas frases são designadas por instruções e o texto é designado por programa.

- Semântica: é o significado de cada instrução dum programa ou mesmo dum do programa completo.

http://www.d.umn.edu/~gshute/asm/grammar.html

7

T.02 Fundamentos de Linguagens

Page 8: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Léxico

8

T.02 Fundamentos de Linguagens

Page 9: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Palavras reservadas

- A linguagem C tem um conjunto de palavras reservadas, entre as quais:

auto double int struct

break else long switch

case enum register typedef

char extern return union

const float short unsigned

continue for signed void

default goto sizeof volatile

do if static while

- Não podem ser usadas a não ser para aqueles fins pré-definidos; por exemplo, não podem ser usadas como nomes de variáveis.

- A tentativa de utilização para outros fins tem resulta numa série de erros de compilação.

9

T.02 Fundamentos de Linguagens

Page 10: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Nomes de funções de bibliotecas (libm)

- A biblioteca matemática libm.a tem um conjunto de funções, entre as quais:

cos acos floor sin asin

tan atan tanh ceil log

pow log10 fabs sqrt sinh

- Embora não sejam palavras reservadas, não devemos usá-las para outros fins, pois isso pode gerar conflitos de nomes.

- A tentativa de utilização para outros fins pode ter como consequência uma série de erros de compilação.

10

T.02 Fundamentos de Linguagens

Page 11: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Classificação de nomes/identificadores

- Há 3 classes de nomes ou identificadores:

Identificadores definidos pelo

utilizador

(p.ex., nomes de variáveis)

Identificadores estandardizados

(p.ex., nomes de funções matemáticas)

Palavras reservadas

Podem ser redefinidos,mas não é conveniente

Não podem ser redefinidos

11

T.02 Fundamentos de Linguagens

Page 12: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Entidades e expressões

- Entidades:

▪▪ identificadores ou nomes (de variáveis, constantes e funções)

▪▪ operadores (adição, subtracção, atribuição, …)

▪▪ literais

- Expressões:

▪▪ É uma construção sintáctica que tem um valor.

▪▪ É uma combinação de entidades que representa o cálculo dum valor.

- Tipos de expressões:

▪▪ expressão numérica (resultado numérico)

▪▪ expressão lógica (resultado lógico)

▪▪ expressão simbólica (resultado simbólico)

12

T.02 Fundamentos de Linguagens

Page 13: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Gramática

13

T.02 Fundamentos de Linguagens

Page 14: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Nomes/ identificadores

- As regras de formação de nomes/identificadores são as seguintes:

▪▪ Diferenciação gráfica (maiúsculas e minúsculas)

▪▪ Tamanho variável (ANSI C limitado a 31 caracteres)

▪▪ Validade (carácter inicial é : a..z, A..Z, _ )

• nomes válidos: j, j5, _5A

• nomes inválidos: 5j, j5%, const

Diagrama de sintaxe:

14

T.02 Fundamentos de Linguagens

Page 15: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Operadores

- Escrita de dados em memória (operador de ATRIBUIÇÃO)

=

- Cálculo de inteiros e/ou reais (operadores ARITMÉTICOS)

+, - , *, /

- Cálculo de valores lógicos (falso/verdadeiro) (operadores LÓGICOS)

&&, II, !

- Cálculo de valores lógicos (falso/verdadeiro) (operadores RELACIONAIS)

<, <=, >, >=,!=, ==

- Incrementa valor de variável inteira de 1 unidade (operador de INCREMENTAÇÃO)

++

- Decrementa valor de variável inteira de 1 unidade (operador de DECREMENTAÇÃO)

- -

15

T.02 Fundamentos de Linguagens

Page 16: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Literais

Definição:

– Uma entidade sem nome que representa um valor constante.

Exemplos:

– “XYZ123” é um literal string

– ‘g’ é um literal carácter

– 1234 é um literal inteiro

– 3.78 é um literal real

– 6/10/57 é um literal data

16

T.02 Fundamentos de Linguagens

Page 17: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Literais inteiros

- O valor da constante depende da sua forma inicial:

▪▪ 0x ou 0X indica um inteiro hexadecimal (base 16);

▪▪ 0 indica um inteiro octal (base 8);

▪▪ um dígito não-nulo indica um inteiro decimal (base 10).

- No final do literal, como opção, escreve-se o sufixo l ou L para indicar que é do tipo long, ou

o sufixo u ou U para indicar que é do tipo unsigned

Diagrama de sintaxe:

http://www-ccs.ucsd.edu/c/syntax.html

17

T.02 Fundamentos de Linguagens

Page 18: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Termos

- Um termo é uma das seguintes entidades:

▪▪ um nome ( de variável numérica ou função que devolve um valor numérico)

▪▪ um literal

▪▪ o operador sizeof

▪▪ uma expressão-parentisada

Diagrama de sintaxe:

http://www.d.umn.edu/~gshute/asm/grammar.html

18

T.02 Fundamentos de Linguagens

Page 19: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Expressões

Exemplos:

– 5

– num

– 5+num

– square(5)

– square(5)/2

a && b ||

getchar()

!a

num++

(literal inteiro)

(nome de variável)

(adição de literal e valor de variável)

(chamada a função com argumento literal)

(divisão do valor duma função por dois)

c (devolve um valor lógico)

(chamada a função que devolve um valor char)

(nega valor lógico de variável)

(incrementa valor de variável)

Definição: Uma expressão é uma sequência de um ou mais termos separados por operadores infixo.Cada termo é precedido por zero ou mais operadores prefixos. Cada termo é seguido por zero ou mais operadores pósfixos.

Diagrama de sintaxe:

http://www.d.umn.edu/~gshute/asm/grammar.html

19

T.02 Fundamentos de Linguagens

Page 20: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Instruções

Diagrama de sintaxe:

Exemplos:

– printf("hello\n");

– y = m * x + b;

– ++count;

// chamada a função

// armazena valor

// altera valor armazenado

http://www.d.umn.edu/~gshute/asm/grammar.html

20

T.02 Fundamentos de Linguagens

Page 21: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Sumário até agora:

- PROGRAMA = sequência de INSTRUÇÕES

- INSTRUÇÃO = EXPRESSÃO seguida de ponto e vírgula

- EXPRESSÃO = sequência de TERMOS separados por operadores infixo

- TERMO = é uma das seguintes entidades:

▪▪ um nome ( de variável numérica ou função que devolve um valor numérico)

▪▪ um literal

▪▪ o operador sizeof

▪▪ uma expressão-parentisada

21

T.02 Fundamentos de Linguagens

Page 22: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Tipos de instruções

- Uma instrução é uma das seguintes entidades:

▪▪ uma instrução-bloco

▪▪ uma instrução-de-atribuição

▪▪ uma instrução-if

▪▪ uma instrução-while

▪▪ uma instrução-for

▪▪ uma instrução-switch

▪▪ uma instrução-break

▪▪ uma instrução-continue

▪▪ uma instrução-return

A estudar em capítulos posteriores!

http://www.d.umn.edu/~gshute/asm/grammar.html

22

T.02 Fundamentos de Linguagens

Page 23: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Instrução de bloco

Exemplo:

Definição: É uma sequência de (declarações e) instruções entre { e}.

Diagrama de sintaxe:

#include <stdio.h>

int main()

{

float y;

y=5.4;

printf(“O valor de y=%f\n”,y);

}

instrução-bloco

23

T.02 Fundamentos de Linguagens

Page 24: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Instrução de atribuição

Exemplo:

Definição:É uma instrução que atribui um valor a uma variável em memória.

Diagrama de sintaxe:

name expression= ;

#include <stdio.h>

int main()

{

int x;

float y;

printf(“Escreva um valor inteiro: ”);

scanf(“%d”,&x);

y=x+5.4;

printf(“O valor de y=%f\n”,y);

}

instrução-atribuição

24

T.02 Fundamentos de Linguagens

Page 25: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Variável

Definição: É um local de memória onde se guarda um dadoespecífico.

- Têm nome e valor.

- À semelhança das variáveis em matemática, uma variável não tem valor constante.

- Pode mudar de valor através duma instrução de atribuição.

#include <stdio.h>

int main()

{

int x;

x=12;

...

}

x

valor dex

00000000

00001100

memória

25

T.02 Fundamentos de Linguagens

Page 26: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Declaração de variáveis

Diagrama de sintaxe:

Exemplo:

#include <stdio.h>

int main()

{

int x;

x=12;

...

}

type name ;

declaração-de-variável

26

T.02 Fundamentos de Linguagens

Page 27: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Declaração de variáveis

Bytes em memória Formato de E/S

Inteiros

char

int

1 byte

2 bytes

%c

%d ou %i

Reais

float

double

4 bytes

8 bytes

%f

%f

00000000 00000000 00000000 00001100

4 bytes (octetos) = 4 x 8 bits

27

T.02 Fundamentos de Linguagens

Page 28: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Constante

#include <stdio.h>

int main()

{

const int i=10;

...

}

i

valor dei

00000000

00001010

Definição: É também um local de memória onde se guarda um dadoespecífico.

- Também tem nome e valor.

- À semelhança das constantes em matemática, uma constante tem valor fixo e imutável.

memória

28

T.02 Fundamentos de Linguagens

Page 29: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Declaração de constantes

Diagrama de sintaxe:

Exemplo:

#include <stdio.h>

int main()

{

const int i=10;

...

}

declaração-de-constante

type name =const ;literal

29

T.02 Fundamentos de Linguagens

Page 30: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Modelos de Programação

30

T.02 Fundamentos de Linguagens

Page 31: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Modelos de programação

Programação imperativa

– C, Pascal, Fortran,…

Programação funcional

– Haskel, Lisp, Scheme, …

Programação em lógica

– Prolog,…

Programação orientada por objectos

– C++, Java, Smaltalk, Objective-C, C#, Logtalk, …

Programação baseada em eventos

- Não há linguagens específicas … é mais uma forma de programar aplicações.

etc.

31

T.02 Fundamentos de Linguagens

Page 32: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Programação imperativa

Dados

– Simples (int, float, char, double)

– Compostos (array, struct, file)

Funções/ operadores

printfyx

+

scanf

=

printf

5.4

#include <stdio.h>

int main()

{

int x;

float y;

valor inteiro: ”);printf(“Escreva um

scanf(“%d”,&x);

y=x+5.4;

printf(“O valor de y=%f\n”,y)

;}

32

T.02 Fundamentos de Linguagens

Page 33: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Princípio fundamental da

programação imperativa

- A reserva de memória para dados é feita através da declaração de variáveis.Exemplo:

int j;

- O porquê do modelo centralizado de dados? O conjunto de todas as variáveis declaradas num programa não é mais do que o repositório central de dados que é manipulado pelas funções e operações usadas dentro do programa.

- Princípio fundamental da programação imperativa:

- Nenhuma variável, constante ou função pode ser utilizada num programa

sem ter sido previamente declarada.

33

T.02 Fundamentos de Linguagens

Page 34: Programação - UBIsebastiao/Ensino/UBI/2017-2018/PROG/Teoric… · – Linguagem de programação Alfabeto Gramática – Alfabetos: {0,1} : linguagem máquina (ling.baixo-nível)

Conclusão

…:

– Linguagem, alfabeto e gramática

– Tabela ASCII

– Componentes de uma linguagem: léxico, sintaxe e semântica

– Entidades: nomes/identificadores, operadores e literais

– Termos, expressões e tipos de expressões

– Instruções e tipos de instruções

– Instrução de bloco

– Instrução de atribuição

– Variáveis e declarações de variáveis

– Constantes e declarações de constantes

– Tipos de dados básicos: char, int, float e double

– Modelos de programação

– Princípio fundamental da programação imperativa

T.02 Fundamentos de Linguagens