Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Лингвистический транслятор на Delphi

Автор: Spirit102
Дата сообщения: 18.11.2011 10:01
Здравствуйте. Суть в том, чтобы при вводе цифр и действий с ними, программа работала как калькулятор, а при вводе текста, просто выводила его.
Калькулятор работает, а с условием для вывода текста загвоздка. Те условия, что я пробовал приводят к работе либо калькулятора, либо просто выводу введенной информации, но не как то и др одновременно. Подскажите пожалуйста, какое должно быть условие?

Код: 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.

Страницы: 1

Предыдущая тема: Excel переименование файлов в папке макросом


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.