A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6.

Apresentações semelhantes


Apresentação em tema: "Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6."— Transcrição da apresentação:

1 Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6

2 Ludwig Krippahl, Na aula de hoje... Apresentação do trabalho prático 1

3 Ludwig Krippahl, Objectivo Acertar reacções químicas ?H 2 + ?O 2 ?H 2 O

4 Ludwig Krippahl, Objectivo Acertar reacções químicas ?H 2 + ?O 2 ?H 2 O Reacções simples (não redox, etc) Nenhum termo com parêntesis Ca(NO 3 ) 2 fica CaN 2 O 6.

5 Ludwig Krippahl, Objectivo Acertar reacções químicas ?H 2 + ?O 2 ?H 2 O 2H 2 + O 2 2H 2 O

6 Ludwig Krippahl, 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

7 Ludwig Krippahl, 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

8 Ludwig Krippahl, Partir o problema Ler o ficheiro Estruturar cada reacção Procurar coeficientes Testar se acertou Gravar resultados

9 Ludwig Krippahl, Testar coeficientes ?H 2 + ?O 2 ?H 2 O

10 Ludwig Krippahl, Testar coeficientes ?H 2 + ?O 2 ?H 2 O Forma mais correcta Resolver sistema de equações Alguns problemas Sistemas sub-determinados Identificar casos impossíveis (mal escrita)

11 Ludwig Krippahl, Testar coeficientes ?H 2 + ?O 2 ?H 2 O Geração e teste Pesquisa exaustiva Muito ineficiente Mas fácil de implementar

12 Ludwig Krippahl, Testar coeficientes ?H 2 + ?O 2 ?H 2 O Vector de coeficientes: [1 1 1]

13 Ludwig Krippahl, Testar coeficientes ?H 2 + ?O 2 ?H 2 O Vector de coeficientes: [1 1 1] Estequiometria para cada elemento H 1 * * 0 = 1 * 2 O 1 * * 2 = 1 * 1

14 Ludwig Krippahl, Testar coeficientes ?H 2 + ?O 2 ?H 2 O Vector de coeficientes: [1 1 1] Estequiometria para cada elemento H 1 * * 0 = 1 * 2 O 1 * * 2 = 1 * 1

15 Ludwig Krippahl, Testar coeficientes ?H 2 + ?O 2 ?H 2 O 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

16 Ludwig Krippahl, Testar coeficientes ?H 2 + ?O 2 ?H 2 O 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

17 Ludwig Krippahl, Testar coeficientes 2H 2 + O 2 2H 2 O Vector de coeficientes: [2 1 2] H: sum([2 1 2].* [2 0 -2])==0 O: sum([2 1 2].* [0 2 -1])==0

18 Ludwig Krippahl, Procurar coeficientes Testar os que vêm com a reacção Pode já estar certa. 2 Al + 6 HCl = 2 AlCl3 + 3 H2

19 Ludwig Krippahl, Procurar coeficientes Testar os que vêm com a reacção Se não está certa, começar com [ ] Depois somar 1, todas as combinações Depois somar 2, todas as combinações, Depois somar 3...

20 Ludwig Krippahl, Procurar coeficientes [1 1 1]

21 Ludwig Krippahl, Procurar coeficientes [1 1 1] [2 1 1] [1 2 1] [1 1 2]

22 Ludwig Krippahl, 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:...

23 Ludwig Krippahl, 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

24 Ludwig Krippahl, É 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.

25 Ludwig Krippahl, Testar Para testar coeficientes: Argumentos Vector com coeficientes Lista ou matriz com estequiometria dos elementos. { el=H, esteq = [2 0 -2]} { el=O,.... [ ; ] Devolve Verdadeiro ou falso, conforme encontrou

26 Ludwig Krippahl, 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.

27 Ludwig Krippahl, 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.

28 Ludwig Krippahl, Procurar, 1ª procura([1 1], 2, lista) não é 0, por isso Cria um v, [2, 1] chama procura([2 1], 1, lista)

29 Ludwig Krippahl, Procurar, 2ª procura([2 1], 1, lista) não é 0, por isso Cria um v, [3, 1] chama procura([3 1], 0, lista)

30 Ludwig Krippahl, Procurar, 3ª procura([3 1], 0, lista) é 0, por isso testa, devolve resultado

31 Ludwig Krippahl, 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)

32 Ludwig Krippahl, Procurar, 3ª procura([2 2], 0, lista) é 0, por isso testa, devolve resultado

33 Ludwig Krippahl, 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)

34 Ludwig Krippahl, 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)

35 Ludwig Krippahl, Partir o problema Ler o ficheiro Estruturar cada reacção Procurar coeficientes Testar se acertou Gravar resultados

36 Ludwig Krippahl, Ler o ficheiro fopen: abrir o ficheiro fclose: fechar no fim fgetl, fgets: ler linha Secção 14.2

37 Ludwig Krippahl, 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)

38 Ludwig Krippahl, Estruturar a informação Reacção sem espaços 2Al+6HCl=2AlCl3+3H2 Partir pelo = 2Al+6HClreagentes 2AlCl3+3H2produtos

39 Ludwig Krippahl, Estruturar a informação 2Al+6HClreagentes 2AlCl3+3H2produtos Partir pelo + 2Al 6HCl 2AlCl3 3H2 Lembrar quantos reagentes!

40 Ludwig Krippahl, Estruturar a informação Decompor cada termo elemento quantidade Dica: já fizemos isto...

41 Ludwig Krippahl, Estruturar a informação Criar uma lista com os elementos todos da reacção elemento (string) quantidades (vector, negativo se for produto)

42 Ludwig Krippahl, 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.

43 Ludwig Krippahl, Partir o problema Ler o ficheiro Estruturar cada reacção Procurar coeficientes Testar se acertou Gravar resultados

44 Ludwig Krippahl, 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.

45 Ludwig Krippahl, 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.

46 Ludwig Krippahl, 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.

47 Ludwig Krippahl, 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

48 Ludwig Krippahl, 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.

49 Ludwig Krippahl, Fotos Quem não tem, ponha no CLIP Facilita a avaliação do trabalho

50 Ludwig Krippahl, Dúvidas


Carregar ppt "Ludwig Krippahl, 2009 Programação para as Ciências Experimentais 2008/9 Teórica 6."

Apresentações semelhantes


Anúncios Google