Programação
Engenharia Informática (11543) – 1º ano, 1º semestre
Tecnologias e Sistemas de Informação (6619) – 1º ano, 1º semestre
Sumário
…:
– 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
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.
Tabela ASCII de símbolos
Tabela ASCII de símbolos: códigos adicionais
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 U V W X Y 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
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.
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.
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.
Classificação de nomes/identificadores
- Há 3 classes de nomes ou identificadores:
Não podem ser redefinidos
Palavras reservadas
Identificadores estandardizados
(p.ex., nomes de funções matemáticas)
Identificadores definidos pelo utilizador
(p.ex., nomes de variáveis) Podem ser redefinidos, mas
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)
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
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)
--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
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:
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:
Expressões
Diagrama de sintaxe:
Exemplos:
– 5 (literal inteiro) – num (nome de variável)
– 5+num (adição de literal e valor de variável)
– square(5) (chamada a função com argumento literal)
– square(5)/2 (divisão do valor duma função por dois)
– a && b || c (devolve um valor lógico)
– getchar() (chamada a função que devolve um valor char)
– !a (nega valor lógico de variável)
– num++ (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.
Instruções
Diagrama de sintaxe:
Exemplos:
– printf("hello\n"); // chamada a função
– y = m * x + b; // armazena valor
– ++count; // altera valor armazenado
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
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!
Instrução de bloco
Diagrama de sintaxe:
Exemplo:
Definição: É uma sequência de (declarações e) instruções entre { e }.
#include <stdio.h> int main() { float y; y=5.4;
printf(“O valor de y=%f\n”,y);
}
Instrução de atribuição
Diagrama de sintaxe:
Exemplo:
Definição: É uma instrução que atribui um valor a uma variável em memória.
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);
}
Variável
- 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. Definição: É um local de memória onde se guarda um dado específico.
#include <stdio.h> int main() { int x; x=12; ... }
x
valor dex
00000000
00001100
memóriaDeclaração de variáveis
Diagrama de sintaxe: Exemplo: #include <stdio.h> int main() { int x; x=12; ... } type name ; declaração-de-variávelDeclaração de variáveis
Bytes em memória Formato de E/S Inteiros char 1 byte %c int 2 bytes %d ou %i Reais float 4 bytes %f double 8 bytes %f 00000000 00000000 00000000 00001100
Constante
- Também tem nome e valor.
- À semelhança das constantes em matemática, uma constante tem valor fixo e imutável. Definição: É também um local de memória onde se guarda um dado específico.
#include <stdio.h> int main() { const int i=10; ... }
i
valor dei
00000000
00001010
memóriaDeclaração de constantes
Diagrama de sintaxe: Exemplo: #include <stdio.h> int main() { const int i=10; ... } declaração-de-constante type name = const literal ;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.
Programação imperativa
Dados
– Simples (int, float, char, double) – Compostos (array, struct, file)
Funções/operadores printf
y
x
+
scanf=
printf5.4
#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); }
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.
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