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

Форум для изучающих FPC и их учителей.

Модератор: Модераторы

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

Сообщение Leontev » 01.03.2012 23:01:02

Задача такая. В исходном текстовом файле в каждой строке имеется последовательность вида

Код: Выделить всё
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.


Вот набросок программы. Ругается на знак =. Как это обойти?
Leontev
новенький
 
Сообщения: 30
Зарегистрирован: 16.01.2012 20:56:32
Откуда: Санкт-Петербург

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

Сообщение Oleg_D » 02.03.2012 17:31:44

Читайте строку посимвольно, в том числе и числа.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

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

Сообщение Leontev » 02.03.2012 18:13:32

А что если цифры многозначные? Типа

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


И т.п.
Leontev
новенький
 
Сообщения: 30
Зарегистрирован: 16.01.2012 20:56:32
Откуда: Санкт-Петербург

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

Сообщение Brainenjii » 02.03.2012 18:24:41

считывать, пока цифры не закончатся?
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

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

Сообщение Leontev » 02.03.2012 19:06:39

пока файл не закончится. Там в каждой строке такие последовательности идут. Например

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


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

Код: Выделить всё
23+123-14=132
12-5=7
1+3-1=3
Leontev
новенький
 
Сообщения: 30
Зарегистрирован: 16.01.2012 20:56:32
Откуда: Санкт-Петербург

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

Сообщение Oleg_D » 02.03.2012 22:35:41

Я бы мог дать код, но сейчас нет времени. :cry:
Поглядите в книге "Песни о Паскале" хотя бы главы 29-31 и 55. Там похожие вещи делаются, то есть читаются посимвольно слова. Так же и числа можно читать.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

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

Сообщение Brainenjii » 03.03.2012 08:16:16

http://pastebin.com/LRHjTXw3 - можно что-то вроде этого
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

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

Сообщение Leontev » 03.03.2012 20:36:11

Brainenjii боюсь, что не подойдет :(

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


Было бы неплохо. А то, честно говоря, все равно плохо себе представляю как из строки выделить двух, трех и т.д. значные цифра сохраняя при этом знак.
Leontev
новенький
 
Сообщения: 30
Зарегистрирован: 16.01.2012 20:56:32
Откуда: Санкт-Петербург

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

Сообщение Oleg_D » 04.03.2012 12:23:20

Вот вариант для посимвольного чтения.
Аналогично можно сделать и путем чтения всей строки с посимвольным её разбором.
Код: Выделить всё
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.
Oleg_D
постоялец
 
Сообщения: 391
Зарегистрирован: 09.05.2011 11:28:36

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

Сообщение Leontev » 04.03.2012 23:38:31

Спасибо большое :D

Как говорит наш преподаватель, поучу немного себя на этом примере.
Leontev
новенький
 
Сообщения: 30
Зарегистрирован: 16.01.2012 20:56:32
Откуда: Санкт-Петербург


Вернуться в Обучение Free Pascal

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

Рейтинг@Mail.ru