Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 3
Регистрация: 07.10.2013
Сообщений: 81
1

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

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

Author24 — интернет-сервис помощи студентам
Доброго времени суток, господа)
извольте помочь мне с кодом)
Задание:
Есть бинарный файл Ф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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.12.2013, 00:11
Ответы с готовыми решениями:

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

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

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

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

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

Не по теме:

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

0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
14.12.2013, 01:53 5
Цитата Сообщение от aimbat Посмотреть сообщение
я же написал: "помощь с кодом".
для начала прокомментируй его
0
0 / 0 / 3
Регистрация: 07.10.2013
Сообщений: 81
14.12.2013, 02:17  [ТС] 6
Цитата Сообщение от ValeryS Посмотреть сообщение
для начала прокомментируй его
с таким ранком вы нуждаетесь в моих нелепых комментах?
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
14.12.2013, 02:19 7
Цитата Сообщение от aimbat Посмотреть сообщение
с таким ранком вы нуждаетесь в моих нелепых комментах?
да
потому что я не знаю что ты там написал
каким алгоритмом пользовался
и потом когда начнешь комментировать сам найдешь свои ошибки, ну если тебе это интересно конечно
0
60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
14.12.2013, 02:27 8
Цитата Сообщение от aimbat Посмотреть сообщение
я же написал: "помощь с кодом".
В каком месте? Где ошибка?
У тебя вроде готовый код, но что тебе в нем надо помочь - непонятно, ибо сидеть и разбираться в твоих задумках желания нет. Пиши конкретнее.

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

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

Добавлено через 2 минуты
ПЫСЫ почему нельзя использовать библиотеку fstream? К чему эти FILE *f1, *f; ... Как-то убого выглядит, на мой взгляд
В чем проблема в 15 строке?
Миниатюры
Бинарные файлы данных  
0
2 / 2 / 2
Регистрация: 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();
}
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
14.12.2013, 02:31 11
Цитата Сообщение от aimbat Посмотреть сообщение
В чем проблема в 15 строке?
это вот эта что ли
Цитата Сообщение от aimbat Посмотреть сообщение
cout <<"vvedite"<< i <<"element massiva"<<a[i];
а ты массив a где объявлял? и какого он размера?
я же сказал прокомментируй весь код и найдешь кучу косяков
0
60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
14.12.2013, 02:31 12
aimbat, может потому, что вы пытаетесь вывести в консоль указатель, который был лишь объявлен? Ему ведь даже ничего не присвоено.
0
2 / 2 / 2
Регистрация: 04.10.2013
Сообщений: 155
14.12.2013, 02:33 13
Цитата Сообщение от ValeryS Посмотреть сообщение
я же сказал прокомментируй весь код и найдешь кучу косяков
сударь, истину говорит...
0
60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
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...
0
0 / 0 / 3
Регистрация: 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();
}
а можно чуть прокомментить?
почему выводит во второй строке совсем другие значения + их так мноого?
0
60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
14.12.2013, 02:43 16
aimbat, во 2 строке подключение библиотеки iostream, если мне не изменяет мое зрение.
0
0 / 0 / 3
Регистрация: 07.10.2013
Сообщений: 81
14.12.2013, 02:46  [ТС] 17
Цитата Сообщение от uhx Посмотреть сообщение
aimbat, во 2 строке подключение библиотеки iostream, если мне не изменяет мое зрение.
прик
0
14.12.2013, 02:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.12.2013, 02:46
Помогаю со студенческими работами здесь

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

Бинарные файлы
Здравствуйте, нужно чтобы отметки шли не по порядку, а по убыванию, что нужно изменить в последнем...

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

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


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru