Logica programacao python-slides

download Logica programacao python-slides

If you can't read please download the document

description

Slides do Curso de Lógica de Programação Usando Python

Transcript of Logica programacao python-slides

  • 1. Lgica'de'Programao'com'Python'Prof.'Ronaldo'Ramos'

2. 1.'Algoritmos'a. Conceito'b. Caracters>cas''c. Formas'Representa>vas'd. Mquina'para'Execuo'de'Algoritmos'e. Estruturas'Algortmicas'' ''''''(Sequncia,'Deciso,'Iterao)'f. Linguagem'Algortmica'' 3. 2.'Linguagem'para'Algoritmos'a. Variveis,'atribuio'e'expresses'b. Entradas'e'sadas'(E/S)'(I/O)'c. Seqncia'de'Instrues'd. Desvios'condicionais'(Decises)'e. Repe>es'(Laos)' 4. 3.'Linguagens'de'Programao'a. Codificao'de'algoritmos'(Fonte'x'Objeto)' ''''(Estrutura'de'um'Programa'Fonte/Objeto)'b. Tradutores'(Interpretadores'x'Compiladores)'c. Portabilidade'de'Cdigo'Fonte'd. Portabilidade'de'Cdigo'Objeto'e. E'na'WEB?'f. O'Mundo'dos'Scripts'' ''''(javascript,'php,'python'etc'etc)' 5. 4.'Python'a. Usando'o'interpretador'intera>vamente'b. Escrevendo'scripts'em'arquivos'textos''c. Variveis,'expresses'aritm>cas'e'lgicas'd. Desvios'condicionais'e. Repe>es'(Variantes,'Contadores,'Ranges)'f. Clusulas'de'controle'de'laos'g. Definindo'funes'em'Python' ''''(Argumentos'e'Funes'Lambda)' 6. 5.'Iterao'e'Recurso'a. Operaes'repe>>vas'b. Gerao'de'Sries'e'Progresses'c. Funes'itera>vas'' ''''(Fatorial,'Fibonacci,'Somatrio,'etc)'d. Recursividade'e'Funes'Recursivas''' '''(Fatorial,'Fibonacci,'Ackerman,'etc)'' 7. 6.'Estruturas'de'Dados'a. Listas'em'Python'b. Vetores'e'Matrizes'c. Pilhas'em'Python.'' '''(Operaes'append,'push,'pop,'etc)''d. Tuplas,'Sequencias,'Conjuntos'e'Dicionrios' 8. 7.'Programao'Modular'a. Mdulos'padro,'compilados'e'pacotes' 9. 8.'Entrada'e'Sada'a. Entradas'e'Sadas'Formatadas'b. Operaes'em'arquivos' ''''(Leitura,'Gravao,'Pesquisa)' 10. 9.'Tratamento'de'Erros'e'Excees'a. Blocos'de'Tratamento'de'Excees' 11. 10.'Pesquisa'e'Ordenamento'a. Pesquisa'linear'simples'em'listas'b. Pesquisa'binria'em'listas'ordenadas'c. Mtodos'de'Ordenamento' '''(Insero,'Seleo,'Bolha,'Classificao'Rpida)'d. Complexidade'do'Algoritmos'e. Comparao'de'performance'de'algoritmos' 12. 11.'POO'em'Python'a. Classes'e'Objetos'b. Herana'Simples'e'Ml>plas'c. Composio'e'Agregao'd. Relacionamento'inter'Classes/Objetos' 13. 12.'Tpicos'Adicionais'a. Recursividade'avanada'(Torres'de'Hani)'b. Listas'encadeadas'c. Buffer'circular'd. rvores'e'Grafos'e. Busca'em'rvores'e'Grafos'f. Mtodos'numricos'(Clculo'do'Pi,'Integrao'Numrica,'Razes'de'Polinmios,'etc)'g. Mul>nThreading'e'Programao'Concorrente'h. Metanheurs>cas'i. Busca'na'WEB' 14. Vamos'l'.....'''''1.'Introduo'aos'Algoritmos' 15. 1.a'Definio'de'Algoritmos''''''''Um'algoritmo''uma'seqncia'finita'de'instrues'bem'definidas'e'no'ambguas,'cada'uma'das'quais'pode'ser'executada'mecanicamente'num'perodo'de'tempo'finito'e'com'uma'quan>dade'de'esforo'finita.'''''''[Fonte:'Wikipedia]' 16. 1.b'Caracters>cas'do'Algoritmo' Finito' No'ambguo' Capaz'de'receber,'gerar'e'fornecer'informaes' Executvel'' 17. 1.b'Exemplos'de'algoritmos'Exemplo'1:''Receita'de'Bolo'1.'Providencie'manteiga,'ovos,'massa,'etc.'2.'Misture'os'ingredientes'3.'Despeje'a'mistura'na'frma'de'bolo'4.'Leve'a'frma'ao'forno'5.'Espere'at'ficar'no'ponto'6.'Re>re'a'frma'do'forno' 18. 1.b''Observaes'Que'tempo''Ficar'no'Ponto?''Qual'a'quan>dade'dos'ingredientes?'Muito,'pouco?'O'que'significa'muito'ou'pouco?'Quando'acender'ou'apagar'o'forno?'Misturar'os'ingredientes'de'que'forma?Qualquer'pessoa'executaria'a'receita'da'mesma'forma'e'obteria'os'mesmos'resultados?''Concluso:'''Uma'receita'gastronmica'no''um'bom'exemplo'de'algoritmo.''Portugus,'Ingls,'Francs'etc'so'ambguos''Corriqueiramente'a'comunicao''incompleta''' 19. 1.b'Exemplos'(2)''Calcular'a'Media'Aritm>ca'1.'Receba'dois'nmeros,'chamenos'de'A'e'B.'2.'Calcule'a'media'aritm>ca'segundo'a'frmula'(a+b)/2'e'represente'o'resultado'por'mdia'3.'Mostre'o'valor'representado'por'mdia' 20. 1.b'''Observaes'(2)''Melhoria'em'relao'ao'algoritmo'1.'(menor'ambigidade)'Algoritmos'so'usados'para'que'problemas'possam'ser'solucionados'mecanicamente.'Portugus'no''uma'boa'linguagem'para'fazer'algoritmos.'(Ambgua,'prolixa,'etc)'Para'fazer'algoritmos'usamnse'linguagens'algortmicas''' 21. 1.b'n'Exerccios''Exerccios:''Experimente'descrever'de'forma'precisa,'detalhada,'no'ambgua,'tarefas'simples'do'co>diano'como:' Trocar'um'pneu' Trocar'uma'lmpada'queimada' Escovar'os'dentes' Ler'as'horas'em'relgio'com'ponteiros'(analgico)' Re>rar'dinheiro'em'um'caixa'eletrnico'Nem'tudo''to'simples'quanto'parece.'No''mesmo?'''' 22. 1.c''Formas'de'Representao'Textual'' ' ' ' ' ' ' 'Grfica'1.Leia'2.Calcule'3.Escreva'''''''''Receba'A,B'X' X>Y'Y' 23. 1.c''Smbolos'Grficos'Entradas'de'dados'Clculos'Deciso'Sadas'de'dados'Operaes'com'bancos'de'dados'Incio'e'Fim' 24. 1.d''Mquinas'para'Executar'Algoritmos'Unidade'de'Entrada''''''''''Memria'Principal'Unidade'de'Sada'Unidade'de'Lgica'e'Aritm>ca'Unidade'De'Controle'Programa' Dados' 25. 1.e''Estruturas'Bsicas'Estrutura'Seqencial:''Incio'Leia'(Receba)''Calcule''Escreva'Fim'Incio'Receba'Calcule'Escreva'Fim' 26. 1.e''Estruturas'Bsicas'Estrutura'de'Deciso:''Incio'Leia'(Receba)''Se''for'verdade''''''faa'isto'Seno''''''faa'aquilo'Escreva'Fim'Incio'Escreva'Receba'Condio'Fim'Verdade'Falso' 27. 1.e''Estruturas'Bsicas'Estrutura'de'Repe>o:''Incio'Leia'(Receba)''Repita'10'vezes''faa'isso'Escreva'Fim'Incio'Repita'10'vezes'Faa'isto'Fim'do'Repita'Fim' 28. 1.f''Linguagem'Algortmica'Portugol'(Portugus'Estruturado):'Comandos'e'Instrues're>rados'do'Portugus.''Exemplos'de'Instrues:'Leia':''Pra'a'execuo'do'algoritmo'at'que'sejam'fornecidos'os'dados'especificados'na'instruo.'Os'dados'so'guardados'na'lista'de'variveis.''Escreva:''Envia'dados'especificados'na'forma'de'variveis''para'a'unidade'de'sada'(Video/Impresso)''Ex:''Leia'A'Escreva'A''O'Algoritmo'acima'recebe'uma'informao'qualquer,'representa'esta'informao'internamente'pelo'smbolo'A'(varivel)'e'Envia'a'mesma'para'a'unidade'de'sada'(imprime'no'vdeo,'por'exemplo)'' 29. 2.'Linguagem'para'Algoritmos' A'u>lizao'do'Portugol'facilita'a'compreenso'da'construo'de'algoritmos'independente'de'qualquer'linguagem'de'programao,'no'entanto','nada'impede'que'seja'u>lizada'uma'linguagem'de'programao'real'para'estudar'lgica.' Voc'no'precisa'aprender'esperanto'para'depois'aprender'ingls'ou'francs.'Voc'nem'mesmo'precisa'falar'bem'portugus'para'aprender'outra'lngua'...' Aqui'u>lizaremos'uma'linguagem'simples'sinta>camente'para'estudar'lgica'de'programao'(Python)' V'no'site'h|p://www.python.org/'faa'o'download'do'python'para'o'OS'(Windows,'Linux,'Mac'OS)'que'voc'mais'gosta,'instaleno'e'vamos'comear.'A'instalao''extremamente'fcil'e'alguns'Linux'j'o'trazem'instalado'por'default.'Se'no'conseguir,'pea'ajuda';n).'' 30. 2.a'Variveis'Variveis'so'nomes'que'representam'dados.'Assemelhamnse's'variveis'da'lgebra.'Na'pr>ca'representam'um'endereo'de'memria'e'um'>po'de'dado'que'est'guardado'neste'endereo.''Algumas'linguagens'so'restri>vas'com'relao'aos'>pos'de'dados'(Sistemas'fortemente'>pados),''outras'no.'''Os'nomes'de'variveis'devem'comear'com'caracteres'alfab>cos'e'podem'ter'restries'de'tamanho.''Exemplos'vlidos:'''''''A,'a','_1,'nome,'x,y,'xx,'yy,'_taxa,'media'''Exemplos'invlidos:'''n1,'1nome,'234,'*8,'9,''/3,'!3,'?2,'' 31. 2.a'Variveis'n'Atribuio'Uma'operao'de'atribuio''a'associao'de'um'valor'(dado)'a'uma'varivel.'Usanse'normalmente,'no'texto,'o'smbolo'de'igualdade''para'indicar'a'operao.''Ex:''''''A'='2','nome'='Pedro,'X'='Y''Em'Portugol'costumanse'usar'a'seta''esquerda'!'para'atribuio.''Ex.'A'!'2','nome''! Pedro,'X'!'Y''A'Sintaxe'(forma'de'uso)'da'atribuio'pode'ser:''='''Onde,''''pode'ser'um'literal,(outra'varivel,''expresso'aritm+ca(ou'expresso'lgica('Obs:'A'varivel'fica'sempre'no'lado'esquerdo'e''seguida'imediatamente'pelo'operador'de'atribuio.''' 32. 2.a'Variveis'n'literais'Um'literal'pode'ser:'' Um'nmero'inteiro':'''0,'1,'n987,'1024','etc' Um'nmero'com'ponto'decimal'(real'ou'float)':'n0.123,'5.67876,''etc' Caracteres:'A,'B,'c' Cadeias'(seqencias)'de'caracteres:''Maria'da'Penha,'Joao'do'Pulo' Valores'lgicos:'True'(Verdade),'False'(Falso)'OBS:''1. Em'caracteres'ou'cadeias'(Strings)'usar'sempre'apstrofos'ou'aspas'duplas''''''''' 33. 2.a'Variveis''Expresses'aritm>cas'Uma'expresso'aritm>ca'representa'um'clculo'a'ser'realizado'(frmula).'Pode'ser'composta'de'literais,'variveis'e'operadores.''Ex.''''Literais''2''+''3'+'x'*'3''4'/'2'+'y''Operadores'Variveis' 34. 2.a'Variveis''Operadores'Aritm>cos'Os'principais'operadores'aritm>cos'so:''+'Soma''n ''Subtrao''/'Diviso''*'Mul>plicao''''Os'operadores'mul>plicao'e'diviso'tm'prioridade'em'relao'a'soma'e'subtrao.'Podense'usar'parnteses'para'alterar'a'ordem'(dentro'do'parntese'tem'prioridade).'''Exerccio:'Qual'o'valor'das'expresses'abaixo?''1'+'2'*'3'(1'+'2)'*'3'6'/'3''n''1'6'/'(3''1')''' 35. 2.a'Variveis'em'Expresses'Qual'o'valor'final'das'variveis'no'algoritmo'abaixo?''1. X'='2'+'3'*'4'/'(2'+'2)''4'2. Y'=''X'*'X'+''2'3. X'='Y'4. Y'='Y'+'1'''OBS:''1. Atribuio'do'>po'Y'='Y'+'1'pode'ser'lida'da'seguinte'forma:'Considere'o'valor'atual'de'Y,'some'1'e'coloque'o'resultado'na'prpria'varivel'Y.''Em'lgebra'poderia'ser'representada'da'seguinte'forma'Yi+1'='Yi'+'1'ou''Y(T)'='Y(Tn1)''+'1.'2. Quando'dois'operadores'tem'a'mesma'ordem'de'precedncia,'a'operao''executada'da'esquerda'para'a'direita.'''' 36. 2.a'Expresses'Lgicas'Expresses'cujo'significado'(resultado'do'clculo)''um'valor'de'verdade:'True'(Verdade)'ou'False'(Falso).'U>liza'operadores'lgicos'e/ou'relacionais'''''Literais''True'and''3'>'x'''Operador'Lgico'Varivel'Operador'Relacional' 37. 2.a'Operadores'Lgicos'Os'principais'operadores'lgicos'so:''and''nn'e''lgico.'Conec>vo'de'conjuno'lgica'or'''''nn'ou'lgico.'Conec>vo'de'disjuno'not''nn'negao'inverso'de'valor'lgico''Qual'o'valor'final'das'variveis'abaixo?''X''''='True'and'False'Y''''='True'or'False'Z''''='True'W''='not'Z''' 38. 2.a'Tabelas'de'Verdade'A" B" A"and"B" A"or"B" Not"A"True'' True' True' True' False'True' False' False' True' False'False' True' False' True' True'False' False' False' False' True'True''='Verdadeiro'False''='Falso' 39. 2.a'Operadores'Relacionais'Os'principais'operadores'relacionais'so:''>'''''n'Maior'do'que'>='''n'Maior'ou'igual'a''''''r'de'uma'das'unidades'de'entrada.''Em'Portugol'usanse'a'instruo'Leia'para'operaes'de'entrada.'''A'sintaxe'seria':'Leia'lizando'as'saidas'em'vdeo.'Mais'tarde'veremos'as'outras'formas.''Em'portugol'usanse'a'instruo'Escreva'ou'Imprima'seguida'da'lista'de'variveis,'expresses'ou'literais'a'serem'impressos.''Ex.'Escreve'Maria'recebeu'R$,salario,''este'mes''Resultado'deste'comando'poderia'ser':'Maria'recebeu'R$'500,00'este'mes.''Em'Python'usanse'o'print.''Sintaxe:''print'''''#'At'a'verso'2.5'''''''''print()'''#'A'par>r'da'verso'3''' 45. 2.c'Algoritmos'Simples'Calculando'a'mdias'entre'dois'nmeros'quaisquer.''Em'portugol:''Leia'A,B'C!'(A+B)/2'Escreva'C''Em'Python:''A'='input(Digite'um'valor'para'A')'B'='input(Digite'um'valor'para'B')'C'='(A+B)/2'print'C'''''Incio'A,B'C=(A+B)/2'C'FIM' 46. 2.c'Gravando'os'Fontes'Use'o'IDLE'ou'outro'editor'qualquer'para'gravar'os'fontes.'(Nano'por'exemplo)'' 47. 2.c'Exerccios'Faa'programas'em'Python'para:''a) Calcular'os'trs'primeiros'ml>plos'de'um'dado'nmero'b) Calcular'as'razes'de'uma'equao'de'segundo'grau'(Que'tenha'razes'reais)'c) Calcular'a'rea'de'um'crculo,'retngulo,'tringulo,'etc'd) Calcular'o'valor'lquido'de'um'salrio'dado,'dadas'tambm'as'alquotas'dos'impostos'sobre'o'valor'bruto.'e) etc'' 48. 2.c'Funes'Embu>das'Linguagens'de'programao'costumam'ter'uma'srie'de'funes'embu>das'para'a'realizao'de'operaes''matem>cas'bsicas'como'clculos'de'seno,'cosseno,'tangentes,'logaritmos,'raiz'quadrada,'potenciao,'etc.''Python'possui'uma'biblioteca'de'funes'em'um'pacote'chamado'math.'Para'u>liznlo'devemos'usar'a'instruo'import'math'e'as'seguintes'funes'estaro'disponveis'(entre'outras):''math.exp(x)''Retorna'o'valor'de'ex''math.sqrt(x)''Raiz'quadrada'de'x'math.log10(x)''Logaritmo'base'10'de'x'math.log(x)''Logaritmo'natural'de'x'math.pow(x,y)''Valor'de'x'elevado'a'y'math.sin(x),'math.cos(x),'math.tan(x)''Seno,'cosseno'e'tangente'de'x'respec>vamente'math.pi''Constante'Pi'='3.141592...'math.e''n'Constante'e'='2.718....'''OBS:'1''Consultar'a'documentao'oficial'para'a'lista'completa'(h|p://docs.python.org)'' ''2''O'Python'tambm'trabalha'com'nmeros'complexos.'Ver'exemplos'no'tutorial'' 49. 2.c'Mais'Operadores''**''n'Operador'de'Exponenciao''2'**'3'equivale'a'math.pow(2,3)'%'''n'Operador'resto'da'diviso.''4'%'2'tem'como'resultado'zero.''' 50. 2.d'Desvios'Condicionais' Desvio'condicional''a'forma'de'permi>r'a'escolha'de'um'entre'ml>plos'fluxos'de'execuo'por'parte'da'mquina.' O'caso'mais'simples'se'd'atravs'do'uso'da'instruo'Se'ou'if(Ingls).''Sintaxe'do'se'Em'portugol:''Se'C' A>B' B>C'Sim' No' Sim' No'C' B'A' C'FIM' 53. 2.d'Ml>plas'Opes'Podemos'u>lizar'uma'estrutura'com'ml>plos'testes'usando'a'estrutura''se'...'seno'se.'Em'Portugol'seria:''se'''ento'' ' 'faa'isto''senao'se''' ' 'faa'isso''seno'se''' ' 'faa'aquilo'outro''seno'se''' ' 'faa'outra'coisa'fimnse'' 54. 2.d'Ml>plas'Opes'Podemos'u>lizar'uma'estrutura'com'ml>plos'testes'usando'a'estrutura''se'...'seno'se.'Em'Python:''If'''':'' ' 'faa'isto'elif':'' ' 'faa'isso'elif':'' ' 'faa'aquilo'outro'else:'' 'faa'quando'todas'as'anteriores'falharem'''' 55. Aula'3'n'Laos' 56. Aula'3'n'Laos'Blocos'de'comandos'executados'repe>damente'.' 57. 2.e'Laos'Enquanto'(While)'Um'lao'do'>po'enquanto'faz'com'que'um'bloco'de'comandos'seja'executado'repe>damente'enquanto'uma'determinada'condio'for'verdadeira.''Em'portugol:''Enquanto''faa'''Fimnenquanto''Em'Python:''While:''bloco'de'comandos'' 58. 2.e'Laos'Enquanto'(While)'Seja'o'programa'abaixo'para'imprimir'os'nmeros'de'0'a'1000:''X=0'While'xlizando'seu'prprio'valor''Ex.'Seja'o'algoritmo'para'calcular'a'mdia'de'n'nmeros'fornecidos'via'teclado:''Contador'='0'Acumulador'='0'Quan>dade'='input(Digite'a'quan>dade'de'nmeros'a'ser'u>lizada)'while'contador'dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'lizada)'while'contador'dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'''''''Passo'3:'Solicita'Valor' 63. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'''''''Passo'3:'Usurio'digita'valor' 64. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'''''''Passo'4:'Incio'do'lao'Condio'verdadeira'Contador'(0)'lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico''''''Passo'5:'Solicita'valor'para'numero' 66. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2''''''Passo'5:'Usurio'Fornece'Valor'Numrico'(2)' 67. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2''''''Passo'6:'contador''incrementado' 68. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2''''''Passo'7:'Acumulador''acrescido'do'valor'de'numero' 69. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2''''''Passo'8:''Prxima'Iterao'do'lao.'Condico'ainda''verdadeira' 70. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2'Digite'um'valor'numerico'''''Passo'9:''Solicita'valor'para'numero' 71. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2'Digite'um'valor'numerico'4'''''Passo'9:''Usurio'digita'valor'(4)' 72. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2'Digite'um'valor'numerico'4'''''Passo'10:''Contador''incrementado' 73. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2'Digite'um'valor'numerico'4'''''Passo'11:''Acumulador''acrescido'de'numero' 74. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2'Digite'um'valor'numerico'4'''''Passo'12:''Proxima'Iterao'Condio'verdadeira'Contador'(2)''lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2'Digite'um'valor'numerico'4'Digite'um'valor'numerico'''''Passo'13:''Solicita'dado' 76. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2'Digite'um'valor'numerico'4'Digite'um'valor'numerico'6'''''Passo'13:''Usurio'fornece'dado' 77. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2'Digite'um'valor'numerico'4'Digite'um'valor'numerico'6'''''Passo'14:'contador'incrementado' 78. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2'Digite'um'valor'numerico'4'Digite'um'valor'numerico'6'''''Passo'15:'Acumulador'acrescido'de'numero' 79. 2.e'Laos'Enquanto'(While)'Vamos'Executnlo'passo'a'passo:''Contador'='0''''''''''''''''''''''''''''''''''''''''''''Acumulador'='0''''''''''''''''''''''''''''''''''''''''Quan>dade'='input(Digite'a'quan>dade'de'numeros'a'ser'u>lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2'Digite'um'valor'numerico'4'Digite'um'valor'numerico'6'''''Passo'16:'Prxima'Iterao'Condico'falsa'Contador'(3)'lizada)'while'contador'dade'de'numeros'a'ser'u>lizada'3'Digite'um'valor'numerico'2'Digite'um'valor'numerico'4'Digite'um'valor'numerico'6'A'soma'total'dos'numeros'fornecidos'eh'12'''''Passo'17:'Saida'de'resultado'no'video' 81. 2.e'Laos'Enquanto'(While)''Resumo'do'algoritmo:''Entradas:'3,2,4,6''Sada:'12' 82. 2.e'Laos'Enquanto'(While)''Alguns'exerccios:''Modifique'o'programa'anterior'para'calcular'a'mdia'aritm>ca'dos'nmeros'fornecidos'Faa'um'programa'para'verificar'se'um'nmero''primo''(N''um'valor'qualquer)''Faa'um'programa'para'imprimir'as'seguintes'sries:'a) 2,4,16,'256'..............N'b) 0,'1,3,6,10,15'.........'N'c) 0,N,1,Nn1,2,Nn2........N,0'd) 1,1,2,3,5,8'...............N''OBS:'o'item'd''a'srie'conhecida'como'srie'de'Fibonacci.'Consulte'a'Wikipedia'para'ver'o'histrico'desta'srie.'A'seguir'veremos'como'implementnlas.'' 83. 2.e'Nmeros'primos'Lgica:''Dividir'o'nmero'sucessivamente'por'2,3,4'....'at'sua'metade'(numero/2)'e'contar'quantas'divises'foram'exatas.'Caso'nenhuma'deu'exata'o'nmero''primo.'''Soluo:''Programa11.py'' 84. 2.e''Gerando'sries'simples'(1)'Lgica:''Fazer'uma'varivel'mudar'de'valor'gerando'e'imprimindo'os'nmeros'da'srie:'2,4,16,'256'..............N''Detalhe:'Os'nmeros'se'sucedem'pelo'quadrado'do'anterior.''Soluo:'Programa12.py'' 85. 2.e''Gerando'sries'simples'(2)'Lgica:''Fazer'uma'varivel'mudar'de'valor'gerando'e'imprimindo'os'nmeros'da'srie:'0,'1,3,6,10,15'.........'N''Detalhe:'Tratanse'de'uma'PA'com'razo'crescente.'''Soluo:'Programa13.py'' 86. 2.e''Gerando'sries'simples'(3)'Lgica:''Fazer'uma'varivel'mudar'de'valor'gerando'e'imprimindo'os'nmeros'da'srie:'0,N,1,Nn1,2,Nn2........N,0'''Detalhe:'Uma'srie'com'valores'crescentes'intercalados'com'valores'decrescentes'''Soluo:'Programa14.py'' 87. 2.e''Gerando'a'srie'de'Fibonacci'Lgica:''Fazer'uma'varivel'mudar'de'valor'gerando'e'imprimindo'os'nmeros'da'srie:'1,1,2,3,5,.....N''Detalhe:'Uma'srie'onde'o'prximo'valor''a'soma'dos'dois'anteriores'''Soluo:''a) Programa15.py'b) Programa16.py'' 88. 2.e''Uma'pequena'pausa''Python'possui'um'pacote'chamado'random'que'permite'a'gerao'de'nmeros'aleatrios.'Uma'forma'de'u>lizao'bsica'seria:'Import'random'random.seed()'''#'inicializa'o'gerador'random.randint(1,99)''#'gera'um'nmero'aleatrio'de'1'a'99''nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn''Com'o'conhecimento'acima'desenvolva'um'jogo'de'adivinhao'onde'cada'jogador'executa'o'jogo'e'ganha'aquele'que'>ver'feito'menos'tenta>vas'em'acertar'o'nmero'aleatrio'gerado.''Soluo:''Programa17.py''No'se'iluda:'Seu''QI'(Quociente'de'Inteligncia)''inversamente'proporcional'ao'nmero'de'tenta>vas'que'voc'faa.''' 89. 2.e'Um'novo'>po'de'varivel'(Listas)'Uma'lista''uma'seqncia'de'dados'de'um'>po'qualquer.''Exs.''A'='[10,'12,'34,'45]'B'='[Maria,Pedro,Paulo,'Tiago]''Use'o'Python'para'criar'e'imprimir'listas.''A'varivel'que'representa'a'lista'pode'ser'indexada'para'recuperar'um'elemento'da'lista.'O'primeiro'elemento'possui'ndice'0'e'os'seguintes'variam'com'incremento'de'1'Ex.'A[0]''10,''A[1]'''12,'A[2]''34,'A[3]''45'B[0]''Maria,''etc.''print'lista[X]'':'Escreve'o'elemento'na'posio'X'da'lista'lista'A[X]=':'Atribui'um'valor''posio'X'da'lista'A'B[Z]=B[W]'"'Variveis'indexadas'podem'ser'usadas'livremente'em'expresses''' 90. 2.e'Uma'lista'como'um'vetor'Um'vetor''uma'grandeza'normalmente'representado'pelos'valores'de'suas'coordenadas'no'espao.''Um'vetor'no'espao'cartesiano'pode'ser'representado'pelas'coordenadas'(X,Y)'ou'(X[1],X[2])'ou'na'notao'do'Python'[X[0],X[1]]''Em'um'espao'tridimensional'o'vetor'seria'[X[0],X[1],X[2]]''No'espao'n'dimensional'um'vetor'seria':'[X[0],X[1],'X[2]'.....X[Nn1]]''A'diferena'entre'uma'lista'e'um'vetor'em'python'tem'a'ver'apenas'com'a'forma'como'voc'olha'para'os'dados.''Para'criar'a'lista'vazia:'X=[]'Ou'preenchida'X='[]' 91. 2.e'Operaes'com'listas'"append(x)(Adiciona'um'item'ao'fim'da'lista;'equivalente'a'a[len(a):]'='[x].$extend(L)(Extende'a'lista'adicionando'no'fim'todos'os'elementos'da'lista'passada'como'parmetro;'equivalente'a'a[len(a):]'='L.$insert(i,(x)(Insere'um'item'em'uma'posio'especificada.'O'primeiro'argumento''o'ndice'do'elemento'anterior'ao'que'est'para'ser'inserido,'assim'a.insert(0,'x)$insere$no$incio$da$lista,$e$a.insert(len(a),$x)$$equivalente'a'a.append(x).$remove(x)(Remove'o'primeiro'item'da'lista'cujo'valor''x.$$gerado$um$erro$se$este$valor$no$exismo'item'na'lista.'(Os'colchetes'ao'redor'de'i$indicam$que$o$parmetro$$opcional,$no$que$voc$deva$digitnlos'naquela'posio.'Voc'ver'essa'notao'com'frequncia'na'Referncia$da$Biblioteca$Python.)$index(x)(Retorna'o'ndice'do'primeiro'item'cujo'valor''igual'ao'argumento'fornecido'em'x,$gerando$erro$se$este$valor'no'existe'count(x)(Retorna'o'nmero'de'vezes'que'o'valor'x$aparece$na$lista.$sort()"Ordena'os'itens'da'lista'sem'gerar'uma'nova'lista.'reverse()"Inverte'a'ordem'dos'elementos'na'lista'sem'gerar'uma'nova'lista.''Um'novo'operador''in''(Pertence)'Sintaxe:'A'in'B'Retorna'verdadeiro'se'A'pertence'a'B' 93. Aula'4''Introduo's'Estruturas'de'Dados' 94. 2.e'Matrizes'Matrizes'so'conjuntos'de'dados'normalmente'representados'na'forma'de'tabelas:''Ex.'1 2'''3'2 5'''6'Maria'Pedro'Joana'Paulo''A'posio'dos'elementos''iden>ficada'pelo'numero'da'linha'e'da'coluna'em'que'se'localiza'o'elemento.'Uma'matriz'pode'ser'vista'como'uma'lista'composta.'Onde'cada'linha''ou'cada'coluna'seria'uma'sublista.'Declarar'uma'matriz'em'Python''fcil:''A=[[3,2,3],[4,5,6]]'Ou'B=[[Maria,Pedro],[Joana,Paulo]]'' 95. 2.e'Matrizes'de'Matrizes?'Sem'problemas:''Veja'''X[0]'=''''1''2''''''''3''4''X[1]''=''''Pedro''''Paulo'''''''''Maria''''Joana'''X=[[[1,2],[3,4]],[[Pedro,Paulo],[Maria,Joana]]]'''Quem'''X[0][1][0]'?''''' 96. 2.e'Exerccios'com'listas' Receba'um'vetor'elemento'por'elemento'do'teclado'e'coloque'em'uma'lista.' Selecione'o'maior'e'o'menor'elemento'de'um'vetor' Calcule'a'mdia'aritm>ca'dos'elementos'de'um'vetor' Receba'um''vetor'e'inverta'a'ordem'dos'elementos'(Sem'usar'a'funo'reverse)' Encontre'a'posio'de'um'elemento'em'uma'lista'(Pesquisa'Linear)' Selecione'os'elementos'pares'de'um'vetor' Selecione'os'elementos'pares'de'um'vetor'e'copie'para'o'segundo'vetor.' Crie'um'vetor'com'valores'intercalados'de'dois'outros'vetores''''' 97. 2.e'Exerccios'com'listas' Receba'um'vetor'elemento'por'elemento'do'teclado'e'coloque'em'uma'lista.' Dica:'Os'elementos'so'adicionados'atravs'da'funo'append()' Soluo:'programa18.py'''''''' 98. 2.e'Exerccios'com'listas' Selecione'o'maior'e'o'menor'elemento'de'um'vetor' Dica:'Usar'duas'variveis.'Uma'para'guardar'o'maior'valor'e'outra'pra'guardar'o'menor.''Inicialmente'o'primeiro'elemento'do'vetor''atribudo's'mesmas.'Em'seguida'comparanse'todos'os'elementos'do'vetor'com'estas'variveis.'Se'o'elemento'do'vetor'for'menor'que'a'varivel'menor'trocamos'o'valor'de'menor.'A'mesma'coisa'para'a'varivel'maior.' Soluo:'programa19.py'''''' 99. 2.e'Exerccios'com'listas' Calcule'a'mdia'aritm>ca'dos'elementos'de'um'vetor' Dica:'Somar'todos'os'elementos'do'vetor'atravs'de'um'acumulador'e'em'seguida'dividir'pelo'nmero'de'elementos'do'vetor.' Soluo:'programa20.py''''' 100. 2.e'Exerccios'com'listas' Receba'um''vetor'e'inverta'a'ordem'dos'elementos'(Sem'usar'a'funo'reverse)' Dica:'podemos'inverter'o'vetor'e'depois'imprimir'ou'simplesmente'imprimir'na'ordem'inversa.'Para'isso'usar'uma'varivel'contadora'decrescente.'' Soluo:'programa21.py'''''' 101. 2.e'Exerccios'com'listas' Encontre'a'posio'de'um'elemento'em'uma'lista'(Pesquisa"Linear)" Dica:'Comparar'todos'os'elementos'do'vetor'usando'um'lao'e'guardar'a'posio'em'que'o'elemento'procurado'foi'encontrado' Soluo:'programa22.py'''''' 102. 2.e'Exerccios'com'listas' Selecione'os'elementos'pares'de'um'vetor' 'Use'um'lao'para'acessar'todos'os'elementos'do'vetor.'Imprimir'todos'os'que'forem'pares' Soluo:'programa23.py''''''' 103. 2.e'Exerccios'com'listas' Selecione'os'elementos'pares'de'um'vetor'e'copie'para'o'segundo'vetor.' Dica:'Idn>co'ao'anterior.'Apenas'com'o'detalhe'de'adicionar'o'elemento'par'encontrado'a'um'outro'vetor'' Soluo:'programa24.py'''''' 104. 2.e'Exerccios'com'listas' Crie'um'vetor'com'valores'intercalados'de'dois'outros'vetores' Usar'varveis'ndices.''Uma'para'cada'vetor.'Crie'um'lao'para'criar'o'terceiro'vetor'e'use'os'ndices'de'cada'vetor'para'pegar'os'elementos'deles'e'adicionar'ao'terceiro' Soluo:'programa25.py'''''' 105. 2.e'Composio'de'Laos' que'acontece'quando'colocamos'uma'lao'dentro'de'outro'(Aninhados)?' Experimente:'#'programa26'x'='0'while'x'nue,'else' O'break,'como'no'C,'quebra'o'lao'mais'interno'de'um'for'ou'while.' O'con>nue,'tambm'emprestado'do'C,'con>nua'o'prximo'passo'do'lao'mais'interno.' Laos'podem'ter'uma'clusula'else,'que''executada'sempre'que'o'lao'se'encerra'por'exausto'da'lista'(no'caso'do'for)'ou'quando'a'condio'se'torna'falsa'(no'caso'do'while),'mas'nunca'quando'o'lao''encerrado'por'um''break.'Isto''exemplificado'no'prximo'exemplo'que'procura'nmeros'primos:'Ver'programa29.py' 110. 2.e'Pausa''Concatenao'''possvel'somar'valores'alfanumricos:''a'+'b''nome'='Paulo'sobrenome'='Pedreira'Espaco'='''''str'='nome''+'espaco'+'sobrenome''str'='?'''' 111. 2.f'Funes'definidas'pelo'usurio''''Em'portugol:''Definio:'Funo'nome(lista'de'argumentos)''''retorne'''Fimnfuncao''Chamada:''x'='nome(valores)''Em'Python''def'nome(args):'''' '[return']'#'opcional''' 112. 2.f'Funes'definidas'pelo'usurio''''Exemplo'1.'Funo'fatorial''fat(n)'='1'se'n'='0'fat(n)'='n*'fat(nn1)''para'n'>'0''Soluo''Programa30.py'''Obs:'Leia'o'tutorial'oficial'do'python'para'ver'as'possveis'formas'de'criao'de'funes''' 113. 2.f'Funes'definidas'pelo'usurio''''Faa'alguns'exerccios:''1. Defina'uma'funo'que'gere'a'srie'de'Fibonacci'at'determinado'valor'n'passado''como'argumento'2. Crie'uma'funo'para'fatorar'um'nmero'inteiro'3. Crie'funes'para'achar'o'mdc,'mmc','etc'de'um'nmero.' Detalhe':'vc'pode'criar'o'seu'prprio'pacote'de'funes'para'uso'posterior.''' 114. Fim'da'Aula'4'''' 115. Aula'5'n'Recurso'''' 116. Funo'Recursiva''''Uma'funo'recursiva''aquela'que'chama'a'si'prpria:''def'funcao_recursiva(arg):''#''#''faz'qualquer'coisa''funcao_recursiva(arg2)''#'chama'a'si'prpria'''Algumas'funes'so,'por'definio,'recursivas.'Um'exemplo''a'funo'fatorial.''A'funo'fatorial''definida'como:''fat(o)'''1'fat(n)'''n'*'fat'(nn1)''Desta'forma'ela'se'torna'mais'fcil'de'implementar'que'a'verso'itera>va'que'fizemos.'Programa31.py'' 117. 1.'O'programa'chama'fat'passando'3'como'argumento'fat(3)''1.1'Criada'a'instncia'1'da'funo'fat''1.2'A'fat1'testa'o'valor'de'n''plica'n'pelo'resultado'de'chamar'fat(2)'''1.4.1'Criada'a'instncia'2'da'funo'fat'com'n'=''2'1.4.2'a'fat2'testa'se'n''plica'por'fat(1)''1.4.4.1'Criada'a'instncia'3'de'fat''1.4.4.2'a'fat3'testa'se'n(1)'plica'por'n'(2)'1.4.6'a'fat2'retorna'2'(FIM)'1.5'A'fat1'recebe'o'retorno'de'fat2'(2)'e'mul>plica'por'n'(3)'e'retorna'6'(FIM)'2.'O'programa'principal'recebe'o'retorno'de'fat1'(6)'e'imprime'3.'Fim '' 118. Funo'Recursiva''''Cuidado':''preciso'que'a'chamada'recursiva'evite'de'se'tornar'um'lao'infinito.''Para'isso'a'funo'tem'que'conter'casos'base'ou'casos'de'parada.''No'caso'da'funo'fatorial''o'zero,'ou'seja,'uma'chamada'a'fat(0)'retorna'imediatamente'o'valor'1'sem'que'se'chame'novamente'a'funo.''Exemplo2:'Funo'de'Fibonacci.''Esta''uma'funo'que'j'implementamos'na'forma'itera>va'cuja'definio''recursiva.'Ou'seja:''fib(1)'''''0'''#'casos'bases'fib(2)'''''1'fib(n)'''''fib(nn1)'+''fib(nn2)''''Ver'programa32.py'1. OBS:'O'programa16.py'traz'a'verso'itera>va.'Quem'roda'mais'rpido'para'30'elementos'por'exemplo?'''' 119. Pesquisa'Binria''''Exemplo'3''Pesquisa'Binria''um'algoritmo'conhecido'usado'para'pesquisar'um'valor'em'uma'lista'ordenada.'Funciona'da'seguinte'forma:''Seja'uma'lista'ordenada'lista.'Chamemos'de'min'e'max'os'ndices'mnimo'e'mximo'da'lista'onde'a'busca'ser'feita.''Inicialmente,'min'='0'e'max'='len(lista)n1''Para'o'caso'base:''min'=='max''Ento,'ou'o'valor''igual'a'lista'[min]'ou'no'est'na'lista'Para'outros'casos''Dividir'o'intervalo'de'busca'em'dois''Seja'meio'='(min+max)/2''Se'o'valor''maior'que'lista'[meio]',''' 'ento'ele'se'encontra'em'' ' 'algum'dos'ndices'entre'meio+1'e'max'' 'Caso'contrrio,''' ' 'deve'se'encontrar'em'algum'dos'ndices'min'e'meio.''Ver'programa33.py''' 120. Pesquisa'Binria''Passo'a'Passo''''Seja'a'Lista:'[1,2,3,4,5,79,99,101]''Seja'o'valor'de'busca:'79''Passo'1'n''Ao'chamar'a'funo'de'pesquisa'passe'os'valores'min'='0''max'='7'Passo'2'n'Como'min'!'='max'calculanse'meio'='7/2'='3'Passo'3''Verifica'se'valor'(79)'>''lista[meio]''(4)'.'Como''verdadeiro'chamanse'recursivamente'a'funo'passando'(4,7)''Passo'4''Ao'ser'chamada'a'funo'de'pesquisa'com'min'='4'e'max'='7'repetense'a'operao.'Como'min'!='max','calculanse'meio''='11/2'='5''e'valor'no''maior'que'lista[5]'(79)'chamanse'a'funo'passando'(4,5).''Passo'5'n'Repetense'tudo'e'chamanse'a'funo'passando'(5,5)'Passo'6''Ao'ser'chamada'novamente'verifica'que'max'='min'='5'retorna'o'5'para'a'funo'principal.'Passo'7''Na'funo'principal'verificanse'se'o'valor'(79)''igual'a'lista[5]'(79).'Sendo'verdadeiro'o'algoritmo'obteve'sucesso'e'o'valor'procurado'est'na'posio'5.'' 121. Pesquisa'Binria''Exerccio''''Refaa'o'programa'do'Jogo'(programa17.py).'Desta'vez'verifique'com'quantas'tenta>vas'o'computador'acharia'o'nmero'usando'pesquisa'binria'e'depois'compare'com'o'nmero'de'tenta>vas'que'o'jogador'faz.'''Se'o'jogador'sempre'acerta'o'mesmo'nmero'de'vezes'que'o'computador,'ele'est'ficando'esperto';n)' 122. Mais'sobre'listas'....'''''Seja'uma'lista'A'='[2,1,3,4,10,6,7,8,9]''A[:5]'se'refere'aos'elementos'[2,1,3,4,10]''A[1:3]'se'refere'aos'elementos'[1,3]''A[:4]''se'refere'aos'elementos'[2,1,3,4]''B=[1,2]''C'='[3,4]''D='B+C'''([1,2,3,4])'''isso'a'...''' 123. Anlise'combinatria(1)'Dadas'duas'variveis:'A'e'B''Como'permuto'os'valores'de'A'e'B.''Soluo'''C''='A'' 'A'='B'' 'B'='C''Dadas'duas'listas'A'e'B,"A"='[a1,a2,...an]'e'B'='[b1,b2,...bn].'Onde'len(A)'='Len(B)'"'Como'fao'pra'verificar'se'A'pode'ser'ob>da'por'uma'permutao'dos'elementos'de'B?''Soluo:'programa34.py'' 124. Anlise'combinatria(2)'Dadas'uma'lista'A'='[a1,a2,a3,...,an]"'Como'fao'para'achar'todas'as'permutaes'de'A???'''Caso'1,'se'eu'soubesse'o'tamanho'de'A'#''':''Programa35.py''Caso'2,'como'nem'sempre'se'sabe'o'tamanho'de'A'$':''Programa36.py''''' 125. Anlise'combinatria(3)'Estudando'o'programa'36.py''Passo'1:'''Digite'a'lista'''Entrada:'[1,2]'''x'='[1,2]'Passo'2:''''Saida'Permutacoes([1,2])'#''Chama'a'funo'permutao''(instncia'1)'Passo'15:''Recebe'o'valor'de'permutacoes([1,2])'e'subs>tui'no'print'print'[[1,2],[2,1]]'Passo'16:'imprime'o'resultado'final'Fim'do'programa'' 126. Anlise'combinatria(3)'Funo'permutao':'Instncia'1'Passo'3:'Recebe'Lista'='[1,2]'Passo'4:'Testa'len(lista)'=='1'(falso)'Passo'5:'primeiro'='lista[0]'='1';'resto'='lista[1:]'='[2];'resultado''='[]'Passo'6:'Cria'um'iterador''For''perm'in'permutacoes(resto)''=>'chama'a'funcao'permutacoes([2])'('Instancia'2)'Passo'10:'Recebe'a'lista'[2]'e'subs>tui'na'expresso'acima'tendo'como'resultado'for'perm'in'[2]'Passo'11:'perm''='[2]'Passo'12:'cria'lao'for'i'in'range(2)'e'entra'no'lao'com'i'='0'Passo'13:'Adiciona'ao'resultado'[perm[:0]'+'[primeiro]'+'perm[0:]]'ou'seja'resultado'='[[]+[1]+[2]]'='[[1,2]]'Passo'14':'Con>nua'no'lao'com'i'='1'e'adiciona'ao'resultado'resultado'='[[1,2]]'+'[perm[:1]'+'[primeiro]+'perm[1:]]'='[[1,2]]+'[[2]+[1]+[]]'resultado'='[[1,2],[2,1]]'Passo14:'sai'do'lao''e'retorna'resultado'Fechou'a'instncia'1'' 127. Anlise'combinatria(3)'Funo'permutao':'Instncia'2'Passo'7:'Lista'='[2]'Passo'8:''testa'len(lista)'=='1'(verdade)'Passo'9:'Retorna'[2]'para'a'instancia'1'Fechou'a'instncia'2' 128. Fim'da'Aula'5'PAUSA'.....................' 129. Aula'6''Recurso'2'('A'Misso)'''' 130. Anlise'combinatria(4)'Refazendo'o'programa'36:''Passo1:'input:'recebe'uma'lista'e'a>bui'a'x.'Ex'x'='[1,2,3]'Passo2:'print:'chama'a'funcao'permutacoes([1,2,3])'para'imprimir'o'resultado'(instncia'1'de'permutacoes)'Passo25:'recebe'resultado'e'imprime'[[1,2,3],[2,1,3],[2,3,1],[1,3,2],[3,1,2],[3,2,1]]'''''' 131. Anlise'combinatria(4)'Instncia'1'de'permutacoes'Passo3:'recebe'uma'lista'='x'='[1,2,3]'Passo4:'if:'testa'se'o'comprimento'da'lista''um'(falso)'Passo5:'primeiro'='lista[0]'='1;'resto'='lista[1:]'='[2,3];''resultado'='[]'Passo6:'for'perm'in'permutacoes([2,3])''%'Chamada'a'permutacoes'(instancia'2)'Passo'19:'recebe'a'lista'de'permutacoes([2,3])'e'subs>tui'ficando'o'lao:''for'perm'in'([[2,3],[3,2]]):'Passo20'para'perm'='[2,3]'cria'o'lao'i''in'range(len(perm)'2'+'1'='3)'Passo21'para'i'='0:'calcula'o'resultado'+'='[perm[:0]'+'[primeiro]'+'[0:]]'='[[]+[1]+[2,3]]'=[[1,2,3]]'Passo22'para'i'='1':'calcula'o'resultado'+=''[perm[:1]'+'[primeiro]'+'[1:]]'=''[[1,2,3]]'+'[[2]+[1]+[3]]'='[[1,2,3],[2,1,3]]'Passo23'para'i'='2'calcula'o'resultado'+='[perm[:2]'+'[primeiro]'+'[2:]]'=''[[1,2,3],[2,1,3]]'+'[[2,3]+[1]+[]]'='[[1,2,3],[2,1,3],[2,3,1]]'Passo24:'repete'os'passos'20'a'23'para'perm'='[3,2]'gerando'[1,3,2],[3,1,2],[3,2,1]'O'Resultado'ser'portanto'[[1,2,3],[2,1,3],[2,3,1],[1,3,2],[3,1,2],[3,2,1]]'Fechada'a'instncia'1''''''''' 132. Anlise'combinatria(4)'Instncia'2'de'permutacoes'Passo7:'recebe'uma'lista'='x'='[2,3]'Passo8:'if:'testa'se'o'comprimento'da'lista''um'(falso)'Passo9:'primeiro'='lista[0]'='2;'resto'='lista[1:]'='[3];''resultado'='[]'Passo10:'for'perm'in'permutacoes([3])''%'Chamada'a'permutacoes'(instancia'3)'Passo14:'recebe''valor'[[3]]''e'subs>tui'na'lista'perm'in'[[3]]'Passo15:'faz'perm=[3]'e'cria'lao'i'in'range(len(perm)'1'+'1'='2)'Passo16':'para'i'='0'calcula'o'resultado'+=''[perm[:0]'+[primeiro]+perm[0:]]'' 'resultado'='[[]+[2]+[3]]'='[[2,3]]'Passo17:'para'i'='1'calcula'o'resultado''+=[perm[:1]+[primeiro]+perm[1:]]'' 'resultado'='[[2,3]]'+'[[3]+[2]+[]]'='[[2,3],[3,2]]'Passo18:'return:'retorna'o'resultado'[[2,3],[3,2]]'para''o'principal'Fechou'instncia'2'' 133. Anlise'combinatria(4)'Instncia'3'de'permutacoes'Passo11:'recebe'uma'lista'='x'='[3]'Passo12:'if:'testa'se'o'comprimento'da'lista''um'(verdade)'Passo13:'return:'retorna'o'valor'[[3]]'para'a'instncia'2'Fechada.'''''' 134. Anlise'combinatria(4)'n'Moral'Dada'a'lista''1,2,3'Re>ra'o'primeiro'elemento'(1)'Gera'as'possveis'permutaes'dos'restantes'Ex'2,3''e''3,2''Insere'o'primeiro'em'cada'uma'das'posies'do'vetor'em'construo'para'cada'permutao:'Permutao'A:''2,3'''Pos.'0':'1'2'3'Pos.'1':'2'1'3'Pos.'2':'2'3'1'Permutao'B:'3,2'Pos.'0':'1'3'2'Pos.'1':'3'1'2'Pos.'2':'3'1'1''Pergunta':'como'ele'achou'as'permutaes'do'resto???'(2,3)'e'(3,2).'Ora'simplesmente'chamando'a'funo'recursivamente''passando'o'resto'(2,3)'que'faz'a'mesma'coisa'e'retorna'a'lista'e'assim'por'diante'....''' 135. Anlise'combinatria(5)''E''itera>vamente?'''possvel???'Seja'a'lista:''''A'='[1,2,3]'o'nmero'de'permutaes''n!'No'caso'3!'='6'Observe''a'matriz'de'permutaes:'L0:'123'''ou'' 'A[0]'A[1]'A[2]'L1:'132 ' 'A[0]'A[2]'A[1]'L2:'213 ' 'A[1]'A[0]'A[2]'L3:'232 ' 'A[1]'A[2]'A[0]'L4:'312 ' 'A[2]'A[0]'A[1]'L5:'321 ' 'A[2]'A[1]'A[0]''Para'L=0'Pos''=''L'div'(nn1)!''='0'div'2!'='0'(diviso'inteira)'Para'L=1'Pos''=''1'div'2!'='0'Para'L=2'Pos''=''2'div'2!'='1'Para'L=3'Pos''=''3'div'2!'='1'Para'L=4'Pos''=''4'div'2!'='2'Para'L=5'Pos''=''5'div'2!'='2.'Graas'a'diviso'inteira'e'a'escolha'certa'dos'parmetro'de'calculo'temos'uma'funo'que'nos'd'o'ndice'do'elemento'em'funo'da'linha.'E'para'resto'...?'''''''''''' 136. Anlise'combinatria(5)''Para'uma'linha'qualquer'ex'L=4'O'Calculo'da'Pos'0''4'div'2!''=''2'Ou'seja''''''L4:'3'1'2''ou'A[2]'A[1]''A[0]''Seja'a'lista'A'=''[1]['2]'(re>ramos''o'elemento'da'posio'j'calculada)'Podemos'repe>r'as'operaes'com'n'='2'(novo'tamanho).'Observe'que'em'uma'lista'de'tamanho'2'no'poderia'haver'uma'linha'maior'que'2!'ento'temos'que'confinar'o'ndice(L)'da'linha'a'um'valor'entre'0'e'2!.'Fazemos'isso'>rando'o'resto'da'diviso'entre'L'e'2!''ou'seja'entre'L'e'n!''''''''Aplicamos'as'mesmas'formas'usando'L'n(novos'valores''L'e'n)'Observe'que''o'mesmo'mtodo'anterior'se'aplica.'Para'a'primeira'posio'L(L'%'n!''4'%'2!'='0):'Pos'='L'div'n!''='0/1!'='0':'A[0]'='1''''''Agora''s'repe>r'a'operao'com'a'lista'que'sobrou.''OBS:'Para'a'linha'5''L(5'%'2!''1):'Pos'=''1/1!''='1'':'A[1]'=0'''''''' 137. Anlise'combinatria(5)''Organizando"o"algoritmo"'Receba'a''lista'A'de'tamanho'n'Crie'um'lao'com'varivel'i''na'faixa(0','fatorial(n))''faca'L'='i''faca'uma'copia'da'lista'(A2'='A)''crie'uma'lista'vazia'temp'='[]''''' 'crie'lao'usando'j'na'faixa(comprimento(A),0,n1)'#'de'trs'pra'frente''' 'calcule'o'denominador'd'='fatorial(jn1)'' 'calcule'a'posio'p'='L'/'d''(diviso'inteira)'' 'recalcule'o'L'para'a'prxima'coluna''L'='L'%'d'' 'adicione'A2[p]'a'temp'n>'temp.append(A2[p])''' 'apague'o'elemento'na''posio'p''de'A[2]''imprima'o'temp'ou'adicione'a'uma'lista'de'resultados''Programa37.py''''' 138. Anlise'combinatria(5)'''At'agora's'fizemos'permutaes.''E'as'combinaes,'arranjos,'etc'???''Digamos'uma'lista'de'n'elementos'='[a1,a2,...an]''Os'arranjos,'ou'seja,''quantas'e'quais'possveis'formas'de'ordenamento'eu'terei're>rando'sempre'um'nmero'fixo'm'de'elementos'm'ntos'eu'posso'gerar'a'par>r'de'um'subconjunto'da'lista'acima?''E'se'eu'fizer'arranjos'ou'combinaes'com'repe>es?'(A,A)(B,B)'...'etc'''Desafios'para'vc.....''' 139. Filas'Voc'pode'tambm'u>lizar'uma'lista'como'uma'fila,'onde'o'primeiro'item'adicionado''o'primeiro'a'ser'recuperado'(pol>ca'primeiro'a'entrar,'primeiro'a'sair'(FIFO)'').'Para'adicionar'um'elemento'ao'fim'da'fila'u>liza'append().'Para'recuperar'um'elemento'do'incio'da'fila'use'pop()'com'0'no'ndice.'''Por'exemplo:''>>>queue'='["Eric",'"John",'"Michael"]'>>>queue.append("Terry")''#'Terry'arrives'>>>queue.append("Graham")' '#'Graham'arrives''>>>queue.pop(0)'Eric'>>>'queue.pop(0)'John'>>>'queue'[Michael,'Terry,'Graham]''Exerccio':'Uma'boa'parte'das'linguagens'no'possui'comandos'para'manipulao'de'listas.'Crie'sua'prpria'implementao'das'funes'append'e'pop.'' 140. Pilhas'Os'mtodos'de'lista'tornam'muito'fcil'u>lizar'listas'como'pilhas,'onde'o'item'adicionado'por'l>mo''o'primeiro''a'ser'recuperado'(pol>ca'l>mo'a'entrar,'primeiro'a'sair'(LIFO)')'.'Para'adicionar'um'item'ao'topo'da'pilha,'use'append()'[push].'Para'recuperar'um'item'do'topo'da'pilha'use'pop()'sem'nenhum'ndice.'''>>>'stack'='[3,'4,'5]'>>>'stack.append(6)'>>>'stack.append(7)'>>>'stack'[3,'4,'5,'6,'7]'>>>'stack.pop()'7'>>>'stack'[3,'4,'5,'6]'>>>'stack.pop()'6''Exerccio:'Implemente'sua'prpria'verso'de'push'e'pop' 141. Pense'recursivamente!'Torres'de'Hani.'Algoritmo:'1. Criar'funo'torre'de'Hani'recebendo'como'argumentos'numero''de'anis'(n),'uma'pilha'preenchida'representando'a'haste'1'origem"e'duas'pilhas'vazias'(temp"e'des@no")'representando'as'hastes'2''e'3"1.1'Dentro'da'funo'verificar'se'o'num'de'anis'='1'.'Se'for're>rar'o'anel'(pop)'da'pilha'origem'e'colocar'na'des>no'(push/append)'e'retorna.'1.2'Seno'chamar'a'funo'Hani'(chamada'recursiva)'para'colocar'todos'os'elementos'at'o'nn1''na'pilha'temp"na'ordem'correta'e'seguindo'as'regras.'1.3'colocar'o'nnesimo'elemento'na'posio'certa'em'des@no.'1.4'chamar'a'funo'Hani'(recursiva)'para'transferir'os'nn1'elementos'que'esto'na'temp"para'a'posio'correta'no'des@no" 142. Fim'da'Aula'6' 143. Aula'7'n'Ordenamento' 144. Ordenamento'''''Seja'uma'lista''A'='[a1,a2,...,an]'no'ordenada.''Qual'o'procedimento'para'ordennla?'Ou'seja'criar'uma'lista'A='[a1,a2,...an]'a'par>r'de'A'onde'ai+1'>'ai'''''para'todo'i'em'R?''Tente'antes'de'prosseguirmos.''Veremos'aqui'4'(+2)'mtodos:''''1. Seleo,''2. Insero,''3. Borbulhamento''4. Classificao'Rpida'(Quicksort)'5. Mergesort'6. Shellsort'E'voc'pesquisa'outros'.....''' 145. Ordenamento(1)'n'Seleo'''''Idia:''Pesquisar'na'lista'o'menor'elemento'e'trazer'para'a'primeira'posio.'Repe>r'para'a'segunda,'terceira,'etc'at'chegar'ao'fim'da'lista'tendo'a'mesma'ordenada.''''Passo'1':''Dada'a'lista'seleciona'o'menor'nmero:'Resultado'='1'na'Posio'2''A'''=''''[''7','''3''',''1,'''4,'''5]'''Posio'a'ser'calculada' Posio'do'menor'elemento'da'lista' 146. Ordenamento(1)'n'Seleo'''''Idia:''Pesquisar'na'lista'o'menor'elemento'e'trazer'para'a'primeira'posio.'Repe>r'para'a'segunda,'terceira,'etc'at'chegar'ao'fim'da'lista'tendo'a'mesma'ordenada.''''Passo'2':''Troca'os'elementos'das'posies'(0)'e'(2)''A'''=''''[''1','''3''',''7,'''4,'''5]'''Posio'a'ser'calculada' Posio'do'menor'elemento'da'lista' 147. Ordenamento(1)'n'Seleo'''''Idia:''Pesquisar'na'lista'o'menor'elemento'e'trazer'para'a'primeira'posio.'Repe>r'para'a'segunda,'terceira,'etc'at'chegar'ao'fim'da'lista'tendo'a'mesma'ordenada.''''Passo'3':''Atualizamos'a'posio'a'ser'calculada'e'selecionamos'o'menor'valor'da'lista'remanescente'na'posio'1'(3)''A'''=''''[''1','''3''',''7,'''4,'''5]'''Posio'a'ser'calculada'Posio'do'menor'elemento'da'lista'remanescente' 148. Ordenamento(1)'n'Seleo'''''Idia:''Pesquisar'na'lista'o'menor'elemento'e'trazer'para'a'primeira'posio.'Repe>r'para'a'segunda,'terceira,'etc'at'chegar'ao'fim'da'lista'tendo'a'mesma'ordenada.''''Passo'4':''Mantemos'o'valor'do'elemento'pois'j'est'na'posio'correta!''A'''=''''[''1','''3''',''7,'''4,'''5]'''Posio'a'ser'calculada'Posio'do'menor'elemento'da'lista'remanescente' 149. Ordenamento(1)'n'Seleo'''''Idia:''Pesquisar'na'lista'o'menor'elemento'e'trazer'para'a'primeira'posio.'Repe>r'para'a'segunda,'terceira,'etc'at'chegar'ao'fim'da'lista'tendo'a'mesma'ordenada.''''Passo'5':''Atualizamos'a'posio'a'ser'calculada'e'selecionamos'o'menor'valor'da'lista'remanescente.'Encontrado'na'posio''3'(4)''A'''=''''[''1','''3''',''7,'''4,'''5]'''Posio'a'ser'calculada'Posio'do'menor'elemento'da'lista'remanescente' 150. Ordenamento(1)'n'Seleo'''''Idia:''Pesquisar'na'lista'o'menor'elemento'e'trazer'para'a'primeira'posio.'Repe>r'para'a'segunda,'terceira,'etc'at'chegar'ao'fim'da'lista'tendo'a'mesma'ordenada.''''Passo'6':Intercambiamos'os'valores'da'posio'atual'com'a'posio'do'menor'remanescente''A'''=''''[''1','''3''',''4,'''7,'''5]'''Posio'a'ser'calculada'Posio'do'menor'elemento'da'lista'remanescente' 151. Ordenamento(1)'n'Seleo'''''Idia:''Pesquisar'na'lista'o'menor'elemento'e'trazer'para'a'primeira'posio.'Repe>r'para'a'segunda,'terceira,'etc'at'chegar'ao'fim'da'lista'tendo'a'mesma'ordenada.''''Passo'7':'Atualizamos'a'posio'ser'calculada'e'selecionamos'o'menor'valor'remanescente''A'''=''''[''1','''3''',''4,'''7,'''5]'''Posio'a'ser'calculada'Posio'do'menor'elemento'da'lista'remanescente' 152. Ordenamento(1)'n'Seleo'''''Idia:''Pesquisar'na'lista'o'menor'elemento'e'trazer'para'a'primeira'posio.'Repe>r'para'a'segunda,'terceira,'etc'at'chegar'ao'fim'da'lista'tendo'a'mesma'ordenada.''''Passo'8':'Intercambiamos'os'valores'encontrados''A'''=''''[''1','''3''',''4,'''5,'''7]'''Posio'a'ser'calculada'Posio'do'menor'elemento'da'lista'remanescente' 153. Ordenamento(1)'n'Seleo'''''Idia:''Pesquisar'na'lista'o'menor'elemento'e'trazer'para'a'primeira'posio.'Repe>r'para'a'segunda,'terceira,'etc'at'chegar'ao'fim'da'lista'tendo'a'mesma'ordenada.''''Passo'9':'Operao'finalizada.'A'Lista'est'ordenada''A'''=''''[''1','''3''',''4,'''5,'''7]'''Posio'a'ser'calculada'Posio'do'menor'elemento'da'lista'remanescente'Ver:'Programa39.py' 154. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'1':'Posiciona'a'posio'a'ser'calculada'(chave)''e'verifica'se'o'primeiro'elemento'est'em'ordem'com'relao'ao'mesmo.'No'caso''falso'(7>3)''A'''=''''['7,'''3''',''1,'''4,'''5]'''Posio'a'ser'calculada'(chave)'Elemento'a'verificar'se'est'na'ordem'correta' 155. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'2':'Insere'(copia)''elemento'zero'(7)'na'posio'da'chave''A'''=''''['7,'''7''',''1,'''4,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 156. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'3':'Insere'(copia)''o'valor'da'chave'na'posio'0''A'''=''''['3,'''7''',''1,'''4,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 157. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'4':'Atualiza'a'posio'da'chave'Guarda'chave'='1''e'verifica'se'o'elemento'a'esquerda''menor'(falso)'(7>1)''A'''=''''['3,'''7''',''1,'''4,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 158. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'5':''Desloca'(copia)'o'valor'anterior'uma'posio''frente''A'''=''''['3,'''7,'''7,'''4,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 159. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'6':''Verifica'se'o'elemento'mais'a'esquerda''menor'que'chave'(1)'(falso)''A'''=''''['3,'''7,'''7,'''4,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 160. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'7':''Desloca'(copia'o'elemento'para'frente)''A'''=''''['3,'''3,'''7,'''4,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 161. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'8':''Copia'o'valor'da'chave'para''o'incio''A'''=''''['1,'''3,'''7,'''4,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 162. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'9':''Atualiza'chave'(chave'='4)''A'''=''''['1,'''3,'''7,'''4,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 163. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'10':''Verifica'se'o'elemento'a'esquerda''maior'que'chave'(verdade)'''A'''=''''['1,'''3,'''7,'''4,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 164. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'11':''Desloca'(copia)'elemento'analisado'para'a'direita'''A'''=''''['1,'''3,'''7,'''7,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 165. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'12':''Verifica'se'elemento'mais'a'esquerda''maior'que'chave''(FALSO)''A'''=''''['1,'''3,'''7,'''7,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 166. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'13:''Insere'(copia)'chave'na'posio''direita'do'valor'analisado''A'''=''''['1,'''3,'''4,'''7,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 167. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'14:''Atualiza'a'posio'da'chave'(chave'='5)''A'''=''''['1,'''3,'''4,'''7,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 168. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'15:''Verifica'se'o'elemento'a'esquerda''maior'que'chave.'(verdade)''A'''=''''['1,'''3,'''4,'''7,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 169. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'16:''Desloca'(copia)'o'elemento'analisado'para'a'direita''A'''=''''['1,'''3,'''4,'''7,'''7]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 170. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'17:''Desloca'(copia)'o'elemento'analisado'para'a'direita''A'''=''''['1,'''3,'''4,'''7,'''7]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 171. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'18:''Verifica'se'o'elemento'mais'a'esquerda''maior'que'chave'(falso)''A'''=''''['1,'''3,'''4,'''7,'''7]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 172. Ordenamento(2)'n'Insero'''''Idia:''Atravessar'a'lista'da'esquerda'para'a'direita'mantendo'o'lado'esquerdo'ordenado.''''Passo'19:''Insere'a'chave''direita'da'posio'em'anlise'e'fim'do'trabalho.''A'''=''''['1,'''3,'''4,'''5,'''7]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta'Programa40.py' 173. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'1:''Comparar'os'dois'primeiros'elementos''A'''=''''['7,'''3,''1,'''4,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 174. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'2:''Como'esto'fora'de'ordem'permutnlos''A'''=''''['3,'''7,''1,'''4,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 175. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'3:''Comparar'os'dois'prximos''A'''=''''['3,'''7,''1,'''4,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 176. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'4:''Permutnlos'(Esto'fora'de'ordem)''A'''=''''['3,'''1,''7,'''4,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 177. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'5:''Comparar'os'dois'prximos''A'''=''''['3,'''1,''7,'''4,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 178. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.'''''A'''=''''['3,'''1,''4,'''7,'''5]'''Passo'6:''Permutnlos'Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 179. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'7':''Comparar'os'dois'prximos''A'''=''''['3,'''1,''4,'''7,'''5]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 180. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.'''''A'''=''''['3,'''1,''4,'''5,'''7]'''Passo'8':''Permutnlos'Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 181. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'9':''Como'foram'feitas'vrias'permutaes'nessa'passagem,'reiniciar'comparando'os'dois'primeiros'elementos.''A'''=''''['3,'''1,''4,'''5,'''7]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 182. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.'''''A'''=''''['1,'''3,''4,'''5,'''7]'''Passo'10':''Permutar'Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 183. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'11':''Comparar'dois'prximos''A'''=''''['1,'''3,''4,'''5,'''7]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 184. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'12':''Comparar'dois'prximos''A'''=''''['1,'''3,''4,'''5,'''7]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 185. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'13':''Comparar'dois'prximos''A'''=''''['1,'''3,''4,'''5,'''7]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 186. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'14':''Como'foi'feita'uma'permutao,'reiniciar'comparando'os'dois'primeiros'(Nova'passada)''A'''=''''['1,'''3,''4,'''5,'''7]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 187. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'15':''Comparar'os'dois'prximos''A'''=''''['1,'''3,''4,'''5,'''7]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 188. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'16':''Comparar'os'dois'prximos''A'''=''''['1,'''3,''4,'''5,'''7]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 189. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'17':''Comparar'os'dois'prximos''A'''=''''['1,'''3,''4,'''5,'''7]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta' 190. Ordenamento(3)'n'Borbulhamento'''''Idia:'Comparar'os'elementos'dois'a'dois.'Se'es>verem'fora'de'ordem,'ordennlos.'Repe>r'at'que'no'haja'mais'elementos'a'permutar.''''Passo'18':''Como'nenhuma'permutao'foi'feita,'encerrar.''A'''=''''['1,'''3,''4,'''5,'''7]'''Posio'a'ser'calculada'Elemento'a'verificar'se'est'na'ordem'correta'Programa41.py' 191. Ordenamento(4)'n'Quicksort'''''Idia:Dividir'a'lista'ao'meio'passar'todos'os'elementos'menores'que'o'meio'para'a'esquerda'e'todos'os'maiores'para'a'direita.''Chamar'a'funo'recursivamente'para'a'lista'direita,'depois'para'a'esquerda'e'em'seguida'concatenar'as'duas.'O'caso'bsico='lista'vazia.'''''Passo'1':''Calcular'a'posio'do'meio''para'n'='5'meio'='2'Elemento'='4''A'''=''''['7,'''4,'''3,'''1,'''5]''' 192. Ordenamento(4)'n'Quicksort'''''Idia:Dividir'a'lista'ao'meio'passar'todos'os'elementos'menores'que'o'meio'para'a'esquerda'e'todos'os'maiores'para'a'direita.''Chamar'a'funo'recursivamente'para'a'lista'direita,'depois'para'a'esquerda'e'em'seguida'concatenar'as'duas.'O'caso'bsico='lista'vazia.'''''Passo'2':''Criar'lista'Esquerda''L'e'Direita'R'''A'''=''''['7,'''4,'''3,'''1,'''5]''L''''='''[]'''''''R''='''[']''' 193. Ordenamento(4)'n'Quicksort'''''Idia:Dividir'a'lista'ao'meio'passar'todos'os'elementos'menores'que'o'meio'para'a'esquerda'e'todos'os'maiores'para'a'direita.''Chamar'a'funo'recursivamente'para'a'lista'direita,'depois'para'a'esquerda'e'em'seguida'concatenar'as'duas.'O'caso'bsico='lista'vazia.'''''Passo'3':''Preencher'a'lista'Esquerda'com'valores'menores'que'4're>rados''de'A'''A'''=''''['7,'''4,'''3,'''1,'''5]''L''''='''[3,1]'''''''R''='''[']''' 194. Ordenamento(4)'n'Quicksort'''''Idia:Dividir'a'lista'ao'meio'passar'todos'os'elementos'menores'que'o'meio'para'a'esquerda'e'todos'os'maiores'para'a'direita.''Chamar'a'funo'recursivamente'para'a'lista'direita,'depois'para'a'esquerda'e'em'seguida'concatenar'as'duas.'O'caso'bsico='lista'vazia.'''''Passo'4':''Preencher'a'lista'Direita'com'valores'maiores''que'4're>rados''de'A'''A'''=''''['7,'''4,'''3,'''1,'''5]''L''''='''[3,1]'''''''R''='''[7,5]'''' 195. Ordenamento(4)'n'Quicksort'''''Idia:Dividir'a'lista'ao'meio'passar'todos'os'elementos'menores'que'o'meio'para'a'esquerda'e'todos'os'maiores'para'a'direita.''Chamar'a'funo'recursivamente'para'a'lista'direita,'depois'para'a'esquerda'e'em'seguida'concatenar'as'duas.'O'caso'bsico='lista'vazia.'''''Passo'5':''A'soluo''L+'[4]'+'R'''A'''=''''L'+'[4]'+''R'='[''1,'3,'4,'5,'7]''''Viu'como'a'recurso'simplifica'as'coisas?? '''''''''''''''''''''''''''''''''''''''Programa42.py' 196. Ordenamento(4)'n'Quicksort''''''''Data'source:'first'N'words'of'Charles'Dicken's'life'work.'Machine:'Dell'2.2GHz'PC'with'1GB'memory' 197. Ordenamento(5)'n'Mergesort'''''Idia:Semelhante'ao'quicksort'com'a'diferena'que'no'faz'o'par>cionamento,'ou'seja,''apenas'divide'a'lista'ao'meio,'ordena'com'mergesort'(recursiva)'as'duas'sublistas'geradas'e'intercala'os'resultados'gerados'para'compor'a'soluo'final.''A'sua'vez'de'implementar'....''''L'''='''[7,'4]'''''''R''='''[3,1,5]'L''='''[4,'7]'''''''R'='''[1,3,5]''A''='L''(intercalao'ordenada)'''R'''''''''''=''''''''''[1'(R)','3(R)','4(L),'5(R),''7(L)']'' 198. Ordenamento(6)'n'Shellsort'''''Idia:'Dada'uma'lista'[10,2,3,4,5,6,7,0,n1,n2,8,9,11,15,65,43,32,11,2,0]'Agrupanse'a'lista'na'forma'de'uma'matriz'de'(digamos)'7'colunas''10'''2'''3'''4''5'''6'''7'0''''n1''n2'''8''9'11''15'65'43'32'11''2''0'''50'''A'Seguir'ordenamos'as'colunas''0''''n1'''n2'''4'''2'''0''7'10'''2''''3''''8''5'''6''15'65 43'32''11''9'11'50'Em'seguida'diminumos'sucessivamente'o'numero'de'colunas'e'ordenamos'at'chegar'a'uma'coluna'onde'o'algoritmo'termina.'Para'se''ordenar'as'colunas'podense'usar'a'insero'ou'o'borbulhamento.'''Mais'um'exerccio'para'vc'.....'' 199. Ordenamento(7)'n'Outros'''''Shakersort'''Borbulhamento'bidirecional.'Tambm'chamado'cocktail'sort.'Heapsort'''Usa'um'Heap'como'estrutura'de'dados'para'realizar'a'classificao'Mul>ple'Heapsort''Variante'do'Heapsort'Quicksort'com'triplo'par>cionamento''Variante'do'Quicksort.'Combsort''Melhorias'no'bubble'e'quicksort'Gnome'sort''Variao'da'insero'''Outros:''OddnEven'Sort,'Flashsort,'Introsort,'Library'sort,'Pa>ence'sor>ng'',Tree'sort'(binary'tree'sort),'Strand'sort,'Bead'sort,'Bucket'sort,'Burstsort,'Coun>ng'sort,'Pigeonhole'sort,'Postman'sort,'Radix'sort,'Smoothsort,'Bitonic'sorter,'Pancake'sor>ng,'Topological'sort,''Samplesort'.....''' 200. Exerccio'''''''Um'exerccio'simples'para'desopilar:''Dadas'duas'listas'no'ordenadas'A'e'B,'faa'um'programa'para'criar'uma'lista'C'ordenando'e'intercalando'as'duas'listas'(A'e'B)''na'forma'itera>va.'''' 201. Anlise'de'Algoritmos''''Obje>vo:'Determinar'quanto'de'espao'(memria)'ser'necessria'para'execuo'de'um'algoritmo'e'quanto'tempo'o'mesmo'levar'para'ser'executado.''Mtricas'normalmente'relacionadas'ao'tamanho'da'entrada:'Complexidade'de'Tempo:'Nmero'de'passos'do'algoritmo'''Complexidade'de'Espao:'Nmero'de'unidades'de'memria'''Es>ma>vas:'Notaes'Big'O,'Omega,'Big'Omega,'Theta,etc''Exs:'''O'Nmero'de'passos'executados'em'uma'pesquisa'binria''proporcional'ao'logaritmo'do'comprimento'da'lista'de'entrada.'Na'notao'Big'O.''Dizemos''que'sua'complexidade'de'tempo''O(log(n)).'''Vejamos'a'complexidade'dos'algoritmos'aqui'estudados.''' 202. Anlise'de'Algoritmos'Um'algoritmo''estvel'se'ele'mantm'a'ordem'dos'elementos'repe>dos'na'entrada.' 203. Exerccio'de'Fixao''''Implemente'o'seguinte'algoritmo:''1. Crie'trs'ou'mais'funes'uma'para'cada'>po'de'mtodo'de'ordenamento'que'vc'deseja'testar.'(Ex.'Bolha,'quick,'shell)'2. Repita'para'i'='100,'500,'1000,1500,2000,3000,4000,5000,10000,20000,50000,100000''2.1'Gere'uma'srie'de'lista'de'nmeros'aleatrios'de'tamanho'i''2.2'Ordene'a'srie'chamando'as'funes'definidas'no'passo'1''2.3'Guarde''os'tempos'usados'para'cada'operao'de'ordenamento'5. Crie'uma'tabela'conforme'modelo'abaixo:'N ' ' 'Metodo'A 'Metodo'B 'Metodo'C' 'Metodo'D'100 '' 't11 ' ' 't12 ' ' 't13 ' ' 't14'500'' 't21 ' ' 't22 ' ' 't23 ' ' 't24 ''...... ' '''Onde'txx''so'os'tempos'levados'em'cada'operao'6.'Fim''OBS:'Com'os'dados'ob>dos'acima'gere'um'grfico'no'openoffice'' 204. Fim'da'Aula'7'''' 205. Aula'8''Programao'Orientada'a'Objetos''''' 206. Aula'8''POO'n'Classes'''''Poo''Programao'Orientada'a'Objetos.'O'programa''executado'em/por'objetos.''Objeto'n'En>dade'que'possui'atributos'(variveis'internas')'e'mtodos'(funes'internas)''Classe''Descrio'abstrata'de'um'grupo'de'objetos.''Um'objeto''uma'instncia'de'uma'classe.'Para'se'criar'um'objeto,'primeiro'se'define'a'sua'classe.''Ex.'Criando'uma'classe'em'Python''class'NomeDaClasse:''.'.'.'''' 207. Aula'8''POO'n'Objetos'''''Criando'(instanciando)'objetos:''''='nome_da_classe()''Ex.'class'Triangulo:'''''''''c1'='0'''''''''c2'='0'''''''''def'h(t):'#'o'mtodo'('funo)''deve'ter'pelo'menos'um'argumento'''''''''''''''''return'math.sqrt(t.c1**2'+t.c2**2)'''''''#'fim'da'classe'''''''t'='Triangulo()'''''''t.c1'='input("Digite'o'tamanho'do'cateto'1'")'''''''t.c2'='input("Digite'o'tamanho'do'cateto'2'")'''''''print'"hipotenusa''",t.h()''O'Primeiro'argumento'das'funes''o'prprio'objeto.''(self'ou'auto)''Programa43.py'' 208. Aula'8''POO'n'Construtores''''Mtodo'especial'usado'na'instanciao'de'um'objeto.'(programa44.py)''Ex.'import'math'import'os'os.system("clear")'class'Triangulo:'''''''''c1=0'''''''''c2=0'''''''''def'__init__(self):''''Construtor'da'classe'''''''''''''''''self.c1'='input("Digite'o'tamanho'do'cateto'1'")'''''''''''''''''self.c2'='input("Digite'o'tamanho'do'cateto'2'")'''''''''def'h(self):'#'a'funcao'deve'ter'pelo'menos'um'argumento'''''''''''''''''return'math.sqrt(self.c1**2'+self.c2**2)'#'fim'da'classe't'='Triangulo()'print'"hipotenusa''",t.h() ''Chama'o'construtor'e'cria'instncia' 209. Aula'8''POO'n'Herana''''Uma'classe'pode'herdar'atributos'e'mtodos'de'uma'(herana'simples)'ou'mais'classes'(herana'ml>pla).'A'sintaxe'':''class'ClasseDerivada(Base1,'Base2,'Base3):''.'.'.'''' 210. Aula'8''POO''Heranan'Exemplo''''Programa45.py''import'math'import'os'os.system("clear")'class'Triangulo:'''''''''area'='0'''''''''>po="'"'''''''''def'__init__(self):'''''''''''''''''print'"Criada'a'classe'Base' 211. Aula'8''POO''Heranan'Exemplo''''class'TrianguloRetangulo(Triangulo):'''''''''l1'='0'''''''''l2'='0'''''''''def'__init__(self):'''''''''''''''''Triangulo.__init__(self)'''''''''''''''''print'"Criando'a'classe'derivada"'''''''''''''''''self.l1'='input("Qual'o'valor'do'lado'1'")'''''''''''''''''self.l2'='input("Qual'o'valor'do'lado'2'")'''''''''''''''''self.area'='self.l1''*'self.l2'/'2.0'''''''''''''''''print'"Area'='",self.area''#'fim'da'classe'#'inicio'do'programa'principal't'='Triangulo()''''''''''''''''tr'='TrianguloRetangulo()' 212. Aula'8''POO''Polimorfismo''''Deciso'em'tempo'de'execuo'de'qual'mtodo'a'chamar'em'uma'hierrquica.'Na'pr>ca''semelhante'a'>pagem'dinmica.'(O'python''concebido'assim)'#'chamada'polimorfica't'='tr'print'"Hipotenusa'(Usando't)''",t.h()'print'"Hipotenusa'(Usando'tr)'",tr.h()'t.l1'='1000'print'"l1'em't''",'t.l1'print'"l1'em'tr''",'tr.l1' 213. Aula'8''POO''Sobrecarga'de'Mtodos''''Consiste'na'existncia'de'mtodos'diferentes'com'o'mesmo'nome.'A'chamada''definida'pela'assinatura'do'mtodo.'(Tipos'e'quan>dades'dos'argumentos).''Python'dispensa'a'sobrecarga'de'mtodos'usando'argumentos'flexveis.''a)"Parmetros"com"valores"default"'def'ask_ok(prompt,'retries=4,'complaint=Yes'or'no,'please!):''b)"Parmetros"na"forma"chave=valor"'def'parrot(voltage,'state=a's>ff,'ac>on=voom,'type=Norwegian'Blue):'parrot(ac>on'='VOOOOOM,'voltage'='1000000)''c)"Listas"de"argumentos"arbitrria"def'f(*lista)'X'='f(1,2,3,4,5,6)'Lista'='(1,2,3,4,5,6)""' 214. Aula'8''POO''Sobrecarga'de'Operadores''''Consiste'em'estender'a'funcionalidade'de'operadores'como'+''n'etc.'para'outros'>pos'de'dados'que'no'sejam'os'originalmente'aceitos'pelos'mesmos.'Veja'o'exemplo'abaixo:'class'Racional:''''def'__init__(self,'divisor,'dividendo):'''''''self.divisor'='divisor'''''''self.dividendo'='dividendo'''''def'__str__(self):'''''''return'str(self.divisor)'+''/''+'str(self.dividendo)'''''def'__mul__(self,'outro):'''''''divisor'='self.divisor*outro.divisor'''''''dividendo'='self.dividendo*outro.dividendo'''''''return'Racional(divisor,'dividendo)''' 215. Aula'8''POO''Sobrecarga'de'Operadores'''' 'O'uso'da'classe'racional'seria:''a'='Racional(1,2)'b'='Racional(3,4)''c'='a*b'print'c'''''''Programa46.py'' 216. Aula'8''POO''Sobrecarga'de'Operadores'''' 'Operadores'a'sobrecarregar:''__add__:'Adio.''__sub__:'Sutrao.''__mul__:'Mul>plicao.'__div__:'Diviso.'__mod__:'Resto'da'diviso.'__pos__:'Iden>dade.'__neg__:'Nega>vo.''__abs__:'Absoluto.''''Ver'documentao'para'mais'informaes.' 217. Aula'8''POO''Composio'/'Agregao'''''Uma'classe'python'pode'ser'definida'dentro'de'outra'e'conseqentemente'seus'objetos'estabelecem'a'relao'de'composio.'Relao'forte.''Ex.'class'universidade: ''' 'x,y',z','etc'' 'class'depto:'' ' 'jhsdkhd''#'fim'da'classe''Na'relao'de'composio'uma'classe'possui'uma'varivel'referenciando'um'objeto'de'outra'classe.'Uma'relao'mais'fraca.'class'depto''p'='Professor()'#'fim'da'classe''' 218. Exerccios'de'Fixao'''' 'Crie'uma'classe'chamada'de'Ordenadora'com'os'atributos'bsicos'para'uma'tarefa'de'ordenamento.'A'seguir'crie'classes'filhas'que'implementem'os'diversos'mtodos'de'ordenamento'que'estudamos'na'aula'passada.' 219. Registros''''Registros'so'conjuntos'de'dados'>picamente'usados'para'guardar'dados'em'bancos'de'dados'onde'cada'linha'da'tabela''um'registro.'Algumas'linguagens'como'o'pascal'(record)'ou'C'(struct)'possuem'este'>po'definido.''Em'Python'podemos'usar'classes'sem'mtodos'ou'mesmo'listas'ou'tuplas'de'acordo'com'o'uso'que'faremos'deles.''Lembrando':' ''lista'='[1,2,3,4]'tupla'='1,2,3,4'Ambas'so'acessadas'com'ndices,'mas'com'u>lizaes'e'possibilidades'diferentes.''Class'registro:''nome='''idade'='0''peso'=''0'' 220. Registros''''Vamos'ento'criar'um'banco'de'dados'de'alunos'do'IFETnCe.'Colocando'em'uma'lista'os'nomes,'endereos'e'enmails.''Idia:''Criar'uma'classe'alunos,'criar'uma'lista'vazia'para'adicionar'os'alunos,'perguntar'a'quan>dade'de'alunos'a'cadastrar'criar'um'programa'para'cadastrar'ou'mostrar'a'lista'de'alunos.''''Uma'melhora:'criar'um'menu'de'entrada'para'que'o'usurio'escolha'o'que'deseja'fazer.'' 221. Registros''''Definindo'a'classe.'''class'Aluno:''''def'__init__(self,'nome,endereco,email):'''''''self.nome'='nome'''''''self.endereco'='endereco'''''''self.email'='email''''def'__str__(self):'''''''return'"nAluno:'"+self.nome+"nEnd:'"+self.endereco+"nenmail:"+self.e$'#'fim'da'classe'' 222. Registros''''Nosso'menu'do'programa.'#'inicio'do'programa'lista'='[]'while'True:'''''''''os.system("clear")'''''''''print'"Escolha'uma'opo'abaixo:"'''''''''print'"'Cadastrar'um'Aluno"'''''''''print'"'Listar'os'Alunos'"'''''''''print'"'Sair'do'Programa"'''''''''escolha'='raw_input("Digite'sua'escolha'e'pressione''")'''''''''if'escolha'=='"1:'''''''''''''''''os.system("clear")'''''''''''''''''nome'='raw_input("Digite'o'nome'do'aluno'")'''''''''''''''''end'='raw_input("Digite'o'endereco'do'aluno'")'''''''''''''''''mail'='raw_input("Digite'o'enmail'do'aluno'")'''''''''''''''''obj'='Aluno(nome,end,mail)'''''''''''''''''lista.append(obj)''''''''''' 223. Registros''''Nosso'menu'do'programa.''n'Con>nuao'''elif'escolha'=='"2:'''''''''''''''''for'i'in''lista:'''''''''''''''''''''''''print'i'''''''''''''''''raw_input("Digite'enter'para'con>nuar)'' 'elif'escolha'=='"3":'''''''''''''''''break'print'"Fim'''Programa47.py'' 224. 2'Probleminhas''''Existem'linguagens'que'no'tem'o'>po'lista'como'o'Python'$''a)'Em'C,Java,Pascal,etc''os'vetores'no'so'vistos'como'listas'de'tamanho'varivel.''b)'As'vezes'pode'ser'complicado'inserir'um'registro'(objeto)'como'elemento'de'um'vetor.'*''Uma'soluo'para'a'criao'de'bancos'de'dados'como'estes'que'fizemos'seria'u>lizar'listas'encadeadas.''Vamos'ver'....'''''*'Em'python'basta'usar'o'append(obj)'' 225. Listas'Encadeadas''''Idia:''Um'conjunto'de'registros,'alm'de'conterem'seus'dados'normais,'possuem'tambm'referncias'para'outros'registros.''Ex.''class'Aluno:''''proximo'='""''''def'__init__(self,'nome="",endereco="",email=""):'''''''self.nome'='nome'''''''self.endereco'='endereco'''''''self.email'='email''''def'__str__(self):'''''''return'"nAluno:'"+self.nome+"nEnd:'"+self.endereco+"nenmail:"+self.e$'#'fim'da'classe''' 226. Listas'Encadeadas''''Criando'algumas'variveis'de'trabalho:''primeiro'='Aluno()'''#'Pode'isso?'Cad'os'argumentos?'atual'='primeiro'ul>mo'='primeiro'''Qual'a'u>lidade'destas'varveis?'''''''' 227. Listas'Encadeadas'(Simples)''''obj1"Nome,'End,'Tel'Proximo'=''obj3"Nome,'End,'Tel'Proximo'=''Primeiro'obj2"Nome,'End,'Tel'Proximo'=''l>mo'Atual' 228. Listas'Encadeadas'(Simples)''''Inserindo"elementos"na"lista:"'if'escolha'=='"1":'''''''''''''''''os.system("clear")'''''''''''''''''nome'='raw_input("Digite'o'nome'do'aluno'")'''''''''''''''''end'='raw_input("Digite'o'endereco'do'aluno'")'''''''''''''''''mail'='raw_input("Digite'o'enmail'do'aluno'")'''''''''''''''''obj'='Aluno(nome,end,mail)'''''''''''''''''if'primeiro.nome'=='"":'''''''''''''''''''''''''primeiro'='obj'''''''''''''''''''''''''ul>mo'='primeiro'''''''''''''''''else:'''''''''''''''''''''''''ul>mo.proximo'='obj'''''''''''''''''''''''''ul>mo'='ul>mo.proximo'''' 229. Listas'Encadeadas'(Simples)''''Imprimindo"a"lista"inteira:"'elif'escolha'=='"2":'''''''''''''''''atual'='primeiro'''''''''''''''''while'True:'''''''''''''''''''''''''print'atual'''''''''''''''''''''''''if'atual.proximo'=='"":'''''''''''''''''''''''''''''''''break'''''''''''''''''''''''''else:'''''''''''''''''''''''''''''''''atual'='atual.proximo'''''''''''''''''raw_input("Tecle'enter'para'con>nuar'")''''Programa48.py'' 230. Listas'Encadeadas''Exerccio''''Pesquisa"Linear"na"Lista."""Dado"um"nome"(pedro"por"exemplo)""encontrar"seu"endereo.""Programa49.py""E"se"...."""Eu"quiser"ordenar"a"lista?"Qual"o"mtodo"mais"rpido?"(Exerccio"Proposto)""' 231. Sempre'em'Frente....''''Ligando"o"fim"de"uma"lista"ao"incio"da"outra:"Lista"circular."Lista"circular"com"tamanho"fixo:"buffer"circular."*"""""""""""""obj1"Proximo'=''A'vc'de'tentar'.....'""*"Muito"usados"em"transmisses"mul@mdia"""'obj3"Proximo'=''obj2"Proximo'='' 232. Duplo'encadeamento''''Ligando"o"fim"de"uma"lista"ao"incio"da"outra:"Lista"circular."Lista"circular"com"tamanho"fixo:"buffer"circular."*"""""""""""""obj1"Anterior'='''Prximo'=''A'vc'de'tentar'.....'"""'obj3"Anterior='Prximo'=''obj2"Anterior='Prximo'='' 233. Fim'da'Aula'8'''' 234. Aula'9''Estruturas'de'Dados'Avanadas'''' 235. Aula'9''Estruturas'de'Dados'Avanadas''''Probleminhas'com'listas'ligadas:''n Demora'em'encontrar'um'elemento'especfico'(Soluo''ordenar?)'Problema'com'lista'ordenada:''n Demora'na'insero'de'novos'elementos'(Encontrar'a'posio,'abrir'espao'e'inserir'o'elemento'Detalhe:'uma'lista'encadeada'no'permite'acesso'direto'a'um'elemento'mesmo'que'seja'ordenada.'''Algum'ajuda'?.....''Novas'estruturas'de'dados.''' 236. 'rvores''''''Raiz'Nvel'0'Nvel'1'N'Pai'Nvel'2' Folhas'N'Filho'Caracters>ca':'Apenas'um'caminho'do'n'raiz'para'qualquer''outro.'Caso'existam'mais'caminhos'tratanse'de'um'grafo.'' 237. Exemplo'de'Grafo''''''Uma'rvore''um'>po'especial'de'grafo.' 238. 'rvores'Binrias''''''30'50'90'20' 40' 85' 99' Quando'os'ns'tem'no'mximo'dois'filhos'tratanse'de'uma'rvore'binria'ou'rvore'de'pesquisa'binria.'(binary'search''tree).' Os'dados'so'associados'aos'ns'e'os'ns'esquerdos'tem'valores'menores'que'os'pais'e'os'direitos'so'superiores.' Dependendo'da'ordem'como'os'ns'so'visitados'eles'listam'os'dados'naturalmente'ordenados.'' 239. 'rvores'Binrias''''''Para'trabalhar'com'rvore'binrias.''Passo'1:'Representar'os'ns.''class'Noh: '#definio'da'classe'N''dado,esquerdo,direito'='0,None,None''def'__init__(self,'dado):'' 'self.esquerdo'='None'' 'self.direito'='None'' 'self.dado'='dado''def'__str__(self):'' 'return'"{",str(dado),"}"''#'fim'da'classe'Noh' 240. 'rvores'Binrias'''''''Para'trabalhar'com'rvore'binrias.''Passo'2:'A'rvore'(Esqueleto)'class'ArvoreBinaria:' ' ' ' '#'Definio'da'classe'rvore''def'__init__(self):''def'criaNoh(self,'dado): ' '#'cria'um'novo'noh'e'o'retorna''def'insere(self,'raiz,'dado): '#'insere'um'novo'dado''def'apaga(self,raiz,dado):''def'pesquisa(self,'raiz,'valor):'#'Pesquisa'um'valor'na'rvore''def'menorValor(self,'raiz):'#'entra'no'ramo'esquerdo'e'procura'o'menor'valor''def'profundidadeMaxima(self,'raiz):''def'tamanho(self,'raiz):''def'imprimirArvore(self,'raiz):'#'imprime'a'rvore''def'imprimeNohs(self,raiz):'' '' 241. 'rvores'Binrias'''''''Para'trabalhar'com'rvore'binrias.''Passo'3:'Mtodo'de'inicializao'da'classe'class'ArvoreBinaria:' ' ' ' '#'Definio'da'classe'rvore''def'__init__(self):'' 'self.raiz'='None' '''def'criaNoh(self,'dado): ' ' '#'cria'um'novo'noh'e'o'retorna'' 'return'Noh(dado) ' ' ' '' 242. 'rvores'Binrias'''''''Passo'4:'Definindo'a'funo'de'pesquisa'''30'50'90'20' 40' 85' 99'37' 44'Valor'a'procurar=37'37da(self,'raiz):'#'imprime'a'rvore'inver>da'' 'if'raiz'=='None:'' ' 'pass'' 'else:'' ' 'self.imprimeArvoreInver>da(raiz.direito)'' ' 'print'"{",raiz.dado,"}",'' ' 'self.imprimeArvoreInver>da(raiz.esquerdo)''' 248. 'rvores'Binrias'''''''Passo'8':''Mostrando'a'topologia'da'rede'.'Imprimindo'os'ns'''def'imprimeNohs(self,raiz):'' 'if'raiz'=='None:'return'' 'a'='raiz.dado'' 'if'raiz.esquerdo'!='None:'' ' 'b'='raiz.esquerdo.dado'' 'else:'' ' 'b'='None'' 'if'raiz.direito'!='None:'' ' 'c'='raiz.direito.dado'' 'else:'' ' 'c'='None'' 'print'"{",a,"[",b,",",c,"]","}",'' 'self.imprimeNohs(raiz.esquerdo)'' 'self.imprimeNohs(raiz.direito) ''Programa50.py" 249. 'rvores'Binrias'''''''Passo'9:''Visitando'a'rvore'em'prnordem'x'psnordem'(Aplicaes)'''PrnOrdem:'1.'Visitar'o'n'2.'Visitar'recursivamente'os'ns'do'lado'esquerdo'3.'Visitar'recursivamente'os'ns'do'lado'direito '''PsnOrdem'1. Visitar'recursivamente'os'ns'do'lado'esquerdo'2. Visitar'recursivamente'os'ns'do'lado'direito'3. Visitar'os'ns''' 250. 'rvores'Binrias'''''''Imagine'uma'rvore'representando'uma'expresso'algbrica'conforme'abaixo''Expresso''A'*'('B+'C)''Visitando'a'rvore''podemos'ter:''''''Emnordem:''A'*'(B'+'C)'':'interfixada'(parenteses'por'sua'conta)'Prnordem'*A+BC':' 'prnfixada'(Nunca'precisa'de'parnteses)'PsnOrdem'ABC+*:'psnfixada'(Facilita'o'uso'de'pilhas''para'armazenar'rvores)'''''A'*'+'B' C' 251. 'rvores'Binrias'''''''Passo'10:''Encontrando'o'mnimo'e'o'mximo'em'uma'rvore:'''30'50'90'20' 40' 85' 99'37' 44'Caminho'para'o'mnimo'Caminho'para'o'mximo' 252. 'rvores'Binrias'''''''Passo'10:''Encontrando'o'mnimo'e'o'mximo'em'uma'rvore:''def'menorValor(self,'raiz):'#'entra'no'ramo'esquerdo'e'procura'o'menor'valor'' 'while(raiz.esquerdo'!='None):'' ' 'raiz'='raiz.esquerdo'' 'return'raiz.dado'''''' 253. 'rvores'Binrias'''''''Passo'11:''Deletando'ns''Trs'casos'a'considerar:''1. O'n'a'ser'apagado''uma'folha'(No'tem'filhos)'2. O'n'tem'um'filho'3. O'n'tem'dois'filhos''Os'dois'primeiros'casos'so'mais'simples,'o'segundo'mais'complexo.'''' 254. 'rvores'Binrias'''''''Passo'11:''Deletando'ns''Caso'1:'O'n''uma'folha'30'50'90'20' 40' 85' 99'37' 44' 255. 'rvores'Binrias'''''''Passo'11:''Deletando'ns''Caso'1:'Removemos'a'conexo''e'o'sistema'se'encarrega'de'apagar'a'memria'30'50'90'20' 40' 85' 99'37'44'Obs:''Se'a''sua'linguagem'no'possui'coleta'de'lixo'ser'preciso'destruir'explicitamente'o'objeto''Programa51.py""esquerdo"="None" 256. 'rvores'Binrias'''''''Passo'11:''Deletando'ns''Caso'2:'O'n'tem'um'filho''"30'50'90'20' 40' 85' 99'44' 257. 'rvores'Binrias'''''''Passo'11:''Deletando'ns''Caso'2:'O'n'tem'um'filho''Programa52.py"30'50'90'85' 99'40'20'44' 258. 'rvores'Binrias'''''''Passo'11:''Deletando'ns''Caso'3:'O'n'tem'dois'filhos'30'50'90'20' 40' 85' 99'37' 44' 259. 'rvores'Binrias'''''''Passo'11:''Deletando'ns''SOLUO"ERRADA"30'50'90'85' 99'40'20'37' 44' 260. 'rvores'Binrias'''''''Passo'11:''Deletando'ns'Soluo:'Subs>tuir'o'n'por'seu'sucessor'30'50'90'20' 40' 85' 99'37' 44'Seguir'pela'direita'e'no'primeiro'n'mudar'a'esquerda'e'prosseguir'at'o'n'que'no'tenha'filhos'a'esquerda.''ele.' 261. 'rvores'Binrias'''''''Passo'11:''Deletando'ns'Soluo:'Subs>tuir'o'n'por'seu'sucessor'30'50'90'37'20' 40' 85' 99'44' 262. 'rvores'Binrias'''''''Passo'11:''Deletando'ns'Caso'par>cular:'O'sucessor'est''direita'(No'possui'filhos''esquerda)'30'50'90'20' 40' 99'37' 44'Desloca'a'subnrvore'inteira' 263. 'rvores'Binrias'''''''Passo'11:''Deletando'ns'Funo'Sucessor:'def'sucessor(self,noh):'' 'paiSucessor'='noh'' 'sucessor'='noh'' 'atual'='noh.direito'' 'while'atual'!='None:'' ' 'paiSucessor'='sucessor'' ' 'sucessor'='atual'' ' 'atual'='atual.esquerdo'' 'if'sucessor'!='noh.direito:'#'refazendo'as'conexes'' ' 'paiSucessor.esquerdo'='sucessor.direito'' ' 'sucessor.direito'='noh.direito'' 'return'sucessor''' 264. 'rvores'Binrias'''''''Passo'11:''Deletando'ns'Finalizando'a'funo'apagar'Programa53.py"'else:'' ' 'suc'='sucessor(atual)'' ' 'if'atual'=='raiz:'' ' ' 'raiz'='suc'' ' 'elif'ehFilhoEsquerdo:'' ' ' 'nohPai.esquerdo'='suc'' ' 'else:'' ' ' 'nohPai.direito'='suc'' ' 'suc.esquerdo'='atual.esquerdo'#'sucessor'no'tem'filho'a'esquerda'' 'return'True''' 265. 'rvores'Binrias'''''''Representando'como'um'Vetor.''Esquerdo(i)'='2*'i'+'1''Direito(i)'='2'*'1'+'2''Pai(i)'(in1)/2''Exerccio':'Converter'da'forma'hierrquica'para'a'forma'vetorial.' 266. 'rvores'Binrias'''''''Eficincia':'Operaes'normais'na'ordem'O(log'N)'Dificuldade'de'trabalho'com'valores'no'preenchidos.'Tratar'valore'duplicados.'Nos'exemplos'so'inseridos'no'lado'direito.'''' 267. 'rvores'Binrias'n'Exerccios'''''''1. A'par>r'do'programa'desenvolvido'aqui,'desenvolva'um'caso'especial'de'rvore'binrio'que'recebe'caracteres'e'operadores'aritm>cos'(+,n,*,etc).'Os'caracteres'devem'ficar'nas'folhas'e'os'simbolos'nos'ns'intermedirios.'2. Pesquise'na'internet'o'conceito'de'codificao'Huffman'e'implementeno''''' 268. Fim'da'Aula'9'''''' 269. Aula'10''rvores'VermelhonPretas'''(Red'Black'Trees)'''''' 270. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Principal'problema'com'rvores'binrias:''n Quando'os'dados'so'preenchidos'na'forma'j'ordenada'ou'inversamente'ordenada'ela'se'torna'uma'lista'ligada'simples'(desbalanceada)'com'complexidades'de'O(N).''30'50'90'85' 271. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Soluo:'balancear'a'rvore'na'insero.'Cada'n'deve'possuir'aproximadamente'o'mesmo'nmero'de'descendentes'dos'dois''lados.''Como?:'Usar'um'conjunto'de'regras'que'constroem'o'que'ficou'conhecido'como'rvore''vermelhonpretas'ou'rubronnegras'(como'queira).''Regras:''1. Os'ns'so'coloridos'(Vermelho'ou'Preto)'(Se'vc'no'gostar'pode'usar'amarelonazul,'verdenrosa,'etc).'2. A'raiz''sempre'preta.'3. Se'um'n''vermelho,'seu'filho''preto(O'contrrio'no'''vlido)'4. Todos'os'caminhos'at'as'folhas'ou'um'filho'nulo'(None)'devem'ter'o'mesmo'nmero'de'ns'pretos'(Comprimento'de'pretos)''S''aceita'insero'de'novos'elementos'na'rvore'se'as'regras'acima'forem'sa>sfeitas.'''' 272. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''E'quando'a'regra''violada:'1. Trocar'as'cores'dos'ns.'2. Fazer'rotaes.''Raiz'Preta'(ok)'Vermelhos'sem'filhos'(folhas)'(ok)'Todos'os'caminhos'at'as'folhas'possuem'dois'ns'pretos'(ok)'OBS:'Ao'se'seguir'as'regras,'a'rvore''man>da'naturalmente'balanceada.' 273. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Inserindo'elementos.'Passo'a'Passo.'Passo'1':'criarArvore(50)'Passo'2':'inserirNoh(75)'Ns'so'inseridos'em'vermelho.'No'muda'comprimento'de'pretos,'diminuindo'a'chance'de'ter'problemas'em'seqncia.'''Passo'3':'inserirNoh(25)' 274. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Passo'3':'inserirNoh(25)'Primeiro'Problema:'Passo'4':'inserirNoh(35):''35''Posio ''='Filho'Direito'do'25.''Cor ' ''='Vermelho:'Resultado:'Viola'regra'3'Soluo'(1)': ''Mudar'a'cor'do'n'25'"'Mudar'o'comprimento'de'preto'"'Mudar''a'cor'do'75'tb.''' 275. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Passo'4':'inserirNoh(35):'''Posio ''='Filho'Direito'do'25.''Cor ' ''='Vermelho:'Resultado:'Viola'regra'3'Soluo'(1)': ''Mudar'a'cor'do'n'25'"'Mudar'o'comprimento'de'preto'"'Mudar''a'cor'do'75'tb.'''Passo'4':'inserirNoh(35):'''Soluo(2):'Rotao'Obs:'A'cor'do'25'deve'mudar'para'Preto.'' 276. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Passo'4':'inserirNoh(35):''''''Soluo(2):'Rotao'Obs:'A'cor'do'25'deve'mudar'para'Preto.'''''''Finalmente'podemos'inserir'o'35'sem'violar'as'regras.''' 277. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Limitando'o'desbalanceamento:''Imagine'a'rvore'ao'lado.''Inserir'um'elemento'filho'do'35:''Se'for'vermelho'viola'a'regra'3'Se'for'preto'viola'a'regra'4'Se'mudar'a'cor'do'35'tambm'violamos'a'regra'4'.....''Concluso:'As'regras'RBT'(RednBlacknTree)'impedem'rvores'com'dois'ou'mais'nveis'de'desbalanceamento.'''' 278. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''DESAFIO:'Vc'conseguiria'balancear'a'rvore'abaixo?'' 279. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Filhos'nulos'(Null'/'Nil'/'None)':''Aqueles'filhos'que'o'n'deveria'ter,'mas'no'tem.'Complementar'ao'filho'direito'ou'esquerdo.'Filhos'Nulos'A'rvore'acima'fere'a'regra'4.'Comprimento'de'pretos''1'Comprimento'de'pretos''2' 280. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Detalhes'sobre'rotaes:'' Rotao''direita:'o'n'(topo)'deve'ter'filha''esquerda' Rotao''esquerda:'o'n'(topo)'deve'ter'filho''direita'Obje>vos:'' Levantar'alguns'ns'e'rebaixar'outros'de'forma'a'balancear'a'rvore' Assegurar'que'as'caracters>cas'de'rvores'binrias'no'foram'violadas'''''' 281. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Detalhes'sobre'rotaes:''Considere'a'rvore'abaixo.''''''''Neto'de'fora' Neto'de'dentro'Qual'seria'o'resultado'de'rotacionar'o'25'(topo'50)'''direita?''O'Filho'direito'do'25'passar'a'ser'50,'mas'37'no'pode'ser'filho'esquerdo.'A'soluo''ento'reconectar'o'37'a'outro'n'' 282. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Detalhes'sobre'rotaes:''Considere'a'rvore'abaixo.''''''''37'agora''filho'de'50.'Tornounse'>o'de'sua'posio'anterior'N'crossover!'(Neto'de'dentro)' 283. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''E'quando'temos'subnrvores'inteiras:'Rotao''direita'do'50'(topo)''Observe'o'deslocamento'da'subnrvore' 284. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Inserindo'ns.''Seja'X'um'n'especfico,'Seja'P'o'n'pai'de,'Seja'G'o'n'av'de'X.''Roteiro.''1. Descer'na'rvore'procurando'o'ponto'de'insero'2. Se'vc'encontrar'um'n'preto'seguido'de'dois'ns'vermelhos.'Troque'as'cores'do'filho'com'o'pai'(Flip).'3. Se'o'flip'provocar'uma'seqncia'de'vermelhos'(viola'regra'3)'faa'uma'simples'ou'dupla'rotao'em'P''dependendo'se'o'X''neto'interno'ou'externo1'4. Insira'o'n.'Aps'a'insero'houver'quebra'de'regras:'rotacione.'1''Veremos'mais'na'frente'como'faznlas.' 285. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Antes'de'Inserir:'Descer'na'rvore'procurando'o'ponto'de'insero'e'realizar'Flips'no'caminho''Antes' Depois'Esta'mudana'no'afeta'o'comprimento'de'pretos,'mas'pode'induzir''a''uma'seqncia'de'vermelhos'Se'esta'operao'for'realizada'com'a'raiz,'esta'preserva'a'cor'preta.' 286. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Aps'a'insero'as'regras'podem'estar'violadas.'As'posies'de'insero'em'relao'ao'pai'e'av'so:''GPXGXPGPXGXPNeto'de'Fora'(Filho'Esquerdo)'Neto'de'Dentro'(Filho'Direito)'Neto'de'Dentro'(Filho'Esquerdo)'Neto'de'Fora'(Filho'Direito)' 287. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Trs'principais'possibilidades'com'relao's'cores:''GPXGXPa)'P''preto' b)'P''vermelho''X'est'fora.'GXPc)'P''vermelho''X'est'dentro.' 288. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Caso'1':''P''preto.''Caminho'Livre.'Nenhum'conflito'vermelhonvermelho'e'nem'h'mudana'na'profundidade'de'pretos.'Podemos'inserir'nosso'n'(sempre'vermelho)'''GPXa)'P''preto' 289. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Caso'2:''P''vermelho'e'X''um'neto'de'fora.'Precisamos'de'uma'rotao'simples'e'algumas'mudanas'de'cores.''Imagine'a'rvore'gerada'na'seqncia'de'inseres:'50n25n75n12n6.'Nosso'n'de'insero''o'6'''O'que'fazer?'''' 290. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Caso'2:''P''vermelho'e'X''um'neto'de'fora.'Precisamos'de'uma'rotao'simples'e'algumas'mudanas'de'cores.''Passo'1:'Trocar'a''cor'do'av.'' 291. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Caso'2:''P''vermelho'e'X''um'neto'de'fora.'Precisamos'de'uma'rotao'simples'e'algumas'mudanas'de'cores.''Passo'2:'Trocar'a''cor'do'pai.'' 292. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Caso'2:''P''vermelho'e'X''um'neto'de'fora.'Precisamos'de'uma'rotao'simples'e'algumas'mudanas'de'cores.'''Passo'3:'Rotacionar'com'o'avo'no'topo'na'direo'que'levante'o'6''(Direita)'''A'rvore'agora'est'RB'Correta'e'melhor'balanceada' 293. Aula'10''rvores'VermelhonPretas'(RubronNegras?)''''''Caso'3''P''vermelho'e'X''neto'de'dentro''Vamos'necessitar'de'duas'rotaes''e'algumas'mudanas'de'cores.''Considere'a'rvore'abaixo'como'resultado'da'insero'da'se