Computacao Numérica

506 visualizações

Publicada em

Apresentação sobre Computação Numérica, apresentada no 1º semestre de 2015, como um dos requisitos da disciplina de Teoria da Computação, no Mestrado em Ciência da Computação, pela Universidade Federal de Lavras (UFLA). Disciplina ministrada pelo professor Dr. Sanderson L. Gonzaga de Oliveira.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
506
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
3
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Computacao Numérica

  1. 1. Fernando Simeone Computação Numérica 1 1 1 1 1… …
  2. 2. Sumário 1. Cálculo de Funções 2. Computação Numérica 3. Operações Sequenciais 4. Criando uma Linguagem de Programação 5. Considerações Finais
  3. 3. Cálculo de Funções1
  4. 4. Máquina de Turing Reconhecimento de Linguagens MT = (Q, Σ, Γ, δ, q0) q0 qs qn q1 q2 B a c c b B B B B B B… …Entrada:
  5. 5. Máquina de Turing Reconhecimento de Linguagens MT = (Q, Σ, Γ, δ, q0) q0 qs qn q1 q2 B a c c b B B B B B B… … x Não aceita ✓ Aceita Entrada:
  6. 6. Máquina de Turing Cálculo de Funções MT = (Q, Σ, Γ, δ, q0, qf) q0 qf Fim da computação B a c c b B B B Entrada: M
  7. 7. Máquina de Turing Cálculo de Funções MT = (Q, Σ, Γ, δ, q0, qf) q0 qf Fim da computação B a c c b B B B Entrada: B a a B B B B B Resultado: M
  8. 8. Máquina de Turing Cálculo de Funções (Turing computáveis) MT = (Q, Σ, Γ, δ, q0, qf) q0 qf Fim da computação B a c c b B B B Entrada: B B B B B B B B Resultado: q1 q2 (B, B, ➞) (B, B, ➞) (b, b, ➞) (b, b, ➞) (a, a, ➞) (a, a, ➞) (B, B, ➞) (b, B, ➞) (a, B, ➞)
  9. 9. Máquina de Turing Cálculo de Funções MT = (Q, Σ, Γ, δ, q0, qf) computa f: ∑* ⟶ ∑* q0 qfq1 q2 (B, B, ➞) (B, B, ➞) (b, b, ➞) (b, b, ➞) (a, a, ➞) (a, a, ➞) (B, B, ➞) (b, B, ➞) (a, B, ➞)
  10. 10. Máquina de Turing Cálculo de Funções MT = (Q, Σ, Γ, δ, q0, qf) computa f: ∑* ⟶ ∑* q0 qfq1 q2 (B, B, ➞) (B, B, ➞) (b, b, ➞) (b, b, ➞) (a, a, ➞) (a, a, ➞) (B, B, ➞) (b, B, ➞) (a, B, ➞) • Apenas uma transição partindo do estado q0: δ(q0,B) = [qi, B, ➞];
  11. 11. Máquina de Turing Cálculo de Funções MT = (Q, Σ, Γ, δ, q0, qf) computa f: ∑* ⟶ ∑* q0 qfq1 q2 (B, B, ➞) (B, B, ➞) (b, b, ➞) (b, b, ➞) (a, a, ➞) (a, a, ➞) (B, B, ➞) (b, B, ➞) (a, B, ➞) • Apenas uma transição partindo do estado q0: δ(q0,B) = [qi, B, ➞]; • Não há transições que retornam para q0;
  12. 12. Máquina de Turing Cálculo de Funções MT = (Q, Σ, Γ, δ, q0, qf) computa f: ∑* ⟶ ∑* q0 qfq1 q2 (B, B, ➞) (B, B, ➞) (b, b, ➞) (b, b, ➞) (a, a, ➞) (a, a, ➞) (B, B, ➞) (b, B, ➞) (a, B, ➞) • Apenas uma transição partindo do estado q0: δ(q0,B) = [qi, B, ➞]; • Não há transições que retornam para q0; • Não há transições na forma δ(qf,B);
  13. 13. Máquina de Turing Cálculo de Funções MT = (Q, Σ, Γ, δ, q0, qf) computa f: ∑* ⟶ ∑* q0 qfq1 q2 (B, B, ➞) (B, B, ➞) (b, b, ➞) (b, b, ➞) (a, a, ➞) (a, a, ➞) (B, B, ➞) (b, B, ➞) (a, B, ➞) • Apenas uma transição partindo do estado q0: δ(q0,B) = [qi, B, ➞]; • Não há transições que retornam para q0; • Não há transições na forma δ(qf,B); • A MT com entrada u para com configuração q0 BvB se f(u) = v;
  14. 14. Máquina de Turing Cálculo de Funções MT = (Q, Σ, Γ, δ, q0, qf) computa f: ∑* ⟶ ∑* q0 qfq1 q2 (B, B, ➞) (B, B, ➞) (b, b, ➞) (b, b, ➞) (a, a, ➞) (a, a, ➞) (B, B, ➞) (b, B, ➞) (a, B, ➞) • Apenas uma transição partindo do estado q0: δ(q0,B) = [qi, B, ➞]; • Não há transições que retornam para q0; • Não há transições na forma δ(qf,B); • A MT com entrada u para com configuração q0 BvB se f(u) = v; • A MT não pára se f(u) for indefinido.
  15. 15. Máquina de Turing Lendo argumentos e escrevendo resultado
  16. 16. Máquina de Turing Lendo argumentos e escrevendo resultado B a b B B B B B B B B B b a B B • f(ab) = ba Entrada Resultado
  17. 17. Máquina de Turing Lendo argumentos e escrevendo resultado B a b B B B B B B B B B b a B B • f(ab) = ba Entrada Resultado B a b B c c B b a c B B a b B B • f(ab, cc, bac) = ab Entrada Resultado
  18. 18. Máquina de Turing Lendo argumentos e escrevendo resultado B a b B B B B B B B B B b a B B • f(ab) = ba Entrada Resultado B a b B c c B b a c B B a b B B • f(ab, cc, bac) = ab Entrada Resultado B a b B B b a c B B B B B B B B • f(ab, λ, bac) = λ Entrada Resultado
  19. 19. Cálculo de Funções Exemplo: concatenando palavras q0 q1 (B, B, ➞) q2 q5 q3 q4 q6 qf (b, b, ➞) (a, a, ➞) (B, B, ➞) (a, B, ←) (B, a, ➞) (b, B, ←) (B, b, ➞) (B, B, ➞) (B, B, ←) (B, B, ←) (b, b, ←) (a, a, ←) B a b B b a B Entrada Resultado B a b b a B B
  20. 20. Computação Numérica2
  21. 21. Funções Numéricas
  22. 22. Funções Numéricas • f: N × N × N × … × N ⟶ N
  23. 23. Funções Numéricas • f: N × N × N × … × N ⟶ N • Exemplos
  24. 24. Funções Numéricas • f: N × N × N × … × N ⟶ N • Exemplos • sq(n) = n2
  25. 25. Funções Numéricas • f: N × N × N × … × N ⟶ N • Exemplos • sq(n) = n2 • db(n) = 2n
  26. 26. Funções Numéricas • f: N × N × N × … × N ⟶ N • Exemplos • sq(n) = n2 • db(n) = 2n • add(x, y) = x + y
  27. 27. Representação Como representar números na fita
  28. 28. Representação • n = 1n+1 Como representar números na fita
  29. 29. Representação • n = 1n+1 • 0 = 1 Como representar números na fita
  30. 30. Representação • n = 1n+1 • 0 = 1 • 1 = 11 Como representar números na fita
  31. 31. Representação • n = 1n+1 • 0 = 1 • 1 = 11 • 2 = 111 Como representar números na fita
  32. 32. Representação Como representar números na fita
  33. 33. Representação Como representar números na fita B 1 1 1 B B B B B B B B 1 1 B B • f(2) = 1 Entrada Resultado
  34. 34. Representação Como representar números na fita B 1 1 1 B B B B B B B B 1 1 B B • f(2) = 1 Entrada Resultado B 1 1 1 1 B 1 B B B B B 1 1 1 B • f(3, 0) = 2 Entrada Resultado
  35. 35. Cálculo Funções Numéricas Sucessor q0 q1 (B, B, ➞) qf (1, 1, ➞) (B, 1, ➞) (1, 1, ←) B 1 1 1 B B B Entrada Resultado B 1 1 1 1 B B S: • s(n) = n + 1
  36. 36. Cálculo Funções Numéricas Zero q0 q1 (B, B, ➞) qf (1, 1, ➞) (B, B, ←) B 1 1 1 B B B Entrada Resultado B 1 B B B B B Z: • z(n) = 0 q2 (1, B, ←) (B, B, ➞) (B, 1, ←) q3
  37. 37. Cálculo Funções Numéricas Adição q0 q1 (B, B, ➞) qf (1, 1, ➞) (B, 1, ➞) Entrada Resultado B 1 1 1 1 B B A: • a(n, m) = n + m q2 (1, 1, ➞) (B, B, ←) (1, B, ←) q3 (1, B, ←) q4 (1, 1, ←) B 1 1 B 1 1 1 B
  38. 38. Cálculo Funções Numéricas Decremento q0 q1 (B, B, ➞) qf (1, 1, ➞) Entrada Resultado B 1 1 B B B B D: • a(n) = n - 1 q2 (1, 1, ➞) (1, 1, ➞) (B, B, ←) q3 (B, B, ←) q4 (1, 1, ←) B 1 1 1 B B B B (1, B, ←)
  39. 39. Operações Sequenciais3
  40. 40. Operações Sequenciais Com máquinas de Turing qs,0 qs,1 (B, B, ➞) qs,f (1, 1, ➞) (B, 1, ➞) (1, 1, ←) S: qz,0 qz,1 (B, B, ➞) qz,f (1, 1, ➞) (B, B, ←) Z: qz,2 (1, B, ←) (B, B, ➞) (B, 1, ←) qz,3 Zero Sucessor z(n) = 0 s(n) = n + 1
  41. 41. Operações Sequenciais Com máquinas de Turing qs,0 qs,1 (B, B, ➞) qs,f (1, 1, ➞) (B, 1, ➞) (1, 1, ←) S: qz,0 qz,1 (B, B, ➞) qz,f (1, 1, ➞) (B, B, ←) Z: qz,2 (1, B, ←) (B, B, ➞) (B, 1, ←) qz,3 Zero Sucessor z(n) = 0 s(n) = n + 1
  42. 42. Operações Sequenciais Com máquinas de Turing qs,1 (B, B, ➞) qs,f (1, 1, ➞) (B, 1, ➞) (1, 1, ←) qz,0 qz,1 (B, B, ➞) qz,f = qs,0 (1, 1, ➞) (B, B, ←) qz,2 (1, B, ←) (B, B, ➞) (B, 1, ←) qz,3 s( z(n) ) = 0 + 1 = 1
  43. 43. Operações Sequenciais Com máquinas de Turing qs,1 (B, B, ➞) qs,f (1, 1, ➞) (B, 1, ➞) (1, 1, ←) qz,0 qz,1 (B, B, ➞) qz,f = qs,0 (1, 1, ➞) (B, B, ←) qz,2 (1, B, ←) (B, B, ➞) (B, 1, ←) qz,3 s( z(n) ) = 0 + 1 = 1
  44. 44. Operações Sequenciais Macros * f(n) = s( z(n) ) Z * S *F:
  45. 45. Operações Sequenciais Macros * f(n) = s( z(n) ) Z * S * • Nem todas as computações irão iniciar com a cabeça de leitura na posição 0 da fita; F:
  46. 46. Operações Sequenciais Macros * f(n) = s( z(n) ) Z * S * • Nem todas as computações irão iniciar com a cabeça de leitura na posição 0 da fita; F:
  47. 47. Operações Sequenciais Macros * f(n) = s( z(n) ) Z * S * • Nem todas as computações irão iniciar com a cabeça de leitura na posição 0 da fita; • Toda computação deve iniciar lendo o símbolo branco (B) da fita. F:
  48. 48. Macros Notação utilizada B n1 B n2 B … B nk B
  49. 49. Macros Notação utilizada B n1 B n2 B … B nk B k-ésimo número na fita" (sequência de 1s)
  50. 50. Macros Notação utilizada B n1 B n2 B … B nk B k-ésimo número na fita" (sequência de 1s) B 1 1 B 1 1 1 B B Exemplo: { { n1 n2
  51. 51. Macros Exemplo MRk B n1 B n2 B … B nk B Move Right B n1 B n2 B … B nk B
  52. 52. Macros Exemplo q0 q1 (B, B, ➞) qf (1, 1, ➞) (B, B, ➞) MR2: (1, 1, ➞) MRk B n1 B n2 B … B nk B Move Right B n1 B n2 B … B nk B
  53. 53. Macros Exemplo q0 q1 (B, B, ➞) qf (1, 1, ➞) (B, B, ➞) MR2: (1, 1, ➞) MRk B n1 B n2 B … B nk B Move Right B n1 B n2 B … B nk B q0 q1 (B, B, ➞) qf (1, 1, ➞) (B, B, ➞) MRk: (1, 1, ➞) (B, B, ➞) qk-1 (1, 1, ➞) … (B, B, ➞)
  54. 54. Macros MRk B n1 B n2 B … B nk B Move Right B n1 B n2 B … B nk B
  55. 55. Macros MRk B n1 B n2 B … B nk B Move Right B n1 B n2 B … B nk B MLk B n1 B n2 B … B nk B Move Left B n1 B n2 B … B nk B
  56. 56. Macros MRk B n1 B n2 B … B nk B Move Right B n1 B n2 B … B nk B MLk B n1 B n2 B … B nk B Move Left B n1 B n2 B … B nk B FR B B B n1 B n2 B B Find Right B B B n1 B n2 B B
  57. 57. Macros MRk B n1 B n2 B … B nk B Move Right B n1 B n2 B … B nk B MLk B n1 B n2 B … B nk B Move Left B n1 B n2 B … B nk B FR B B B n1 B n2 B B Find Right B B B n1 B n2 B B FL Find Left B BB n1 B n2 B B B BB n1 B n2 B B
  58. 58. Macros MRk B n1 B n2 B … B nk B Move Right B n1 B n2 B … B nk B MLk B n1 B n2 B … B nk B Move Left B n1 B n2 B … B nk B FR B B B n1 B n2 B B Find Right B B B n1 B n2 B B FL Find Left B BB n1 B n2 B B B BB n1 B n2 B B Ek Erase B B B B B … B B BB n1 B n2 B … B nk B
  59. 59. Macros CPYk Copy B n1 B n2 B … B nk B B B B B … B B B B n1 B n2 B … B nk B n1 B n2 B … B nk B
  60. 60. Macros CPYk Copy B n1 B n2 B … B nk B B B B B … B B B B n1 B n2 B … B nk B n1 B n2 B … B nk B CPYk, i Copy B n1 B … B nk B B nk+i… B B B … B B B B n1 B … B nk B B nk+i… B n1 B … B nk B
  61. 61. Macros CPYk Copy B n1 B n2 B … B nk B B B B B … B B B B n1 B n2 B … B nk B n1 B n2 B … B nk B CPYk, i Copy B n1 B … B nk B B nk+i… B B B … B B B B n1 B … B nk B B nk+i… B n1 B … B nk B T B B B n1 B B B B Translate B BBn1 B B B B
  62. 62. Macros BRN Branch on zero B n1 B n2 B … B nk B B n1 B n2 B … B nk B * BRN n = 0 n > 0 * *
  63. 63. INT Interchange B n B m B B B * * E1 * T * MR1 * T * ML1 *CPY1,1 B m B n B B B Utilizando outras macros Macros
  64. 64. * * MR1 * * A * ML1 * A *CPY1 Exemplo de utilização Macros • f(n) = 3n CPY1
  65. 65. Exemplo de utilização Macros T * E1 * ML1 *q 0 (B, B, ➞) q 1 (1, 1, ➞) q 2 (B, B, ➞) E1 * T q 3 CPY1 * q 5 q 4 ML1A *MR1 *CPY1,1 q 8 q 7 q 6 * MULT: (1, X, ➞) (1, 1, ➞) (B, B, ➞) (B, B, ←) (X, B, ←) (B, B, ➞) (X, B, ←) (1, B, ←) (1, 1, ←) (1, 1, ←) (X, X, ➞)(1, X, ➞) (1, 1, ➞) (B, B, ➞)
  66. 66. Criando uma Linguagem de Programação 4
  67. 67. Arquitetura B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho home
  68. 68. B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho Início
  69. 69. INIT v Inicializa variável local B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho Início
  70. 70. INIT v Inicializa variável local HOME t Move a cabeça de leitura para home quando há t variáveis alocadas. B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho Início
  71. 71. INIT v Inicializa variável local HOME t Move a cabeça de leitura para home quando há t variáveis alocadas. LOAD v Carrega a variável B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho Início
  72. 72. INIT v Inicializa variável local HOME t Move a cabeça de leitura para home quando há t variáveis alocadas. LOAD v Carrega a variável STOR v Armazena o valor do registrador B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho Início
  73. 73. INIT v Inicializa variável local HOME t Move a cabeça de leitura para home quando há t variáveis alocadas. LOAD v Carrega a variável STOR v Armazena o valor do registrador RETURN v Limpa todas as variáveis deixando o valor de B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho Início
  74. 74. INIT v Inicializa variável local HOME t Move a cabeça de leitura para home quando há t variáveis alocadas. LOAD v Carrega a variável STOR v Armazena o valor do registrador RETURN v Limpa todas as variáveis deixando o valor de CLEAR t Limpa o valor do registrador t B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho Início
  75. 75. INIT v Inicializa variável local HOME t Move a cabeça de leitura para home quando há t variáveis alocadas. LOAD v Carrega a variável STOR v Armazena o valor do registrador RETURN v Limpa todas as variáveis deixando o valor de CLEAR t Limpa o valor do registrador t BRN L, t Vai para a instrução L se o valor do registrador t é 0. B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho Início
  76. 76. INIT v Inicializa variável local HOME t Move a cabeça de leitura para home quando há t variáveis alocadas. LOAD v Carrega a variável STOR v Armazena o valor do registrador RETURN v Limpa todas as variáveis deixando o valor de CLEAR t Limpa o valor do registrador t BRN L, t Vai para a instrução L se o valor do registrador t é 0. GOTO L Executa a instrução L. B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho Início
  77. 77. INIT v Inicializa variável local HOME t Move a cabeça de leitura para home quando há t variáveis alocadas. LOAD v Carrega a variável STOR v Armazena o valor do registrador RETURN v Limpa todas as variáveis deixando o valor de CLEAR t Limpa o valor do registrador t BRN L, t Vai para a instrução L se o valor do registrador t é 0. GOTO L Executa a instrução L. NOP “No operation” (utilizada em conjunto com a instruçõ GOTO) B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho Início
  78. 78. INIT v Inicializa variável local HOME t Move a cabeça de leitura para home quando há t variáveis alocadas. LOAD v Carrega a variável STOR v Armazena o valor do registrador RETURN v Limpa todas as variáveis deixando o valor de CLEAR t Limpa o valor do registrador t BRN L, t Vai para a instrução L se o valor do registrador t é 0. GOTO L Executa a instrução L. NOP “No operation” (utilizada em conjunto com a instruçõ GOTO) INC t Incrementa o valor do registrador t. B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho Início
  79. 79. INIT v Inicializa variável local HOME t Move a cabeça de leitura para home quando há t variáveis alocadas. LOAD v Carrega a variável STOR v Armazena o valor do registrador RETURN v Limpa todas as variáveis deixando o valor de CLEAR t Limpa o valor do registrador t BRN L, t Vai para a instrução L se o valor do registrador t é 0. GOTO L Executa a instrução L. NOP “No operation” (utilizada em conjunto com a instruçõ GOTO) INC t Incrementa o valor do registrador t. DEC t Decrementa o valor do registrador t. B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho Início
  80. 80. INIT v Inicializa variável local HOME t Move a cabeça de leitura para home quando há t variáveis alocadas. LOAD v Carrega a variável STOR v Armazena o valor do registrador RETURN v Limpa todas as variáveis deixando o valor de CLEAR t Limpa o valor do registrador t BRN L, t Vai para a instrução L se o valor do registrador t é 0. GOTO L Executa a instrução L. NOP “No operation” (utilizada em conjunto com a instruçõ GOTO) INC t Incrementa o valor do registrador t. DEC t Decrementa o valor do registrador t. ZERO t Substitui o valor do registrador t por 0. B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho Início
  81. 81. Instruções B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho home
  82. 82. Instruções B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho home HOME t MR t
  83. 83. Instruções B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho home INIT vi MR i - 1 ZR ML i - 1 HOME t MR t
  84. 84. Instruções B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho home INIT vi MR i - 1 ZR ML i - 1 HOME t MR t STOR vi, t MR t - 2 INT ML1 INT MR1 INT MR 1 ER 1 ML t - 1 ( ) ( ) t + n - i - 1 t + n - i - 1
  85. 85. Instruções B v1 B v2 B … B vk B vk+1 B vn B … B B B… B … Variáveis de entrada Variáveis locais Registradores e espaço de trabalho home INIT vi MR i - 1 ZR ML i - 1 HOME t MR t STOR vi, t MR t - 2 INT ML1 INT MR1 INT MR 1 ER 1 ML t - 1 ( ) ( ) t + n - i - 1 t + n - i - 1 LOAD vi, t ML n - i + 1 CPY 1, n - i + 1 + t MR n - i + 1
  86. 86. Exemplo INIT v2 INIT v3 HOME 3 LOAD v1,1 STOR v2,1 L1 LOAD v2,1 BRN L2,1 LOAD v1,1 INC STOR v1,1 LOAD v2,1 DEC STOR v2,1 GOTO L1 L2 LOAD v1,1 INC STOR v1,1 RETURN v1 Início • f(n) = 2n + 1
  87. 87. Considerações Finais5
  88. 88. Referências • SUDKAMP, T. A. Languages and Machines: An Introduction to the Theory of Computer Science (3rd Edition). Boston, MA, USA: Addison- Wesley Longman Publishing Co., Inc., 2005. ISBN 0321322215.
  89. 89. Obrigado Dúvidas ??

×