Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с вычислением


Mahno ©   (2008-09-18 11:03:00) 

Имеется четыре поля для ввода чисел. все поля умножаются между собой,
пример:
X:=A*B*C*D;
если поле B=0 то результат: X=0
как правильно написать формулу при таком случае.
можно так: if B=0 then X:=A*C*D но если два поля пустые т.е. B=0 и C=0?


Vlad Oshin   (2008-09-18 11:50:00) [1]

привязка массива к окнам ввода

type
 TForm1 = class(TForm)
   Button1: TButton;
   Button2: TButton;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
 private     { Private declarations }
 public      { Public declarations }
    Procedure Change(Sender:tObject);
 end;

var
 Form1: TForm1;
 m:array[0..3] of integer;

implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  x:integer;
  i:integer;
begin
 x:=1;
 for I := 0 to 3 do
   if m[i]<>0 then x:=x*m[i];
 ShowMessage(inttostr(x));
end;

procedure TForm1.Change(Sender: tObject);
begin
 Pinteger(tEdit(Sender).Tag)^:=strtoint(tEdit(Sender).Text);
end;

procedure TForm1.FormCreate(Sender: TObject);
var
e:tedit;
i:integer;
begin
for i := 0 to 3 do
begin
  m[i]:=random(10);
  e:=tEdit.Create(form1);
  e.Parent:=form1;
  e.top:=i*30;
  e.Name:='Edit'+inttostr(i);
  e.Text:=inttostr(m[i]);
  e.Tag:=LongInt(@m[i]);
  e.Visible:=true;
  e.OnChange:=Change;
end;
end;


Правильный$Вася   (2008-09-18 11:31:00) [2]


> Игнорировать нулевые множители?if B = 0 then B:= 1;if C
> = 0 then C:= 1;

это фальсификация данных ;)
получается 0=1, а это....


Mahno   (2008-09-18 11:20:00) [3]

понятно


DrPass   (2008-09-18 11:14:00) [4]


> if B=0 then X:=A*C*D но если два поля пустые т.е. B=0 и
> C=0?

Тебе чего надо? Игнорировать нулевые множители?
if B = 0 then B:= 1;
if C = 0 then C:= 1;
X:=A*B*C*D;


Mahno   (2008-09-18 11:14:00) [5]


> int64   (18.09.08 11:08) [4]

Да именно


Mahno   (2008-09-18 11:13:00) [6]

Да совершенно верно


Azize   (2008-09-18 11:10:00) [7]

Насколько я понимаю тебе не надо чтобы в случае когда какой-либо компонет был равен нулю он участвовал в перемножении?
Тогда так
mas:array[1..3] of ...;
....
x:=1;
For i:=0 to 3 do
if mas[i]<>0 then x:=x*mas[i];


int64   (2008-09-18 11:08:00) [8]

Mahno   (18.09.08 11:03)  

Я проведу сеанс телепатии.
Тебе при перемножении надо игнорировать незаполненные поля?


Vlad Oshin   (2008-09-18 11:07:00) [9]

не понятно..
любое нулевое число не учавствует в умножении что ли?


Плохиш   (2008-09-18 11:07:00) [10]


> Mahno   (18.09.08 11:03)  

Я тебе намекну. На X тоже умножать можно, так же как и его на что-то.


AlekseyB   (2008-09-18 11:05:00) [11]

В любом случае, умножение на 0 даст 0, другое дело, если предусмотреть то, если встречается 0, то его игнорировать


Наверх

Титульная страница Поиск, карта сайта Написать письмо