Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2012, 08:49   #1
Wolfus
 
Регистрация: 18.03.2012
Сообщений: 4
Вопрос Сложение химических элементов

Как сложить два или более химических элемента таким образом. чтобы и справа и слева химического уравнения было равенство коэффициентов. Например, 2H2+ O2=2H2O(т.е и справа и слева по 4 водорода и по 2 воды). Приведите пример кода.
Wolfus вне форума Ответить с цитированием
Старый 14.05.2012, 09:00   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Тут как мне кажется нужно парсить
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 14.05.2012, 10:09   #3
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
Тут как мне кажется нужно парсить
Тут не просто в парсинге проблема. Надо еще различать коэффициенты и индексы, а также знать валентность (и не только). Короче, задача неслабая такая.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 14.05.2012, 14:10   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от TinMan Посмотреть сообщение
Тут не просто в парсинге проблема. Надо еще различать коэффициенты и индексы, а также знать валентность (и не только). Короче, задача неслабая такая.
После буквы всегда следует индекс. Правила просты. Валентность можно просто помнить. Но фактически конечно же да единого уравнятеля не выйдет .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 14.05.2012, 17:04   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

как человек решает такую задачу.
составляем систему уравнений
(Н) x *2 + y*0 =z*2
(O) x *0 + y*2 =z*1

три неизвестных (число веществ в реакции) и два (число элементов) уравнения
решаем ее в ЦЕЛЫХ (и даже больше натуральных) числах. Для человека здесь раздолье в методах.
Компьютер он тупее (но зато быстрее в тупых операциях) поэтому используем "тупой" перебор.
например так

составляем такую вот матрицу
Код:
0 0 | 0 искомая строка коэффициентов (начальное заполнение для старта перебора и перебираем все варианты в разумных пределах (у меня <=10)
2 0 | -2 коэфф. использования первого (Н) элемента
0 2 | -1 коэфф. использования второго (О) элемента
(-) минус появился что мы как бы переносим все в левую часть и сравниаем с нулем
2 0 -2 | 0
0 2 -1 | 0

матрица это будет такой вот массив
m: array of array of integer; //[0..2, 1..3] of integer;

// для проверки используем такую функцию
Код:
function TestFormula: boolean;
begin
  result:=true;
  for j:=1 to 2 length(m)-1) do begin
    s:=0;
    for k:=1 to length(m[0]) do 
      s:=s +m[0,k]*m[j,k]; // сумма произведений искомой строки коэф(0 строка) на строку коэф. элемента 
    if s<>0 then begin 
      result:=false; 
      break; // для удобства расчетов коэф. из правой части формулы ставим со знаком -(минус)
   и проверяем итог как =0 (хорошо) /<>0 (плохо)
    end;
  end;
end;
и теперь делаем перебор вариантов
Код:
el:=0;
while (true) do begin
  m[0, el]:=m[0,el]+1;
  if TestFormula then begin 
     showResult;//у нас есть какой-то результат 
//его можно даже попробовать упростить (использовать НОД для 0 строки)
     break;
  end;
// а это собственно перебор 
  if m[0,el]>=10 then begin
    for j:=0 to el do m[0,j]:=0;
    el:=el+1;
    if el>length(m) then break;
    m[0, el]:=m[0,el]+1;
    el:=0;
  end;
P.S. код не проверял. Главное на мой взгляд в комментариях.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 14.05.2012 в 17:06.
evg_m вне форума Ответить с цитированием
Старый 14.05.2012, 18:55   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

А почему у Вас всего три неизвестных?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 14.05.2012, 19:09   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
А почему у Вас всего три неизвестных?
Находим то в данном случае 3 коєффициента. Вот и 3 неизвестных. Связать их в систему можем только двумя линейными уравнениями. И для поиска коэффициентов валентность не при делах. Она зашита в формулы веществ и в расчете коэффициентов не нужна
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 14.05.2012 в 19:16.
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi для химических нужд RTO Общие вопросы Delphi 0 24.06.2011 21:17
Отладка программы на MASM. Сложение элементов массива. Ibanez Wizard Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 22.02.2011 22:06
В массиве из п элементов много совпадающих элементов. Найти количество различных элементов Strax Фриланс 11 12.06.2010 20:13
Найти максимальный из положительных элементов матрицы и сумму отрицательных элементов. bessonov12 Microsoft Office Excel 7 04.05.2009 05:44
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16