Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Подскажите в чем ошибка


гость ©   (2004-12-31 12:26:00) 

Посмотрите пожалуйста код 0 записывает, а если exp существует
то значение не записывает

var
ex,a,b:word;
w:string;
f1:textfile;
begin
ex:=pos('exp',sOld);
if ex=1 then
 begin
  a:=pos('(',sOld);
  a:=2;
  b:=a+1;
  while ((sOld[b]>='0')and(sOld[b]<='9'))do
   begin
    w:='' ;
    w:=sOld[b]+w;
   end;
  AssignFile(F1,'c:\Razbor.txt');
  Rewrite(F1);
  Writeln(F1,w);
  CloseFile(F1) ;

  end
 else
  begin
   AssignFile(F1,'c:\Razbor.txt');
   Rewrite(F1);
   Writeln(F1,'0');
   CloseFile(F1) ;
  end;
end;


begin...end   (2004-12-31 13:41:00) [1]

> [13] Digitman ©   (31.12.04 13:33)

> строка может содержать ПРОИЗВОЛЬНОЕ арифм.выр-е

А, ну если там может быть что угодно, в том числе и со своими скобками, и т.д., тогда, конечно, [11] не подойдёт.

Вообще, гостьзациклился на разборе арифметических выражений :-), напр.: http://www.delphimaster.ru/cgi-bin/forum.pl?id=1104053154&n=0

> с НГ !

Аналогично! :-) И гостя- тоже :-)


Digitman   (2004-12-31 13:33:00) [2]


> begin...end


если я правильнго понял, то строка может содержать ПРОИЗВОЛЬНОЕ арифм.выр-е .. первым членом которого обязательно явл-ся ф-ция exp()

а это попахивает полноценным интерпретатором ..
дело худо)

с НГ !


begin...end   (2004-12-31 13:24:00) [3]

Ну и перед тем, как записывать, следует проверить, является ли sValue действительно строковым представлением числа.


begin...end   (2004-12-31 13:21:00) [4]

> [7] гость   (31.12.04 12:49)

var
 P: Integer;
 sOld, sValue: String;

begin
 P := Pos('exp(', sOld);
 if P = 1 then
 begin
   P := Pos(')', sOld);
   P := P - 5;
   if P > 0 then
   begin
     sValue := Copy(sOld, 5, P);
     // Записываем sValue в файл
   end
 end
end.

А ещё можно было сделать с использованием PosEx.


Digitman   (2004-12-31 13:09:00) [5]

т.е. строка, где в нач.позициях присутствует exp(), являет собой не иначе как арифметическое выражение ?


гость   (2004-12-31 13:03:00) [6]

да может быть но exp должна быть первой.
например
exp(54)*(.............)


Digitman   (2004-12-31 12:57:00) [7]


> есть строка в которой на первой позиции exp(какое-то число)


кроме "exp(какое-то число)" (неважно в какой позиции) в этой строке еще что-то может быть


гость   (2004-12-31 12:49:00) [8]


> А что этот код ДОЛЖЕН делать?

есть строка в которой на первой позиции exp(какое-то число)
надо сделать следующее записать в файл это самое число если оно существует иди 0 если числа нет


DiamondShark   (2004-12-31 12:44:00) [9]


>   while ((sOld[b]>='0')and(sOld[b]<='9'))do
>    begin
>     w:='' ;
>     w:=sOld[b]+w;
>    end;

Эта... Можно русскими словами пересказать условие завершения этого цикла?

"бред какой-то .." (ц)


begin...end   (2004-12-31 12:42:00) [10]

> [2] гость   (31.12.04 12:36)

А что этот код ДОЛЖЕН делать?


гость   (2004-12-31 12:41:00) [11]

если убрать a:=2 прога вообще виснет


Digitman   (2004-12-31 12:40:00) [12]


>   a:=pos('(',sOld);
>   a:=2;


бред какой-то ..

с НГ !


гость   (2004-12-31 12:36:00) [13]

подскажите как можно исправить


begin...end   (2004-12-31 12:33:00) [14]

> гость   (31.12.04 12:26)

Значение, наверное, записывается, но пустое? Ну тогда, значит, цикл while ни разу не выполняется, т.е. не выполняется условие sOld[b] in ['0'..'9'].


Наверх

Титульная страница Поиск, карта сайта Написать письмо