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

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

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

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

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

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

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

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

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

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

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

С++ бинарные файлы - C++
Вот мой чудо-код, но он походу только *.txt файлы открывает, а мне нужно что бы и бинарные тоже. Прошу помощи!!! #include "stdafx.h" ...

5
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
05.01.2012, 16:43 #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
1
talis
792 / 544 / 37
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
05.01.2012, 16:55 #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 в текстовом виде. Какой же он у вас тогда бинарный?

2
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
05.01.2012, 17:20 #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;
}
0
talis
05.01.2012, 17:24
  #5

Не по теме:

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

0
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
05.01.2012, 17:40 #6
talis, ну я написал просто для того чтобы автор мог увидеть как это делается, поэтому нет никаких уведомлений, запроса на ввод имени файла, информации об ошибках (exit(1) малоинформативно ведь). Дальше пусть автор правит код сам, а заодно по ходу дела разбирается что и как работает. Для сдачи в виде лабораторной мой код плохо подходит и так и было задумано.
В идеале лучше добавить
C++
1
2
while(cin>>d);
 file.write((const char*) &(d),sizeof(double));
при этом не забывая уведомить пользователя что происходит, что нужно ввести, добавив проверку что поток в хорошем( good) состоянии и очистку его в случае ошибок ... но писать это скучно и не интересно, я оставляю это автору темы )
1
05.01.2012, 17:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.01.2012, 17:40
Привет! Вот еще темы с ответами:

Бинарные файлы - C++
Нужна помощь Во время работы программы если взять много значений программа вылетает. Уже все перепробывал. не знаю что делать ...

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

Бинарные файлы - C++
Всё началось с необходимости наличия программы, в которую вводишь число и она говорит есть ли такое в файле(мне кажется удобнее...

Бинарные файлы - C++
Есть 2 текстовых файла .В первом информации представлена в след виде:номер и ФИО,во втором номер Группы,и оценки по предметам.Так мне нужно...


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

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

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