Делаю первые шаги в С++

  • Автор темы Venom
  • Дата начала
Статус
Закрыто для дальнейших ответов.
V

Venom

Гость
#1
Здравствуйте уважаемые!!! Ваша помощь уже помогла мне понять принципы С++ с каждым днем и новой задачей растет моя увлеченность этой областью компютерных знаний! За что, Вам огромное спасибо! Но как говориться "Чем дальше в лес тем больше дров" и вот новая проблема: в процесе вычисления переменной 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

Пожалуйста подскажите как это реализовать??? Заранее благодарен!
 
V

Venom

Гость
#5
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" - такова спецификация типа объекта. */

Конец цитаты. И тому подобная ин формация?
 
04.09.2006
2 566
2
#6
Спасибо, что указал мне на кучу сена и сказал иголка где то там
Не такая уж и куча... Берете книгу Страуструпа 3-го издания, читаете раздел 5.2, спрашиваете что не понятно
Что можно понять например с этого, начинающему?
Не нужно читать всё подряд, читайте то, что вам советуют
 
V

Venom

Гость
#7
Эврика 6 часов протрачено - Массивы более и мение изучено.
European спасибо за
Не такая уж и куча... Берете книгу Страуструпа 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;
}
 
04.09.2006
2 566
2
#8
Несколько раз прочитал, но так и не понял точно в чем проблема... Судя по всему Вы пытаетесь сравнить два числа, которые отличаются тысячными значения и равенство не выполняется, а Вам нужно чтобы эти числа были равны. Так?
Ну тогда существует следующий прием:
Код:
double a = 1.00001;
double b = 1.000011;
if( a - b < 0.0001 )
{
// TODO
}
Таким кодом Вы сравниваете 2 числа с некоторой точностью (до 0.0001)
 
V

Venom

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

в моем примере:
if ( ( X = (table_tgf - tgf) ) < 0.01 ) -явно Бред :-(
 
V

Venom

Гость
#11
Уважаемый European я пытаюсь сравнить (А = b/c) c элементом масива (table_tgf) и в случае (А=table_tgf) присвоить (D=table_Kf) но (А) отличается от значения в массиве (table_tgf) на тысячные доли, в результате сравнения не происходит, присваивания естественно то же. Даю полностью исполняемый код:

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;
break ;
}
}
Label2->Caption = FloatToStrF ((Kf) ,ffFixed,5,4) ;

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

sax_ol - вы из Модеров, а ни разу мне не помогли только критекуете, я бы ни дал вам ни одного бала РЕПУТАЦИИ! зачем тогда было делать этот сайт, скажите пожалуйста?
 
04.09.2006
2 566
2
#12
я пытаюсь сравнить (А = b/c) c элементом масива (table_tgf) и в случае (А=table_tgf) присвоить (D=table_Kf) но (А) отличается от значения в массиве (table_tgf) на тысячные доли, в результате сравнения не происходит, присваивания естественно то же.

Код:
if( A - table_tgf < 0.0001 )
{
D = table_Kf[i];
}
 
V

Venom

Гость
#13
European - ОГРОМНОЕ при Огромное спасибо Вам! В отличии от некоторых (->sax_ol) ВЫ действовали, а не разглагольствовали!
sax_ol - такое ощющение складывается что вы то ли знаете С++ и ставите себя привыше других, то ли не знаете вовсе но изо всех сил стараетесь что бы поверили в обратное.

Тема исчерпала себя - ее можно смело закрыть.
 
Статус
Закрыто для дальнейших ответов.