Atenção! As aulas não cobrem toda a matéria! Há que ler as folhas teóricas!

Preview:

Citation preview

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

2003/2004Introdução à Programação3

Variáveis

bool encontrado = false;

int número_de_alunos = 39;float taxa_de_conversão = 200.482f;char caractere = ‘A’;

Nomes de pedaços de memória

Interpretação dada pelo tipo

Tipo: booleano, ou seja, só pode tomar os valores falso e verdadeiro

Nome Valor inicial

2003/2004Introdução à Programação4

Memória do computador (I)

encontrado: bool

falso

número_de_alunos: int

39Taxa_de_conversão: float

200,482caractere: char

A

2003/2004Introdução à Programação5

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

2003/2004Introdução à Programação6

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

2003/2004Introdução à Programação7

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);

2003/2004Introdução à Programação8

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

2003/2004Introdução à Programação9

Manipulando inteiros não negativos

1 + 15 = ?

0001 1111 + 10000

2 + 14 = ?

0010 1110 + 10000

0

0

O bit mais significativo não cabe num inteiro de 4 bits

2003/2004Introdução à Programação10

Representação de inteiros não negativos

2003/2004Introdução à Programação11

Inteiros com sinal

Qual o padrão de bits

mais adequado a

representar (-1)10?

(1111)2

E o (-2)10?

(1110)2

2003/2004Introdução à Programação12

Inteiros com sinal: quando parar?

Em (-8)10:

Aproximadamente

mesmo número de

positivos e negativos

Negativos identificados

pelo bit mais

significativo

2003/2004Introdução à Programação13

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

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

2003/2004Introdução à Programação14

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;

65

66

AB

2003/2004Introdução à Programação15

Valores em vírgula flutuante

Tipo: float Número de bits: 32

Valores: s m 2e

s0 m-1 ... m-23 e7 ... e01,

SinalMantissa Expoente

2003/2004Introdução à Programação16

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)

float 32-bit IEEE 754 3.14f, 200.482F, ...

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 ‘A’, ‘.’, ‘€’, ...

bool 1 byte = 8 bits false e true

Têm versão unsignedTêm versão unsignedTêm versão unsignedTêm versão unsigned

2003/2004Introdução à Programação17

Estrutura deum 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

2003/2004Introdução à Programação18

Instruções

Uma instrução em C++ pode ser da forma

expressão;

Ocorrendo nesta Operadores Variáveis Valores literais ...

2003/2004Introdução à Programação19

Operação de atribuição

Afecta o estado do programa: altera o valor de uma variável

variável = expressão;

O estado do programa é definido pelo valor das suas variáveis

2003/2004Introdução à Programação20

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;

0

2003/2004Introdução à Programação21

Operadores aritméticos (II)

% significa resto da divisão ou módulo:

int x = 15 % 6;cout << x << endl;

3

2003/2004Introdução à Programação22

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

2003/2004Introdução à Programação23

Operadores relacionais e deigualdade e diferença

Operadores relacionais: >, >=, <, <=

Operador de igualdade: ==

Operador de diferença: !=

O resultado é um bool

2003/2004Introdução à Programação24

Precedência e associatividade (I)

Regras comuns respeitadas:

cout << 1 + 5 * 3 << endl;

cout << 16 / 2 / 2 << endl;

16

4

2003/2004Introdução à Programação25

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;

0 0

1.0 1

2003/2004Introdução à Programação26

Operadoresespeciais de atribuição

+=, -=, *=, /=, %=

Expressões do tipo

x = x + 10;

São abreviadas para

x += 10;

2003/2004Introdução à Programação27

Operadores deincrementação e decrementação (I)

++ e -- prefixos e sufixos

Expressões do tipo

x = x + 1;

São abreviadas para

++x; // operador prefixo

ou

x++; // operador sufixo

Preferível!

2003/2004Introdução à Programação28

Operadores deincrementação e decrementação (II)

Operador prefixo:

int i = 0;int j = ++i;cout << i << ’ ’ << j << endl;

Operador sufixo

int i = 0;int j = i++;cout << i << ’ ’ << j << endl;

1 1

1 0

2003/2004Introdução à Programação29

Aula 2: Sumário

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