Файл: вычислить массу молекулы вещества, заданного химической формулой - 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

Помогите пожалуйста! Вот, что есть у меня
Program copy_primer;
Var f1,f2:text;
    i,sum, H,N,C,O,E,z: integer;
    S: string;
Begin
 
    Assign(f1, 'h2o.in');   
    Reset(f1);
    Assign(f2, 'h2o.out');
    Rewrite(f2);
    While not eof(f1) do
    Begin
      Readln(f1,s);
        
        For i:=1 to Length(s) do

        if (s[i]='H') then
  H:=1;
  
        if (s[i]='N') then
  N:=14;
  
        if (s[i]='C') then 
   C:=12;
   
            if (s[i]='O') then
  O:=16; 

        Writeln(f2,sum);
    End;
    Close(f1); Close(f2);
 
End.
Не понимаю как подсчитать каждый элемент... Как применить E*n для каждого элемента?

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

textual
Листинг программы
var
  s: String;
  i, m, e, n: Integer;
begin
  Assign(input,'h2o.in'); Assign(output,'h2o.out');
  Reset(input); Rewrite(output);
  ReadLn(s); s:=s+' '; m:=0; e:=0; n:=0;
  for i:=1 to Length(s) do
    if s[i] in ['H','C','N','O',' '] then begin
      if n=0 then n:=1;
      m:=m+e*n; n:=0;
      case s[i] of
        'H': e:=1;
        'C': e:=12;
        'N': e:=14;
        'O': e:=16;
        else e:=0;
      end; 
    end else if s[i] in ['0'..'9'] then
      n:=n*10+Ord(s[i])-Ord('0');
  WriteLn(m);
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
Похожие ответы