Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
291 / 239 / 102
Регистрация: 07.04.2011
Сообщений: 1,441
1

Поиск ошибки

03.11.2012, 22:28. Показов 1364. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите найти ошибку в коде. Где-то с //строим матрицу рисков до критерия Гурвица.
Ошибка "is not a valid floating point value" .Выскакивает когда количество строк не равно количеству столбцов.В чем причина? Когда размерность матрицы одинаковая,то все считает верно.
З.Ы.На всякий случай исходник в вложениях.
З.З.Ы.Знаю что много лишних циклов)Пишу для увеличения объема проги))
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
begin
Memo1.Text:='';
Memo2.Text:='';
Memo3.Text:='';
Memo4.Text:='';
sum:=0;
max:=0;
min:=0;
Q:=1/(StringGrid1.RowCount-1);
P:=StrToFloat(Edit3.Text);
Label6.Caption:='Q='+FloatToStrF(q,ffFixed,10,3);//q критерий лаппласса
      // перенос данных в массив
      StringGrid2.RowCount:=StringGrid1.RowCount-1;
      StringGrid2.ColCount:=StringGrid1.ColCount-1;
 for i:=1 to StringGrid1.RowCount-1 do
  for j:=1 to StringGrid1.ColCount-1 do
   begin
     glmas[i,j]:=StrToFloat(StringGrid1.Cells[j,i]);
        end;
 
  //!!--------------критерий Лапласса
          for i1:=1 to StringGrid1.RowCount-1 do  //строка
             begin
           sum:=0;
           for j1:=1 to StringGrid1.ColCount-1 do  //столбец
             begin
           sum:=sum+StrToFloat(StringGrid1.Cells[j1,i1]); //суммирование по строкам
           sumstrok[i1,j1]:=sum;
           A:= q*(sum);
           sumstrok[i1,j1]:=A;
           //поиск максимального элемента по критерию лапласса
           if sumstrok[i1,j1]>max then
             max:=sumstrok[i1,j1];
                   end;
 Label5.Caption:='A*=max(                                      )='+FloatToStr(max); //вывод масимального значения по критерию лапласса
 Memo2.Text:=Memo2.Text+FloatToStrF(A,ffFixed,10,2)+';';//вывод всех значений для лапласса
                    end;
  //!!--------------------РАБОТАЕТ
 
                //!!КРИТЕРИЙ ВАЛЬДА
         //поиск минимального элемента по критерию вальда
          for i2:=1 to StringGrid1.RowCount-1 do  //строка
             begin
           min:=glmas[i2,1];
           for j2:=1 to StringGrid1.ColCount-1 do  //столбец
             begin
           if glmas[i2,j2]<min then
                min:=glmas[i2,j2];
                end;
minzna4[i2]:=min;//массив поиска из минимальных значений вальда
Memo1.Text:=Memo1.Text+FloatToStr(minzna4[i2])+';'; //вывод всех минимальных значений
                end;
                   //поиск максимального среди минимальных для вальда
max:=minzna4[1];
  for i6:=1 to StringGrid1.RowCount-1 do
   begin
    if minzna4[i6]>max then max:=minzna4[i6];
      end;
Label3.Caption:='W=max(                                      )='+FloatToStr(max);//вывод максимального значения среди минимальных для вальда
        //--------------------РАБОТАЕТ
 
 
 //!!Поиск максимального значения в столбце для матрицы рисков(R)
 
          for i3:=1 to StringGrid1.RowCount-1 do
          begin
           max:=glmas[1,1];
            for j3:=1 to StringGrid1.ColCount-1 do
             begin
                if glmas[j3,i3]>max then
                 max:=glmas[j3,i3];
                  end;
               rmasmax[i3,j3]:=max;
                StringGrid2.Cells[i3-1,0]:=FloatToStr(rmasmax[i3,j3]);
                end;
                   {
       //строим матрицу рисков
         { for i4:=1 to StringGrid1.RowCount-1 do
           for j4:=1 to StringGrid1.ColCount-1 do
            begin
           //  temp:=rmasmax[i4,j4]-(StrToFloat(StringGrid1.Cells[i4,j4]));
            StringGrid2.Cells[i4-1,j4-1]:=rmasmax[i4,1]-StrToFloat(StringGrid1.Cells[i4,j4]);
             //rmas[j4,i4]:=StrToFloat(StringGrid2.Cells[i4-1,j4-1]);//делаем массив из значений стринггрида2
               end;
 
                   {
        //поиск максимального значения по матрице рисков
        for i5:=1 to StringGrid1.RowCount-1 do  //строка
             begin
           max:=rmas[i5,j5];
           for j5:=1 to StringGrid1.ColCount-1 do  //столбец
             begin
           if rmas[i5,j5]>max then
                max:=rmas[i5,j5];
                end;
maxzna4[i5]:=max;//массив поиска из максимальных значений матрицы рисков
Memo3.Text:=Memo3.Text+FloatToStr(maxzna4[i5])+';'; //вывод всех максимальных значений сэвиджа
end;
//поиск минимального среди максимальных для сэвиджа
min:=maxzna4[1];
  for j6:=1 to StringGrid1.RowCount-1 do
   begin
    if maxzna4[j6]<min then min:=maxzna4[j6];
      end;
Label9.Caption:='S=min(                                      )='+FloatToStr(min);//вывод максимального значения среди минимальных для вальда
                       }
 
 
     //----------РАБОТАЕТ
 
              //КРИТЕРИЙ Гурвица
         //поиск минимального элемента для Гурвица
          for i7:=1 to StringGrid1.RowCount-1 do  //строка
             begin
           min:=glmas[i7,1];
           max:=glmas[i7,1];
           for j7:=1 to StringGrid1.ColCount-1 do  //столбец
             begin
           if glmas[i7,j7]<min then
                min:=glmas[i7,j7];
                if glmas[i7,j7]>max then
                 max:=glmas[i7,j7];
                end;
 
H:=((P*min)+((1-p)*max));//критерий гурвиццо
Hmass[i7]:=H;
Memo4.Text:=Memo4.Text+FloatToStr(H)+';'; //вывод всех минимальных значений
max:=hmass[1];
 for i8:=1 to StringGrid1.RowCount-1 do
  begin
    if  hmass[i8]>max then max:=hmass[i8];
                end;
                    end;
      Label10.Caption:='H=max(                                      )='+FloatToStr(max);
 
             end;//конечный бегин
Вложения
Тип файла: rar kod.rar (215.2 Кб, 48 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.11.2012, 22:28
Ответы с готовыми решениями:

Поиск ошибки в коде
А вот еще один дурной вопрос от псевдопрограммиста: следующий код содержит функцию поиска...

Поиск ошибки
Выдает ошибку, если запустить программу и ввести q. Выкладываю скриншот ошибки. #include...

Поиск ошибки
Здравствуйте дорогие форумчане. Есть следующая задача. Во вводимы массивах элементы расставлять по...

Поиск ошибки.
Доброго времени суток. С++ изучаю второй день. Вот задание: Определить количество...

3
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
03.11.2012, 23:47 2
Цитата Сообщение от OverDozero Посмотреть сообщение
Ошибка "is not a valid floating point value" .Выскакивает когда количество строк не равно количеству столбцов.
Запустил программу, все работает при разных количествах строк и столбцов. Единственное, что нужно - это следить что при изменении таблицы все ячейки должны быть заполнены. Тогда не будет "is not a valid floating point value".
0
angstrom
04.11.2012, 00:01 3
Измени StrToFloat на StrToFloatDef.
291 / 239 / 102
Регистрация: 07.04.2011
Сообщений: 1,441
04.11.2012, 08:53  [ТС] 4
Цитата Сообщение от antikiler_ Посмотреть сообщение
Запустил программу, все работает при разных количествах строк и столбцов. Единственное, что нужно - это следить что при изменении таблицы все ячейки должны быть заполнены. Тогда не будет "is not a valid floating point value".
Именно где-то в куске кода
Delphi
1
2
3
4
5
6
7
8
9
//строим матрицу рисков
 
          for i4:=1 to StringGrid2.RowCount-1 do
           for j4:=1 to StringGrid2.ColCount-1 do
            begin
             temp:=rmasmax[i4,j4]-(StrToFloat(StringGrid1.Cells[i4,j4]));
           // StringGrid2.Cells[i4-1,j4-1]:=rmasmax[i4,1]-StrToFloat(StringGrid1.Cells[i4,j4]);
             rmas[j4,i4]:=StrToFloat(StringGrid2.Cells[i4-1,j4-1]);//делаем массив из значений стринггрида2
               end;
ошибка.В исходнике он закомментирован..
Этот кусок для нахождения максимального значения в каждом столбце.Он все работает корректно и в стринггрид вывод правильные значения(вывод для отладки сделан,чтоб было наглядно видно).
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
//!!Поиск максимального значения в столбце для матрицы рисков(R)
 
          for i3:=1 to StringGrid1.RowCount-1 do
          begin
           max:=glmas[1,1];
            for j3:=1 to StringGrid1.ColCount-1 do
             begin
                if glmas[j3,i3]>max then
                 max:=glmas[j3,i3];
                  end;
               rmasmax[i3,j3]:=max;
                StringGrid2.Cells[i3-1,0]:=FloatToStr(rmasmax[i3,j3]);
                end;
Необходимо от максимального элемента строки отнять все элементы текущей строки.Именно в этом куске то-ли выходит за границу,то-ли еще что то..и выдает "is not a valid floating point value".Или у меня что-то с массивом, хранящим максимальные значения каждого столбца.Уже и делал его одномерным,но не прокатило...
Уже думал схитрить)))И в переменную считывать значение ячейки стринггрида2(максимальное значение столбца) и от этой переменной отнимать элементы столбца,где эта ячейка находится.Потом в переменную считать 2 ячейку и опять так же.Глазом не успеть заметить двойную замену данных в таблице))
Но хотелось бы все написать правильно..без хитростей.
0
04.11.2012, 08:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2012, 08:53
Помогаю со студенческими работами здесь

Поиск ошибки
В одной книге есть код: function validate(phoneNumber) { if (phoneNumber.length !== 8) { ...

Поиск ошибки.
Доброго времени суток. Уже третий день не могу найти ошибку в программе. Весь код вылизал =( ...

поиск ошибки
Новичок в этом, выводит что ошибка а какая именно не говорит. помогите пожалуйста. Заранее...

Поиск ошибки
Здравствуйте все! Ситуация такая, имеется форма обратной связи, всё работает прекрасно, кроме...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru