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

настя7208 настя7208    3   09.06.2020 19:55    21

Ответы
Erzhan030 Erzhan030  09.01.2024 21:39
Хорошо, вот пошаговое решение задачи:

1. Определение переменных и открытие файла:
- Создайте переменные для хранения количества удалений (назовите ее `count`) и для текущего числа из файла (назовите ее `num`).
- Откройте бинарный файл для чтения и записи в режиме "rb+" (бинарное чтение и обновление).

2. Поиск отрицательных чисел и удаление:
- Используя цикл, который будет выполняться до тех пор, пока не достигнут конец файла (означает, что все числа были проверены):
- Считайте текущее число из файла и сохраните его в переменную `num`. Если происходит ошибка чтения из файла, выйдите из цикла.
- Если `num` меньше нуля (отрицательное число), то:
- Последуйте к текущей позиции в файле, используя функцию `fseek` с аргументами `0L` (сдвиг от начала файла), `SEEK_CUR` (относительный сдвиг) и `sizeof(double)` (размер типа double).
- Увеличьте переменную `count` на 1.
- Если `num` больше или равно нулю, перейдите к следующему числу без изменений.

3. Запись количества удалений в конец файла:
- Разместите указатель в конце файла, используя функцию `fseek` с аргументами `0L`, `SEEK_END` (абсолютный сдвиг) и `-sizeof(double)` (сдвиг на обратное количество байтов, чтобы пройти мимо последнего числа).
- Запишите количество удалений в конец файла, используя функцию `fwrite` с аргументами `&count`, `sizeof(int)` (размер типа int) и 1 (если нужно записать только одно число).

4. Закрытие файла:
- Закройте файл, используя функцию `fclose`.

Вот полный код программы на языке C:

```c
#include

int main() {
int count = 0;
double num;

FILE* file = fopen("input.bin", "rb+");
if (file == NULL) {
printf("Не удалось открыть файл.\n");
return 1;
}

while (!feof(file)) {
fread(&num, sizeof(double), 1, file);

if (num < 0) {
fseek(file, sizeof(double), SEEK_CUR);
count++;
}
}

fseek(file, 0L, SEEK_END);
fwrite(&count, sizeof(int), 1, file);

fclose(file);

printf("Удалено чисел: %d\n", count);

return 0;
}
```

При использовании этого кода необходимо убедиться, что файл "input.bin" существует в той же директории, где находится программа, и содержит вещественные числа в бинарном формате.

Надеюсь, это поможет! Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика