Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Множественное объявление идентификатора, в чем ошибка? 
:(
    Опции темы
leahov
Дата 7.12.2007, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



подскажите пожалуйста как исправить ошибку в коде 

Код


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include<math.h>

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
float f(float x)
{
//    return x*x*x + 3*x - 2;
 return x*x*x + x - 5;
}
float fdx(float x)
{//    return 3*x*x +3;
  return 3*x*x +1;
}
float fd2x(float x)
{
    return 4*x;
}
//---------------------------------------------------------------------------

void TForm1::modinewton(float x0, float x1, float epsilon, int step)
{
        if (abs(x1-x0) > epsilon)

         {
           ListBox2->Items->Add("x: "+FloatToStr(x1));
           ListBox2->Items->Add("f(x): "+FloatToStr(f(x1)));
           ListBox2->Items->Add("steps: "+IntToStr(step));
           return;
         }
         const float xc = fdx(x0);
         float x1 = x0 - f(x0)/xc;


         modinewton(x0, x1, epsilon, step + 1);

}

void __fastcall TForm1::bExe2Click(TObject *Sender)
{
  float a = StrToFloat(Edit1->Text);
  float b = StrToFloat(Edit2->Text);
  float epsilon = StrToFloat(Edit3->Text);

  if(f(a)*f(b) < 0)
  {
    ListBox2->Items->Add("данные неверны");
    return;
  }
  else
  {
   float x0 = a;
    if(f(a)*fd2x(a) < 0)
    {
     x0 = b;
    }

    ListBox2->Items->Add("===================================");
    modinewton(x0, x1, epsilon, 1);
    ListBox2->Items->Add("===================================");
    ListBox2->Items->Add("");
  }

}
//---------------------------------------------------------------------------




выдает ошибки:
[C++ Error] Unit1.cpp(101): E2238 Multiple declaration for 'x1'
[C++ Error] Unit1.cpp(128): E2451 Undefined symbol 'x1'

PM MAIL   Вверх
ama_kid
Дата 7.12.2007, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

Репутация: 10
Всего: 95



Цитата(leahov @  7.12.2007,  17:27 Найти цитируемый пост)
[C++ Error] Unit1.cpp(101): E2238 Multiple declaration for 'x1'

void TForm1::modinewton(float x0, float x1, float epsilon, int step)
{
 ...
         float x1 = x0 - f(x0)/xc;
...
}
либо убери float перед выражением в теле функции, либо (что более правильно имхо) - используй другое имя переменной...



--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Vyacheslav
Дата 7.12.2007, 17:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2124
Регистрация: 25.3.2002
Где: Москва

Репутация: 47
Всего: 59



[C++ Error] Unit1.cpp(101): E2238 Multiple declaration for 'x1'
Код

void TForm1::modinewton(float x0, float x1/* первое объясление x1*/, float epsilon, int step)
{
        if (abs(x1-x0) > epsilon)

         {
           ListBox2->Items->Add("x: "+FloatToStr(x1));
           ListBox2->Items->Add("f(x): "+FloatToStr(f(x1)));
           ListBox2->Items->Add("steps: "+IntToStr(step));
           return;
         }
         const float xc = fdx(x0);
         float x1/*второе объявление x1*/ = x0 - f(x0)/xc;


         modinewton(x0, x1, epsilon, step + 1);

}



[C++ Error] Unit1.cpp(128): E2451 Undefined symbol 'x1'

Код

void __fastcall TForm1::bExe2Click(TObject *Sender)
{
  float a = StrToFloat(Edit1->Text);
  float b = StrToFloat(Edit2->Text);
  float epsilon = StrToFloat(Edit3->Text);

  if(f(a)*f(b) < 0)
  {
    ListBox2->Items->Add("данные неверны");
    return;
  }
  else
  {
   float x0 = a;
    if(f(a)*fd2x(a) < 0)
    {
     x0 = b;
    }

    ListBox2->Items->Add("===================================");
    modinewton(x0, x1, epsilon, 1); /*x1 нигде в этом методе не объявлен */
    ListBox2->Items->Add("===================================");
    ListBox2->Items->Add("");
  }





--------------------
С уважением, Вячеслав Ермолаев
PM MAIL WWW ICQ   Вверх
leahov
Дата 7.12.2007, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



тут подсказали сделать так
Код

float x1 = x0 - f(x0)/xc;
заменить на
x1 = x0 - f(x0)/xc;



а с [C++ Error] Unit1.cpp(128): E2451 Undefined symbol 'x1'

так
Код

class TForm1: public TForm
{
private:
    float x1;

}



вроде запустилась , но чтобы не вводил получаю результат x=0, f(x) = -5
PM MAIL   Вверх
leahov
Дата 7.12.2007, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



понял, получатся его (x1) надо обьявить, но как? единственное что пришло в "дурную"  smile голову это
Код

float x0 = a;
x0=x1;
          if(f(a)*fd2x(a) < 0)
    {
        x0 = b;

    }



но это не верно, это факт
PM MAIL   Вверх
leahov
Дата 8.12.2007, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



не могу понять как его использовать, пробывал и x0=x1 и x1 = x1 - x0, ещё несколько вариантов перепробывал или ничего не меняется или виснит или вообще stack overflow. кто с математикой дружит, пожалуйста подскажите как сделать чтоб шел расчет.
PM MAIL   Вверх
ksili
Дата 8.12.2007, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Код

void TForm1::modinewton(float x0, float x1, float epsilon, int step)
{
        if (abs(x1-x0) > epsilon)

         {
           ListBox2->Items->Add("x: "+FloatToStr(x1));
           ListBox2->Items->Add("f(x): "+FloatToStr(f(x1)));
           ListBox2->Items->Add("steps: "+IntToStr(step));
           return;
         }
         const float xc = fdx(x0);
         /*[S]float[/S]*/ x1 = x0 - f(x0)/xc;


         modinewton(x0, x1, epsilon, step + 1);
}


Вот так вроде должно компилиться и не ругаться. А чтобыэта функция ещё и изменяла значение x1, передавай его по сцылке:

Код

void TForm1::modinewton(float x0, float &x1, float epsilon, int step)




--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
leahov
Дата 8.12.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 9.12.2005

Репутация: нет
Всего: нет



ksili спасибо за совет, но во второй бутонной части программы присутствует ошибка [C++ Error] Unit1.cpp(128): E2451 Undefined symbol 'x1' , вопрос как задать ему действие
PM MAIL   Вверх
ksili
Дата 8.12.2007, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: 1
Всего: 17



Так а что именно ты в эту функцию хочешь передать? Что надо, то и передавай
Я логики программы не знаю, поэтому ничего больше подсказать не могу


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.