Atenção!
As aulas não cobrem toda a matéria! Há
que ler as folhas teóricas!
Aula 2
Conceitos básicos de programação
Variáveis
bool encontrado = false;
int número_de_alunos = 39;
float taxa_de_conversão
= 200.482f;
Tipo: booleano, ou seja,
só pode tomar
os valores
char caractere
= ‘A’;
falso e verdadeiro
Nome
Nomes de pedaços de memória
Interpretação dada pelo tipo
3
Introdução à Programação
Valor inicial
2003/2004
Memória do computador (I)
…
encontrado: bool
número_de_alunos: int
falso
Taxa_de_conversão:
float
39
caractere:
char
200,482
A
…
4
Introdução à Programação
2003/2004
Memória do computador (II)
Uma sequência de bits
768 Mbyte =
805 306 368 byte =
6 442 450 944 bit
Aproximadamente 1 bit por habitante da Terra
5
Introdução à Programação
2003/2004
Caracteres
Tipo: char
Número de bits: 8
Número de padrões: 28 = 256
Código: e.g. ISO-Latin-9 (ISO-8859-15)
‘A’ ..... 0100 0001
‘a’ ..... 0110 0001
‘0’ ..... 0011 0000
6
Introdução à Programação
2003/2004
Interpretação dos caracteres
‘A’ ..... (0100 0001)2 = (65)10
‘a’ ..... (0110 0001)2 = (97)10
‘0’ ..... (0011 0000)2 = (48)10
char caractere = ‘A’
char caractere = char(65);
7
Introdução à Programação
2003/2004
Inteiros
Tipo: int
Número de bits: 32 (normalmente)
Para simplificar, vamos assumir que têm
apenas 4 bits
Número de valores diferentes: 24 = 16
Se não representarem valores negativos:
0 a 24-1
8
Introdução à Programação
2003/2004
Manipulando inteiros não
negativos
1 + 15 = ?
0
0001
1111 +
10000
2 + 14 = ?
0
0010
1110 +
10000
9
Introdução à Programação
O bit mais
significativo não
cabe num inteiro
de 4 bits
2003/2004
Representação de inteiros não
negativos
10
Introdução à Programação
2003/2004
Inteiros com sinal
11
Qual o padrão de bits
mais adequado a
representar (-1)10?
(1111)2
E o (-2)10?
(1110)2
Introdução à Programação
2003/2004
Inteiros com sinal: quando parar?
12
Em (-8)10:
Aproximadamente
mesmo número de
positivos e negativos
Negativos identificados
pelo bit mais
significativo
Introdução à Programação
2003/2004
Representação de inteiros em
complemento para dois
Gama de valores representáveis com 4 bits:
-8 a 7
Representação binária de -5:
10000
0101 1011
13
Gama de valores representáveis com n bits:
-2n-1 a 2n-1-1
Gama de valores representáveis com 32 bits:
-2 147 483 648 a 2 147 483 647
Introdução à Programação
2003/2004
Caracteres como inteiros
‘A’ ..... (0100 0001)2 = (65)10
char caractere = 'A';
int código = int(caractere);
cout << código << endl;
char caractere = 'A';
int código = int(caractere) + 1;
cout << código << endl;
char caractere = 'A';
cout << caractere << endl;
++caractere;
cout << caractere << endl;
14
Introdução à Programação
65
66
A
B
2003/2004
Valores em vírgula flutuante
Tipo: float
Número de bits: 32
s0
1,
m-1
...
m-23
Sinal
Mantissa
15
e7
...
e0
Expoente
Valores: s m 2e
Introdução à Programação
2003/2004
Tipos básicos
Tipo
Tamanho/Formato típico
Valores literais
(números inteiros)
short
16 bits/complemento para dois
int
32 bits/complemento para dois
176, ...
long
64 bits/complemento para dois
8374L, ...
(números decimais)
Têm
versão
3.14f, 200.482F, ...
unsigned
float
32-bit IEEE 754
double
64-bit IEEE 754
18.0, 1.8e1, 18.0, ...
long
double
96-bit IEEE 754
18.0L, 1.8e1L, 18.0L, ...
(outros tipos)
char
8 bits
bool
1 byte = 8 bits
16
‘A’, ‘.’, ‘€’, ...
false e true
Introdução à Programação
2003/2004
Estrutura de
um programa em C++
// Inclusão de ficheiros de interface de bibliotecas e módulos (a
// explicar mais tarde):
#include <iostream>
// Directiva de utilização do espaço nominativo std (a explicar mais
// tarde):
using namespace std;
int main()
{
... // Aqui é onde se escreve o programa.
}
Todas as frases precedidas de // ou entre /* e */ são comentários,
sendo ignoradas pelo compilador
17
Introdução à Programação
2003/2004
Instruções
Uma instrução em C++ pode ser da forma
expressão;
Ocorrendo nesta
18
Operadores
Variáveis
Valores literais
...
Introdução à Programação
2003/2004
Operação de atribuição
Afecta o estado do programa: altera o valor de
uma variável
variável = expressão;
19
O estado do programa é definido pelo valor
das suas variáveis
Introdução à Programação
2003/2004
Operadores aritméticos (I)
+, -, *, / e %
A divisão (/) é a divisão inteira se os seus
operandos forem inteiros
int x = 1 / 2;
cout << x << endl;
20
Introdução à Programação
0
2003/2004
Operadores aritméticos (II)
% significa resto da divisão ou módulo:
int x = 15 % 6;
cout << x << endl;
21
Introdução à Programação
3
2003/2004
Operadores aritméticos (III)
Se os operandos forem de tipos diferentes, o
operando de um tipo menos potente é
convertido para o tipo mais potente antes do
cálculo:
cout << 1.5 + 1 << endl;
2.5
22
Introdução à Programação
2003/2004
Operadores relacionais e de
igualdade e diferença
Operadores relacionais:
Operador de igualdade:
23
==
Operador de diferença:
>, >=, <, <=
!=
O resultado é um bool
Introdução à Programação
2003/2004
Precedência e associatividade (I)
Regras comuns respeitadas:
cout << 1 + 5 * 3 << endl;
16
cout << 16 / 2 / 2 << endl;
4
24
Introdução à Programação
2003/2004
Precedência e associatividade (II)
Excepção: atribuição
int i = 1, j = 2;
i = j = 0;
cout << i << ‘ ‘ << j << endl;
Valor da atribuição é o valor da variável atribuída
int x = 0;
double f = 0.0;
f = x = 1.3;
cout << f << ‘ ‘ << x << endl;
25
00
Introdução à Programação
1.0 1
2003/2004
Operadores
especiais de atribuição
+=, -=, *=, /=, %=
Expressões do tipo
x = x + 10;
São abreviadas para
x += 10;
26
Introdução à Programação
2003/2004
Operadores de
incrementação e decrementação (I)
++ e -- prefixos e sufixos
Expressões do tipo
Preferível!
x = x + 1;
São abreviadas para
++x; // operador prefixo
ou
x++; // operador sufixo
27
Introdução à Programação
2003/2004
Operadores de
incrementação e decrementação (II)
Operador prefixo:
int i =
int j =
cout <<
<<
11
Operador sufixo
int i =
int j =
cout <<
<<
28
0;
++i;
i << ’ ’
j << endl;
0;
i++;
i << ’ ’
j << endl;
Introdução à Programação
10
2003/2004
Aula 2: Sumário
29
Conceito de memória
Variáveis como forma estruturada de usar a memória
Tipos básicos em C++
Noções sobre a representação física dos tipos
Noções de representação de inteiros em complemento para dois
Noções de representação de valores em vírgula flutuante
Noções sobre códigos de caracteres
Interpretação de valores do tipo char como inteiros
Valores literais
Computadores como máquinas finitas
Expressões e operações
Precedência e associatividade
Operação de atribuição: alteração do estado da memória
Introdução à Programação
2003/2004