Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2011, 11:42   #1
spirit_102
 
Регистрация: 12.11.2011
Сообщений: 4
По умолчанию Условие для лингвистического транслятора на Delphi

Привет. Суть в том, чтобы при вводе цифр и действий с ними, программа работала как калькулятор, а при вводе текста, просто выводила его.
Калькулятор работает, а с условием для вывода текста загвоздка. Те условия, что я пробовал приводят к работе либо калькулятора, либо просто выводу введенной информации, но не как то и др одновременно.
Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    анализ: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure анализClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 function Calculate(SMyExpression: string; digits: Byte): string;
 
var
   z: Char;
   ipos: Integer;
 
   function StrToReal(chaine: string): Real;
   var
     r: Real;
     Pos: Integer;
   begin
     Val(chaine, r, Pos);
     if Pos > 0 then Val(Copy(chaine, 1, Pos - 1), r, Pos);
     Result := r;
   end;
 
   function RealToStr(inreal: Extended; digits: Byte): string;
   var
     S: string;
   begin
     Str(inreal: 0: digits, S);
     realToStr := S;
   end;
 
   procedure NextChar;
   var
     s: string;
   begin
     if ipos > Length(SMyExpression) then
     begin
       z := #9;
       Exit;
     end
     else
     begin
       s := Copy(SMyExpression, ipos, 1);
       z := s[1];
       Inc(ipos);
     end;
     if z = ' ' then nextchar;
   end;
 
   function Expression: Real;
   var
     w: Real;
 
     function Factor: Real;
     var
       ws: string;
     begin
       Nextchar;
       if z in ['0'..'9'] then
       begin
         ws := '';
         repeat
           ws := ws + z;
           nextchar
         until not (z in ['0'..'9', '.']);
         Factor := StrToReal(ws);
       end
       else if z = '(' then
       begin
         Factor := Expression;
         nextchar
       end
       else if z = '+' then Factor := +Factor
       else if Z = '-' then Factor := -Factor;
     end;
 
     function Term: Real;
     var
       W: Real;
     begin
       W := Factor;
       while Z in ['*', '/'] do
         if z = '*' then w := w * Factor
       else
         w := w / Factor;
       Term := w;
     end;
   begin
     w := term;
     while z in ['+', '-'] do
       if z = '+' then w := w + term
     else
       w := w - term;
     Expression := w;
   end;
 begin
   ipos   := 1;
   Result := RealToStr(Expression, digits);
 end;
{$R *.dfm}
 
procedure TForm1.анализClick(Sender: TObject);
begin
 
  Form1.Edit2.Text:= Calculate(Form1.Edit1.Text, 3);
end;
end.
spirit_102 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Странное поведение транслятора sergestus Общие вопросы C/C++ 12 28.10.2011 11:03
Написание транслятора santaux Общие вопросы по программированию, компьютерный форум 2 10.03.2011 18:11
Обман транслятора union'ом по Страуструпу KemanSR Общие вопросы C/C++ 11 01.12.2010 01:05
Условие для DateTimePicker Snail Помощь студентам 0 17.09.2010 22:19
Разработка транслятора. Выходной файл *.COM ИринаForeve Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 20.11.2009 15:27