![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 14.06.2011
Сообщений: 5
|
![]()
Здравствуйте!Возникла проблема,при создании программы вычисляющей делимое делитель частое и остаток с помощью OnChange.
Код моей программы: Проблема заключается в том, что нужно предусмотреть деление на нуль.Объясните пожалуйста как можно это сделать. [SPOILER=КОД]unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure Edit2Change(Sender: TObject); procedure Edit3Change(Sender: TObject); procedure Edit2KeyPress(Sender: TObject; var Key: Char); procedure Edit3KeyPress(Sender: TObject; var Key: Char); procedure Edit1Change(Sender: TObject); procedure Edit1KeyPress(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; a,b:boolean; implementation {$R *.dfm} procedure TForm1.Edit1Change(Sender: TObject); begin if b or a and(edit3.text<>'0') and(edit2.text<>'0')then begin edit2.text:= inttostr((strtoint(edit1.text)div(s trtoint(edit3.text)))); edit3.text:=inttostr((strtoint(edit 1.Text))div(strtoint(edit2.text))) ; edit4.text:=inttostr((strtoint(edit 1.text))mod(strtoint(edit2.text))); end; end; procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); begin a:=false; end; procedure TForm1.Edit2Change(Sender: TObject); begin if (edit2.text<>'0')and a then begin edit3.text:=inttostr((strtoint(edit 1.Text))div(strtoint(edit2.text))) ; edit4.text:=inttostr((strtoint(edit 1.text))mod(strtoint(edit2.text))); end; end; procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char); begin a:=true; end; procedure TForm1.Edit3Change(Sender: TObject); begin //b:=false; if b then begin edit1.Text:=inttostr((strtoint(edit 2.text))*(strtoint(edit3.text))); edit4.text:= inttostr((strtoint(edit1.text))mod( strtoint(edit2.text))); end; end; procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char); begin b:=true; end; end.[/SPOILER] Последний раз редактировалось ferus1337; 19.01.2012 в 18:55. Причина: spoiler |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 18.01.2012
Сообщений: 975
|
![]()
Тогда проверяйте не "edit3.text<>'0'", a "StrToInt(edit3.text) <> 0", иначе программа споткнется, например, на тексте "00" в edit3.
Это для всех edit'ок С проверкой корректности введенных данных (если пользователь введет не цифру, а букву) сами справитесь?
Благодарить в репутацию. Проклинать — туда же
![]() |
![]() |
![]() |
![]() |
#3 |
Регистрация: 14.06.2011
Сообщений: 5
|
![]()
Спасибо за ответ.Но проблема немного не в том.И в принципе не важен запрет недопустимых символов.Проблема в том,что не при пересчете может получиться так, что программа будет выполнять действие делимое делить на делитель.И совпадет так,что делимое меньше,чем делитель,т.е частное получится 0 целых,но также после этого следует операция поиска делителя путем деления делимого на частное,а частное у нас с предыдущей операции-нуль и выдает ошибку division by zero.Тут както через try except нужно,то ли переделать работу булиевских переменных.Но я вообще уже так запутался и не могу сообразить.
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 14.06.2011
Сообщений: 5
|
![]()
Помогите пожалуйста
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Событие OnChange | bboyb-rock | JavaScript, Ajax | 0 | 18.04.2011 00:07 |
OnChange | Plohoy | Помощь студентам | 17 | 06.08.2010 13:07 |
Проблема с событием OnChange компонента DriveComboBox (C++Builder 6) | Teor | C++ Builder | 4 | 15.07.2010 21:58 |
Проблема ONCHANGE в IE | mihali4 | JavaScript, Ajax | 11 | 25.11.2008 07:15 |
TEdit.Onchange | azat | Компоненты Delphi | 1 | 27.11.2007 12:36 |