Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Массив, Ввод вещественных чисел в массив 
:(
    Опции темы
Georgiy
Дата 26.11.2006, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В 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. 


Это сообщение отредактировал(а) Georgiy - 27.11.2006, 22:50

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  ___.txt 2,20 Kb
PM MAIL   Вверх
vinter
Дата 26.11.2006, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Explorer
****


Профиль
Группа: Завсегдатай
Сообщений: 2735
Регистрация: 1.4.2006
Где: Н.Новгород

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



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


--------------------
Мой блог
PM MAIL WWW   Вверх
Xenon
Дата 26.11.2006, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



У тебя, для начала, в цикле
Код

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


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

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

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

Это сообщение отредактировал(а) Xenon - 26.11.2006, 22:50


--------------------
user posted image  
PM MAIL   Вверх
ip127001
Дата 27.11.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



100% массив int вот он и округляет не явно
смени int на double,float
--------------------
aqua currit et debere currere ut currere solebat
PM MAIL   Вверх
Georgiy
Дата 27.11.2006, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Решил запрограммировать простенькую формулу,а упёрса лбом в стену не хочет работать прога и всё.Вот полный исходник по формулам:  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; 
}
//---------------------------------------------------------------------------
PM MAIL   Вверх
Voldemar2004
Дата 27.11.2006, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



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


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Georgiy
  Дата 27.11.2006, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код
//Решил запрограммировать простенькую формулу,а упёрса лбом в стену не хочет работать прога и всё.Вот полный исходник по формулам:  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 

Это сообщение отредактировал(а) Georgiy - 27.11.2006, 23:04
PM MAIL   Вверх
witex
Дата 28.11.2006, 02:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

 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];

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

Это сообщение отредактировал(а) witex - 28.11.2006, 02:12
--------------------
Я не волшебник, я только учусь."Шлёпни в Гугл" - Афтор Былов Ю.М. 
PM MAIL   Вверх
Voldemar2004
Дата 28.11.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код
  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 - не объявлена и т.д.


--------------------
i_i 
(';') 
(V)

user posted image
PM MAIL   Вверх
Georgiy
Дата 28.11.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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


Новичок



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

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



Отладил код с выделением динамической памяти,всё равно вместо сделок ставит 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; 
}
//---------------------------------------------------------------------------
  

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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