Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1...

20
1 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.

Transcript of Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1...

Page 1: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

1

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.

Page 2: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

2

Hello World!

// my first program in C++

#include <iostream.h>

int main () {

cout << "Hello World!";

return 0;

}

Hello World!

Conceitos básicos: tipos de dados

signed: -32768 to 32767 | unsigned: 0 to 65535 2short

true or false1bool

1.2e + / - 4932 (19 digits) 10long double

1.7e + / - 308 (15 digits) 8double

3.4e + / - 38 (7 digits) 4float

Veja long4int

signed:-2147483648 to 2147483647unsigned: 0 to 4294967295

4long

signed: -128 to 127 | unsigned: 0 to 2551char

RangeBytesName

Page 3: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

3

Conceitos básicos: variáveisDeclarações

int a, b, c;

unsigned short NumberOfSons;

signed int MyAccountBalance;

Inicializaçãoint a = 0; // formas semelhantes

int a (0);

Conceitos básicos: variáveisOperações

a = 5;

b = 2;

a = a + 1;

result = a - b;

cout << result;

4

Page 4: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

4

Conceitos básicos: variáveisEscopo 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çãoconst int width = 100;const char tab = '\t';const zip = 12440; // tipo: int

Page 5: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

5

Conceitos básicos: operadores

Associaçãoint a, b; // a:? b:?

a = 10; // 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

Page 6: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

6

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: operadoresIncrementar 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

Page 7: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

7

Conceitos básicos: operadores

Operações relacionais

== Igual

!= Diferente

> Maior que

< Menor que

>= Maior ou igual que

<= Menor ou igual que

Conceitos básicos: operadoresOperações lógicas

! Negação&& Operação AND

|| Operação OR

Operação Condicionalcondition ? result1 : result2

7==5 ? 4 : 3 // retorna 3, já que

// 7 é diferente de 5.

a>b ? a : b // retorna o maior.

Page 8: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

8

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;

Page 9: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

9

Estruturas de controloUm bloco de instruções é um grupo de instruções separadas por ponto-e-vírgula (;) mas agrupadas em um bloco delimitado porchaves: { e }.Um statement refere-se também para umainstrução simples quanto a um bloco de instruções.

Estruturas de controlo

Estrutura Condicional: if e elseif (condition) statement

if (x == 100)cout << "x is 100";

if (x == 100){cout << "x is ";cout << x;

}

Page 10: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

10

Estruturas de controloif (condition) statement1 else statement2

if (x == 100)cout << "x is 100";

elsecout << "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 controloEstruturas 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;

}

Page 11: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

11

Estruturas de controlodo 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 controlofor (initialization; condition; increase) statement;

#include <iostream.h>

int main ()

{

for (int n=10; n>0; n--) {

cout << n << ", ";}

cout << "FIRE!";

return 0;

}

Page 12: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

12

Estruturas de controloOs 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 controloEstrutura Seletiva switch

switch (expression) {case constant1:

block of instructions 1break;case constant2:

block of instructions 2break;...default:

default block of instructions}

Page 13: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

13

FunçõesUma 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;

}

Page 14: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

14

FunçõesPassagem 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.

Page 15: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

15

PonteirosAt the moment in which we declare a variableit must be stored in a concrete location in thissuccession of cells (the memory).We generally do not decide where thevariable is to be placed - fortunately that is something automatically done by thecompiler and the operating system atruntime, but once the operating system hasassigned an address there are some cases in which we may be interested in knowingwhere the variable is stored.

Ponteiros

Operador de endereço (&)& significa literalmente “o endereço de"andy = 25;fred = andy;ted = &andy;

Page 16: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

16

Ponteiros

Operador de referência (*) * significa literalmente “o valor apontado por“

beth = *ted;

PonteirosNo exemplo a seguir:

andy = 25;ted = &andy;

Todas as expressões abaixo são verdadeiras:

andy == 25&andy == 1776ted == 1776*ted == 25

Page 17: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

17

PonteirosDeclaraçã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;

}

Page 18: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

18

Ponteiros

Ponteiros e vetoresO 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.

PonteirosA 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.

Page 19: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

19

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 ponteiroAritmética de ponteirosPonteiro para ponteirosPonteiro voidPonteiros para funções

Page 20: Estrutura de Dados e Algoritmos e Programação e ...cee.uma.pt/edu/eda/eda_200506/aula02.pdf · 1 Estrutura de Dados e Algoritmos e Programação e Computadores II Aula 2: Introdução

20

Alocação Dinâmica de Memória

Operators new and new[ ]pointer = new typepointer = 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;