Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 30.12.2008, 13:32
Disticomb Disticomb вне форума
Прохожий
 
Регистрация: 30.12.2008
Сообщения: 3
Репутация: 10
По умолчанию Прошу помочь с написанием кода

Сама задача: Дан текст, в котором встречаются арифметические выражения вида a \ b, где \ - один из знаков +, -, *, /. Выписать все арифметические выражения и вычислить их значения.

На форме присутствуют компоненты Memo, Button, Label.

Алгоритм: Текст из Memo посимвольно проверяется на совпадение с одним из этих знаков. При совпадении производится определение чисел слева и справа от знака, после они преобразовываются из текстовых значений в числовые и выполняется арифметическая операция, соответствующая знаку. Так же с остальными тремя знаками до конца текста. После результаты выводятся в компоненте Label.

В общем, не могу правильно все это оформить в виде кода
Ответить с цитированием
  #2  
Старый 30.12.2008, 14:26
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А ты попробуй, а мы поправим.
Ответить с цитированием
  #3  
Старый 30.12.2008, 14:49
Disticomb Disticomb вне форума
Прохожий
 
Регистрация: 30.12.2008
Сообщения: 3
Репутация: 10
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i,n,c,d,e,f: integer;
s: string;
begin
 with Memo1 do
  begin
   For n:=0 to lines.count-1 do
    begin
     s:=lines[n];
      For i:=1 to length(s) do
      If s[i]='+' then {здесь не знаю как написать цикл определения чисел}

lmikle: Пользуемся тегами!!!


Added: Просто дальше ничего кроме end'ов и нет =)

Последний раз редактировалось Disticomb, 30.12.2008 в 15:41.
Ответить с цитированием
  #4  
Старый 30.12.2008, 15:35
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

ЧЕ-то не все попало...
Ответить с цитированием
  #5  
Старый 30.12.2008, 15:48
BlackCash BlackCash вне форума
Прохожий
 
Регистрация: 08.06.2007
Сообщения: 42
Репутация: 15
По умолчанию

Вот держи код, думаю все понятно...

Код:
function ReplaseString(InStr,FindStr,ReplaseStr: String) : string;
var
  id  : integer;
  str : string;
begin
  Result := InStr;
  id     := pos(LowerCase(FindStr), LowerCase(InStr));
  str    := InStr;
  Delete(str,id,length(FindStr));
  Insert(ReplaseStr,str,id);
  Result := str;
end;

function ReplaseAllString(Line, Prefix, Return: String) : String;
var
  tmp  : string;
begin
  tmp := Line;
  while pos(Prefix,tmp) > 0 do
    tmp := ReplaseString(tmp,prefix,return);

  Result := tmp;
end;

procedure GetWordsList(Line: String; List : TStrings);
var
  tmp : String;
begin
  tmp := Line;
  tmp := ReplaseAllString(tmp,' ',#13#10);
  List.Text := tmp;
end;

function CalculateExpression(Expression: String) : integer;
const
  Minus   = '-';
  Plus    = '+';
  Divider = '\';
  Mplying = '*';
var
  Temp    : String;
  sList   : TStringList;
  sResult : integer;
  sCalc   : integer;
  i       : integer;
begin
  sResult := 0;
  sList   := TStringList.Create;
  try
  {}
  Temp  := '';
  for i := 1 to Length(Expression) do
    if (Expression[i] = Minus) or (Expression[i] = Plus) or (Expression[i] = Divider) or (Expression[i] = Mplying) then
    begin
      sList.Add(Temp);
      sList.Add(Expression[i]);
      Temp := '';
    end else
    Temp := Temp + Expression[i];
  sList.Add(Temp);
  {}
  sCalc   := 0;
  sResult := 0;
  i       := 0;
  while i < sList.Count-1 do begin
    if (sList[i] <> Minus) and (sList[i] <> Plus) and (sList[i] <> Divider) and (sList[i] <> Mplying) then begin
      sCalc := strtoint(sList[i]);
    end
    else begin
      if sList[i] = Minus then
        sCalc := (sCalc -   strtoint(sList[i+1]));
      if sList[i] = Plus then
        sCalc := (sCalc +   strtoint(sList[i+1]));
      if sList[i] = Divider then
        sCalc := (sCalc div strtoint(sList[i+1]));
      if sList[i] = Mplying then
        sCalc := (sCalc *   strtoint(sList[i+1]));
      sResult := sCalc;
      inc(i);
    end;
    inc(i);
  end;
  {}
  finally
    Result := sResult;
    sList.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i : integer;
  l : TStringList;
begin
  ListBox1.Clear;
  l := TStringList.Create;
  GetWordsList(Memo1.Text,l);
  {}
  for i := 0 to l.Count-1 do
    if (pos('-',l[i])<>0) or (pos('+',l[i])<>0) or (pos('*',l[i])<>0) or (pos('\',l[i])<>0) then
    begin
      try
        ListBox1.Items.Add(l[i]+'='+inttostr(CalculateExpression(l[i])));
      except
      end;
    end;
  {}
  l.Free;
end;
Вложения
Тип файла: rar GET MATH.rar (2.1 Кбайт, 8 просмотров)
Ответить с цитированием
  #6  
Старый 30.12.2008, 15:58
Disticomb Disticomb вне форума
Прохожий
 
Регистрация: 30.12.2008
Сообщения: 3
Репутация: 10
По умолчанию

Спасибо большое
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 03:00.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter