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

Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке: - C++

Восстановить пароль Регистрация
 
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
24.10.2013, 03:01     Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке: #1
Есть задание: Заданный файл f, компоненты которого являются целыми числами. Ни один из компонентов файла не равна нулю. Числа в файле идут в следующем порядке: 10 положительных, 10 отрицательных и т.д. Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке: 5 положительных, 5 отрицательных, 5 положительных, 5 отрицательных и т.д.

Уважаемые, программисты, поделитесь опытом отнисительно "файлов данных", пожалуйста...
P.S. желанно с коментариями)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.10.2013, 03:01     Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке:
Посмотрите здесь:

Требуется вычеркнуть минимально возможное количество чисел так, чтобы оставшиеся числа шли в порядке возрастания C++
Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке: C++
C++ Дан файл с действительными числами. Получить в новом файле компоненты исходного файла в обратном порядке.
C++ Переписать файл так, чтобы сначала шли положительные, потом отрицательные числа
Создать файл действительных чисел и переписать его компоненты в обратном порядке C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
reisal78
 Аватар для reisal78
603 / 516 / 119
Регистрация: 28.04.2013
Сообщений: 1,451
24.10.2013, 08:23     Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке: #2
Р. Лафоре. ООП.
ЗАПИСЬ ДАННЫХ
Следующая программа демонстрирует запись символа, целого числа, числа типа double и двух объектов типа string в дисковый файл. Вывод на экран не производится. Приведем листинг программы FORMATO.

Листинг 12.2. Программа FORMATO
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
// formato.cpp
// Форматированный вывод в файл с использованием <<
#include <fstream>        // для файлового ввода/вывода
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
  char ch = 'x';
  int j = 77;
  double  d = 6.02;
  string str1 = "Kafka";  // строки без
  string str2 = "Proust"; // пробелов
 
  ofstream outfile("fdata.txt"); // создать объект ofstream
 
  outfile << ch           // вставить (записать) данные
        << j
        << ' '            // пробелы между числами
        << d
        << str1
        << ' '            // пробелы между строками
        << str2;
  cout << "Файл записан\n";
  return 0;
}
Здесь мы определили объект outfile в качестве компонента класса ofstream. В то же время мы инициализировали его файлом FDATA.TXT. Инициализация резервирует для дискового файла с данным именем различные ресурсы и получает доступ (или открывает файл) к нему. Если файл не существует, он создается. Если файл уже существует, он переписывается — новые данные в нем заменяют старые. Объект outfile ведет себя подобно cout из предыдущих программ, поэтому можно использовать операцию вставки (<<) для вывода переменных любого из стандартных типов в файл. Это так замечательно работает потому, что оператор вставки перегружен в классе ostream, который является родительским для ofstream.
Когда программа завершается, объект outfile вызывает свой деструктор, который закрывает файл, так что нам не приходится делать это явным образом.
Есть несколько потенциальных проблем с форматированным выводом в дисковые файлы. Во-первых, надо разделять числа (77 и 6.02, например) нечисловыми символами. Поскольку они хранятся в виде последовательности символов, а не в виде полей фиксированной длины, это единственный шанс узнать при извлечении, где кончается одно и начинается другое число. Во-вторых, между строками должны быть разделители — по тем же причинам. Это подразумевает, что внутри строки не может быть пробелов. В этом примере для разделения данных мы использовали пробел в обоих случаях. Радует то, что символы не нуждаются в разделителях, хотя они и являются данными фиксированной длины.
Посмотреть на результаты работы программы FORMATO можно, открыв файл FDATA.TXT с помощью программы WORDPAD или команды DOS TYPE.
ЧТЕНИЕ ДАННЫХ
Прочитать файл, созданный программой FORMATO, можно с использованием объекта типа ifstream, инициализированного именем файла. Файл автоматически открывается при создании объекта. Затем данные из него можно считать с помощью оператора извлечения (>>).
Приведем листинг программы FORMATI, которая считывает данные из файла FDATA.TXT.
Листинг 12.3. Программа FORMATI
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
// formati.cpp
// форматированное чтение из файла с помощью >>
#include <fstream>              // для файлового ввода/вывода
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
  char ch;
  int j;
  double  d;
  string str1;
  string str2;
 
  ifstream infile("fdata.txt"); // создать объект ifstream 
                                // извлечь (прочесть) из него данные
  infile >> ch >> j >> d >> str1 >> str2;
 
  cout << ch << endl            // вывести данные
      << j << endl
      << d << endl
      << str1 << endl
      << str2 << endl;
  return 0;
}
Объект типа ifstream, который мы назвали infile, действует примерно так же, как cin в предыдущих программах. Если мы корректно вставляли данные в файл, то извлечь их не составит никаких проблем. Мы просто сохраняем их в соответствующих переменных и выводим на экран.
Раз вы дошли до изучения файлов, полагаю проблем "перетасовать" данные проблем не возникнет?

Кстати файлы могут быть еще бинарные. Чтение и запись в них производится немного по иначе.
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
24.10.2013, 18:19  [ТС]     Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке: #3
Спасибо, Вам, за труд и потерянное время, очень полезная информация для начинающего...
признаю, что мне все же сложно, и не стесняюсь просить помощи у вас... по этому все же хотелось бы увидеть код решение задания, пожалуйста... буду очень признателен...
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
24.10.2013, 18:42     Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке: #4
Цитата Сообщение от p1ka4y777 Посмотреть сообщение
признаю, что мне все же сложно
и будет сложно, ты же сам не начал что-то делать.
и не надо тут заливать про "поделитесь опытом", сразу бы написал "сделайте за меня"

Цитата Сообщение от p1ka4y777 Посмотреть сообщение
Для опытных и добрых программистов
время опытных программистов стоит денег, вы готовы платить? а с вашей задачей справится и новичек у которого есть желание чего-то добиться
p1ka4y777
 Аватар для p1ka4y777
2 / 2 / 0
Регистрация: 04.10.2013
Сообщений: 155
24.10.2013, 22:23  [ТС]     Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке: #5
Учу c++ не очень много времени, но что-то получилось, прошу проверьте, пожалуйста
может что-то не так или заменить нужно?
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
#include "stdafx.h"
#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();
    system("pause");
}
P.S. отдельное спасибо Jupiter за мотивацию)
Yandex
Объявления
24.10.2013, 22:23     Переписать компоненты файла f в файл g так, чтобы в файле g числа шли в следующем порядке:
Ответ Создать тему
Опции темы

Текущее время: 13:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru