Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Делаю первые шаги в С++
Форум программистов > Системное программирование > C, С++ и С Builder > Borland C++ Builder & Kylix
Venom
Здравствуйте уважаемые!!! Ваша помощь уже помогла мне понять принципы С++ с каждым днем и новой задачей растет моя увлеченность этой областью компютерных знаний! За что, Вам огромное спасибо! Но как говориться "Чем дальше в лес тем больше дров" и вот новая проблема: в процесе вычисления переменной float (tgf)= float (Rbp/Abp) полученое число нужно сравнить по таблице и присвоить переменной (Kf) значение зависимое от полученной (tgf) например:
|--tgf---|----Kf----|
| 0,26 | 1,0001|
| 0,27 | 1,0004|
| ***** | ******* |
| 1,99 |4,0276 |
| 2,00 |4,0625 |
--------------------
Мне подсказали что это можно сделать с помощью двух одномерных массивов путем сравнения значений получемый при исчислении и присвоении пременной (Kf) значения соответствующей ячейки. Я работаю в среде Builder.2007.Enterprise

Пожалуйста подскажите как это реализовать??? Заранее благодарен!
European
А сколько страниц самой простецкой книги по C++ Вы прочитали?
Venom
???
European
Вообще-то на форуме для таких случаев есть 2 темы:
]]>http://forum.codeby.net/topic14324.html]]>
]]>http://forum.codeby.net/topic15647.html]]>
Venom
European - Спасибо, что указал мне на кучу сена и сказал иголка где то там. Сколько я не рылся в предложенных книгах, только больше запутался! Что можно понять например с этого, начинающему? Цитирую:

void fun(int *, int[], int qwe[10] = NULL);
/* Все три объявления параметров на самом деле являются объявлениями указателей. */
void main()

//void fun(int rrr[5][DIM1][DIM2]);
void fun(int rrr[][3][5]);
void fun(int rrr[15][DIM1][5]);
void fun(int *rrr[3][DIM2]);
/* Во всех этих случаях параметр rrr является указателем на двумерный
массив из 3*5 элементов типа int. "Массив из трёх по пять элементов типа
int" - такова спецификация типа объекта. */

Конец цитаты. И тому подобная ин формация?
European
Цитата(Venom @ 29:08:2008 - 13:56) *
Спасибо, что указал мне на кучу сена и сказал иголка где то там

Не такая уж и куча... Берете книгу Страуструпа 3-го издания, читаете раздел 5.2, спрашиваете что не понятно
Цитата(Venom @ 29:08:2008 - 13:56) *
Что можно понять например с этого, начинающему?

Не нужно читать всё подряд, читайте то, что вам советуют
Venom
Эврика 6 часов протрачено - Массивы более и мение изучено.
European спасибо за
Цитата(European @ 29:08:2008 - 15:53) *
Не такая уж и куча... Берете книгу Страуструпа 3-го издания, читаете раздел 5.2, спрашиваете что не понятно


только вот возникли сложности следующего харрактера, пользуясь советом спрашиваю:

высчитав tgf = Rbp/Abp ; Сравниваю ответ с ячейкой в Массиве table_tgf чтоб присвоить переменной Kf значение соответствующее анологичной ячейке Массива table_Kf но ничего не выходит потому как tgf расчетная отличается от значения Массива table_tgf на тысячные а то и 10 000 как поступить? Помогите.

часть кода:
float table_tgf[5] = {0.26 , 0.27 , 0.28 , 0.29 , 0.30};
float table_Kf[5] = {1.0001 , 1.0004 , 1.0009 , 1.0016 , 1.0025};
for (int i = 0; i < 4; i++)
{
  if ( ( X = (table_tgf[i] - tgf) ) < 0.01 )
     {
        Kf = table_Kf[i];
         break;
  }
European
Несколько раз прочитал, но так и не понял точно в чем проблема... Судя по всему Вы пытаетесь сравнить два числа, которые отличаются тысячными значения и равенство не выполняется, а Вам нужно чтобы эти числа были равны. Так?
Ну тогда существует следующий прием:
double a = 1.00001;
double b = 1.000011;
if( a - b < 0.0001 )
{
// TODO
}

Таким кодом Вы сравниваете 2 числа с некоторой точностью (до 0.0001)
Venom
European - Вы правильно поняли! Именно, мне нужно сравнить значение полученное в ходе вычисления со значением в массиве при совпадении, другой переменной должно присвоиться значение эквивалентное ячейке с совпадающим значением. скажите пожалуйса как это можно реализовать в массиве? у меня 204 значения tgf и столько же Kf + полученое значение отличается от значения в массиве на тысячные, сравнение не выполняется. ваш пример:
Цитата(European @ 1:09:2008 - 08:49) *
double a = 1.00001;
double b = 1.000011;
if( a - b < 0.0001 )
{
// TODO
}

я не пойму как применить в своем вопросе :-((

в моем примере:
if ( ( X = (table_tgf[i] - tgf) ) < 0.01 ) -явно Бред :-(
sax_ol
Мдааааа, все-таки вы решили учиться тут, а не по книгам/справкам/вузам/...?
European
Venom, извините, но я не могу понять что Вам нужно сделать
Venom
Уважаемый European я пытаюсь сравнить (А = b/c) c элементом масива (table_tgf) и в случае (А=table_tgf[i]) присвоить (D=table_Kf[i]) но (А) отличается от значения в массиве (table_tgf[i]) на тысячные доли, в результате сравнения не происходит, присваивания естественно то же. Даю полностью исполняемый код:

void __fastcall TForm2::Button1Click(TObject *Sender)
{
float K = 3.0 , D = 0.0288 , Cbase = 1.0 , WQp = 0 , WQg = 0 , T = 0 , P1 = 0 ,
P2 = 0 , tgf = 0 , Rbp =0 , Abp = 0 , Kf = 0 , X = 0;
//расчет P1------------------------------------------------------------------
WQp = StrToFloat (Edit1->Text) ;
WQg = StrToFloat (Edit2->Text) ;
T = StrToFloat (Edit5->Text) ;
P1 = (WQp+K*WQg)*D*T ;
Label5->Caption = FloatToStrF ((P1) ,ffFixed,12,4) ;
//окончания расчета Р1-------------------------------------------------------

//начло сравнения Р1, Расчет tgf---------------------------------------------
if (P1>=0) {
Rbp = StrToFloat (Edit3->Text) ;
Abp = StrToFloat (Edit4->Text) ;
tgf = Rbp/Abp ;
Label1->Caption = FloatToStrF ((tgf) ,ffFixed,6,4) ;
}
else Label5->Caption = ("Ошибка1") ;
//конец расчета tgf, Расчет Kf от tgf-----------------------------------------

float table_tgf[5] = {0.26 , 0.27 , 0.28 , 0.29 , 0.30} ;
float table_Kf[5] = {1.0001 , 1.0004 , 1.0009 , 1.0016 , 1.0025} ;
for (int i = 0; i < 4; i++)
{
if ( ??????????????????????) //Здесь собственно и застрял!!!!!!!
{
Kf = table_Kf[i];
break ;
}
}
Label2->Caption = FloatToStrF ((Kf) ,ffFixed,5,4) ;

Со всем уважением user :-)

sax_ol - вы из Модеров, а ни разу мне не помогли только критекуете, я бы ни дал вам ни одного бала РЕПУТАЦИИ! зачем тогда было делать этот сайт, скажите пожалуйста?
sax_ol
Цитата(Venom @ 1:09:2008 - 16:57) *
зачем тогда было делать этот сайт, скажите пожалуйста?
А вы думаете, для того чтобы в энный раз разжевывать истины, которые разжеваны в любой литературе? Вы ошибаетесь.
Ну а про репутацию скажу так - как вы думаете, мне от бала реутации - жарко или холодно?
Цитата(Venom @ 1:09:2008 - 16:57) *
Здесь собственно и застрял!!!!!!!
Вам уже тут все рассказали, а вы все еще "застрял" ... прискорбно sad.gif
European
Цитата(Venom @ 1:09:2008 - 15:57) *
я пытаюсь сравнить (А = b/c) c элементом масива (table_tgf) и в случае (А=table_tgf[i]) присвоить (D=table_Kf[i]) но (А) отличается от значения в массиве (table_tgf[i]) на тысячные доли, в результате сравнения не происходит, присваивания естественно то же.

if( A - table_tgf < 0.0001 )
{
    D = table_Kf[i];
}
sax_ol
European Ошибка в ифе, из массива итем нужен, да и по модулю правильнее. wink.gif
Venom
European - ОГРОМНОЕ при Огромное спасибо Вам! В отличии от некоторых (->sax_ol) ВЫ действовали, а не разглагольствовали!
sax_ol - такое ощющение складывается что вы то ли знаете С++ и ставите себя привыше других, то ли не знаете вовсе но изо всех сил стараетесь что бы поверили в обратное.

Тема исчерпала себя - ее можно смело закрыть.
European
Цитата(sax_ol @ 1:09:2008 - 18:34) *
Ошибка в ифе, из массива итем нужен, да и по модулю правильнее.

Это не ошибка, а попытка заставить человека подумать
Цитата(sax_ol @ 1:09:2008 - 18:34) *
да и по модулю правильнее.

Вот тут ты прав...
sax_ol
Venom Неа - третье: я не знаю си++, но при этом ставлю себя превыше других. Так вам сойдет?
А вот если бы вы действовали, то тема еще на посту, этак 6-ом "исчерпала себя", бы, вот.
sax_ol
Venom Вот специально для вас (и не только, т.к. многие думают также) постарался и нашел и опубликовал: ]]>Для чего нужен форум? ]]>
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.