Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // file9.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
- // Отсортировать текстовый файл методом вставок
- #include "pch.h"
- #include <stdio.h>
- #include <stdlib.h>
- FILE* file_create(const char* filename, const char* mode)
- {
- FILE* file = fopen(filename, mode);
- if (!file)
- {
- fprintf(stderr, "Can't open file\n");
- return NULL;
- }
- return file;
- }
- int get_int()
- {
- int i, n;
- do
- {
- i = scanf_s("%d", &n);
- if (!i)
- {
- rewind(stdin);
- continue;
- }
- } while (!i);
- return n;
- }
- void file_fill(FILE* file)
- {
- int i;
- fpos_t pos;
- for (;;)
- {
- fgetpos(file, &pos);
- i = get_int();
- if (i == 999)
- {
- return;
- }
- fprintf(file, "%2d", i);
- fgetpos(file, &pos);
- }
- printf("\n\n");
- }
- void file_output(FILE* file)
- {
- rewind(file);
- int i;
- while (1)
- {
- fscanf_s(file, "%d", &i);
- fprintf(stdout, "%2d", i);
- if (feof(file) || ferror(file))
- {
- break;
- }
- }
- fprintf(stdout, "\n");
- }
- void file_sort(FILE* file)
- {
- int i, j;
- fseek(file, 0, SEEK_END);
- fpos_t end = ftell(file);
- fpos_t inner, outer;
- for (inner = 2; inner < end; inner += 2)
- {
- fsetpos(file, &inner);
- fscanf_s(file, "%d", &i);
- for (outer = inner - 2; outer >= 0; outer -= 2)
- {
- fsetpos(file, &outer);
- fscanf_s(file, "%d", &j);
- fseek(file, 0, SEEK_CUR);
- if (j <= i)
- {
- break;
- }
- fprintf(file, "%2d", j);
- fsetpos(file, &outer);
- }
- fprintf(file, "%2d", i);
- }
- }
- void bin_file_fill(FILE* file)
- {
- int i;
- for (;;)
- {
- i = get_int();
- if (i == 999)
- {
- break;
- }
- fwrite(&i, sizeof(int), 1, file);
- }
- }
- void bin_file_output(FILE* file)
- {
- rewind(file);
- int i;
- while (1)
- {
- fread(&i, sizeof(int), 1, file);
- if (feof(file)) break;
- fprintf(stdout, "%d ", i);
- }
- fprintf(stdout, "\n");
- }
- void bin_file_sort(FILE* file)
- {
- int i, j;
- fseek(file, 0, SEEK_END);
- fpos_t end = ftell(file);
- fpos_t inner, outer;
- for (inner = sizeof(int); inner < end; inner += sizeof(int))
- {
- fsetpos(file, &inner);
- fread(&i, sizeof(int), 1, file);
- for (outer = inner - sizeof(int); outer >= 0; outer -= sizeof(int))
- {
- fsetpos(file, &outer);
- fread(&j, sizeof(int), 1, file);
- fseek(file, 0, SEEK_CUR);
- if (j <= i)
- {
- break;
- }
- fwrite(&j, sizeof(int), 1, file);
- fsetpos(file, &outer);
- }
- fwrite(&i, sizeof(int), 1, file);
- }
- }
- int main()
- {
- FILE* file = file_create("text.txt", "w+b");
- bin_file_fill(file);
- bin_file_output(file);
- bin_file_sort(file);
- bin_file_output(file);
- fclose(file);
- file = file_create("text.txt", "w+");
- file_fill(file);
- file_output(file);
- file_sort(file);
- file_output(file);
- fclose(file);
- system("PAUSE");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement