Из файла 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; }
Объяснение кода листинга программы
- В начале кода определяются функции обработки ошибок и функции работы с файлами.
- Создается массив целых чисел для генерации и массив для чтения из файла.
- Задаются начальное и конечное значения для генерации случайных чисел.
- Генерируются случайные числа и записываются в массив.
- Создается файл для записи двоичных данных и записываются в него сгенерированные числа.
- Файл закрывается.
- Открывается файл для чтения двоичных данных и считываются числа из него.
- Создается текстовый файл для записи нечетных чисел.
- В цикле проверяется каждое число на нечетность и записывается в текстовый файл.
- Файл закрывается.
- Возвращается 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д