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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2008, 22:23   #1
iFool
 
Регистрация: 16.10.2008
Сообщений: 3
По умолчанию Арифметика, выражение вводится строкой [Delphi]

Задача (дословно)
В строке вводиться арифметическое выражение, состоящее из целых чисел и знаков "+" и "-" . Вычислить значение этого выражения.
Требования:: во время ввода или модификации выражения нажатия на клавиши должны быть ограничены (если последней введена цифра, то за ней может быть нажата цифра, знак или пробел; если последним введеным символом явдяется знак, то за ним может быть введены либо пробел, либо цифра; для пробела определить ограничения самостоятельно).

как это реализовывается?
iFool вне форума Ответить с цитированием
Старый 21.10.2008, 01:57   #2
A_r_r_a_y
Форумчанин
 
Аватар для A_r_r_a_y
 
Регистрация: 01.03.2008
Сообщений: 165
По умолчанию

Да все просто, в событии OnKeyPress компонента Edit1 (ну или куда Вы там будете вводить свою строку) задаете ограничения на ввод следующего символа, в зависимости от того какой символ был введен последний.
ну а с самим вычислением, надеюсь ничего непонятного нет.
A_r_r_a_y вне форума Ответить с цитированием
Старый 21.10.2008, 02:14   #3
A_r_r_a_y
Форумчанин
 
Аватар для A_r_r_a_y
 
Регистрация: 01.03.2008
Сообщений: 165
По умолчанию

Хотя в OnKeyPress довольно проблематично будет это реализовать, лучше используйте OnChange и проверяйте предыдущий символ.
A_r_r_a_y вне форума Ответить с цитированием
Старый 21.10.2008, 18:51   #4
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Вот:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
Const Cif = ['0'..'9'];
      Znk = ['+', '-'];
Var   Al :Set of char;
      I :Integer;
      S :String;
begin
 Al := [];
 Al := Znk + Cif +[' '];
 If (Key in Al+[#8]) then
 begin
  S := TEdit(Sender).Text;
  I := Length(S);
  
  If I>0 then
  If (S[I] in Cif) then //последнее цыфра
  If Not (Key in Al) then //проверка ввода [цыфры,знак,пробел]
   Key := #0;

  If I>0 then
  If (S[I] in Znk) then //последнее знак
  If Not (Key in Al-Znk) then //проверка ввода
   Key := #0;
 end
  else
 Key := #0;
end;
Alter вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Длинная арифметика (нужна помощь) RAVAL)) Паскаль, Turbo Pascal, PascalABC.NET 7 25.10.2008 15:13
Даны числа от 100 до 999. Вводится индекс... Ci_novice Помощь студентам 4 19.04.2008 12:59
Длинная арифметика DmT Помощь студентам 2 06.10.2007 22:43