Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 50, средняя оценка - 4.78
PrettyNya
0 / 0 / 0
Регистрация: 04.01.2012
Сообщений: 12
#1

бинарные файлы, C++ - C++

05.01.2012, 16:14. Просмотров 6273. Ответов 5
Метки нет (Все метки)

Работа с двоичными файлами.
Создать файл состоящий из n-вещественных чисел. Найти сумму всех положительных чисел данного файла.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.01.2012, 16:14     бинарные файлы, C++
Посмотрите здесь:

Бинарные файлы - C++
Всем добрый день/вечер/ночь! У меня такой вопрос. Создал структуру и записал в файл. При записи в пошаговом режиме - все нормально....

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

Бинарные файлы c++ - C++
Здравствуйте. Нужно в бинарный файл записать строку (нового стиля), единственное что известно, так это то, что в строке не более 16...

Бинарные файлы - C++
Ребята у вас есть какие та примеры программок работы с бинарными файлами, к примеры поменять местами максимальные и минимальные значения...

Бинарные файлы в С++ - C++
У меня есть програмка которая находит наименьший общий делитель числа#include<iostream> using namespace std; int main() { int n; ...

Бинарные файлы.. - C++
Доброго времени суток, господа! Возникла проблемка с открытием бинарного файла: char stroka; fstream bin_file; ...

Бинарные файлы - C++
Помогите пожалуйста написать программы. Исходный файл формировать программно. Количество элементов исходного файла неизвестно. В...

Бинарные файлы - C++
Прошу помочь с новыми задачками

Бинарные файлы - C++
1.Записать в файл N действительных чисел a1, a2, …,an. Организовать новый файл , элементы которого вычисляются по формуле:...

Двоичные (бинарные ) файлы С++ - C++
Помогите, пожалуйста, переделать эту же программу (она рабочая) только для двоичного (бинарного ) файла Буду очень признателен за...

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

Бинарные файлы и структуры - C++
Доброго времени суток. Прошу ответить на пару вопросов: 1) Почему результат операции sizeof, применённый к структуре, не совпадает с...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
05.01.2012, 16:43     бинарные файлы, C++ #2
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
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
    double d=2.2,e=-1.5,f=4.67,g=0.00,h=-1;
    fstream file;
    file.open("file.txt",fstream::in | fstream::out | fstream::trunc);
    if(!file)
     exit(1);
    file<<d<<' '<<e<<' '<<f<<' '<<g<<' '<<h;
 
    double temp,sum;
    temp=sum=0;
 
    file.seekp(0);
    while(!file.eof())
    {
        file>>temp;
        if (temp>0)
         sum+=temp;
    }
 
    cout<<sum;
}
Добавлено через 10 минут
Забыл только что у Вас бинарные файлы, при открытии файла не хватает флага
C++
1
fstream::binary
talis
791 / 543 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
05.01.2012, 16:55     бинарные файлы, C++ #3
Цитата Сообщение от PrettyNya Посмотреть сообщение
Работа с двоичными файлами.
Создать файл состоящий из n-вещественных чисел. Найти сумму всех положительных чисел данного файла.
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
#include <iostream>
#include <fstream>
#include <string>
#include <time.h>
#include <cstdlib>
 
int main( )
{
    srand( time( 0 ) );
 
    std::string file_name;
 
    std::cout << "file name >>> ";
    getline( std::cin, file_name );
 
    std::fstream fs( file_name, std::ios::in | std::ios::out | std::ios::trunc | std::ios::binary );
 
    if( !fs.is_open() )
    {
        std::cout << "could not open '" << file_name << "' for rw\n";
        return 1;
    }
 
    size_t count;
 
    std::cout << "numbers count >>> ";
    std::cin >> count;
 
    if( !count )
    {
        std::cout << "must be greater then 0\n";
        return 2;
    }
 
 
    for( size_t i = 0; i < count; i++ )
    {
        double num = ( rand() - double( rand() ) ) * double( rand() % 10 * 0.1 );
        fs.write( (const char *)(&num), sizeof(num) );
 
        if( !fs.good() )
        {
            std::cout << "error while writing values\n";
            return 3;
        }
    }
 
    std::cout << "done writing;\n";
 
    fs.seekg( 0, std::ios_base::beg );
 
    double summ = 0.0;
    size_t i = 0,
           pos_count = 0;
 
    while( !fs.eof() )
    {
        double val;
        fs.read( (char*)(&val), sizeof( val ) );
 
        if( fs.eof() )
           break;
 
        if( !fs.good() )
        {
            std::cout << "error while reading values\n";
            return 4;
        }
 
        if( val > 0 )
        {
           summ += val;
           pos_count++;
        }
 
        i++;
    }
 
    std::cout << "done reading: " << i << " values read; the summ of positive doubles is " << summ << " (" << pos_count << " values)\n";
 
    fs.close();
 
    return 0;
}
Добавлено через 1 минуту

Не по теме:

Gepar, у вас ведь operator<< запишет double в текстовом виде. Какой же он у вас тогда бинарный?

Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
05.01.2012, 17:20     бинарные файлы, C++ #4
talis, моя ошибка, делал изначально как просто запись в файл, потом когда листал темы увидел надпись бинарные и добавил что нужно бы дописать флаг для бинарного файла, а теперь вот вспомнил что вывод << не будет писать в виде бинарного файла.
Исправляюсь
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
#include <iostream>
#include <fstream>
using namespace std;
 
int main()
{
    double d=2.2,e=-1.5,f=4.67,g=-0.02;
    fstream file;
    file.open("file.txt",fstream::in | fstream::out | fstream::trunc | fstream::binary);
    if(!file)
     exit(1);
    file.write((const char*) &(d),sizeof(double)).write((const char*) &(e),sizeof(double));
    file.write((const char*) &(f),sizeof(double)).write((const char*) &(g),sizeof(double));
 
    double temp,sum;
    temp=sum=0;
 
    file.seekp(0);
    while(!file.eof())
    {
        file.read((char*) &(temp),sizeof(double));
        if (temp>0)
         sum+=temp;
    }
 
    cout<<sum;
}
talis
05.01.2012, 17:24
  #5

Не по теме:

Gepar, а теперь то же самое, но для n = 10'000 Извините, не удержался.

Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
05.01.2012, 17:40     бинарные файлы, C++ #6
talis, ну я написал просто для того чтобы автор мог увидеть как это делается, поэтому нет никаких уведомлений, запроса на ввод имени файла, информации об ошибках (exit(1) малоинформативно ведь). Дальше пусть автор правит код сам, а заодно по ходу дела разбирается что и как работает. Для сдачи в виде лабораторной мой код плохо подходит и так и было задумано.
В идеале лучше добавить
C++
1
2
while(cin>>d);
 file.write((const char*) &(d),sizeof(double));
при этом не забывая уведомить пользователя что происходит, что нужно ввести, добавив проверку что поток в хорошем( good) состоянии и очистку его в случае ошибок ... но писать это скучно и не интересно, я оставляю это автору темы )
Yandex
Объявления
05.01.2012, 17:40     бинарные файлы, C++
Ответ Создать тему
Опции темы

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