Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 90
1

Ошибка в Borlan C++ Builder c "не допустимым значением с плавающей точкой"

19.05.2017, 14:29. Показов 1730. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Приветствую всех!
Меня попросили написать не большую программу в Borland C++ Builder, я почти закончил, но у меня возникла одна проблема. Вычисление мощности по формуле P=I2R. Ниже приведен фрагмент кода, вычисления по этой формуле у меня должны производиться в строчках 20-33, в теле оператора if представленых ниже и выше предложен практически аналогичный расчет с небольшим отличием отличием но они работают без проблем, а когда возникает условие выполнения тела if строчек 21-33 то появляется сообщение об ошибке представленое на рис.1, а после нажатия на кнопку ok этого сообщения курсор останавливается на строчке вызова этой функции рис.2. Вчем моя ошибка не могу понять.


C++
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
  double Power (void)
    {
       double prI,prU,prR,Ftok,Fres,Fnapr;
       double pstI,pstU,pstR,Fpow,FprI;
       bool cb1,cb2,cb3;
       cb1=Form2->CheckBox1->Checked;
       cb2=Form2->CheckBox2->Checked;
       cb3=Form2->CheckBox3->Checked;
       if (cb1&&cb2)
        {
          Ftok=StrToFloat(Form2->Edit1->Text);
          Fnapr=StrToFloat(Form2->Edit2->Text);
          pstI=pow(10,stI);
          pstU=pow(10,stU);
          prI=pstI*Ftok;
          prU=pstU*Fnapr;
          Fpow=prU*prI;
         return Fpow;
        }                    
      if (cb1&&cb3)
       {                       
          Ftok=StrToFloat(Form2->Edit1->Text);
          Fres=StrToFloat(Form2->Edit2->Text);
          pstI=pow(10,stI);
          pstR=pow(10,stR);
          prI=pstI*Ftok;
          prR=pstR*Fres;
        //
          Fpow=(pow(prI,2))*prR;
          Form2->Edit5->Text=FloatToStr(FprI);
          return Fpow;
        // return FprI;
        }                                        
      if (cb2&&cb3)
        {                                    
          Fnapr=StrToFloat(Form2->Edit2->Text);
          Fres=StrToFloat(Form2->Edit3->Text);
          pstU=pow(10,stU);
          pstR=pow(10,stR);
          prU=pstU*Fnapr;
          prR=pstR*Fres;
          Fpow=pow(prU,2)/prR;
          return Fpow;
         }
    }
 
 
// ...
 
n5  pw=Power();      // Происходит вызов этой функции
Миниатюры
Ошибка в Borlan C++ Builder c "не допустимым значением с плавающей точкой"   Ошибка в Borlan C++ Builder c "не допустимым значением с плавающей точкой"  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2017, 14:29
Ответы с готовыми решениями:

Ошибка -is not a valid integer value (не является допустимым целым значением), не понимаю в чем ошибка
//--------------------------------------------------------------------------- #include <vcl.h>...

Ошибка операции с плавающей точкой
Program qqq; Uses crt; var i,n:byte; s:real; begin clrscr; Writeln('Vvedite n'); Readln(n);...

Ошибка с плавающей точкой в MathCAD 14
Помогите, пожалуйста, решить проблему, не могу понять где ошибка.

Ошибка: выражение должно быть допустимым для изменения левосторонним значением
Делаю односвязный список. #include "stdafx.h" #include "locale.h" #include "math.h"...

Ошибка: Выражение должно быть допустимым для изменения левосторонним значением
class ts_ch { int zn; public: ts_ch() { zn=0; } ts_ch(int a) {

10
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 90
19.05.2017, 14:32  [ТС] 2
Сразу еще хочу спросить, а в Borland C++ Buildere можно в окне с кодом программы включить нумерацию строк?
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
19.05.2017, 22:19 3
grey-vsm, скорее всего ошибка из-за того, что в каком то поле ввода ничего не введено. Не может программа преобразовать пустую строку в число с плавающей запятой. Кстати, в поле ввода надо использовать запятую при разделении целой и дробной частей.
0
144 / 88 / 23
Регистрация: 31.08.2016
Сообщений: 775
20.05.2017, 08:20 4
Цитата Сообщение от d7d1cd Посмотреть сообщение
Кстати, в поле ввода надо использовать запятую при разделении целой и дробной частей.
неа, это зависит от настроек винды
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
20.05.2017, 09:22 5
Цитата Сообщение от qppq Посмотреть сообщение
неа, это зависит от настроек винды
Это конечно правильно, но в 99,99% никто не меняет эту настройку в русскоязычной винде и по-умолчанию используется запятая.
0
1487 / 1414 / 240
Регистрация: 19.02.2010
Сообщений: 3,916
20.05.2017, 10:01 6
grey-vsm, Если в форме в поля ввода данных какие-то переменные (с пплавающей точкой) занесены текстом по умолчанию - то уберите эти установки из формы и делайте их непосредственно в конструкторе, присваиванием. Таким способом, который умеет автоматически, самостоятельно обрабатывать установленный в винде разделитель.
Т.е., например,
Form2->Edit1->Text=AnsiString(0.01f);
и так далее для прочих строк ввода.
И если на компе будет стоять запятая - то Сишный (да и в любых языках программирования тоже) разделитель в виде точки будет при запуске проги автоматически изменён на запятую.
В общем, АнсиСтринг как в своём конструкторе от плавучей переменной, так и в методе ToDouble (его можно юзать вместо вызова функции StrToFloat) с системными настройками работать умеет, поэтому надо все операции проводить через него.

Ну и перед конвертированием проверяйте поле ввода на непустоту. АнсиСтринговскими методами IsEmpty() или Length()==0. Но проще обернуть строку конвертирования в try-блок, затем ругаясь в кэтче на недопустимое значение. Что-то типа такого:
Код
	float Val;
	try {
		Val=Edit->Text.ToDouble();
	}
	catch (...) {
		Application->MessageBox("Недопустимое значение","Ошибка");
		ActiveControl=Edit;
		return;
	}
0
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 90
20.05.2017, 19:15  [ТС] 7
Цитата Сообщение от d7d1cd Посмотреть сообщение
скорее всего ошибка из-за того, что в каком то поле ввода ничего не введено.
это ваше предположение ошибочно. Ниже приведена картинка запуска exe файла этой программы на которой видно, что в нужные поля введены данные, но сообщение об ошибке все равно появляется.
Миниатюры
Ошибка в Borlan C++ Builder c "не допустимым значением с плавающей точкой"  
0
управление сложностью
1687 / 1300 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
20.05.2017, 20:29 8
grey-vsm, а чему у вас напряжение равно ?
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
20.05.2017, 20:49 9
grey-vsm, выполните программу по шагам и посмотрите какая строка вызывает ошибку. Сообщение об ошибке ясно говорит, что программа не может преобразовать пустую строку в число.
Почему нельзя нормально назвать поля ввода и чекбоксы? Что такое Edit1 и Edit2? Телепатирую, что надо вместо Edit2 написать Edit3.
0
0 / 0 / 0
Регистрация: 02.03.2016
Сообщений: 90
21.05.2017, 08:50  [ТС] 10
d7d1cd, спасибо за помощь, ошибка действительно оказалась в номере компонента Edit, я спутал Edit2 и Edit3.

Добавлено через 4 минуты
А Почтальону могу ответить, что в данном случае (приведеном на картинке) параметр напряжения просто не используется, для расчета мощности применяется формула "P=I2R", и поэтому поле ввода напряжения нет на экране.
0
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
21.05.2017, 12:19 11
grey-vsm, совет Вам: давайте осмысленные имена переменным и компонентам. Я Вам сразу сказал, что в каком-то поле ввода ничего не введено и, согласно приведенного текста программы, был прав.
0
21.05.2017, 12:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2017, 12:19
Помогаю со студенческими работами здесь

Ошибка: выражение должно быть допустимым для изменения левосторонним значением
TilePos.h #pragma once #include "CoreMinimal.h" #include "World_of_Blocks_API.h" class...

Ошибка: выражение должно быть допустимым для изменения левосторонним значением
Пишу код с вводом данных из многострочного поля textBox (Multiline), примерно так: private:...

Ошибка: Выражение должно быть допустимым для изменения левосторонним значением
Всем привет. У меня есть очередь, состоящую из объектов класса classA, которую нужно заполнить из...

ошибка при вычислении с плавающей точкой
здравствуйте мне нужно найти угол (в радианх) зная косинус этого угла я функцию через арктангенс...

Освещение. ошибка операции с плавающей точкой
задание: построить тетраэдр и кольца которые будут вращаться вокруг него. код: #include...

Ошибка над числом с плавающей точкой
Уважаемые форумчане помогите решить вопросик с программой. Выдает ошибку при построении графика...


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

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