Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
styler55
0 / 0 / 0
Регистрация: 22.02.2017
Сообщений: 69
#1

Проверка в коде - Delphi

30.05.2017, 15:20. Просмотров 211. Ответов 11
Метки нет (Все метки)

Здравствуйте, я новичок в delphi, может кто-нибудь, пожалуйста, подсказать как можно сделать проверку в данном коде(решение СЛАУ метод Гаусса), если при вычислении СЛАУ будет делится на 0 чтобы выдавало ошибку, нужно поставить проверку в этой части кода:
Delphi
1
2
3
4
5
6
7
8
9
for i:=1 to n-1 do
      for j:=i+1 to n do
      begin
        z[j,i]:=-z[j,i]/z[i,i];
        for k:=i+1 to n do
          z[j,k]:=z[j,k]+z[j,i]*z[i,k];
          b[j]:=b[j]+z[j,i]*b[i]
      end;
      a[n]:=b[n]/z[n,n];
Полный код рассчета:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
   try
    n := StrToIntDef(Text, StringGrid1.ColCount);
 
    for j := 0 to n - 1 do
      for i := 0 to n - 1 do
        z[i + 1, j + 1] := StrToFloatDef(StringGrid1.Cells[j, i], 0);
 
    for I := 0 to n - 1 do b[i + 1] := StrToFloatDef(StringGrid2.Cells[0, i], 0);
 
    for i:=1 to n-1 do
      for j:=i+1 to n do
      begin
        z[j,i]:=-z[j,i]/z[i,i];
        for k:=i+1 to n do
          z[j,k]:=z[j,k]+z[j,i]*z[i,k];
          b[j]:=b[j]+z[j,i]*b[i]
      end;
      a[n]:=b[n]/z[n,n];
 
      for i:=n-1 downto 1 do
      begin
        h:=b[i];
        for j:=i+1 to n do h:=h-a[j]*z[i,j];
        a[i]:=h/z[i,i]
      end;
 
      for i:=1 to n do image1.Canvas.TextOut(0, 15*i, 'x'+inttostr(i)+'='+floattostr(Roundto(a[i],-2)));
    Except
      ShowMessage('Введены неверные данные! ');
    end;
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.05.2017, 15:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Проверка в коде (Delphi):

Проверка состояний CheckBox, найти ошибку в коде
при нажатие кнопки "2 этаж" Должны выводиться данные о состояние только...

Проверка на совпадение + проверка строки на содержание спец. символов
В общем ситуация такая: есть типизированный файл, форма для добавления...

Игнорируется проверка строк в коде
Задание: Нужно ввести текст(допускаются большие русские буквы и знак "_"). В...

Проверка на авторизованного пользователя в php коде
У меня есть код который может проверять пусты ли логин пароль пользователя....

Проверка параллельности прямых - найти ошибки в коде
Компилятор выдает синтаксические ошибки, помогите исправить. #include...

Не могу найти ошибку в коде(Проверка на простоту)
#include <iostream> using namespace std; int main() { setlocale(LC_ALL,...

11
TFullControl
390 / 314 / 186
Регистрация: 20.10.2016
Сообщений: 1,010
30.05.2017, 15:55 #2
Вставить перед 4-й строкой:
Delphi
1
2
3
4
  if z[i,i] = 0 then begin
    ShowMessage('Деление на ноль, расчет прерван');
    Exit;
  end;
Перед 9-й
Delphi
1
2
3
4
  if z[n,n] = 0 then begin
    ShowMessage('Деление на ноль, расчет прерван');
    Exit;
  end;
0
styler55
0 / 0 / 0
Регистрация: 22.02.2017
Сообщений: 69
30.05.2017, 16:28  [ТС] #3
Цитата Сообщение от TFullControl Посмотреть сообщение
Вставить перед 4-й строкой:
Delphi
1
2
3
4
  if z[i,i] = 0 then begin
    ShowMessage('Деление на ноль, расчет прерван');
    Exit;
  end;
Перед 9-й
Delphi
1
2
3
4
  if z[n,n] = 0 then begin
    ShowMessage('Деление на ноль, расчет прерван');
    Exit;
  end;
Препод сказала поставить проверку именно в цикле for (4-5 строка)

for i:=1 to n-1 do
for j:=i+1 to n do
0
TFullControl
390 / 314 / 186
Регистрация: 20.10.2016
Сообщений: 1,010
30.05.2017, 16:51 #4
Цитата Сообщение от styler55 Посмотреть сообщение
Препод сказала поставить проверку именно в цикле for (4-5 строка)
А между 3-й и 4-й строкой это по вашему где? Как раз там!
Плюс проверять надо и после цикла, недосмотрел ваш "препод"!
ПС
Перед пятой строкой проверять смысла уже нет, деление происходит раньше, в 4-й
0
styler55
0 / 0 / 0
Регистрация: 22.02.2017
Сообщений: 69
30.05.2017, 17:31  [ТС] #5
Цитата Сообщение от TFullControl Посмотреть сообщение
А между 3-й и 4-й строкой это по вашему где? Как раз там!
Плюс проверять надо и после цикла, недосмотрел ваш "препод"!
ПС
Перед пятой строкой проверять смысла уже нет, деление происходит раньше, в 4-й
Спасибо, а насчет вывода сообщения, нужно ли еще какие то проверки делать в данном коде? Сейчас будет стоять только проверка на 0, то отсюда сообщение вывода лучше убрать?:
for i:=1 to n do image1.Canvas.TextOut(0, 15*i, 'x'+inttostr(i)+'='+floattostr(Roundto(a[i],-2)));
Except
ShowMessage('Введены неверные данные! ');
end;

Я просто не понял что делает эта проверка for i:=1 to n do image1.Canvas.TextOut(0, 15*i, 'x'+inttostr(i)+'='+floattostr(Roundto(a[i],-2)));
0
TFullControl
390 / 314 / 186
Регистрация: 20.10.2016
Сообщений: 1,010
30.05.2017, 17:40 #6
Цитата Сообщение от styler55 Посмотреть сообщение
Я просто не понял что делает эта проверка for i:=1 to n do image1.Canvas.TextOut(0, 15*i, 'x'+inttostr(i)+'='+floattostr(Roundto(a[i],-2)));
Это не проверка вообще. Это отрисовка текста.
Цитата Сообщение от styler55 Посмотреть сообщение
Delphi
1
2
3
Except
  ShowMessage('Введены неверные данные! ');
end;
Это сообщение будет выведено при генерации исключительной ситуации, собственно оно бы и обрабатывало (в том числе) и деление на ноль. Можете ее оставить.
Цитата Сообщение от styler55 Посмотреть сообщение
нужно ли еще какие то проверки делать в данном коде?
У вас есть отлов исключений, этого достаточно.
1
styler55
0 / 0 / 0
Регистрация: 22.02.2017
Сообщений: 69
31.05.2017, 19:11  [ТС] #7
Цитата Сообщение от TFullControl Посмотреть сообщение
Это не проверка вообще. Это отрисовка текста.
Это сообщение будет выведено при генерации исключительной ситуации, собственно оно бы и обрабатывало (в том числе) и деление на ноль. Можете ее оставить.

У вас есть отлов исключений, этого достаточно.
Спасибо, а можете еще пожалуйста сказать как правильно называется тип Matrix и Vector именно в моем случае, в интернете информация что это массивы, но в моем коде они используются никак массивы(array.. нету), мне нужно написать их назначение и тип, я написал что массив и array указал в "тип", но оказалось это не правильно в моем случае, вот пример скриншот: [del]

Добавлено через 39 минут
и такой же вопрос с const
0
TFullControl
390 / 314 / 186
Регистрация: 20.10.2016
Сообщений: 1,010
31.05.2017, 19:29 #8
Цитата Сообщение от styler55 Посмотреть сообщение
тип Matrix и Vector именно в моем случае
Их нет в вашем коде.
0
styler55
0 / 0 / 0
Регистрация: 22.02.2017
Сообщений: 69
31.05.2017, 19:59  [ТС] #9
Цитата Сообщение от TFullControl Посмотреть сообщение
Их нет в вашем коде.
var z: Matrix; b,a: Vector; h: real; i,j,k,n:integer;
0
GoodWeather
132 / 131 / 53
Регистрация: 28.02.2017
Сообщений: 764
31.05.2017, 21:05 #10
Вот бы нам видеть полностью оригинал задания...

Может от вас хотят что-то вроде:
Delphi
1
2
3
type
    Vector = array of Double;
    Matrix = array of array of Double; // или   Matrix = array of Vector;
0
D1973
01.06.2017, 04:55
  #11
 Комментарий модератора 
styler55, картинки заливаем прямо на форум, не неизвестно куда и неизвестно в каком формате
0
styler55
0 / 0 / 0
Регистрация: 22.02.2017
Сообщений: 69
01.06.2017, 20:41  [ТС] #12
Возникла проблема с решением, после добавления вашего кода с проверкой деления на ноль, сейчас если пустые поля и жмешь кнпоку решить, выдает что ошибка деление на ноль,а должен выдавать "вы ввели неверные значения".. и когда вводишь все занчения 1 в матрице, и жмешь кнопку решить, тоже пишет "деление на ноль.." вместо "вы ввели неверные значения"
0
01.06.2017, 20:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2017, 20:41
Привет! Вот еще темы с решениями:

Ошибка в коде: проверка параметров командной строки
По условию требуется: обработать параметры командной строки - адрес файла и...

Проверка на простоту числа - исправить ошибки в коде
Написала программу, она запускается но работает неправильно, почему то все...

Проверка на существования имени (выправить баг в коде)
Привет, есть DBGrid в которой вносятся запись из access если выбрать строку в...

Импорт/экспорт сайтов и проверка наличия строки в коде
Добрый день ув.форумчане! Не прошу Вас дать готовую программу, просто помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru