Ludwig Krippahl, 2008 Programação para as Ciências Experimentais 2007/8 Teórica 1.
Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.
Transcript of Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.
![Page 1: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/1.jpg)
Ludwig Krippahl, 2009
Programação para as Ciências Experimentais
2008/9
Teórica 6
![Page 2: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/2.jpg)
Ludwig Krippahl, 2009 2
Na aula de hoje...
Apresentação do trabalho prático 1
![Page 3: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/3.jpg)
Ludwig Krippahl, 2009 3
Objectivo
Acertar reacções químicas
?H2 + ?O2 ?H2O
![Page 4: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/4.jpg)
Ludwig Krippahl, 2009 4
Objectivo
Acertar reacções químicas
?H2 + ?O2 ?H2O
Reacções simples (não redox, etc) Nenhum termo com parêntesis
• Ca(NO3)2 fica CaN2O6.
![Page 5: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/5.jpg)
Ludwig Krippahl, 2009 5
Objectivo
Acertar reacções químicas
?H2 + ?O2 ?H2O
2H2 + O2 2H2O
![Page 6: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/6.jpg)
Ludwig Krippahl, 2009 6
Objectivo
Acertar reacções químicas Ficheiro de entrada com reacções
H2 + N2 = NH3
H2 + O2 = H2O
Al + HCl = AlCl3 + H2
HCl + NaOH = NaCl + H2O
2 Al + 6 HCl = 2 AlCl3 + 3 H2
NO2+ H2O = HNO3 + NO
![Page 7: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/7.jpg)
Ludwig Krippahl, 2009 7
Objectivo
Acertar reacções químicas Resultado: reacções acertadas
3H2+N2=2NH3
2H2+O2=2H2O
A reacção Al+HCl=AlCl3+H2 não foi acertada.
HCl+NaOH=NaCl+H2O
2Al+6HCl=2AlCl3+3H2
3NO2+H2O=2HNO3+NO
![Page 8: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/8.jpg)
Ludwig Krippahl, 2009 8
Partir o problema
Ler o ficheiro Estruturar cada reacção Procurar coeficientes
• Testar se acertou
Gravar resultados
![Page 9: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/9.jpg)
Ludwig Krippahl, 2009 9
Testar coeficientes
?H2 + ?O2 ?H2O
![Page 10: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/10.jpg)
Ludwig Krippahl, 2009 10
Testar coeficientes
?H2 + ?O2 ?H2O
Forma mais correcta• Resolver sistema de equações
Alguns problemas• Sistemas sub-determinados
• Identificar casos impossíveis (mal escrita)
![Page 11: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/11.jpg)
Ludwig Krippahl, 2009 11
Testar coeficientes
?H2 + ?O2 ?H2O
Geração e teste Pesquisa exaustiva
• Muito ineficiente
• Mas fácil de implementar
![Page 12: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/12.jpg)
Ludwig Krippahl, 2009 12
Testar coeficientes
?H2 + ?O2 ?H2O Vector de coeficientes:
• [1 1 1]
![Page 13: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/13.jpg)
Ludwig Krippahl, 2009 13
Testar coeficientes
?H2 + ?O2 ?H2O Vector de coeficientes:
• [1 1 1]
Estequiometria para cada elemento• H 1 * 2 + 1 * 0 = 1 * 2
• O 1 * 0 + 1 * 2 = 1 * 1
![Page 14: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/14.jpg)
Ludwig Krippahl, 2009 14
Testar coeficientes
?H2 + ?O2 ?H2O Vector de coeficientes:
• [1 1 1]
Estequiometria para cada elemento• H 1 * 2 + 1 * 0 = 1 * 2
• O 1 * 0 + 1 * 2 = 1 * 1
![Page 15: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/15.jpg)
Ludwig Krippahl, 2009 15
Testar coeficientes
?H2 + ?O2 ?H2O Vector de coeficientes:
• [1 1 1]
Codificar em vectores tb• H: [2 0 -2]
• O: [0 2 -1] (produtos a negativo)
Testar se sum(co.*el)==0
![Page 16: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/16.jpg)
Ludwig Krippahl, 2009 16
Testar coeficientes
?H2 + ?O2 ?H2O Vector de coeficientes:
• [1 1 1]
Codificar em vectores tb• H: [2 0 -2]
• O: [0 2 -1] (produtos a negativo)
• sum ([1 1 1] .* [0 2 -1]) == 1
![Page 17: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/17.jpg)
Ludwig Krippahl, 2009 17
Testar coeficientes
2H2 + O2 2H2O Vector de coeficientes:
• [2 1 2]
• H: sum([2 1 2] .* [2 0 -2])==0
• O: sum([2 1 2] .* [0 2 -1])==0
![Page 18: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/18.jpg)
Ludwig Krippahl, 2009 18
Procurar coeficientes
Testar os que vêm com a reacção• Pode já estar certa.
2 Al + 6 HCl = 2 AlCl3 + 3 H2
![Page 19: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/19.jpg)
Ludwig Krippahl, 2009 19
Procurar coeficientes
Testar os que vêm com a reacção Se não está certa, começar com [1 1 1..]
• Depois somar 1, todas as combinações
• Depois somar 2, todas as combinações,
• Depois somar 3...
![Page 20: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/20.jpg)
Ludwig Krippahl, 2009 20
Procurar coeficientes
• [1 1 1]
![Page 21: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/21.jpg)
Ludwig Krippahl, 2009 21
Procurar coeficientes
• [1 1 1]
• [2 1 1] [1 2 1] [1 1 2]
![Page 22: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/22.jpg)
Ludwig Krippahl, 2009 22
Procurar coeficientes
• 0: [1 1 1]
• 1: [2 1 1] [1 2 1] [1 1 2]
• 2: [3 1 1] [2 2 1] [2 1 2]
[2 2 1] [1 3 1] [1 2 2]
[2 1 2] [1 2 2] [1 1 3]
• 3: ...
![Page 23: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/23.jpg)
Ludwig Krippahl, 2009 23
Procurar coeficientes
• 0: [1 1 1]
• 1: [2 1 1] [1 2 1] [1 1 2]
• 2: [3 1 1] [2 2 1] [2 1 2]
[2 2 1] [1 3 1] [1 2 2]
[2 1 2] [1 2 2] [1 1 3]
• 3: ...
• Nota: há repetições. Pode-se melhorar o algoritmo evitando-as.• Fica por vossa conta, para quem quiser 20
![Page 24: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/24.jpg)
Ludwig Krippahl, 2009 24
É recursivo
Se o número a somar é 0, testa. Se o número a somar é maior que 0
• Diminui 1 no número a somar
• Para cada coeficiente• Soma 1 a esse
• Chama a mesma função com novo vector e novo número a somar, para fazer todas as combinações com esse vector, mas agora somando menos 1.
![Page 25: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/25.jpg)
Ludwig Krippahl, 2009 25
Testar
Para testar coeficientes:• Argumentos
• Vector com coeficientes
• Lista ou matriz com estequiometria dos elementos.
• { el=“H”, esteq = [2 0 -2]} { el=“O”, ....
• [2 0 -2 ; 0 2 -1]
• Devolve• Verdadeiro ou falso, conforme encontrou
![Page 26: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/26.jpg)
Ludwig Krippahl, 2009 26
Procurar
Para procurar coeficientes:• Argumentos
• Vector de partida
• Quanto somar
• Lista ou matriz com estequiometria dos elementos.
• Devolve• Verdadeiro ou falso, conforme encontrou
• Vector que estava a testar.
![Page 27: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/27.jpg)
Ludwig Krippahl, 2009 27
Procurar
[enc, vec]=procura(vini, soma, lista)
Se soma=0, vec=vini e enc=teste(vini, lista)
Caso contrário,
para cada valor em vini
v = vini com esse valor +1
[enc, vec]=procura(v,soma-1,lista)
se enc, termina tudo.
![Page 28: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/28.jpg)
Ludwig Krippahl, 2009 28
Procurar, 1ª
procura([1 1], 2, lista)
não é 0, por isso
Cria um v, [2, 1]
chama procura([2 1], 1, lista)
![Page 29: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/29.jpg)
Ludwig Krippahl, 2009 29
Procurar, 2ª
procura([2 1], 1, lista)
não é 0, por isso
Cria um v, [3, 1]
chama procura([3 1], 0, lista)
![Page 30: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/30.jpg)
Ludwig Krippahl, 2009 30
Procurar, 3ª
procura([3 1], 0, lista)
é 0, por isso testa, devolve resultado
![Page 31: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/31.jpg)
Ludwig Krippahl, 2009 31
Procurar, 2ª
procura([2 1], 1, lista)
não é 0, por isso
Cria um v, [3, 1]
chama procura([3 1], 0, lista)
Cria um v, [2 2]
chama procura([2 2], 0, lista)
![Page 32: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/32.jpg)
Ludwig Krippahl, 2009 32
Procurar, 3ª
procura([2 2], 0, lista)
é 0, por isso testa, devolve resultado
![Page 33: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/33.jpg)
Ludwig Krippahl, 2009 33
Procurar, 2ª
procura([2 1], 1, lista)
não é 0, por isso
Cria um v, [3, 1]
chama procura([3 1], 0, lista)
Cria um v, [2 2]
chama procura([2 2], 0, lista)
![Page 34: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/34.jpg)
Ludwig Krippahl, 2009 34
Procurar, 1ª
procura([1 1], 2, lista)
não é 0, por isso
Cria um v, [2, 1]
chama procura([2 1], 1, lista)
Cria um v, [1, 2]
chama procura([1 2], 1, lista)
![Page 35: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/35.jpg)
Ludwig Krippahl, 2009 35
Partir o problema
Ler o ficheiro Estruturar cada reacção Procurar coeficientes
• Testar se acertou
Gravar resultados
![Page 36: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/36.jpg)
Ludwig Krippahl, 2009 36
Ler o ficheiro
fopen: abrir o ficheiro fclose: fechar no fim fgetl, fgets: ler linha Secção 14.2
![Page 37: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/37.jpg)
Ludwig Krippahl, 2009 37
Estruturar a informação
Dada uma reacção (string)• 2 Al + 6 HCl = 2 AlCl3 + 3 H2
Tirar os espaços em branco, tabs, mudança de linha etc.• Guardar só os caracteres >“ “ (espaço)
![Page 38: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/38.jpg)
Ludwig Krippahl, 2009 38
Estruturar a informação
Reacção sem espaços• 2Al+6HCl=2AlCl3+3H2
Partir pelo =• 2Al+6HCl reagentes
• 2AlCl3+3H2 produtos
![Page 39: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/39.jpg)
Ludwig Krippahl, 2009 39
Estruturar a informação
• 2Al+6HCl reagentes
• 2AlCl3+3H2 produtos
Partir pelo +• 2Al
• 6HCl
• 2AlCl3
• 3H2
Lembrar quantos reagentes!
![Page 40: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/40.jpg)
Ludwig Krippahl, 2009 40
Estruturar a informação
Decompor cada termo• elemento
• quantidade
Dica: já fizemos isto...
![Page 41: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/41.jpg)
Ludwig Krippahl, 2009 41
Estruturar a informação
Criar uma lista com os elementos todos da reacção• elemento (string)
• quantidades (vector, negativo se for produto)
![Page 42: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/42.jpg)
Ludwig Krippahl, 2009 42
Estruturar a informação
Para adicionar cada elemento é preciso• elemento, procurar na lista.
• quantidade no termo e índice do termo• Podemos ter de somar várias vezes (CH3COOH)
• quantos termos no total• para criar o vector se for um elemento novo.
![Page 43: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/43.jpg)
Ludwig Krippahl, 2009 43
Partir o problema
Ler o ficheiro Estruturar cada reacção Procurar coeficientes
• Testar se acertou
Gravar resultados
![Page 44: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/44.jpg)
Ludwig Krippahl, 2009 44
Gravar os resultados
Abrir o ficheiro, etc fprintf, fputs Não esquecer de avisar quando não se
conseguiu acertar• Dica: criar uma função que recebe a reacção e
devolve a reacção acertada se conseguir ou uma string vazia, “”, se não conseguir.
![Page 45: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/45.jpg)
Ludwig Krippahl, 2009 45
Datas
Enunciado online: • 26-3 (amanhã)
Entrega da versão intermédia• Domingo, 19-4 (12:00h)
Entrega da versão final:• 26-4 (12:00h)
Não aceito entregas depois da resolução.
![Page 46: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/46.jpg)
Ludwig Krippahl, 2009 46
Aulas de dúvidas
As práticas destas duas semanas• 29-3 a 3-4; 21-4 a 24-4
• (O trabalho é para fazer em casa)
A teórica de 15-4 vai ser só para dúvidas• A teórica de 1-4 vai ser aula normal, porque
prevejo que haverá mais dúvidas na última semana.
![Page 47: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/47.jpg)
Ludwig Krippahl, 2009 47
Dúvidas durante o trabalho
Não tirem dúvidas com os colegas, só com os docentes.• Aulas
• Atendimento (com marcação)
Fraude• Reprovação imediata à disciplina
![Page 48: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/48.jpg)
Ludwig Krippahl, 2009 48
Avaliação Concepção, 5 valores
• Esquema do programa. Como pensaram resolver o problema.
Implementação, 10 valores• O programa em si, de preferência a funcionar.
Testes, 3 valores• Como garantiram que cada funções estava bem
implementada.. Crítica, 2 valores
• Breve comentário a mostrar que compreenderam o programa que fizeram.
![Page 49: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/49.jpg)
Ludwig Krippahl, 2009 49
Fotos
Quem não tem, ponha no CLIP• Facilita a avaliação do trabalho
![Page 50: Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.](https://reader036.fdocuments.net/reader036/viewer/2022062512/552fc102497959413d8bdd99/html5/thumbnails/50.jpg)
Ludwig Krippahl, 2009 50
Dúvidas