Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Cer9
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 23
#1

Результат не записывается в файл - C++

14.04.2015, 01:00. Просмотров 281. Ответов 4
Метки нет (Все метки)

Здравствуйте. Столкнулся с такой проблемой: после выполнения цикла (условия), результат не записывается в файл.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
int main() {
 
    FILE *out;
 
    float result, hint, mean, disp,eps; 
    int i; 
    out = fopen("out_normal.txt", "wt");
    printf("\nMean = "); scanf("%f", &mean); 
    printf("\nDisp = "); scanf("%f", &disp);
 
    /*По смыслу нормального распределения точность не должна превышать значения hint*/ 
 
    hint = 1.0 / (disp*sqrt(2 * M_PI));
 
    printf("\nPrecision(<%f)=", hint);
    scanf("%f", &eps);
    if (eps > hint) {
        printf("Illegal presicion\n"); exit(1);
    }
    srand((unsigned)time(0));
    for (i = 0; i < VOLUME; i++)
    {
        result = get_normal(mean, disp, eps);
        fprintf(out, "%f\:", result);
    }
        fclose(out);
        return 0;
    }
            float get_normal (float mean, float disp, float eps) {
P.S. заранее спасибо!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.04.2015, 01:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Результат не записывается в файл (C++):

Результат не записывается в файл - C++
#include &quot;studide.h&quot; int main() { ofstream fout(&quot;cpp.txt&quot;); setlocale(LC_CTYPE, &quot;rus&quot;); cout &lt;&lt; &quot;Введите цифру:\n&quot;; string...

Каким образом в переменную записывается результат каждого рекурсивного вызова? - C++
Всем привет! Подскажите по данной задачи, немного недопонимаю: ФАКТОРИАЛ: int FACT(int n) {int res; if(n==1) return 1; ...

Структура не записывается в файл - C++
Всем привет. Пытаюсь, значит, организовать работу с файлом в C++. Надо записать в smallfile.dat небольшую структуру, содержащую в себе поля...

Информация не записывается в файл - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;conio.h&gt; #include &lt;string&gt; using namespace std; char Otvet; string Text;...

В файл записывается мусор - C++
Добрый вечер! Почему при записи в бинарный файл, в файл записывается мусор и соответственно читается из него тоже мусор? #define...

Не записывается бинарный файл:( - C++
Здравствуйте. Программа читает четыре числа типа double в текстовом файле и записывает их в бинарный файл в той же последовательности....

4
lss
922 / 851 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
14.04.2015, 06:37 #2
Цитата Сообщение от Cer9 Посмотреть сообщение
P.S. заранее спасибо!
Заранее пожалуйста, но кода нужно больше выкладывать. Что за VOLUME? Что в get_normal() происходит?
0
Cer9
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 23
14.04.2015, 16:58  [ТС] #3
Вот код:

Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include <cstdlib>
#include <ctime>
 
#define VOLUME 32000
 
/*ГСЧ нормального распределения, mean - математическое ожидание, disp - дисперсия, eps -заданная точность*/
 
float get_normal (float mean, float disp, float eps);
 
/*вычисление интеграла от A до В методом Симпсона*/ 
 
float simpson(float А, float В, float mean, float disp);
 
/*
bottom_bound и top_bound - аппроксимация бесконечных пределов интегрирования:
 
almost_all - значение интеграла, взятого в этих конечных пределах:
 
mean и disp - параметры нормального распределения:
 
eps - заданная точность:
 
right - правая часть уравнения*/
 
/*вычисление обратной функции*/
 
float equ(float bottom_bound, float top_bound, float mean, float disp, float almost_all, float eps, float right);
 
/*вычисление подынтегральной функции в заданной точке х*/ 
 
float function(float mean, float disp, float x);
 
const double M_PI = 3.14;
 
int main() {
 
    FILE *out;
 
    float result, hint, mean, disp,eps; 
    int i; 
    out = fopen("out_normal.txt", "wt");
    printf("\nMean = "); scanf("%f", &mean); 
    printf("\nDisp = "); scanf("%f", &disp);
 
    /*По смыслу нормального распределения точность не должна превышать значения hint*/ 
 
    hint = 1.0 / (disp*sqrt(2 * M_PI));
 
    printf("\nPrecision(<%f)=", hint);
    scanf("%f", &eps);
    if (eps > hint) {
        printf("Illegal presicion\n"); exit(1);
    }
    srand((unsigned)time(0));
    for (i = 0; i < VOLUME; i++)
    {
        result = get_normal(mean, disp, eps);
        fprintf(out, "%f\:", result);
    }
        fclose(out);
        return 0;
    }
            float get_normal (float mean, float disp, float eps) {
 
    int r_num;
 
    float root,right;
    static float bottom_bound, top_bound,almost_all;
    if (almost_all == 0.0)
 
    {
 
        bottom_bound = mean - disp*sqrt(-log(2 * M_PI*eps*eps*disp*disp));
        top_bound = mean + disp*sqrt(-log(2 * M_PI*eps*eps*disp*disp));
        almost_all = simpson(bottom_bound,top_bound,mean, disp);
    }
 
    /*вычисление конечных аппроксимаций пределов интегрирования в соответствии с заданной точностью*/
 
    //bottom_bound=mean - disp*sqrt(-log(2 * M_PI * eps*eps*disp*disp)); 
    //top_bound= mean + disp*sqrt(-log(2 * M_PI * eps*eps*disp*disp));
 
    /*вычисление интеграла в этих пределах*/ 
    
    almost_all = simpson(bottom_bound, top_bound,mean, disp);
    r_num = rand();
 
        right = (float)r_num / RAND_MAX + 1;
        root = equ(bottom_bound,top_bound,mean,disp,almost_all,eps,right);
        return(root);
}
 
float simpson(float A, float B, float mean, float disp)
{
    float kl, k2, k3, s, x, h1, h;
 
    /*шаг интегрирования принимается равным 0.01. В реализации метода
    применяется процедура автоматического выбора шага с помощью апостериорных оценок*/
 
    h = 0.01;
    s = 0; 
    h1 = h / 1.5;
 
    kl = function(mean, disp, A);
    for (x = A; (x < B) && ((x + h - B) <= h1); x = x + h)
    {
 
        k2 = function(mean, disp, x + h / 2);
        k3 = function(mean, disp, x + h);
        s = s + kl + 4 * k2 + k3;
        kl = k3;
    }
 
    s = s*h / 6;
    return(s);
}
 
float function(float mean, float disp, float x)
{
    float result;
 
    result = (1.0 / (disp*sqrt(2 * M_PI)))*exp(-0.5*((x - mean) / disp)*((x - mean) / disp));
 
    return(result);
}
 
float equ (float bottom_bound, float top_bound, float mean, float disp, float almost_all, float eps, float right)
{
 
    float edge1, edge2, middle, cover, value;
    edge1 = bottom_bound; 
    edge2 = top_bound;
    if (right > almost_all) return(top_bound);
    else;
    if (right<(1 - almost_all)) return(bottom_bound);
    else;
    cover = 0;  /*введена для повышения производительности. В новой точке вычисление
                интеграла производится не от bottom_bound. а от edgel.
                в то время как значение интеграла от bottom_bound до edgel уже накоплено в cover*/ 
    while((edge2 - edge1) > eps)
    {
        middle = (edge1 + edge2) / 2;
        value = simpson(edge1, middle, mean, disp);
        if ((cover + value - right) < 0) {
            edge1 = middle;
            cover = cover + value;
        }
        else edge2 = middle;
    }
}
0
lss
922 / 851 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
15.04.2015, 02:25 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Cer9 Посмотреть сообщение
fprintf(out, "%f\:", result);
Вот на этой строчке, студия, выдаёт предупреждение: warning C4129: :: неизвестная escape-последовательность. Зачем там обратный слеш?

Добавлено через 9 минут
Еще такое пишет: warning C4715: equ: значение возвращается не при всех путях выполнения.
В функции equ(), если первые два if() не выполнятся, что вернёт функция?
Цитата Сообщение от Cer9 Посмотреть сообщение
if (right > almost_all) return(top_bound);
else;
if (right<(1 - almost_all)) return(bottom_bound);
else;
Что за точки с запятой после else?
1
Cer9
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 23
19.04.2015, 19:17  [ТС] #5
Спасибо! Проблема решена, тему можно закрывать.
0
19.04.2015, 19:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.04.2015, 19:17
Привет! Вот еще темы с ответами:

Не записывается строка в файл - C++
Не записывается строка в файл в чем может быть причина ? fstream f(&quot;work_mem.txt&quot;, ios::in | ios::out);// ...

Записывается мусор в файл - C++
Здравствуйте, есть следующий код для вывода дефолтных значений в файл: #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace...

Неправильно записывается символ в файл - C++
ПОМОГИТЕ КТО ЧЕМ МОЖЕТ!!! Зашифровал значит текст.Дальше его расшифровую.Расшифровал Получил ASCII код символа.Пишу что-то типа: int...

В файл записывается только последнее значение - C++
Есть программка которая записывает результат в файл. Что нужно изменить чтобы в файле оставались всё результаты, а не только последний? ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru