Programação Introdução à Programaçãosebastiao/Ensino/UBI/2019-2020/... · 2019-09-09 ·...
Transcript of Programação Introdução à Programaçãosebastiao/Ensino/UBI/2019-2020/... · 2019-09-09 ·...
T. 02 – Fundamentos de Linguagens
ProgramaçãoIntrodução à Programação
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
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
Tabela ASCII de símbolosASCII - American Standard Code for Information Interchange
4
Tabela ASCII de símbolos: códigos adicionais
ASCII - American Standard Code for Information Interchange
5
T.02 Fundamentos de Linguagens
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
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
Léxico
8
T.02 Fundamentos de Linguagens
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
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
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
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
Gramática
13
T.02 Fundamentos de Linguagens
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Modelos de Programação
30
T.02 Fundamentos de Linguagens
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
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
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
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