Файл: вычислить массу молекулы вещества, заданного химической формулой - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Имя входного файла: h2o.in Имя выходного файла: h2o.out Ограничение по времени: 1 секунда Ограничение по памяти: 16 мегабайт Ваша задача — вычислить массу молекулы вещества, заданного химической формулой. Формула представляет собой перечисление элементов входящих в молекулу вещества. Для сокращения записи формулы используется обозначение En, которое означает, что элемент E надо повторить n раз. Масса молекулы вещества — это сумма весов всех его элементов. Название элемента Обозначение Масса Водород H 1 Углерод C 12 Азот N 14 Кислород O 16 Формат входного файла В единственной строке входного файла записана формула. Ее длина не превышает 20 символов. Формула состоит из букв «CHNO» и цифр от 1 до 9. Цифра всегда идет после буквы. Формат выходного файла В выходной файл выведите одно число — массу молекулы. Примеры h2o.in

h2o.out

H2O

18

C3H5NO3NO3NO3

227

Помогите пожалуйста! Вот, что есть у меня
Листинг программы
  1. Program copy_primer;
  2. Var f1,f2:text;
  3. i,sum, H,N,C,O,E,z: integer;
  4. S: string;
  5. Begin
  6. Assign(f1, 'h2o.in');
  7. Reset(f1);
  8. Assign(f2, 'h2o.out');
  9. Rewrite(f2);
  10. While not eof(f1) do
  11. Begin
  12. Readln(f1,s);
  13. For i:=1 to Length(s) do
  14.  
  15. if (s[i]='H') then
  16. H:=1;
  17. if (s[i]='N') then
  18. N:=14;
  19. if (s[i]='C') then
  20. C:=12;
  21. if (s[i]='O') then
  22. O:=16;
  23.  
  24. Writeln(f2,sum);
  25. End;
  26. Close(f1); Close(f2);
  27. End.
Не понимаю как подсчитать каждый элемент... Как применить E*n для каждого элемента?

Решение задачи: «Файл: вычислить массу молекулы вещества, заданного химической формулой»

textual
Листинг программы
  1. var
  2.   s: String;
  3.   i, m, e, n: Integer;
  4. begin
  5.   Assign(input,'h2o.in'); Assign(output,'h2o.out');
  6.   Reset(input); Rewrite(output);
  7.   ReadLn(s); s:=s+' '; m:=0; e:=0; n:=0;
  8.   for i:=1 to Length(s) do
  9.     if s[i] in ['H','C','N','O',' '] then begin
  10.       if n=0 then n:=1;
  11.       m:=m+e*n; n:=0;
  12.       case s[i] of
  13.         'H': e:=1;
  14.         'C': e:=12;
  15.         'N': e:=14;
  16.         'O': e:=16;
  17.         else e:=0;
  18.       end;
  19.     end else if s[i] in ['0'..'9'] then
  20.       n:=n*10+Ord(s[i])-Ord('0');
  21.   WriteLn(m);
  22. end.

Объяснение кода листинга программы

В данном коде на языке Free Pascal выполняется задача по вычислению массы молекулы вещества, заданного химической формулой. При этом предполагается, что ввод данных осуществляется из файла с именем h2o.in, а вывод результатов производится в файл с именем h2o.out. Код считывает строку из файла в переменную s. Затем происходит обработка этой строки. Если символ является одним из ['H','C','N','O'], то в зависимости от этого значения увеличивается переменная m. При этом, если символ является первым символом в строке (т.е. n равно 0), то n устанавливается равным 1. Далее, в зависимости от значения символа, переменной e присваивается значение 1, 12, 14 или 16. Если символ не является ни одним из указанных, то e устанавливается равным 0. Если символ является числом от 0 до 9, то значение переменной n умножается на 10 и увеличивается на значение символа минус значение символа '0' (т.е. от 0 до 9). В конце программа выводит значение переменной m в файл h2o.out.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.111 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы