Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.04.2022, 15:25   #1
Georgy1
 
Регистрация: 11.03.2022
Сообщений: 6
По умолчанию Файлы C++

Дан двоичный файл f, компоненты которого являются целыми числами. Никакая
компонента файла не равна нулю. Файл f содержит столько же отрицательных чисел, сколько
и положительных. Составить программу, которая переписывает компоненты файла f в файл g
так, чтобы в файле g не было двух соседних чисел с одним знаком.
В файл числа записала, а как их отсортировать, чтобы не было двух соседних с одним знаком?
Код:
FILE* fsr;
int i;
const int N = 6;
struct {
int chislo;
} rec[N] = { { 30 } , { 20 } , { -27 } , { -26 } , { -21 } , { 21 } } ;
if ((fsr = fopen("chislo.bin", "w+b")) == NULL) {
printf("File not open");
exit(1);
}
for (i = 0; i < N; i++) {
fwrite(&rec[i], sizeof(rec[i]), 1, fsr);
printf("Chislo = % 3i\n", rec[i].chislo);
}
fclose(fsr);
}
Georgy1 вне форума Ответить с цитированием
Старый 04.04.2022, 11:29   #2
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Делайте в лоб: если следущее число того же знака, то ищем первое отличающиеся и меняем с ним.
ForenLi вне форума Ответить с цитированием
Старый 04.04.2022, 12:27   #3
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

Ну так вроде fwrite, printf - это уж не совсем ++ ? Образец сдут с обыкновенного Си ?
digitalis вне форума Ответить с цитированием
Старый 04.04.2022, 19:33   #4
Georgy1
 
Регистрация: 11.03.2022
Сообщений: 6
По умолчанию

ForenLi, ничего не получается, не понимаю в какую часть алгоритм запихнуть, когда открыть, когда закрыть файл...
Georgy1 вне форума Ответить с цитированием
Старый 04.04.2022, 19:34   #5
Georgy1
 
Регистрация: 11.03.2022
Сообщений: 6
По умолчанию

digitalis, сам не скажу, нам подают это как какой то гибрид, сладкий хлеб в общем, если вы меня понимаете...
Georgy1 вне форума Ответить с цитированием
Старый 04.04.2022, 21:29   #6
maks1331
Форумчанин
 
Аватар для maks1331
 
Регистрация: 20.12.2016
Сообщений: 270
По умолчанию

Цитата:
Сообщение от Georgy1 Посмотреть сообщение
В файл числа записала
Цитата:
Сообщение от Georgy1 Посмотреть сообщение
сам не скажу
Записала, сам не скажу... Странно все это

Код:
for (i = 0; i < N; i++) {
fwrite(&rec[i], sizeof(rec[i]), 1, fsr);
Вот тут ты записываешь данные в файл, тебе нужна одна переменная, где ты запомнишь знак последнего записанного. Если встречаешь два значения с одним знаком - добавляешь текущее в массив и идешь дальше, при встрече очередной последовательности - заглядываешь в массив или идешь дальше по файлу.

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

Открываешь файл перед началом работы с ним и закрываешь после:
Открыть - прочитать - закрыть
Открыть - записать - закрыть

Если ты выбираешь путь не используя чтение всех данных с сортировкой, а запись "на лету":
Открыть - открыть - читать - записывать - закрыть - закрыть

И используй табуляцию в коде, я с ним годами работаю, мне читать сложно, ты как это делаешь?
формошлеп.рф
witech.su

Последний раз редактировалось maks1331; 04.04.2022 в 21:33.
maks1331 вне форума Ответить с цитированием
Старый 06.04.2022, 18:50   #7
Georgy1
 
Регистрация: 11.03.2022
Сообщений: 6
По умолчанию

Помогите поправить, пожалуйста
Код:
#include <iostream>
using namespace std;
const int n = 6;
int a[n];
void Write(int m)
{
    FILE* g;
    if ((g = fopen("list2", "wb")) == NULL)
    {
        printf("File not open");
        exit(1);
    }

    for (int i = 0; i < n; i++)
    {
        fwrite(&m, sizeof(m), 1, g);
    }
    fclose(g);
}
void Chet(int m)
{
    FILE* f, *g;
    int i, t, k, l;
    while (!feof(f))
    {
        for (i = 0; i <= n; i++)
        {
            fscanf(f, "%d", &m);
        }
    }

    for (i = 0; i <= n; i++)

    {
        t = a[i];
        if (t > 0) fprintf(g, "%d ", t);
    }
    for (k = 0; k <= n; k++)
    {
        l = a[k];
        if (l < 0) fprintf(g, "%d ", l);
    }
}
int main()
{
    FILE* f;
    const int n = 6;
    int mas;
    int i = 0;
    if ((f = fopen("list", "wb")) == NULL)
    {
        printf("File not open");
        exit(1);
    }
    for (int i = 0; i < n; i++)
    {
        printf("chislo");
        cin >> a[i];
        fwrite(&a[i], sizeof(a[i]), 1, f);
    }
    fclose(f);
    if ((f = fopen("list", "rb")) == NULL) {
        printf("File not open");
        exit(1);
    }
    while (fread(&mas, sizeof(mas), 1, f))
    {
        Chet(mas);
    }

}
Georgy1 вне форума Ответить с цитированием
Старый 07.04.2022, 10:38   #8
ForenLi
Форумчанин
 
Регистрация: 02.06.2021
Сообщений: 515
По умолчанию

Код:
    while (!feof(f))
    {
        for (i = 0; i <= n; i++)
        {
            fscanf(f, "%d", &m);
        }
    }
Вы же файл не открыли, что и откуда вы читаете?
Вы читаете все n+1 чисел в одно место.
Вы к массиву а обращаетесь, как имеющему n+1 элемент, хотя объявлено на n.
Задача была сделать +-+-+-.... Зачем вы пишите ++++++--------. Да и перед записью файл надо открыть.
ForenLi вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите пожалуйста расшифровать файл .json, все.кодировки попробывал! Также обьясните плеез как расшифровывать такие файлы? Все файлы щяс скину! Тимур1983 JavaScript, Ajax 11 09.11.2019 21:14
Файлы данных. типизированные файлы. последовательный доступ Elena188 Паскаль, Turbo Pascal, PascalABC.NET 15 25.01.2016 22:47
Файлы: Составить программу, которая перепишет фамилии в отдельные файлы в соответствии с названием группы Гульвира Помощь студентам 1 23.05.2013 10:04
Очень нужно сделать задачу в Delphi(Типизированные файлы. файлы записи) Vitalik1 Помощь студентам 1 16.12.2011 10:38
два вредных вопроса:про асю и прикриплёные файлы файлы steck Свободное общение 3 17.06.2007 14:53