Отсортировать массив, записанный в файле, методом Шелла (программа вылетает) - C (СИ)
Формулировка задачи:
Ребят, задача такая : написать прогу, которая отсортирует массив записанный в файле (первое число кол-во элементов массива) методом Шелла, но программа просто вылетает. Что нужно исправить?
#include <stdio.h> #include <stdlib.h> int main() { FILE *file; int i, j, k, t, N; int *A; int mas[100]; file = fopen("C:/c/output.txt","r+"); fscanf(file, "%i", &k); for (i=0; i<k; i++) { fscanf(file, "%i", &mas[i]); //printf( "%i ", mas[i]); } for(k = N/2; k > 0; k /=2) for(i = k; i < N; i++) { t = A[i]; for(j = i; j>=k; j-=k) { if(t < A[j-k]) A[j] = A[j-k]; else break; } A[j] = t; } printf("Sorted array:\n"); for (i = 0; i < 100; i++){ printf("%d ", mas[i]); printf("\n"); } fclose(file); free(mas); _getch(); return 0; }
Решение задачи: «Отсортировать массив, записанный в файле, методом Шелла (программа вылетает)»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 100 int main(void) { srand(time(NULL)); FILE *file; int i, j, k=0, t=N; int *A=(int*)malloc(sizeof(int)*N); int mas[N]; printf("Array:\n"); for(int i=0; i<N; ++i) { mas[i] = rand() %(10-(-10)+1)+(-10); printf("%d ", mas[i]); } puts(""); if((file = fopen("C://out.dat","wb+"))==NULL) printf( "The file was not opened\n" ); else { fwrite(&t,sizeof(int),1,file); fwrite(mas,sizeof(int),N,file);//теперь в файле наш массив(бинарный) rewind(file); fread(&k, sizeof(int), 1, file); fread(A, sizeof(int), k, file); for(k = N/2; k > 0; k /=2) for(i = k; i < N; i++) { t = A[i]; for(j = i; j>=k; j-=k) { if(t < A[j-k]) A[j] = A[j-k]; else break; } A[j] = t; } printf("Sorted array:\n"); for (i = 0; i < 100; i++) { printf("%d ", A[i]); } } fclose(file); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с файлами и генерации случайных чисел
- Определяем размер массива N=100
- Инициализируем генератор случайных чисел с помощью функции srand(time(NULL))
- Создаем файл для записи массива с помощью функции fopen(
C://out.dat
,wb+
) - Если файл не удалось открыть, выводим сообщение об ошибке
- Записываем размер массива в файл с помощью функции fwrite(&t,sizeof(int),1,file)
- Записываем сам массив в файл с помощью функции fwrite(mas,sizeof(int),N,file)
- Перемещаем указатель чтения в начало файла с помощью функции rewind(file)
- Считываем размер массива из файла с помощью функции fread(&k, sizeof(int), 1, file)
- Считываем сам массив из файла с помощью функции fread(A, sizeof(int), k, file)
- Сортируем массив методом Шелла (вложенные циклы)
- Выводим отсортированный массив на экран с помощью функции printf(
Sorted array:\n
) и цикла for - Закрываем файл с помощью функции fclose(file)
- Возвращаем 0, что означает успешное выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д