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