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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2011, 04:09   #1
vityanya
Пользователь
 
Регистрация: 03.08.2010
Сообщений: 23
По умолчанию ошибка при делении на ноль..

не могу написать рповерку, если в решении идет деление на ноль, то вместо ноля производить деление на единицу...
Вот код программы...
Код:
procedure min_y;
begin
if
strtofloat(form1.StringGrid1.Cells[1,1])/strtofloat(form1.StringGrid1.Cells[1,l])>strtofloat(form1.StringGrid1.Cells[2,1])/strtofloat(form1.StringGrid1.Cells[2,l]) // здесь производится деление на ноль во второй итерации...
then
  minY:=strtofloat(form1.StringGrid1.Cells[l,1])
else
  minY:=strtofloat(form1.StringGrid1.Cells[l,2]);
if minY=strtofloat(form1.StringGrid1.Cells[l,1])
then
m3:=2
else
m3:=3;
end;
procedure min_S;
begin
if
strtofloat(form1.StringGrid1.Cells[5,2])>strtofloat(form1.StringGrid1.Cells[5,3])
then
minS:=strtofloat(form1.StringGrid1.Cells[5,2])
else
minS:=strtofloat(form1.StringGrid1.Cells[5,3]);
if minS=strtofloat(form1.StringGrid1.Cells[5,2])
then
l:=1
else
l:=2;
end;
procedure TForm1.dvojstvennyj;
begin
min_S;
min_Y;
//Запись нового уравнения в исключаемую строку
  if m3-1<2
  then
  m4:=m3+1
  else
  m4:=m3-1;
  form1.stringgrid1.Cells[0,m3]:=form1.stringgrid1.Cells[l,0];
  form1.stringgrid1.Cells[1,m3]:=floattostr(strtofloat(form1.stringgrid1.Cells[1,m3])/minS);
  form1.stringgrid1.Cells[2,m3]:=floattostr(strtofloat(form1.stringgrid1.Cells[2,m3])/minS);
  form1.stringgrid1.Cells[3,m3]:=floattostr(strtofloat(form1.stringgrid1.Cells[3,m3])/minS);
  form1.stringgrid1.Cells[4,m3]:=floattostr(strtofloat(form1.stringgrid1.Cells[4,m3])/minS);
  form1.stringgrid1.Cells[5,m3]:=floattostr(strtofloat(form1.stringgrid1.Cells[5,m3])/minS);
//Запись нового уравнения в строку W
  form1.stringgrid1.Cells[1,1]:=floattostr(strtofloat(form1.stringgrid1.Cells[1,1])-strtofloat(form1.stringgrid1.Cells[1,m3])*minY);
  form1.stringgrid1.Cells[2,1]:=floattostr(strtofloat(form1.stringgrid1.Cells[2,1])-strtofloat(form1.stringgrid1.Cells[2,m3])*minY);
  form1.stringgrid1.Cells[3,1]:=floattostr(strtofloat(form1.stringgrid1.Cells[3,1])-strtofloat(form1.stringgrid1.Cells[3,m3])*minY);
  form1.stringgrid1.Cells[4,1]:=floattostr(strtofloat(form1.stringgrid1.Cells[4,1])-strtofloat(form1.stringgrid1.Cells[4,m3])*minY);
  form1.stringgrid1.Cells[5,1]:=floattostr(strtofloat(form1.stringgrid1.Cells[5,1])-strtofloat(form1.stringgrid1.Cells[5,m3])*minY);
//Запись в строку, в которой был наибольший коеффициент среди S1 и S2.
  p:=strtofloat(form1.stringgrid1.Cells[l,m4]);
  form1.stringgrid1.Cells[1,m4]:=floattostr(strtofloat(form1.stringgrid1.Cells[1,m4])-strtofloat(form1.stringgrid1.Cells[1,m3])*p);
  form1.stringgrid1.Cells[2,m4]:=floattostr(strtofloat(form1.stringgrid1.Cells[2,m4])-strtofloat(form1.stringgrid1.Cells[2,m3])*p);
  form1.stringgrid1.Cells[3,m4]:=floattostr(strtofloat(form1.stringgrid1.Cells[3,m4])-strtofloat(form1.stringgrid1.Cells[3,m3])*p);
  form1.stringgrid1.Cells[4,m4]:=floattostr(strtofloat(form1.stringgrid1.Cells[4,m4])-strtofloat(form1.stringgrid1.Cells[4,m3])*p);
  form1.stringgrid1.Cells[5,m4]:=floattostr(strtofloat(form1.stringgrid1.Cells[5,m4])-strtofloat(form1.stringgrid1.Cells[5,m3])*p);
  //Вторая итерация код соответствует процедуре "dvojstvennyj" здесь, при вычислении min_Y производится деление на ноль и выдается ошибка
помогите хоть мыслями какими то
vityanya вне форума Ответить с цитированием
Старый 13.01.2011, 04:46   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

проверять значение перед тем как собираетесь делить? что мешает использовать переменную и условие?
Код:
var
x:Extended;
begin
....
if TRIM(form1.StringGrid1.Cells[1,l])='0' then
x:=1 
else
x:=strtofloat(form1.StringGrid1.Cells[1,l]);
....
strtofloat(form1.StringGrid1.Cells[1,1])/x>.......
vovk вне форума Ответить с цитированием
Старый 13.01.2011, 05:29   #3
vityanya
Пользователь
 
Регистрация: 03.08.2010
Сообщений: 23
По умолчанию

Цитата:
что мешает использовать переменную и условие?
наверно недостаточно опыта в программировании...
сейчас испробую этот вариант.
vityanya вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка деления на ноль El_Blasto Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 16.12.2010 10:09
При делении чисел выводятся непонятные числа! khorolpavel Общие вопросы C/C++ 2 29.11.2010 16:17
Delphi, ошибка деления на ноль, хотя знаменатель не ноль Эренка Помощь студентам 7 22.04.2010 15:56
Переполнение при делении JeyKip Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 20.03.2010 14:04
массивы, переполнение при делении Alter Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 21.05.2008 21:11