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

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

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

Бинарные файлы данных - C++

14.12.2013, 00:11. Просмотров 421. Ответов 16
Метки нет (Все метки)

Доброго времени суток, господа)
извольте помочь мне с кодом)
Задание:
Есть бинарный файл Ф1 с целыми числами:10 отрицательных и 10 больше 0.
Создать файл Ф2 в котором будет 5 отрицательных, 5 положительных чисел с файла Ф1. Числа в файле Ф1 разположены хаотично!
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
#include <iostream>
#include <ctime>
#include <cstdlib>
#include <stdio.h>
using namespace std;
 
void neeew()
{
    FILE *f;
    int size=20;
    int *a;
    f=fopen("D:\\test.dat", "wb");
    for(int i = 0; i<size; ++i)
    {
        cout <<"vvedite"<< i <<"element massiva"<<a[i];
    cin>>a[i];
    }
    cout << endl;
    fclose(f);
}
void here()
{
    int *a;
    FILE *f;
    FILE *f1;
    int c=0;
    int d=0;
    f = fopen("D:\\test.dat", "rb");
    if (f)
    {
        f1=fopen("D:\\test1.dat", "wb");
        while (fread(&a,sizeof(int), 1, f))
        {
        for(int i=0;i<20;i++)
            {
            if(a[i]>0 && c<5)
                {
                    c++;
                    cout << a[i];
                    fwrite(&a[i], sizeof(int), 1, f1);
                }
                if(a[i]<0 && d<5)
                {
                    d++;
                    cout << a[i];
                    fwrite(&a[i], sizeof(int), 1, f1);
                }
            }
            fclose(f);
            fclose(f1);
        }
    }
    else 
    cout << "Error f!" << endl;
}
 
int main()
{
    int *a;
    int size=20;
    neeew();
    here();
    FILE *f1;
    f1 = fopen("D:\\test1.dat", "rb");
    if (f1)
    {
        while (fread(&a,sizeof(int), 1, f1))
        for(int i=0;i<size;i++)
        {
            cout << a[i];
 
        }
        cout << endl; 
        fclose(f1);
    }
    else 
    cout << "Error f1!" << endl;
    cin.get();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2013, 00:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Бинарные файлы данных (C++):

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

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

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

Бинарные файлы - C++
Ребята, нужна Ваша помощь. Как реализовать вот эту штуку ? Буду признателен за любые идеи В первом файле хранится k матриц из n строк...

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
14.12.2013, 00:19 #2
Код для чего выложен?
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
14.12.2013, 01:47  [ТС] #3
Цитата Сообщение от alsav22 Посмотреть сообщение
Код для чего выложен?
я же написал: "помощь с кодом".
alsav22
14.12.2013, 01:51
  #4

Не по теме:

Цитата Сообщение от aimbat Посмотреть сообщение
я же написал: "помощь с кодом".
Не ответ на вопрос.

ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
14.12.2013, 01:53 #5
Цитата Сообщение от aimbat Посмотреть сообщение
я же написал: "помощь с кодом".
для начала прокомментируй его
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
14.12.2013, 02:17  [ТС] #6
Цитата Сообщение от ValeryS Посмотреть сообщение
для начала прокомментируй его
с таким ранком вы нуждаетесь в моих нелепых комментах?
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
14.12.2013, 02:19 #7
Цитата Сообщение от aimbat Посмотреть сообщение
с таким ранком вы нуждаетесь в моих нелепых комментах?
да
потому что я не знаю что ты там написал
каким алгоритмом пользовался
и потом когда начнешь комментировать сам найдешь свои ошибки, ну если тебе это интересно конечно
uhx
59 / 59 / 6
Регистрация: 11.07.2013
Сообщений: 304
14.12.2013, 02:27 #8
Цитата Сообщение от aimbat Посмотреть сообщение
я же написал: "помощь с кодом".
В каком месте? Где ошибка?
У тебя вроде готовый код, но что тебе в нем надо помочь - непонятно, ибо сидеть и разбираться в твоих задумках желания нет. Пиши конкретнее.

Добавлено через 2 минуты
ПЫСЫ почему нельзя использовать библиотеку fstream? К чему эти FILE *f1, *f; ... Как-то убого выглядит, на мой взгляд

Добавлено через 3 минуты
А по сути все просто:
Создаешь допустим temp переменную, в которую будет записываться число. Затем узнаешь, какое оно и записываешь в тот или иной массив (их 2, для разных чисел). Потом по порядку их выводишь.
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
14.12.2013, 02:27  [ТС] #9
Цитата Сообщение от uhx Посмотреть сообщение
В каком месте? Где ошибка?
У тебя вроде готовый код, но что тебе в нем надо помочь - непонятно, ибо сидеть и разбираться в твоих задумках желания нет. Пиши конкретнее.

Добавлено через 2 минуты
ПЫСЫ почему нельзя использовать библиотеку fstream? К чему эти FILE *f1, *f; ... Как-то убого выглядит, на мой взгляд
В чем проблема в 15 строке?
Миниатюры
Бинарные файлы данных  
p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
14.12.2013, 02:29 #10
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
#include <fstream>
#include <iostream>
#include <iomanip>
 
using namespace std;
 
const int offsets[] = { 0, 2, 1, 3 }, plus = 1, minus=-1;
 
fstream f, g;
int i, j, k, X;   
int main()
{
    int curr = 1;
    f.open("f", ios::in | ios::out | ios::trunc | ios::binary);
    for (k = 1; k <= 2; ++k)
    {
        for (i = 1; i <= 10; ++i)
        {
            int value = plus*curr++;
            f.write(reinterpret_cast<char*>(&value), sizeof(value));
        }
        for (j = 1; j <= 10; ++j)
        {
            int value = minus*curr++;
            f.write(reinterpret_cast<char*>(&value), sizeof(value));
        }
    }
    g.open("g", ios::in | ios::out | std::ios::trunc | std::ios::binary);
    f.seekp(0);
    for (i = 0; !f.eof(); ++i)
        for (j = 0; j < 4 && f.good(); ++j)
        {
            f.seekg((5 * (4*i + offsets[j])) * sizeof(X));
            for (k = 1; k <= 5 && f.good(); ++k)
            {
                f.read (reinterpret_cast<char*>(&X), sizeof(X));
                if (f.gcount() == sizeof(X))
                    g.write(reinterpret_cast<char*>(&X), sizeof(X));
            }
        }
    f.close();
    
    g.seekg(0);
    while (!g.eof())
    {
        g.read(reinterpret_cast<char*>(&X), sizeof(X));
        if (g.gcount() == sizeof(X)) cout << setw(4) << X;
    }
    g.close();
}
ValeryS
Модератор
6556 / 5022 / 464
Регистрация: 14.02.2011
Сообщений: 16,763
14.12.2013, 02:31 #11
Цитата Сообщение от aimbat Посмотреть сообщение
В чем проблема в 15 строке?
это вот эта что ли
Цитата Сообщение от aimbat Посмотреть сообщение
cout <<"vvedite"<< i <<"element massiva"<<a[i];
а ты массив a где объявлял? и какого он размера?
я же сказал прокомментируй весь код и найдешь кучу косяков
uhx
59 / 59 / 6
Регистрация: 11.07.2013
Сообщений: 304
14.12.2013, 02:31 #12
aimbat, может потому, что вы пытаетесь вывести в консоль указатель, который был лишь объявлен? Ему ведь даже ничего не присвоено.
p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
14.12.2013, 02:33 #13
Цитата Сообщение от ValeryS Посмотреть сообщение
я же сказал прокомментируй весь код и найдешь кучу косяков
сударь, истину говорит...
uhx
59 / 59 / 6
Регистрация: 11.07.2013
Сообщений: 304
14.12.2013, 02:35 #14
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <fstream>
#include <iostream>
using namespace std;
 
int main(){
setlocale(0,"");
int a;
ifstream f1("D:\\1.txt");
f1>>a;
cout<<a;
ofstream f2("D:\\f2.txt");
f2<<a;
system("pause>>void");
}
И никаких варнингов на fopen...
aimbat
0 / 0 / 0
Регистрация: 07.10.2013
Сообщений: 81
14.12.2013, 02:39  [ТС] #15
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
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
#include <fstream>
#include <iostream>
#include <iomanip>
 
using namespace std;
 
const int offsets[] = { 0, 2, 1, 3 }, plus = 1, minus=-1;
 
fstream f, g;
int i, j, k, X;   
int main()
{
    int curr = 1;
    f.open("f", ios::in | ios::out | ios::trunc | ios::binary);
    for (k = 1; k <= 2; ++k)
    {
        for (i = 1; i <= 10; ++i)
        {
            int value = plus*curr++;
            f.write(reinterpret_cast<char*>(&value), sizeof(value));
        }
        for (j = 1; j <= 10; ++j)
        {
            int value = minus*curr++;
            f.write(reinterpret_cast<char*>(&value), sizeof(value));
        }
    }
    g.open("g", ios::in | ios::out | std::ios::trunc | std::ios::binary);
    f.seekp(0);
    for (i = 0; !f.eof(); ++i)
        for (j = 0; j < 4 && f.good(); ++j)
        {
            f.seekg((5 * (4*i + offsets[j])) * sizeof(X));
            for (k = 1; k <= 5 && f.good(); ++k)
            {
                f.read (reinterpret_cast<char*>(&X), sizeof(X));
                if (f.gcount() == sizeof(X))
                    g.write(reinterpret_cast<char*>(&X), sizeof(X));
            }
        }
    f.close();
    
    g.seekg(0);
    while (!g.eof())
    {
        g.read(reinterpret_cast<char*>(&X), sizeof(X));
        if (g.gcount() == sizeof(X)) cout << setw(4) << X;
    }
    g.close();
}
а можно чуть прокомментить?
почему выводит во второй строке совсем другие значения + их так мноого?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2013, 02:39
Привет! Вот еще темы с ответами:

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

Бинарные файлы - C++
В файле содержатся числа. Сформировать из них матрицу, содержащую пять элементов в строке. Лишние числа отбросить. Вывести на печать...

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.12.2013, 02:39
Ответ Создать тему
Опции темы

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