Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [pascal]Приведение подобных членов в строке


Автор: Seifer 16.10.2007, 23:32
Не могу решить:
Строка содержит выражение, состоящее из произведений вида С*Х, С - целая константа, Х - имя переменной, состоящей из 1й латинской буквы. Такие произведения объединены знаками + или - . Если константа = 1, то она и соответствующий ей знак умножения могут отсутствовать. Например, 8*А-3*В+6*А+В. Составить программу, выполняющую приведение подобных членов в выражении и выводящую сформировавшуюся строку.

Автор: volvo877 17.10.2007, 11:01
Вот так, что-ли:

Код

var
  s, sub: string;
  coeff: array['A' .. 'Z'] of integer;
  i, p, err, coef: integer;
  letter: char;

const sign: array[boolean] of char = ('+', '-');

begin
  i := 1;
  s := '8*A-3*B+6*A+B+11*C-23*a+4*b';
  repeat
    sub := '+';
    repeat
      if s[i] = '-' then sub := '-'
      else if s[i] = '+' then
           else sub := sub + s[i];
      inc(i);
    until (i > length(s)) or (s[i] in ['+', '-']);

    coef := 1; letter := upcase(sub[2]);
    p := pos('*', sub);
    if p > 0 then begin
      val(copy(sub, 2, p - 2), coef, err);
      letter := upcase(sub[p + 1]);
    end;
    if sub[1] = '-' then coef := - coef;
    coeff[letter] := coeff[letter] + coef;

  until i > length(s);
  writeln('result:');
  for letter := 'A' to 'Z' do
    if coeff[letter] <> 0 then write(sign[coeff[letter] < 0]:2, abs(coeff[letter]):3, '*', letter);
  writeln;
end.

?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)