Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução à linguagem C++ Introdução à linguagem C++ Conceitos básicos: variáveis, tipos de dados, constantes, I/O, etc. Estruturas de controlo. Funções. Ponteiros. Passagem de parâmetros. Alocação dinâmica de memória. Arquivos. 1
Hello World! // my first program in C++ #include <iostream.h> Hello World! int main () { cout << "Hello World!"; return 0; Conceitos básicos: tipos de dados Name char short long int float double long double bool Bytes 1 2 4 4 4 8 10 1 Range signed: -128 to 127 unsigned: 0 to 255 signed: -32768 to 32767 unsigned: 0 to 65535 signed:-2147483648 to 2147483647 unsigned: 0 to 4294967295 Veja long 3.4e + / - 38 (7 digits) 1.7e + / - 308 (15 digits) 1.2e + / - 4932 (19 digits) true or false 2
Conceitos básicos: variáveis Declarações int a, b, c; unsigned short NumberOfSons; signed int MyAccountBalance; Inicialização int a = 0; // formas semelhantes int a (0); Conceitos básicos: variáveis Operações a = 5; b = 2; a = a + 1; result = a - b; cout << result; 4 3
Conceitos básicos: variáveis Escopo das variáveis Em C++, o escopo de uma variável local é dado pelo bloco no qual ele é declarado. Um bloco é um grupo de instruções agrupados com chaves {. Conceitos básicos: constantes Definição #define PI 3.14159265 #define NEWLINE '\n' #define WIDTH 100 Declaração const int width = 100; const char tab = '\t'; const zip = 12440; // tipo: int 4
Conceitos básicos: operadores Associação int a, b; a = 10; // a:? b:? // a:10 b:? b = 4; // a:10 b:4 a = b; // a:4 b:4 b = 7; // a:4 b:7 a = 2 + (b = 5); // a:7 b:5 a = b = c = 5; // todos iguais à 5 Conceitos básicos: operadores Operadores Aritméticos + adição - subtração * multiplicação / divisão % resto da divisão 5
Conceitos básicos: operadores Operações compostas de associação +=, -=, *=, /=, %=, >>=, <<= value += increase; // value = value + increase; a -= 5; // a = a - 5; a /= b; // a = a / b; price *= units + 1; // price = price * (units + 1); Conceitos básicos: operadores Incrementar e decrementar int a = 0; a++; // incrementa 1, a: 1 a+=1; // incrementa 1, a: 2 a=a+1; // incrementa 1, a: 3 B=3; A=++B; // A: 4 B: 4 B=3; A=B++; // A: 3 B: 4 6
Conceitos básicos: operadores Operações relacionais == Igual!= Diferente > Maior que < Menor que >= Maior ou igual que <= Menor ou igual que Conceitos básicos: operadores Operações lógicas! Negação && Operação AND Operação OR Operação Condicional condition? result1 : result2 7==5? 4 : 3 // retorna 3, já que a>b? a : b // 7 é diferente de 5. // retorna o maior. 7
Conceitos básicos: I/O Output (cout) cout << Sentença de saída"; cout << 120; // imprime 120 na tela cout << x; // imprime a variável x cout << Olá, eu tenho " << idade << " anos e meu código postal é " << zipcode << endl; Conceitos básicos: I/O Input (cin) int age; cin >> age; cin >> a >> b; // é equivalente a: cin >> a; cin >> b; 8
Estruturas de controlo Um bloco de instruções é um grupo de instruções separadas por ponto-e-vírgula (;) mas agrupadas em um bloco delimitado por chaves: { e. Um statement refere-se também para uma instrução simples quanto a um bloco de instruções. Estruturas de controlo Estrutura Condicional: if e else if (condition) statement if (x == 100) cout << "x is 100"; if (x == 100) { cout << "x is "; cout << x; 9
Estruturas de controlo if (condition) statement1 else statement2 if (x == 100) cout << "x is 100"; else cout << "x is not 100"; if (x > 0) cout << "x is positive"; else if (x < 0) cout << "x is negative"; else cout << "x is 0"; Estruturas de controlo Estruturas de Repetição ou Laços while (expression) statement #include <iostream.h> int main () { int n; cout << "Enter the starting number > "; cin >> n; while (n>0) { cout << n << ", "; --n; cout << "FIRE!"; return 0; 10
Estruturas de controlo do statement while (condition); #include <iostream.h> int main () { unsigned long n; do { cout << "Enter number (0 to end): "; cin >> n; cout << "You entered: " << n << "\n"; while (n!= 0); return 0; Estruturas de controlo for (initialization; condition; increase) statement; #include <iostream.h> int main () { for (int n=10; n>0; n--) { cout << n << ", "; cout << "FIRE!"; return 0; 11
Estruturas de controlo Os campos initialization e increase são opcionais. Utilizando o operador vírgula (,) é possível especificar mais de uma operação em qualquer campo. Estruturas de controlo Estrutura Seletiva switch switch (expression) { case constant1: block of instructions 1 break; case constant2: block of instructions 2 break;... default: default block of instructions 12
Funções Uma função é um bloco de instruções que é executado quando ele é chamado de algum outro ponto do programa. type name ( argument1, argument2,...) statement type é o tipo de dado retornado pela função. name é o nome atribuído a função. arguments (quantos forem especificados) são valores passados para dentro da função quando sua chamada é realizada. Cada argumento consiste de um tipo de dado seguido de seu identificador, como uma declaração de variável. statement é o corpo da função, que pode ser uma simples instrução ou um bloco de instrução. Funções #include <iostream.h> int addition (int a, int b) { int r; r=a+b; return (r); int main () { int z; z = addition (5,3); cout << "The result is " << z; return 0; 13
Funções Passagem dos parâmetros (argumentos) e quando for executado return (r); Funções Argumentos passados por valor e por referência Atenção: argumentos por referência é exclusivo do C++, sendo que em C é necessário o uso de ponteiros. 14
Ponteiros At the moment in which we declare a variable it must be stored in a concrete location in this succession of cells (the memory). We generally do not decide where the variable is to be placed - fortunately that is something automatically done by the compiler and the operating system at runtime, but once the operating system has assigned an address there are some cases in which we may be interested in knowing where the variable is stored. Ponteiros Operador de endereço (&) & significa literalmente o endereço de" andy = 25; fred = andy; ted = &andy; 15
Ponteiros Operador de referência (*) * significa literalmente o valor apontado por beth = *ted; Ponteiros No exemplo a seguir: andy = 25; ted = &andy; Todas as expressões abaixo são verdadeiras: andy == 25 &andy == 1776 ted == 1776 *ted == 25 16
Ponteiros Declaração de variáveis do tipo ponteiro type * pointer_name; int * number; char * character; float * greatnumber; Ponteiros #include <iostream.h> int main () { int value1 = 5, value2 = 15; int * mypointer; mypointer = &value1; *mypointer = 10; mypointer = &value2; *mypointer = 20; cout << "value1==" << value1 << "/ value2==" << value2; return 0; 17
Ponteiros Ponteiros e vetores O identificador de um vetor é equivalente ao endereço de seu primeiro elemento, como um ponteiro é equivalente ao endereço do primeiro elemento que ele aponta, assim de fato eles são (quase) a mesma coisa. Ponteiros A diferença: Supondo essas 2 declarações: int numbers [20]; int * p; a seguinte operação será válida: p = numbers; mas a seguinte não: numbers = p; Isso porque o vetor é um ponteiro constante, e nenhum valor pode ser associado a ele. 18
Ponteiros #include <iostream.h> int main () { int numbers[5]; int * p; p = numbers; *p = 10; p++; *p = 20; p = &numbers[2]; *p = 30; p = numbers + 3; *p = 40; p = numbers; *(p+4) = 50; for (int n=0; n<5; n++) cout << numbers[n] << ", "; return 0; Ponteiros Ver no Tutorial de C++: Inicialização de ponteiro Aritmética de ponteiros Ponteiro para ponteiros Ponteiro void Ponteiros para funções 19
Alocação Dinâmica de Memória Operators new and new[ ] pointer = new type pointer = new type [elements] int * bobby; bobby = new int [5]; if (bobby == NULL) { // error assigning memory. Take measures. ; Alocação Dinâmica de Memória O tamanho do vetor é determinado na sua declaração. Enquanto que na alocação dinâmica o tamanho do vetor pode ser redimensionado do decorrer do programa. No entanto, ao final o espaço alocado deve ser liberado. Operator delete delete pointer; delete [] pointer; 20