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

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем Venom, 28 авг 2008.

Статус темы:
Закрыта.
  1. Venom

    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

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    А сколько страниц самой простецкой книги по C++ Вы прочитали?
     
  3. Venom

    Venom Гость

  4. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
  5. Venom

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

    Конец цитаты. И тому подобная ин формация?
     
  6. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Не такая уж и куча... Берете книгу Страуструпа 3-го издания, читаете раздел 5.2, спрашиваете что не понятно
    Не нужно читать всё подряд, читайте то, что вам советуют
     
  7. Venom

    Venom Гость

    Эврика 6 часов протрачено - Массивы более и мение изучено.
    European спасибо за
    только вот возникли сложности следующего харрактера, пользуясь советом спрашиваю:

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

    часть кода:
    Код (Text):
    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;
    }
     
  8. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Несколько раз прочитал, но так и не понял точно в чем проблема... Судя по всему Вы пытаетесь сравнить два числа, которые отличаются тысячными значения и равенство не выполняется, а Вам нужно чтобы эти числа были равны. Так?
    Ну тогда существует следующий прием:
    Код (Text):
    double a = 1.00001;
    double b = 1.000011;
    if( a - b < 0.0001 )
    {
    // TODO
    }
    Таким кодом Вы сравниваете 2 числа с некоторой точностью (до 0.0001)
     
  9. Venom

    Venom Гость

    European - Вы правильно поняли! Именно, мне нужно сравнить значение полученное в ходе вычисления со значением в массиве при совпадении, другой переменной должно присвоиться значение эквивалентное ячейке с совпадающим значением. скажите пожалуйса как это можно реализовать в массиве? у меня 204 значения tgf и столько же Kf + полученое значение отличается от значения в массиве на тысячные, сравнение не выполняется. ваш пример:
    я не пойму как применить в своем вопросе :-((

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

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Venom, извините, но я не могу понять что Вам нужно сделать
     
  11. Venom

    Venom Гость

    Уважаемый 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 - вы из Модеров, а ни разу мне не помогли только критекуете, я бы ни дал вам ни одного бала РЕПУТАЦИИ! зачем тогда было делать этот сайт, скажите пожалуйста?
     
  12. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0

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

    Venom Гость

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

    Тема исчерпала себя - ее можно смело закрыть.
     
  14. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Это не ошибка, а попытка заставить человека подумать
    Вот тут ты прав...
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей