Baixe o app para aproveitar ainda mais
Prévia do material em texto
Introdução à linguagem de programação C++ Tulio Marcus R. Calixto Centro de Informática de Ribeirão Preto Estrutura de um programa // my first program in C++ #include <iostream> using namespace std; int main () { cout << "Hello World!"; return 0; } Estrutura de um programa // my first program in C++ Comentário de linha; ● Todas as linhas começando com 2 barras (//) serão comentários e não terão nenhum efeito no comportamento do programa; ● O programador pode usar para incluir pequenas observações ou explicações dentro do código. Estrutura de um programa #include <iostream> ● Linhas começando com # são directivas para o préprocessador; ● Diz para o préprocessador incluir o arquivo iostream; ● Biblioteca em C++ para entrada e saída básica. Suas funções serão usadas no decorrer do programa. Estrutura de um programa using namespace std; ● Todos os elementos de bibliotecas padrão C++ são declaradas dentro de um namespace chamado std; ● Para acessar suas funcionalidades nós a declaramos com esta expressão. Estrutura de um programa int main () ● Inicio da função principal; ● É sempre a primeira função a ser executada; ● A função principal é o ponto de partida para execução de todos os programas C++ Estrutura de um programa cout << "Hello World!"; ● cout representa o fluxo de saída padrão em C++; ● cout é declarado dentro de iostream dentro do namespace std; ● ; indica o fim de uma instrução C++ Estrutura de um programa return 0; ● Indica que a função terminou; ● O código de retorno 0 indica que o programa trabalhou como esperado – sem erros; Estrutura de um programa /* my second program in C++ with more comments */ #include <iostream> using namespace std; int main () { cout << "Hello World! "; // prints Hello World! cout << "I'm a C++ program"; // prints I'm a C++ program return 0; } Variáveis e tipos de dados ● Variáveis: Uma parte da memória para armazenar um determinado valor; ● O computador pode armazenar milhões de variáveis e executar cálculos sofisticados com elas; ● Cada variável precisa de um identificador que distingue uma de outra; Variáveis e tipos de dados Identificadores: ● Um identificador válido é uma sequência de uma ou mais letras, números ou underscore ( _ ) ; ● Não pode haver espaços, símbolos ou caracteres de pontuação; ● Precisam sempre começar com uma letra; ● Não pode ser uma palavrachave Variáveis e tipos de dados ● Palavrachave: Palavras reservadas da linguagem C++ asm, auto, bool, break, case, catch, char, class, const, const_cast, continue, default, delete, do, double, dynamic_cast, else, enum, explicit, export, extern, false, float, for, friend, goto, if, inline, int, long, mutable, namespace, new, operator, private, protected, public, register, reinterpret_cast, return, short, signed, sizeof, static, static_cast, struct, switch, template, this, throw, true, try, typedef, typeid, typename, union, unsigned, using, virtual, void, volatile, wchar_t, while Variáveis e tipos de dados ● C++ é case sensitive: faz distinção entre letras maiúsculas e minúsculas; ● Para usar uma variável em C++ nós precisamos primeiro especificar o tipo de dado que a variável irá possuir seguida de um identicador de variável válido; Ex.: int a float mynumber Variáveis e tipos de dados ● Se desejamos declarar várias variáveis de um mesmo tipo, podemos fazer tudo numa mesma linha. Ex.: int a, b, c Variáveis e tipos de dados // operating with variables #include <iostream> using namespace std; int main () { // declaring variables: int a, b; int result; Variáveis e tipos de dados Name Description Size* Range* char Character or small integer. 1byte signed: -128 to 127unsigned: 0 to 255 short int (short) Short Integer. 2bytes signed: -32768 to 32767 unsigned: 0 to 65535 int Integer. 4bytes signed: -2147483648 to 2147483647 unsigned: 0 to 4294967295 long int (long) Long integer. 4bytes signed: -2147483648 to 2147483647 unsigned: 0 to 4294967295 bool Boolean value. I t can take one of twovalues: true or false. 1byte true or false float Floating point number. 4bytes +/- 3.4e +/- 38 (~7 digits) double Double precision floating point number. 8bytes +/- 1.7e +/- 308 (~15digits) long double Long double precision floating pointnumber. 8bytes +/- 1.7e +/- 308 (~15 digits) wchar_t Wide character. 2 or 4bytes 1 wide character Variáveis e tipos de dados // process: a = 5; b = 2; a = a + 1; result = a b; // print out the result: cout << result; // terminate the program: return 0; } Variáveis e tipos de dados ● Escopo de variáveis: Local onde a variável pode ser vista. ● Variável global: São variáveis declaradas no corpo principal do código for a de todas as funções ● Variável local: É declarada dentro do corpo de uma função ou bloco Variáveis e tipos de dados Variáveis e tipos de dados ● Inicialização de variáveis: Quando declaramos uma variável seu valor default é indeterminado. ● Se quisermos que a variável armazene algum valor concreto, nós devemos inicializar a variável. Ex.: int a = 0; int a (0); Variáveis e tipos de dados // initialization of variables #include <iostream> using namespace std; int main () { int a=5; // initial value = 5 int b(2); // initial value = 2 int result; // initial value undetermined Variáveis e tipos de dados a = a + 3; result = a b; cout << result; return 0; } Variáveis e tipos de dados ● Strings: sequencia de caracteres. ● C++ prove suporte para strings através da classe string. ● Para declarar um tipo de dado string nós devemos incluir uma informação adicional no arquivo de cabeçalho: <string> Variáveis e tipos de dados // my first string #include <iostream> #include <string> using namespace std; int main () { string mystring; mystring = "This is the initial string content"; cout << mystring << endl; Variáveis e tipos de dados mystring = "This is a different string content"; cout << mystring << endl; return 0; } Constantes ● Constantes são expressões com um valor fixo; Ex.: #define PI 3.141592625 #define NEWLINE '\n' Directiva do préprocessador const int x = 100; const char tabulator = '\t'; Directiva da linguagem Constantes // defined constants: calculate circumference #include <iostream> using namespace std; #define PI 3.14159 #define NEWLINE '\n' int main () { Constantes double r=5.0; // radius double circle; circle = 2 * PI * r; cout << circle; cout << NEWLINE; return 0; } Constantes \nNewline \r carriage return \tTab \vvertical tab \bBackspace \f form feed (page feed) \aalert (beep)\aalert (beep) \' single quote (') \"double quote (") \?question mark (?) \\backslash (\) Operadores ● A partir do momento que possuimos variáveis nós podemos realizar operações com elas. ● Operador de atribuição – a = 5; – c = 90; Operadores // assignment operator #include <iostream> using namespace std; int main () { int a, b; // a:?, b:? a = 10; // a:10, b:? b = 4; // a:10, b:4 a = b; // a:4, b:4 Operadores b = 7; // a:4, b:7 cout << "a:"; cout << a; cout << " b:"; cout << b; return 0; } Operadores ● Aritiméticos + addition - subtraction * multiplication / division % modulo Operadores ● Operadores compostos:+=, =, *=, /=, %=, >>=, <<=, &=, ^=, |= ● Realizam a operação seguida de atribuição Operadores // compound assignment operators #include <iostream> using namespace std; int main () { int a, b=3; a = b; a+=2; // equivalent to a=a+2 cout << a; return 0; } Operadores ● Incremento e Decremento (++, ) c++; c+=1; c=c+1; Operadores ● Operadores de igualdade ==, !=, >, <, >=, <= Ex: (7 == 5) // evaluates to false. (5 > 4) // evaluates to true. (3 != 2) // evaluates to true. (6 >= 6) // evaluates to true. (5 < 5) // evaluates to false. Operadores ● Operadores lógicos !, &&, || Ex: !(5 == 5) // evaluates to false because the expression at its right (5 == 5) is true. !(6 <= 4) // evaluates to true because (6 <= 4) would be false. !true // evaluates to false !false // evaluates to true Operadores ● Operador && a b a && b true true true true false false false true false false false false Operadores ● Operador || a b a || b true true true true false true false true true false false false Operadores ● Operador condicional ( ? ) ● Retorna um valor se a expressão é verdadeira e outro valor se a expressão for falsa. ● Sintaxe: condition ? result1 : result2 Ex: 7==5 ? 4 : 3 // returns 3, since 7 is not equal to 5. 7==5+2 ? 4 : 3 // returns 4, since 7 is equal to 5+2. Operadores // conditional operator #include <iostream> using namespace std; int main () { int a,b,c; a=2; b=7; c = (a>b) ? a : b; cout << c; return 0; } Entrada e Saída básica ● Permite o usuário interagir com o sistema. ● C++ usa streams para realizar entrada e saida básica de forma sequencial, como no teclado, por exemplo. ● stream é um objeto onde o programa pode inserir ou extrair caracteres. ● O arquivo de cabeçalho IOSTREAM contem os objetos de entrada e saida padrão. Entrada e Saída básica ● Saída padrão > monitor ● Objeto stream definido para acessar a saída: cout Ex: cout << "First sentence.\n "; cout << "Second sentence.\nThird sentence."; Entrada e Saída básica ● Entrada padrão: teclado ● Objeto stream definido: cin ● Precisa ser seguido de uma variável Ex: int age; cin >> age; Entrada e Saída básica // i/o example #include <iostream> using namespace std; int main (){ int i; cout << "Please enter an integer value: "; cin >> i; cout << "The value you entered is " << i; cout << " and its double is " << i*2 << ".\n"; return 0; } Entrada e Saída básica ● cin e strings ● cin pára quando encontra um espaço em branco ● Só é possi entrar palavra por palavra ● Solução: getline Entrada e Saída básica // cin with strings #include <iostream> #include <string> using namespace std; int main () { string mystr; cout << "What's your name? "; getline (cin, mystr); Entrada e Saída básica cout << "Hello " << mystr << ".\n"; cout << "What is your favorite team? "; getline (cin, mystr); cout << "I like " << mystr << " too!\n"; return 0; } Entrada e Saída básica ● stringstream. ● O arquivo de cabeçalho <sstream> define uma classe chamada stringstream. ● Permite tratar objetos strings como streams. ● Pode ser utilizado para converter strings em int e double Entrada e Saída básica Ex: // stringstreams #include <iostream> #include <string> #include <sstream> using namespace std; int main () { Entrada e Saída básica string mystr; float price=0; int quantity=0; cout << "Enter price: "; getline (cin,mystr); stringstream(mystr) >> price; cout << "Enter quantity: "; getline (cin,mystr); stringstream(mystr) >> quantity; Entrada e Saída básica cout << "Total price: " << price*quantity << endl; return 0; } Estruturas de Controle ● Um programa não é limitado a uma sequencia linear de instuções. ● Pode haver bifurcações, repetição de código e tomada de decisão. ● Especificam como o programa deve reagir em determinadas circunstâncias. Estruturas de Controle ● Com a adição de estruturas de controle segue um novo conceito: bloco. ● Bloco: Conjunto de instruções agrupadadas e deliminadas por colchetes {} ● Se o bloco for de apenas uma instrução podese otimir o {} Estruturas de Controle ● if / else ● If (condição) bloco de instruções ● Se a condição é verdadeira o bloco de instruções é executado. ● Se a condição é falsa o bloco é ignorado e o programa continua após o bloco condicional. Estruturas de Controle Exs. if (x == 100) cout << "x is 100"; if (x == 100){ cout << "x is "; cout << x; } Estruturas de Controle ● Nós podemos especificar o que nós queremos que aconteça caso a condição não seja satisfeita. Para tal utilizamos a palavra reservada: else Ex: if (x == 100) cout << "x is 100"; else cout << "x is not 100"; Estruturas de Controle ● Concatenando instruções if + else Ex: if (x > 0) cout << "x is positive"; else if (x < 0) cout << "x is negative"; else cout << "x is 0"; Estruturas de Controle ● Loops: tem o propósito de repetir o bloco de instruções um certo número de vezes ou enquanto uma condição não for estabelecida. ● Loop while ● Sintaxe: while (condição) bloco de instruções Estruturas de Controle // custom countdown using while #include <iostream> using namespace std; int main () { int n; cout << "Enter the starting number > "; cin >> n; Estruturas de Controle while (n>0) { cout << n << ", "; n; } cout << "FIRE!\n"; return 0; } Estruturas de Controle ● Loop: do .. while ● Semelhante ao loop while, exceto que a condição é testada depois da execução do bloco. ● Garante que o bloco seja executado pelo menos uma vez. Estruturas de Controle Ex.: // number echoer #include <iostream> using namespace std; int main () { unsigned long n; Estruturas de Controle do { cout << "Enter number (0 to end): "; cin >> n; cout << "You entered: " << n << "\n"; } while (n != 0); return 0; } Estruturas de Controle ● Loop: for ● Sintaxe: – for (inicialização; condição; incremento) bloco; ● Realização uma ação repetitiva com um contador que é inicializado e incrementado em cada iteração. Estruturas de Controle Ex.: // countdown using a for loop #include <iostream> using namespace std; int main (){ for (int n=10; n>0; n) { cout << n << ", "; } Estruturas de Controle cout << "FIRE!\n"; return 0; } Estruturas de Controle ● Saltos de blocos ● Break ● Usando o break podemos deixar o loop for, se a condição do mesmo não é satisfeita; ● Podemos usar para terminar um loop infinito; ● Forçar o fim antes do fim natural Estruturas de Controle Ex.: // break loop example #include <iostream> using namespace std; int main () { int n; Estruturas de Controle for (n=10; n>0; n) { cout << n << ", "; if (n==3) { cout << "countdown aborted!"; break; } } return 0; } Estruturas de Controle ● Continue ● Faz o programa ignorar o restante do loop atual e passa para a proxima iteração. ● Ex.: Estruturas de Controle // continue loop example #include <iostream> using namespace std; int main (){ for (int n=10; n>0; n) { if (n==5) continue; cout << n << ", "; } cout << "FIRE!\n"; return 0; } Estruturas de Controle● Goto ● Permite fazer um salto para um outro ponto do programa. ● O destino do salto precisa ter um identificador que é utilizado como argumento para o comando goto. ● O identificador válido é seguido por dois pontos (:). Estruturas de Controle Ex.: // goto loop example #include <iostream> using namespace std; int main () { int n=10; loop: Estruturas de Controle cout << n << ", "; n; if (n>0) goto loop; cout << "FIRE!\n"; return 0; } Estruturas de Controle ● Switch ● Tem a função de checar muitas opções para poder tomar uma decisão; ● Pode ser usado no lugar de vários if else ● Sintaxe: Estruturas de Controle switch (expression){ case constant1: group of statements 1; break; case constant2: group of statements 2; break; . . . default: default group of statements } Estruturas de Controle switch (x) { case 1: cout << "x is 1"; break; case 2: cout << "x is 2"; break; default: cout << "value of x unknown"; } if (x == 1) { cout << "x is 1"; } else if (x == 2) { cout << "x is 2"; } else { cout << "value of x unknown"; } Funções ● Utilizando funções podemos estruturar nosso programa de forma mais modular. ● Função é um grupo de instruções que são executadas quando chamadas em algum ponto do programa. ● Sintaxe: – tipo nome ( parametro1, parametro2, ...) { instruções } Funções ● Onde: – Tipo: Tipo de dado retornado pela função – Nome: Identificador pelo qual será possivel chamar a função – Parametros: Cada parametro consiste em um tipo de dado específico seguido por um identificador – Instruções: Formam o corpo da função Funções Ex.: // function example #include <iostream> using namespace std; int addition (int a, int b){ int r; r=a+b; return (r); } Funções int main () { int z; z = addition (5,3); cout << "The result is " << z; return 0; } Funções Ex.2: // function example #include <iostream> using namespace std; int subtraction (int a, int b){ int r; r=ab; return (r); } Funções int main (){ int x=5, y=3, z; z = subtraction (7,2); cout << "The first result is " << z << '\n'; cout << "The second result is " << subtraction (7,2) << '\n'; cout << "The third result is " << subtraction (x,y) << '\n'; z= 4 + subtraction (x,y); cout << "The fourth result is " << z << '\n'; return 0; } Funções ● Funções sem tipo: void ● Função que exibe uma mensagem na tela ● Ex.: Funções // void function example #include <iostream> using namespace std; void printmessage (){ cout << "I'm a function!"; } int main () { printmessage (); return 0; } Funções ● Argumentos podem ser passador por valor ou por referência ● Até agora os argumentos foram passados por valor int x=5, y=3, z; z = addition ( x , y ); Funções ● Passamos os valores de x e y (5, 3) e não as variáveis x e y ● Os valores das variáveis a e b passam a ser 5 e 3 ● Modificações nos valores de a e b não modificam os valores de x e y, pois apenas cópias dos valores foram passados para a função. ● Se quisermos que os valores de x e y sejam modificados precisamos passar os dados por referência Funções // passing parameters by reference #include <iostream> using namespace std; void duplicate (int& a, int& b, int& c){ a = a * 2; b = b * 2; c = c * 2; } Funções int main () { int x=1, y=3, z=7; duplicate (x, y, z); cout << "x=" << x << ", y=" << y << ", z=" << z; return 0; } Funções ● Na declaração da função os tipos de dados de cada parametro são seguidos por um sinal & ● & indica que os paramentros são passados por referência Funções Ex.2: // more than one returning value #include <iostream> using namespace std; void prevnext (int x, int& prev, int& next){ prev = x1; next = x+1; } Funções int main () { int x=100, y, z; prevnext (x, y, z); cout << "Previous=" << y << ", Next=" << z; return 0; } Funções ● Valores padrões em paramentros ● Quando declaramos uma função podemos usar valores default para os parametros ● O valor default será usado se o argumento correspondente for deixado em branco quando a função é chamada. ● Se os valores forem passados para a função, os valores default serão ignorados Funções // default values in functions #include <iostream> using namespace std; int divide (int a, int b=2){ int r; r=a/b; return (r); } Funções int main () { cout << divide (12); cout << endl; cout << divide (20,4); return 0; } Funções ● Sobrecarga de funções ● Em C++ duas funções podem ter o mesmo nome, se: – Possuírem tipo e ou número de parametros diferentes Funções Ex.: // overloaded function #include <iostream> using namespace std; int operate (int a, int b){ return (a*b); } float operate (float a, float b){ return (a/b); } Funções int main (){ int x=5,y=2; float n=5.0,m=2.0; cout << operate (x,y); cout << "\n"; cout << operate (n,m); cout << "\n"; return 0; } Funções ● Recursividade ● Propriedade que as funções têm de chamase a si mesmo. ● Cálculo de fatorial ● Ordenação Funções Ex.: // factorial calculator #include <iostream> using namespace std; long factorial (long a){ if (a > 1) return (a * factorial (a1)); else return (1); } Funções int main () { long number; cout << "Please type a number: "; cin >> number; cout << number << "! = " << factorial (number); return 0; } Funções ● Declarando funções ● Funções precisam ser declaradas antes de serem chamadas ● Até agora a função main era construído depois de todas as outras funções ● Solução: declarar as funções Funções Ex.: // declaring functions prototypes #include <iostream> using namespace std; void odd (int a); void even (int a); Funções int main (){ int i; do { cout << "Type a number (0 to exit): "; cin >> i; odd (i); } while (i!=0); return 0; } Arrays ● Conjunto de elementos do mesmo tipo de dado ● Localizados em regiões de memória contígua ● Podem ser referenciados individualmente através de um identificador Arrays ● Declarando arrays – int billy [5]; ● Inicializando arrays – int billy [5] = { 16, 2, 77, 40, 12071 }; ● Acessando elemento – a = billy[2]; Arrays Arrays Ex.: // arrays example #include <iostream> using namespace std; int billy [] = {16, 2, 77, 40, 12071}; int n, result=0; Arrays int main () { for ( n=0 ; n<5 ; n++ ) { result += billy[n]; } cout << result; return 0; } Arrays ● Arrays multidimensionais ● Declaração – int jimmy [3][5]; Arrays ● Acessando elemento – int a = jimmy [1][3]; Arrays Ex.: #define WIDTH 5 #define HEIGHT 3 int jimmy [HEIGHT][WIDTH]; int n,m; Arrays int main (){ for (n=0;n<HEIGHT;n++) for (m=0;m<WIDTH;m++) { jimmy[n][m]=(n+1)*(m+1); } return 0; } Arrays ● Gerar números aleatórios: – numero= rand() % valor_maximo; ● Precisa do arquivo de cabeçalho: – #include <stdlib.h> Arrays ● Exercício: ● Crie uma matriz quadrada 10x10 ● Insira todos os elementos randomicamente ● Exiba o resultado da multiplicação dos elementos da diagonal principal MENOS amultiplicação dos elementos da diagonal secundária da matriz Arrays ● Dicas ● Diagonal Principal: linha = coluna ● Diagonal Secundária: (linha + coluna) = (dimensao – 1) ● Para percorrer a matriz use: for (linha) for (coluna) Classes e Objetos ● Classe – Definem os atributos de um objeto – Definem o que um objeto pode fazer ● Objetos – É a realização da classe Classes e Objetos Ex.: class CRectangle { int x, y; public: void set_values (int,int); int area (void); } ; Classes e Objetos ● Modificadores de acesso ● Private: Acessivel somente por membros da classe. ● Public: Acessivel de qualquer lugar onde o objeto é visivel. Classes e Objetos // classes example #include <iostream> using namespace std; class CRectangle { int x, y; public: void set_values (int,int); int area () {return (x*y);} }; Classes e Objetos void CRectangle::set_values (int a, int b) { x = a; y = b; } int main () { CRectangle rect; rect.set_values (3,4); cout << "area: " << rect.area(); return 0; } Classes e Objetos ● Construtor ● Metodo utilizado para inicializar as variaveis de um objeto ● É chamado automaticamente quando o objeto é criado ● Precisa ter o mesmo nome da classe e não deve ter nenhum dado de retorno Classes e Objetos ● Sobre carga de construtores // overloading class constructors #include <iostream> using namespace std; class CRectangle { int width, height; public: CRectangle (); CRectangle (int,int); int area (void) {return (width*height);} }; Classes e Objetos CRectangle::CRectangle () { width = 5; height = 5; } CRectangle::CRectangle (int a, int b) { width = a; height = b; } Classes e Objetos int main () { CRectangle rect (3,4); CRectangle rectb; cout << "rect area: " << rect.area() << endl; cout << "rectb area: " << rectb.area() << endl; return 0; } Classes e Objetos ● Herança ● Permite criar classes que são derivadas de outras classes ● Inclui todas as caracteristicas da classe pai + suas próprias ● Para indicar herença utilizamos ( : ) – class CRectangle: public CPolygon Classes e Objetos ● Ex.: Classes e Objetos // derived classes #include <iostream> using namespace std; class CPolygon { protected: int width, height; public: void set_values (int a, int b); }; void CPolygon::set_values (int a, int b){ width=a; height=b; } Classes e Objetos class CRectangle: public CPolygon { public: int area (); }; int CRectangle::area(){ return (width * height); } class CTriangle: public CPolygon { public: int area (); }; Classes e Objetos int CTriangle::area(){ return (width * height / 2); } int main () { int a, b, c, d; cout << "Informe a base do retangulo: "; cin >> a; cout << "Informe a altura do retangulo: "; cin >> b; Classes e Objetos cout << "Informe a base do triangulo: "; cin >> c; cout << "Informe a altura do triangulo: "; cin >> d; CRectangle rect; CTriangle trgl; Classes e Objetos rect.set_values (a, b); trgl.set_values (c, d); cout << "Area do retangulo: " << rect.area() << endl; cout << "Area do triangulo: " << trgl.area() << endl; return 0; } Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 Slide 6 Slide 7 Slide 8 Slide 9 Slide 10 Slide 11 Slide 12 Slide 13 Slide 14 Slide 15 Slide 16 Slide 17 Slide 18 Slide 19 Slide 20 Slide 21 Slide 22 Slide 23 Slide 24 Slide 25 Slide 26 Slide 27 Slide 28 Slide 29 Slide 30 Slide 31 Slide 32 Slide 33 Slide 34 Slide 35 Slide 36 Slide 37 Slide 38 Slide 39 Slide 40 Slide 41 Slide 42 Slide 43 Slide 44 Slide 45 Slide 46 Slide 47 Slide 48 Slide 49 Slide 50 Slide 51 Slide 52 Slide 53 Slide 54 Slide 55 Slide 56 Slide 57 Slide 58 Slide 59 Slide 60 Slide 61 Slide 62 Slide 63 Slide 64 Slide 65 Slide 66 Slide 67 Slide 68 Slide 69 Slide 70 Slide 71 Slide 72 Slide 73 Slide 74 Slide 75 Slide 76 Slide 77 Slide 78 Slide 79 Slide 80 Slide 81 Slide 82 Slide 83 Slide 84 Slide 85 Slide 86 Slide 87 Slide 88 Slide 89 Slide 90 Slide 91 Slide 92 Slide 93 Slide 94 Slide 95 Slide 96 Slide 97 Slide 98 Slide 99 Slide 100 Slide 101 Slide 102 Slide 103 Slide 104 Slide 105 Slide 106 Slide 107 Slide 108 Slide 109 Slide 110 Slide 111 Slide 112 Slide 113 Slide 114 Slide 115 Slide 116 Slide 117 Slide 118 Slide 119 Slide 120 Slide 121 Slide 122 Slide 123 Slide 124 Slide 125 Slide 126 Slide 127 Slide 128 Slide 129 Slide 130 Slide 131 Slide 132 Slide 133 Slide 134
Compartilhar