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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Запись переменных в файл, переменные double преобразовать в char? 
:(
    Опции темы
Grief
Дата 11.6.2007, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Помогите разобраться. Есть программа, которая расчитывает некоторые значения, по которым затем строится график. Для рассчетных значений код такой:
Код

for (int i=0;i<NumberPoints;i++)
        {
            XValues[i] = XStart + i * Step;
            YValues[i] = mf.CalcFormDuration(XStart + i * Step, m_Attenuat, m_pSpeed, m_RelativeDuration,
                                    m_TiltDispCharacter, m_LengthWave, m_LengthWaveZeroDisp,
                                    m_DiametrMod, m_NonlineConstit, m_Power, m_pFrequency);        
        }

Необходимо полученные значения (YValues[i]) записать в файл, чтобы потом можно было его прочесть в маткаде и уже там построить графики. Как это возможно сделать? Нашла пример в книге записи в файл строк, а как сделать тоже самое для double? Буду очень признательна за ответы.
PM MAIL   Вверх
Voldemar2004
  Дата 11.6.2007, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Есть готовая функция itoa():
Код
#include <stdlib.h>
#include <stdio.h>

int main(void)
{
   int number = 12345;
   char string[25];

   itoa(number, string, 10);
   printf("integer = %d string = %s\n", number, string);
   return 0;
}


Я не понял, зачем преобразовывать в char, если можно писать в файл и тип double ?


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

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


Новичок



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

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



Voldemar2004, я уже нашла эту функцию, но 2005 студия ругается и предлагает свою. Все равно не работает. А ка сделать запись в файл типа double?!
PM MAIL   Вверх
Kuvaldis
Дата 11.6.2007, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


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

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



Grief, 
Если работаешь в стиле С, то используй fprintf (аналогично printf, но вывод в файл, см. хелп)
Если - в стиле С++, то стандартная работа  с потоками . Только установи манипуляторы точности smile

Это сообщение отредактировал(а) Kuvaldis - 11.6.2007, 14:21


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
Dov
Дата 11.6.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Grief, а char ты как пишешь в файл? Пример покажи, если не трудно.  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Voldemar2004
Дата 11.6.2007, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Код
#include <fstream.h>
#include <iostream.h>

void SaveToFile(char *FileName, char* Value);

int main(int argc, char* argv[])
{

SaveToFile("D:\\111", "-31232.12321");

return 0;
}


void SaveToFile(char *FileName, char* Value)
{

char* Text;

strcpy( Text, Value );

        ofstream file(FileName);

        file << Text;

        file.close();

}


У меня все работает.

Добавлено через 5 минут и 26 секунд
Или так: но это для Builder'a.
Код
#include <fstream.h>
#include <iostream.h>
#include <vcl.h>

void SaveToFile(char *FileName, double Value);

int main(int argc, char* argv[])
{

SaveToFile("D:\\111", -31232.12321);

return 0;
}


void SaveToFile(char *FileName, double Value)
{

AnsiString Text = FloatToStr(Value);

        ofstream file(FileName);

        file << Text;

        file.close();

}


Это сообщение отредактировал(а) Voldemar2004 - 11.6.2007, 14:34


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

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


Новичок



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

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



Dov, я попробовала вот так:
Код

for (int i=0;i<NumberPoints;i++)
        {
            XValues[i] = XStart + i * Step;
            YValues[i] = mf.CalcFormDuration(XStart + i * Step, m_Attenuat, m_pSpeed, m_RelativeDuration,
                                    m_TiltDispCharacter, m_LengthWave, m_LengthWaveZeroDisp,
                                    m_DiametrMod, m_NonlineConstit, m_Power, m_pFrequency);
            char * szString = new char[100];
            _itoa_s(YValues[i], szString,100,100);
            strcpy_s(OutFloat[i], szString);

а потом обработка нажатия кнопки в меню, т.е. сама запись:
Код

void CSolGraphView::OnSaveData()
{
    CFile OutFile("data.txt", CFile::modeCreate | CFile::modeWrite);
    for(int loop_index = 0; loop_index < 1000; loop_index++)
    {
        OutFile.Write(OutFloat[loop_index],20);
    }
    OutFile.Close();
}


неправильно видимо =(

Voldemar2004, честно говоря мне не совсем понятно как мне этот код применить к своей задаче, с учетом того, что мне неоходима построчная запись переменных, для дальнейшего использования этих значений в маткаде...  smile 
PM MAIL   Вверх
Dov
Дата 11.6.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Grief, может что-то такое замутить?  smile 
Для примера:
Код

void CSolGraphView::OnSaveData()
{
    CStdioFile OutFile;
    OutFile.Open("data.txt", CStdioFile::modeCreate | CStdioFile::modeWrite);

    double OutFloat[3] = {3.45, 65.5, 87.103};
    CString buf;

    for(int loop_index = 0; loop_index < 3; loop_index++)
    {
        buf.Format("%g ", OutFloat[loop_index]);
        OutFile.WriteString(buf);
    }

    OutFile.Close();
}


Это сообщение отредактировал(а) Dov - 11.6.2007, 20:47


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Grief
Дата 11.6.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Dov, это здорово, только я видимо совсем плоха, как мне вместо 
Код

 double OutFloat[3] = {3.45, 65.5, 87.103};

влепить свою переменную, которая по циклу считается, да еще, чтобы значения в отдельную строку писались, а не через пробел?  smile 


как влепить переменную знаю, а как сделать это построчно?

Это сообщение отредактировал(а) Grief - 11.6.2007, 21:17
PM MAIL   Вверх
Dov
Дата 11.6.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(Grief @  11.6.2007,  21:09 Найти цитируемый пост)
как мне вместо ... влепить свою переменную, которая по циклу считается

Grief,  ты ж ведь её вычисляешь каким-то образом. Вот и подставь вместо этого.  smile 

Цитата(Grief @  11.6.2007,  21:09 Найти цитируемый пост)
да еще, чтобы значения в отдельную строку писались, а не через пробел?

так:
Код
buf.Format("%g\n", OutFloat[loop_index]);




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Grief
Дата 11.6.2007, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Dov, да, туплю =) ну и последний вопрос тогда: а как сделать, чтобы все это не висло при подсчете значений (у меня их там больше 1000)?
PM MAIL   Вверх
Dov
Дата 11.6.2007, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Grief, не видя кода твоей программы, ответить на твой вопрос довольно сложно.  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Grief
Дата 11.6.2007, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Dov, а все, точность просто уменьшила и нормально =) спасибо огромное! smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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