Из файла F в текстовый файл скопировать все нечетные числа - C (СИ)

Узнай цену своей работы

Формулировка задачи:

прошу написать программу с помощью функций.

В типизированный файл F с помощью датчика случайных чисел записать 200 целых чисел от -50 до +50, затем из файла F в текстовый файл скопировать все нечетные числа.

сам вообще не догоняю,и времени нет,как на зло

Решение задачи: «Из файла F в текстовый файл скопировать все нечетные числа»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
void error (char* msg) {
    fprintf (stderr, msg);
    exit(-1);
}
 
int save_in_binary (FILE* f, int values[], size_t count) {
    if (!f || !values) return -1;
    return (count == fwrite (values, sizeof(int), count, f)) ? 0 : -1; 
}
 
int save_in_text (FILE* f, int values[], size_t count) {
    size_t i;
    if (!f || !values) return -1;
    for (i = 0 ; i < count ; ++i) {
        if (fprintf (f, "%d\n", values[i]) <= 0) {
            return -1;
        }
    }
    return 0;
}
 
int read_from_binary (FILE* f, int values[], size_t max) {
    size_t i;
    if (!f || !values) return -1;
    for ( i = 0 ; i < max && !feof(f) ; ++i ) {
        if (1 != fread (&values[i], sizeof(int), 1, f)) {
            return -1;
        }
    }
    return i;
}
 
int generate_from_range (int values[], size_t count, int down, int up) {
    size_t i;
    if (!values) return -1;
    for (i = 0 ; i < count ; ++i) {
        values[i] = rand() % (up - down + 1) + down;
    }
    return 0;
}
 
#define N (50)
 
int main() {
    int arr[N], arr1[N], odd[N];
    size_t i, odd_count;
    FILE* f_out_binary, *f_in_binary, *f_out_text;
    
    srand(time(NULL));
    generate_from_range (arr, N, -50, 50);
    if (!(f_out_binary = fopen ("1.dat", "wb"))) {
        error ("error open file for write\n");
    }
    if (save_in_binary(f_out_binary, arr, N) < 0) {
        error ("error save binary file\n");
    }
    fclose (f_out_binary);
    
    if (!(f_in_binary = fopen ("1.dat", "rb"))) {
        error ("error open file for read\n");
    }
    if (N != (i = read_from_binary(f_in_binary, arr1, N))) {
        printf ("%d\n", i);
        error ("error read file\n");
    }
    fclose (f_in_binary);
    
    for (i = 0, odd_count = 0 ; i < N ; ++i) {
        if (arr1[i] % 2) odd[odd_count++] = arr1[i];
    }
    
    if (!(f_out_text = fopen ("1.txt", "w"))) {
        error ("error open text file\n");
    }
    if (save_in_text (f_out_text, odd, odd_count) < 0) {
        error ("error write text file\n");
    }
    fclose (f_out_text);
    
    return 0;
}

Объяснение кода листинга программы

  1. В начале кода определяются функции обработки ошибок и функции работы с файлами.
  2. Создается массив целых чисел для генерации и массив для чтения из файла.
  3. Задаются начальное и конечное значения для генерации случайных чисел.
  4. Генерируются случайные числа и записываются в массив.
  5. Создается файл для записи двоичных данных и записываются в него сгенерированные числа.
  6. Файл закрывается.
  7. Открывается файл для чтения двоичных данных и считываются числа из него.
  8. Создается текстовый файл для записи нечетных чисел.
  9. В цикле проверяется каждое число на нечетность и записывается в текстовый файл.
  10. Файл закрывается.
  11. Возвращается 0, что означает успешное выполнение программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы