Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Массив


Автор: Georgiy 26.11.2006, 22:38
В C++ Builder ввожу вещественное число с клавиатуры в код с циклом 
cout<<Rus("Введите предел ")<<endl;
cin>>N;
           for(int i=1;i<=N;i++){
                  cout<<Rus("Введите число ")<<endl;
                  cin>>sdelka[i];
                  cout<<Rus("Вот число ")<<sdelka[i];}
вещественное число показывается первое и то целое ,и цикл запускается самотёком ,и показывает самые разные числа.
Подскажите пожалуйста как быть.
Почти полный код в подфоруме C++ Builder под автором Georgiy. 

Автор: vinter 26.11.2006, 22:44
покажи как у тебя переменная\массив объявлены..
кстати не забыл что в С, индексы с нуля начинаются??

Автор: Xenon 26.11.2006, 22:47
У тебя, для начала, в цикле
Код

for(int i=1;i<=N;i++){


Ты за пределы массива выходишь. Нужно
Код

for(int i=0;i<N;i++){

Ибо в С++ массива индексируются с нуля.
И где тот самый массив sdelka? Где ты выделяешь под его память?
PS. И пользуйся тегами ! Читай правила сверху!

Автор: ip127001 27.11.2006, 14:42
100% массив int вот он и округляет не явно
смени int на double,float

Автор: Georgiy 27.11.2006, 22:52
Решил запрограммировать простенькую формулу,а упёрса лбом в стену не хочет работать прога и всё.Вот полный исходник по формулам:  TWR=E(1-f*(-сделка/наибольший проигрыш):G=TWR*(1/количество сделок);
#pragma hdrstop                       
#pragma argsused
//---------------------------------------------------------------------------
#include <iostream>
#include <conio>
#include <windows>
#include <math>
using namespace std;
//-----------------------------------------------------------------------------
char* Rus (const char* text);
//----------------------------------
  class TWR{
        int N;//Количество сделок
        double sdelka[];//Массив для сделок
        double f;//Оптимальное f;
        double temp;
    double twr_f;
    double twr;
    double Max_Loss;//Наибольший проигрыш
        public:
        TWR();//Конструктор с кол-ом сделок
        void set_sdelka();//Заполнение массива сделками
        void set_twr();//Рассчёт TWR
//----------------------------------
TWR::TWR(){
        cout<<Rus("Работает конструктор")<<endl;
        temp1=0.0;
    twr_f=1;
        f=0.01;
    twr=0.0;
    cout<<Rus("Ввести наибольший проигрыш =")<<endl;
    cin>>Max_Loss;
    cout<<Rus("Ввести количество сделок =")<<endl;
        cin>>N;}
//----------------------------------
void TWR::set_sdelka(){  //Инициализация массива сделок;
        for(int i=0,int j=1;i=N;i++,j++)//j всего лишь номер сделки;
                {cout<<Rus("ввести сделку  ")<<j<<" =";
                 cin>>temp;
                 sdelka[i]=temp;}//Напрямую cin>>sdelka[i] также не   получается;
                  }
void TWR::set_twr(){
    while(f<=1){
        for(int i=0;i<N;i++)
            {twr_f*=(1-f*(-sdelka[i]/Max_Loss));}//Нахождение twr ////первого оптим. f;
        if(twr>twr_f){
            cout<<"TWR = "<<twr<<endl;
            break;}
        f+=0.01;
        twr=twr_f;
           }
    double G;
    G=pow(twr,(1/N));//Вывод среднего геометрического
    cout<<Rus("Среднее геометрическое G= "<<G<<endl;}
int main(int argc, char* argv[])
{
TWR ob1;
ob1.set_sdelka();
ob1.set_twr();
getch();
        return 0;
}
char bufRus[256]; 
char* Rus(const char*text)
{ 
CharToOem (text,bufRus); 
return bufRus; 
}
//---------------------------------------------------------------------------

Автор: Voldemar2004 27.11.2006, 22:56
Georgiy, научись выделять код цветом! Читать неприятно. Нажми на бокс "Код" выбери язык (С++) и вставь в него свой исходник. 

Автор: Georgiy 27.11.2006, 22:59
Код
//Решил запрограммировать простенькую формулу,а упёрса лбом в стену не хочет работать прога и всё.Вот полный исходник по формулам:  TWR=E(1-f*(-сделка/наибольший проигрыш):
#pragma hdrstop                       G=TWR*(1/количество сделок);
#pragma argsused
//---------------------------------------------------------------------------
#include <iostream>
#include <conio>
#include <windows>
#include <math>
using namespace std;
//-----------------------------------------------------------------------------
char* Rus (const char* text);
//----------------------------------
  class TWR{
        int N;//Количество сделок
        double sdelka[];//Массив для сделок
        double f;//Оптимальное f;
        double temp;
    double twr_f;
    double twr;
    double Max_Loss;//Наибольший проигрыш
        public:
        TWR();//Конструктор с кол-ом сделок
        void set_sdelka();//Заполнение массива сделками
        void set_twr();//Рассчёт TWR
//----------------------------------
TWR::TWR(){
        cout<<Rus("Работает конструктор")<<endl;
        temp1=0.0;
    twr_f=1;
        f=0.01;
    twr=0.0;
    cout<<Rus("Ввести наибольший проигрыш =")<<endl;
    cin>>Max_Loss;
    cout<<Rus("Ввести количество сделок =")<<endl;
        cin>>N;}
//----------------------------------
void TWR::set_sdelka(){  //Инициализация массива сделок;
        for(int i=0,int j=1;i=N;i++,j++)//j всего лишь номер сделки;
                {cout<<Rus("ввести сделку  ")<<j<<" =";
                 cin>>temp;
                 sdelka[i]=temp;}//Напрямую cin>>sdelka[i] также не получается;
                  }
void TWR::set_twr(){
    while(f<=1){
        for(int i=0;i<N;i++)
            {twr_f*=(1-f*(-sdelka[i]/Max_Loss));}//Нахождение twr первого оптим. f;
        if(twr>twr_f){
            cout<<"TWR = "<<twr<<endl;
            break;}
        f+=0.01;
        twr=twr_f;
           }
    double G;
    G=pow(twr,(1/N));//Вывод среднего геометрического
    cout<<Rus("Среднее геометрическое G= ")<<G<<endl;}
int main(int argc, char* argv[])
{
TWR ob1;
ob1.set_sdelka();
ob1.set_twr();
getch();
        return 0;
}
char bufRus[256]; 
char* Rus(const char*text)
{ 
CharToOem (text,bufRus); 
return bufRus; 
}
//---------------------------------------------------------------------------


Спасибо за подсказку smile 

Автор: witex 28.11.2006, 02:08
Цитата

 for(int i=0,int j=1;i=N;i++,j++)//j всего лишь номер сделки;

а чё цикл бесконечный? У тебя вместо уравнения присваивание стоит! Тут точно цикл бесконечный!
А посколько  массив ещё не определён по размеру, о он просто что висит в памяти! то и кидает тебе!
А на счёт дробуй! то бывает по разнуому принимает! надо черз запятую писать, а бывает через дробь! так пробуй! 
а цикл тогда так
Код

for(int i=0,int j=1;i<N;i++,j++)//j всего лишь номер сделки;

Лудше создай динамический массив, чем не определённой длинны.

Тем более его можно без константы создать!
Код

double *sdelka = new double[N];

Меньше проблем сразу будет!

Автор: Voldemar2004 28.11.2006, 13:07
Код
  class TWR{    
        int N;//Количество сделок    
        double sdelka[];//Массив для сделок    
        double f;//Оптимальное f;    
        double temp;    
    double twr_f;    
    double twr;    
    double Max_Loss;//Наибольший проигрыш    
        public:    
        TWR();//Конструктор с кол-ом сделок    
        void set_sdelka();//Заполнение массива сделками    
        void set_twr();//Рассчёт TWR
};
Georgiy, Забыл }; после объявления класса. Потом я запустил твою прогу и там оказалось много ошибок: temp1 - не объявлена и т.д.

Автор: Georgiy 28.11.2006, 19:50
Извините за не точности, а вобщем сам смысл в самом массиве.Набирал код наспех.А динамический массив создавал таже петрушка.

Автор: Georgiy 28.11.2006, 23:12
Отладил код с выделением динамической памяти,всё равно вместо сделок ставит 0,если перед последующей сделкой ввести вещественное число и запускает самовольно. smile 
Вот код:
Код

//---------------------------------------------------------------------------
#pragma hdrstop
#pragma argsused
#include <iostream>
#include <conio>
#include <windows>
#include <math>
//---------------------------------------------------------------------------
using namespace std;
//----------------------------------
char* Rus (const char* text);
class Twr{
        double *sdelka;//Указатель на динамический массив сделок
        double temp;
        double f;//Оптимальное f
        double Max_Loss;//Наибольший проигрыш
        int N;//Количество сделок
        double twrt;
        double G;//Среднее геометрическое("Управление капиталом")
        public:
        Twr();//Конструктор
        void set_sdelka();//Заполнение массива
        void set_twr();};//Вычисления по формулам TWR=E(1-f*(-сделка/max.проигрыш))
        // и G=TWR*(1/кол-во сделок)
 Twr::Twr()
        {cout<<Rus("Введите кол-во сделок =")<<endl;
        cin>>N;
        sdelka=new double[N];
        if(!sdelka){
        cout<<Rus("Ошибка выделения памяти")<<endl;
        exit(1);}
        cout<<Rus("Введите максимальный проигрыш =")<<endl;
        cin>>Max_Loss;
        temp=1;
        f=0.01;
        }
void Twr::set_sdelka(){
        for(int i=0;i<N;i++)
        {
        cout<Rus("Введите сделку = ");
        cin>>sdelka[i];
        cout<<Rus("\n Проверка ввода =")<<sdelka[i]<<endl;}
        }
void Twr::set_twr(){
        while(f<=1){
                for(int i=0;i<N;i++)
                {temp*=(1-f*(-sdelka[i]/Max_Loss));}
                if(twrt>temp)
                        {cout<<"TWR ="<<twrt<<endl;
                         cout<<Rus("Оптимальное f =")<<f<<endl;
                         break;}
                twrt=temp;
                temp=1.0;
                f+=0.01;}
G=pow(twrt,(1/N));
cout<<Rus("Среднее геометрическое G =")<<G<<endl;
cout<<Rus("Освобождение памяти по адресу sdelka")<<endl;
free(sdelka);
                }
int main(int argc, char* argv[])
{
Twr ob;
ob.set_sdelka();
ob.set_twr();
getch();
        return 0;
}
char bufRus[256]; 
char* Rus(const char*text)
{
CharToOem (text,bufRus); 
return bufRus; 
}
//---------------------------------------------------------------------------
  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)