Страница 1 из 1

проблема с чтением выражения.

СообщениеДобавлено: 01.03.2012 23:01:02
Leontev
Задача такая. В исходном текстовом файле в каждой строке имеется последовательность вида

Код: Выделить всё
d+d-d+d=


Т.е. d- это какие-то случайные целые числа, между которыми либо +, либо -.
Записать эти последовательности в новый файл и после = записать результат выражения.

Код: Выделить всё
var f1,f2:text;
sum: integer; x:integer;
name,name2: string;
begin
writeln ('введите имя исходного файла');
readln (name);
writeln ('введите имя нового файла');
readln (name2);
assign (f1,name);
assign(f2,name2);
reset (f1);
rewrite(f2);
while not seekeof(f1) do
begin
sum:=0; read(f1,x); write (f2,x, ' '); sum:=sum+x;
while not seekeoln(f1) do
begin
read (f1,x);
if x>0 then
write (f2,'+');
sum:=sum+x;
write (f2,x,' ');
end;
writeln (f2,' = ', sum);
end;
close(f2);
close (f1);
end.


Вот набросок программы. Ругается на знак =. Как это обойти?

Re: проблема с чтением выражения.

СообщениеДобавлено: 02.03.2012 17:31:44
Oleg_D
Читайте строку посимвольно, в том числе и числа.

Re: проблема с чтением выражения.

СообщениеДобавлено: 02.03.2012 18:13:32
Leontev
А что если цифры многозначные? Типа

Код: Выделить всё
23+123-14=
12-5=


И т.п.

Re: проблема с чтением выражения.

СообщениеДобавлено: 02.03.2012 18:24:41
Brainenjii
считывать, пока цифры не закончатся?

Re: проблема с чтением выражения.

СообщениеДобавлено: 02.03.2012 19:06:39
Leontev
пока файл не закончится. Там в каждой строке такие последовательности идут. Например

Код: Выделить всё
23+123-14=
12-5=
1+3-1=


А в новый файл записать так

Код: Выделить всё
23+123-14=132
12-5=7
1+3-1=3

Re: проблема с чтением выражения.

СообщениеДобавлено: 02.03.2012 22:35:41
Oleg_D
Я бы мог дать код, но сейчас нет времени. :cry:
Поглядите в книге "Песни о Паскале" хотя бы главы 29-31 и 55. Там похожие вещи делаются, то есть читаются посимвольно слова. Так же и числа можно читать.

Re: проблема с чтением выражения.

СообщениеДобавлено: 03.03.2012 08:16:16
Brainenjii
http://pastebin.com/LRHjTXw3 - можно что-то вроде этого

Re: проблема с чтением выражения.

СообщениеДобавлено: 03.03.2012 20:36:11
Leontev
Brainenjii боюсь, что не подойдет :(

Oleg_D писал(а):Я бы мог дать код, но сейчас нет времени.


Было бы неплохо. А то, честно говоря, все равно плохо себе представляю как из строки выделить двух, трех и т.д. значные цифра сохраняя при этом знак.

Re: проблема с чтением выражения.

СообщениеДобавлено: 04.03.2012 12:23:20
Oleg_D
Вот вариант для посимвольного чтения.
Аналогично можно сделать и путем чтения всей строки с посимвольным её разбором.
Код: Выделить всё
const
  CName1 = 'Calc.in';
  CName2 = 'Calc.out';
var
  f1,f2:text;

procedure Calculate;
var Sum: longint;   { сумма по строке }
      N: longint;   { очередное число }
   Next: char;      { очередной символ }
   Oper: char;      { операция +/-}
      S: string;    { входная строка }

begin
  S:=''; Sum:=0; N:=0; Oper:='+';
  while not Eoln(f1) and (Oper<>'=') do begin
    Read(f1, Next);
    S:=S+Next;
    case Next of
      '0'..'9'   : N:=10*N + Ord(Next)-Ord('0'); { сборка числа }
      '+','-','=': begin
                     if Oper='+' then Sum:=Sum+N else Sum:=Sum-N;
                     Oper:=Next;
                     N:=0;
                   end;
    end;
  end;
  Readln(f1);
  Writeln(f2, S, Sum);
end;

begin  { Main }
  assign(f1,CName1); Reset(f1);
  assign(f2,CName2); Rewrite(f2);

  while not Eof(f1) do begin
    Calculate;
  end;

  Close(f1);
  Close(f2);
end.

Re: проблема с чтением выражения.

СообщениеДобавлено: 04.03.2012 23:38:31
Leontev
Спасибо большое :D

Как говорит наш преподаватель, поучу немного себя на этом примере.