Файл: вычислить массу молекулы вещества, заданного химической формулой - Free Pascal
Формулировка задачи:
h2o.out
H2O18
C3H5NO3NO3NO3227
Помогите пожалуйста! Вот, что есть у меня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.Решение задачи: «Файл: вычислить массу молекулы вещества, заданного химической формулой»
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.