Baixe o app para aproveitar ainda mais
Prévia do material em texto
CCF 110 ALGORITMO E ESTRUTURA ALGORITMO E ESTRUTURA DE DADOS IDE DADOS I Universidade Federal de Itajubá Prof. Roberto Affonso da Costa Junior AULA 04 – 1/2AULA 04 – 1/2 – Estrutura Condicionais Estrutura CondicionaisEstrutura Condicionais ➢ Até agora estávamos trabalhando com algoritmos puramente sequenciais, ou seja, todas as instruções eram executadas seguindo a ordem do algoritmo (normalmente, de cima para baixo). A partir de agora começamos a estudar estruturas de seleção. ➢ Uma estrutura de seleção, como o próprio nome já diz, permite que determinadas instruções sejam executadas ou não, dependendo do resultado de uma condição (teste), ou seja, o algoritmo vai tomar decisão de um processo (leitura, processo e impressão) a ser realizado. 4 Estruturas de ControleEstruturas de Controle Condicional ou de seleçãoCondicional ou de seleção Isto é, são testados parâmetros e, dependendo de seus valores, tomamos um caminho ou outro. As condições que são testadas num Algoritmo são do tipo lógica (booleano), portanto podem ter somente dois resultados: Verdadeiro ou Falso. Assim, a seleção de ações pode seguir, no máximo, duas alternativas: uma se a condição for verdadeira e outra se a condição testada for falsa. Existem seleções simples, compostas e múltiplas. Operadores LógicosOperadores Lógicos ● Utilizados na confecção das condições ● São eles: – Maior que > – Menor que < – Maior ou igual a >= – Menor ou igual a <= – Diferente de <> – Igual a = Operadores RelacionaisOperadores Relacionais ● Complementando a confecção das condições ● São eles: – E e – OU ou – não nao Operadores RelacionaisOperadores Relacionais A Não A V F F V A B A ou B V V V V F V F V V F F F A B A e B V V V V F F F V F F F F TreinamentoTreinamento 1) Com base nas tabelas de decisão, determine os resultados lógicos das expressões mencionadas, assinalando se são verdadeiras ou falsas. Considere para as respostas os seguintes valores: X = 1, A = 3, B = 5, C = 8 e D = 7. a) nao (X <= 3) resp: ( ) b) (X <> 1) e nao (B > A) resp: ( ) c) nao (B < 0) e (D > 8) resp: ( ) d) nao (X > -2) ou (C < 9) resp: ( ) e) (X > A) ou (A > C) resp: ( ) f) (B >= 5) resp: ( ) g) (C < 1) e (B >= A) resp: ( ) 9 Estruturas de ControleEstruturas de Controle Condicional ou de seleçãoCondicional ou de seleção Seleções Simples: A seleção mais simples existente é quando o único bloco de comando (leitura, processo e/ou escreva) a ser realizado é aquele que a situação da <condição> é verdadeira. Não existe a opção falsa, ou não é necessário realizar nada neste tipo de opção. É o que chamamos de opção “default”. 10 Estruturas de ControleEstruturas de Controle Condicional ou de seleçãoCondicional ou de seleção Portugol: se <condição> então bloco de comandos fim-se Fluxograma: <condições> F V Bloco de comandos 11 EXEMPLO 1:EXEMPLO 1: Leia um número e diga se ele é “maior que 10”.Leia um número e diga se ele é “maior que 10”. {declaração de variáveis} real N inicio {comandos de entrada de dados} leia (N) {processo e saída de dados} se N > 10 então imprima (N,” maior que 10) fim-se fim INICIO N N, “ Maior que 10” FIM N > 10 F V 12 Estruturas de ControleEstruturas de Controle Condicional ou de seleçãoCondicional ou de seleção Seleções Completa: A seleção completa é dada por se...então...senão...fim-se onde se a <condição> for verdadeira é realizado o então e dentro dele os blocos de comandos 1, se for falsa, é realizado o senão e dentro dele os blocos de comandos 2. 13 Estruturas de ControleEstruturas de Controle Condicional ou de seleçãoCondicional ou de seleção Portugol: se <condição> então bloco de comandos 1 senão bloco de comandos 2 fim-se Fluxograma: <condições> F V Bloco de comandos 1 Bloco de comandos 2 14 EXEMPLO 2:EXEMPLO 2: Leia um número natural e diga se ele é par ou impar.Leia um número natural e diga se ele é par ou impar. {declaração de variáveis} inteiro N inicio leia (N) se resto (N,2) = 0 então imprima (N, “ é par”) senão imprima (N,” é impar) fim-se fim INICIO FIM N N, “ é par” resto (N, 2) = 0 F V N, “ é impar” TreinamentoTreinamento 2) Determine o resultado lógicos das expressões mencionadas, assinalando se são verdadeiras ou falsas. Considere para as respostas os seguintes valores: X = 3 A = 1 B = 5 C = 8 D = 0 a) não (X > 3) b) (X > 3) ou não (B > D) c) não (D < 0) e (C > 5) d) não (X > 3) ou (C < 7) 3) Indique a saída dos trechos de programa em português estruturado, mostrado abaixo. Para as saídas considere os seguintes valores: A = 0 B = 9 C = 3 D = 2 a) se nao (D > 3) então X ← (A + B) * D senão X ← (A - B) / C fim-se imprima (X) b) se (A > B) ou (C <= 3) então X ← (A + 2) * (B - 2) senão X ← (A + B) / D * (C + D) fim-se imprima (X) 16 Estruturas de ControleEstruturas de Controle Condicional ou de seleçãoCondicional ou de seleção Seleções Composta: A estrutura de seleções composta também é designada como seleção aninhada e é utilizada quando estivermos fazendo várias comparações (testes) sempre com a mesma variável. Esta estrutura é chamada de aninhada porque na sua representação fica uma seleção dentro de outra seleção. 17 Estruturas de ControleEstruturas de Controle Condicional ou de seleçãoCondicional ou de seleção Portugol: se <condição 1> então se <condição 2> então bloco de comandos 11 senão bloco de comandos 12 fim-se bloco de comandos 1 senão se <condição 3> então bloco de comandos 21 senão bloco de comandos 22 fim-se bloco de comandos 2 fim-se 18 <condições 1> F V Bloco de comandos 1 Bloco de comandos 2 Fluxograma: <condições 2> <condições 3> V V F F Bloco de comandos 11 Bloco de comandos 12 Bloco de comandos 21 Bloco de comandos 22 19 EXEMPLO 3:EXEMPLO 3: Montar um programa que leia Montar um programa que leia três medidas e determine se três medidas e determine se essas medidas formam um essas medidas formam um triângulo, se formam que tipo triângulo, se formam que tipo de triângulo ele é (isósceles, de triângulo ele é (isósceles, escaleno ou eqüilátero).escaleno ou eqüilátero). {declaração de variáveis} real A, B, C inicio leia (A, B, C) se (A < B + C) e (B < A + C) e (C < A + B) então se (A = B) e (B = C) então imprima(“Triângulo Eqüilátero”) senão se (A = B) ou (A = C) ou (B = C) então imprima (“Triângulo Isósceles”) senão imprima (“Triângulo escaleno”) fim-se fim-se senão imprima (“As medidas não formam um triângulo”) fim-se fim TreinamentoTreinamento 4) Indique a saída dos trechos de programa do pedaço de fluxograma a seguir. Considerando os seguintes de valores inteiros: A = 2, B = 3, C = 5, D = 9. X nao (D > 5) F V X ← (A + B) * D X ← (A - B) / C TreinamentoTreinamento 5) Indique a saída dos trechos de programa do pedaço de fluxograma a seguir.Considerando os seguintes de valores inteiros: A = 4, B = 1, C = 0, D = 10. X (A > 2) .e. (B < 7) F V X ← (A + 2) * (B – 2) X ← (A + B) div D * (C + D) 22 Estruturas de ControleEstruturas de Controle Condicional ou de seleçãoCondicional ou de seleção Seleções Múltiplas: Podemos com as seleções aninhadas criarmos múltiplas seleções, mas existe um comando ao qual as seleções múltiplas são melhor representadas. E com isto, podemos escolher mais opções que somente verdadeira e falsa. Portugol: caso (<variável>) <valor_variável 1>:Comandos de bloco 1 <valor_variável 2>:Comandos de bloco 2 ... <valor_variável n>:Comandos de bloco n senão: Comandos de bloco F (opcional) fim-caso 23 <variável> Bloco de comandos F Fluxograma: F Bloco de comandos 1<valor_variável 1> <valor_variável 2> Bloco de comandos 2 <valor_variável n> Bloco de comandos n Exemplo 4Exemplo 4 ● Calcular a seguinte expressão: VL= 5A+B (A−B)+ 2A B+3A ALGORITMO objetivo: Calcular uma expressão aritmética 1) Definir variáveis inteiros A, B, num1, num2, den1, den2, VL inicio 2) Entrada dos dados imprima ( “entre com dois valores “ ) leia ( A, B ) 3) Calculo do numerador num1 ← 5 A + B 4) Calculo do numerador do denominador num2 ← 2 A 5) Calculo do denominador simples den 1 ← B + 3A 6) calculo da expressao se ( den1 = 0 ) então imprima ( “expressão não calculada “ ) imprima ( “denominador nulo” ) senão senão 6.1) calculo do denominador geral den2 ← ( A – B ) + num2 / den1 6.2) calculo da expressão se ( den2 = 0 ) então imprima ( “expressão não calculada “ ) imprima ( “denominador nulo” ) senão VL ← num1 / den2 imprima ( “ valor da expressao = “, VL ) fim_se fim_se 7) mostrando os dados de entrada imprima ( “A = “, A ) imprima ( “B = “, B ) fim Exemplo 5Exemplo 5 ● São dados os resultados de uma prova que consta de 5 questões, cujas respostas podem ser uma das 3 alternativas A, B ou C; ● São dados também as respostas de um aluno para esta prova. ● Desenvolva um algoritmo para calcular o desempenho deste aluno na prova segundo o seguinte critério: – Acerto de 3 ou mais questões – conceito A – Acerto de 1 ou 2 questões – conceito B – Acerto de nenhuma questão - conceito R ALGORITMO objetivo: calcular o conceito de um aluno frente ao gabarito de uma prova 1) definição das variáveis caracter gab1, gab2, gab3, gab4, gab5 caracter resp1, resp2, resp3, resp4, resp5 caracter conceito inteiro n_questoes inicio 2) entrada dos dados 2.1 ) dados do gabarito imprima ( “entre com as 5 alternativas do gabarito” ) leia ( gab1, gab2, gab3, gab4, gab5 ) 2.2 ) dados do aluno imprima ( “entre com as 5 resposta do aluno” ) leia ( resp1, resp2, resp3, resp4, resp5 ) 3) inicializando variáveis n_questoes ← 0 4) calculando quantas questões estão certas Se ( gab1 = resp1 ) então n_questoes ← n_questoes + 1 fim_se Se ( gab2 = resp2 ) então n_questoes ← n_questoes + 1 fim_se Se ( gab3 = resp3 ) então n_questoes ← n_questoes + 1 fim_se Se ( gab4 = resp4 ) então n_questoes ← n_questoes + 1 fim_se Se ( gab5 = resp5 ) então n_questoes ← n_questoes + 1 fim_se 5) verificando o conceito do aluno se ( n_questoes ≥ 3 ) então conceito ← ‘A’ senão se ( n_questoes > 0 ) então conceito ← ‘B’ senão conceito ← ‘R’ fim_se fim_se 6) mostrando os resultados 6.1 ) dados de entrada imprima ( “gabarito: “ ) imprima ( “questao 1: “, gab1 ) imprima ( “questao 2: “, gab2 ) imprima ( “questao 3: “, gab3 ) imprima ( “questao 4: “, gab4 ) imprima ( “questao 5: “, gab5 ) imprima ( “resposta do aluno: “ ) imprima ( “resposta 1: “, resp1 ) imprima ( “resposta 2: “, resp2 ) imprima ( “resposta 3: “, resp3 ) imprima ( “resposta 4: “, resp4 ) imprima ( “resposta 5: “, resp5 ) 6.2 ) quantidade de acertos imprima ( “quantidade de questoes certas = “ , n_questoes ) 6.3 ) conceito do aluno imprima ( “conceito do aluno: “, conceito ) fim Exemplo 7Exemplo 7 Dado a data de nascimento de uma pessoa, no formato DD MM AAAA, fazer um programa para ler esta data e imprimi-la na forma corrente, ou seja: DD de nome do mês ao qual MM corresponde de AAA O programa deverá fazer a consistência dos dados de entrada. ( dia e mês ) Observação: antes de fazer o programa, faça o algoritmo do mesmo. Exemplos: dado: 20 3 1950 saída: 20 de março de 1950 dado: 35 10 1980 saída: dia do mês não permitido dado: 3 20 1980 saída: mês não permitido dado: 31 4 1980 saída: mês não tem 31 dias Sugestão: os valores DD, MM e AAAA devem ser fornecidos pelo usuário e armazenados cada um numa variável; Primeira versãoPrimeira versão Observar nestas soluções o seguinte: ● A entrada de dados é fornecida num único registro, ou seja, dia mês ano ( isto significa utilizar-se apenas uma declaração de entrada para todas as variáveis ) ● Nesta versão após conferidas as consistências da entrada dos dados, o programa inicia a conversão pedida no enunciado; ● Observe que esta tarefa só é realizada após toda a consistência dos dados tiver terminado. Por isto ela fica dentro do senão do ultimo Se da consistência. ALGORITMO calendario algoritmo para imprimir de forma corrente uma data de nascimento 1) Definição das variáveis inteiros dia, mês, ano 2) Entrada de dados imprima ( “entre com a data de nascimento” ) leia ( dia, mês, ano ) 3) fazendo consistência dos dados e a conversão da data se ( dia < 1) ou ( dia > 31 ) então imprima ( “dia errado” ) senão se ( mes < 1 ) ou ( mes > 12 ) então imprima ( “mês errado” ) senão senão se ( ano < 0 ) ou ( ano > 2010 ) então imprima ( “verifique o ano “ ) senão se ( mes = 1 ) então imprima ( dia, “ de janeiro de “, ano ) senão se ( mes = 2 ) então se ( dia > 29 ) então imprima ( “mes com dias errado“ ) senão imprima ( dia, “ de fevereiro de “, ano ) fim_se senão senão se ( mes = 3 ) então imprima ( dia, “ de março de “, ano ) senão se ( mes = 4 ) então se ( dia > 30 ) entãoimprima ( “mes com dias errado“ ) senão imprima ( dia, “ de abril de “, ano ) fim_se senão senão se ( mes = 5 ) então imprima ( dia, “ de maio de “, ano ) senão se ( mes = 6 ) então se ( dia > 30 ) então imprima ( “mes com dias errado“ ) senão imprima ( dia, “ de junho de “, ano ) fim_se senão senão se ( mes = 7 ) então imprima ( dia, “ de julho de “, ano ) senão se ( mes = 8 ) então imprima ( dia, “ de agosto de “, ano ) senão se ( mes = 9 ) então se ( dia > 30 ) então imprima ( “mes com dias errado“ ) senão imprima ( dia, “ de setembro de “, ano ) fim_se senão senão se ( mes = 10 ) então imprima ( dia, “ de outubro de “, ano ) senão se ( mes = 11 ) então se ( dia > 30 ) então imprima ( “mes com dias errado“ ) senão imprima ( dia, “ de novembro de “, ano ) fim_se senão se ( mes = 12 ) então imprima ( dia, “ de dezembro de “, ano ) fim_se fim_se fim_se fim_se fim_se fim_se fim_se fim_se fim_se fim_se fim_se fim_se fim_se fim_se fim_se Fim_algoritimo Segunda VersãoSegunda Versão ● A entrada de dados é a mesma; ● Nesta versão foram criadas algumas variáveis com o objetivo de otimizar o programa, quanto a leitura do mesmo: – Variável CHAVE – Variável MÊS_SAIDA ● A variável CHAVE é utilizada para controlar a impressão da saída, ou seja, inicialmente ela vale zero; se qualquer um erro ocorrer, tal como por exemplo, uma inconstência nos dados de entrada, esta variável passa para o valor 1; No final do programa ela é testada afim de verificar se a impressão pode ou não ocorrer. ● Diferentemente que na versão anterior, aqui o programa inicializa várias variáveis, as quais contém cada o nome do mês por extenso, as quais vão ser utilizadas nas comparações com os dados de entrada; ALGORITMO calendario algoritmo para imprimir de forma corrente uma data de nascimento 1) Definição das variáveis inteiros dia, mês, ano inteiros chave cadeia mes01, mes02, mes03, mes04, mes05, mes06, mes07, mes08, mes09, mes10, mes11, mes12 2) Entrada de dados imprima ( “entre com a data de nascimento” ) leia ( dia, mês, ano ) 3) Inicializando chave de controle da impressão chave ← 0 4) inicializando variáveis referentes ao mês mes01 ← “ de Janeiro de ” mes02 ← “ de Fevereiro de ” mes03 ← “ de Março de ” mes04 ← “ de Abril de ” mes05 ← “ de de Maio de ” mes06 ← “ de Junho de ” mes07 ← “ de Julho de ” mes08 ← “ de Agosto de ” mes09 ← “ de Setembro de ” mes10 ← “ de Outubro de ” mes11 ← “ de Novembro de ” mes12 ← “ de Dezembro de ” 5) fazendo consistência dos dias e meses e ano se ( dia < 1) ou ( dia > 31 ) então imprima ( “dia errado” ) chave ← 1 fim_se se ( mes < 1 ) ou ( mes > 12 ) então imprima ( “mês errado” ) chave ← 1 fim_se se ( ano < 0 ) ou ( ano > 2010 ) então imprima ( “verifique o ano “ ) chave ← 1 fim_se 6) fazendo a conversão da data se ( mes = 1 ) então mes_sai ← mes01 fim_se se ( mes = 2 ) então mes_sai ← mes02 Se ( dia > 29 ) então imprima ( “ mês não tem mais de 29 dias “ ) chave ← 1 fim_se fim_se se ( mes = 3 ) então mes_sai ← mes03 fim_se se ( mes = 4 ) então mes_sai ← mes04 se ( dia > 30 ) então imprima ( “ mês não tem mais de 30 dias “ ) chave ← 1 fim_se fim_se se ( mes = 5 ) então mes_sai ← mes05 fim_se se ( mes = 6 ) então mes_sai ← mes06 se ( dia > 30 ) então imprima ( “ mês não tem mais de 30 dias “ ) chave ← 1 fim_se fim_se se ( mes = 7 ) então mes_sai ← mes07 fim_se se ( mes = 8 ) então mes_sai ← mes08 fim_se se ( mes = 9 ) então mes_sai ← mes09 se ( dia > 30 ) então imprima ( “ mês não tem mais de 30 dias “ ) chave ← 1 fim_se fim_se se ( mes = 10 ) então mes_sai ← mes10 fim_se se ( mes = 11 ) então mes_sai ← mes11 se ( dia > 30 ) então imprima ( “ mês não tem mais de 30 dias “ ) chave ← 1 fim_se fim_se se ( mes = 12 ) então mes_sai ← mes12 fim_se 7) saida do resultado se ( chave = 0 ) entao imprima ( dd, mês_sai, ano ) fim_se Fim_algoritimo Terceira VersãoTerceira Versão ● Observe que na versão anterior, para determinados meses, aqueles que têm menos de 31 dias, o programa verifica esta possibilidade,e se o usuário entrou com a informação errada, o programa envia uma mensagem e troca a CHAVE para o valor 1; ● Deste modo, quando chegar ao final do programa e CHAVE for diferente de 1, ele imprime o valor do mês convertido; ● Ao invés de se ter um trecho igual para todos os meses onde esta verificação é feita, pode-se fazer uma única verificação conforme mostre o programa seguinte. ● Apenas o item 6) é trocado da versão anterior para esta; 6) fazendo a conversão da data se ( mes = 1 ) então mes_sai ← mes01 fim_se se ( mes = 2 ) então mes_sai ← mes02 fim_se se ( mes = 3 ) então mes_sai ← mes03 fim_se se ( mes = 4 ) então mes_sai ← mes04 fim_se se ( mes = 5 ) então mes_sai ← mes05fim_se se ( mes = 6 ) então mes_sai ← mes06 fim_se se ( mes = 7) então mes_sai ← mes07 fim_se se ( mes = 8 ) então mes_sai ← mes08 fim_se se ( mes = 9 ) então mes_sai ← mes09 fim_se se ( mes = 10 ) então mes_sai ← mes10 fim_se se ( mes = 11 ) então mes_sai ← mes11 fim_se se ( mes = 12 ) então mes_sai ← mes12 fim_se se ( mes = 2 ) e ( dia > 29 ) então chave ← 1 imprima ( “mês tem mais de 29 dias “ ) senão se ( ( mes = 4 ) ou ( mes = 6 ) ou ( mes = 9 ) ou ( mes = 11 ) ) e ( dia > 30 ) então chave ← 1 imprima ( “mês tem mais de 30 dias “ ) fim_se fim_se ComentáriosComentários ● Todas as versões são soluções para o problema, porém é bom analisá-las e verificar que a primeira é a mais pobre de todas, tendo em vista que há um aninhamento muito grande de Seleções; ● A segunda versão já melhorou no sentido de que agora a saída é controlada por uma chave e foi retirada uma grande parte do aninhamento das seleções; ● A ultima versão é a mais otimizada, visto que todos os aninhamentos foram retirados, a chave de controle foi mantida e uma única verificação é responsável por decidir qual dos meses possui mais de 30 dias; além disto ela ficou com menos declarações. Exemplo 8Exemplo 8 ● Dados os coeficientes de uma equação do segundo grau, calcular as raízes reais da mesma. ● Fazer a consistência dos dados de entrada. ( verificar se é equação do segundo grau ) Se as raízes não forem reais, o programa deverá comunicar ao usuário este fato, mas não calculá-las. Observação: antes de fazer o programa, faça o algoritmo do mesmo. ALGORITMO equacao_segundo_grau algoritmo para calcular as raízes reais de uma equação do segundo grau 1) Definição das variáveis inteiros coef1, coef2, coef3 reais delta, raiz1, raiz2 2) Entrada de dados imprima ( “entre com os coeficientes da equação do segundo grau” ) leia ( coef1, coef2, coef3) 3) mostrando os dados de entrada imprima ( “coeficientes da equacao: “, coef1, coef2, coef3 ) 4) Fazendo consistência dos dados de entrada Se ( coef1 = 0 ) então imprima ( “equação não é do segundo grau” ) senão 4.1 ) cálculo do discriminante delta ← coef2 . coef2 – 4 coef1 . coef3 4.2 ) verificação do discriminante se ( delta < 0 ) então imprima ( “raízes complexas” ) senão 4.2.1) calculo das raízes reais - coef2 + raiz ( discriminante ) raiz1 ← ------------------------------------------ 2 coef1 - coef2 – raiz ( discriminante ) raiz2 ← ------------------------------------------ 2 coef1 4.2.2) mostrando as raízes calculadas imprima ( “raízes reais: “ , raiz1, raiz2 ) fim_se fim_se fim_algoritmo TreinamentoTreinamento 1)Faça um programa que leia um número e diga se ele é divisível por 2 e por 3. Use estrutura de desvio condicional simples. 2)Faça um programa que leia um número e diga se ele é divisível por 5 ou por 7. Use estrutura de desvio condicional simples. 3)Faça um programa que leia dois números e apresente-os em ordem crescente. Use estrutura de desvio condicional simples. TreinamentoTreinamento 4)Elabore um algoritmo que dada a idade de um nadador classifica-o em uma das seguintes categorias: infantil A = 5 - 7 anos infantil B = 8 - 10 anos juvenil A = 11 - 13 anos juvenil B = 14 - 17 anos adulto = maiores de 18 anos TreinamentoTreinamento 5) Um vendedor necessita de um algoritmo que calcule o preço total devido por um cliente. O algoritmo deve receber o código de um produto e a quantidade comprada e calcular o preço total, usando a tabela abaixo: Código do Produto Preço unitário 101 R$ 3,20 102 R$ 2,80 103 R$ 1,50 104 R$ 10,25 105 R$ 2,90 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
Compartilhar