Сделал Сортировку

This commit is contained in:
AZEN-SGG 2024-11-22 09:45:40 +03:00
parent a83a31c034
commit 0d98154944
8 changed files with 152 additions and 94 deletions

3
.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
*.un~
*.exe
*~

1
Sorting/9Ex/input.txt Normal file
View file

@ -0,0 +1 @@
6 5 4 3 2 1

View file

@ -1,96 +1,25 @@
#include <stdio.h>
#include "seagwithsob.h"
#include "tools.h"
#include <stdlib.h>
int main() {
// Тест 1: Набор чисел в обычном порядке
double array1[] = {10.0, 9.00001, 8.0001, 7.001, 6.01, 5.1};
int length1 = sizeof(array1) / sizeof(array1[0]);
int main() {
FILE * file = getFile();
double * array;
int length;
if (file == NULL) return -1;
array = getArray(file);
if (array == NULL) return -2;
length = (int)array[0];
printf("Test 1 - Original array:\n");
for (int i = 0; i < length1; i++) {
printf("%lf ", array1[i]);
}
printf("\n");
array = &array[1];
printArray(array, length);
sort(array, length);
printArray(array, length);
sort(array1, length1);
printf("\n");
randomArray();
printf("Test 1 - Sorted array:\n");
for (int i = 0; i < length1; i++) {
printf("%lf ", array1[i]);
}
printf("\n\n");
// Тест 2: Все числа одинаковые
double array2[] = {1.0, 1.0, 1.0, 1.0};
int length2 = sizeof(array2) / sizeof(array2[0]);
printf("Test 2 - Original array:\n");
for (int i = 0; i < length2; i++) {
printf("%lf ", array2[i]);
}
printf("\n");
sort(array2, length2);
printf("Test 2 - Sorted array:\n");
for (int i = 0; i < length2; i++) {
printf("%lf ", array2[i]);
}
printf("\n\n");
// Тест 3: Набор чисел с отрицательными значениями
double array3[] = {-3.0, -1.5, -7.2, 2.1, 0.0};
int length3 = sizeof(array3) / sizeof(array3[0]);
printf("Test 3 - Original array:\n");
for (int i = 0; i < length3; i++) {
printf("%lf ", array3[i]);
}
printf("\n");
sort(array3, length3);
printf("Test 3 - Sorted array:\n");
for (int i = 0; i < length3; i++) {
printf("%lf ", array3[i]);
}
printf("\n\n");
// Тест 4: Набор чисел с разной экспонентой
double array4[] = {1e-10, 1e+10, 1.0, 1e-5, 1e+5};
int length4 = sizeof(array4) / sizeof(array4[0]);
printf("Test 4 - Original array:\n");
for (int i = 0; i < length4; i++) {
printf("%e ", array4[i]);
}
printf("\n");
sort(array4, length4);
printf("Test 4 - Sorted array:\n");
for (int i = 0; i < length4; i++) {
printf("%e ", array4[i]);
}
printf("\n\n");
// Тест 5: Граничные значения (минимальное и максимальное double)
double array5[] = {1e-308, 1e+308, 0.0, -1e-308, -1e+308};
int length5 = sizeof(array5) / sizeof(array5[0]);
printf("Test 5 - Original array:\n");
for (int i = 0; i < length5; i++) {
printf("%e ", array5[i]);
}
printf("\n");
sort(array5, length5);
printf("Test 5 - Sorted array:\n");
for (int i = 0; i < length5; i++) {
printf("%e ", array5[i]);
}
printf("\n");
return 0;
return 0;
}

View file

@ -1,4 +1,12 @@
all:
gcc -c main.c seagwithsob.c
gcc main.o seagwithsob.o && del *.o
a.exe
all: main.o seagwithsob.o tools.o
gcc main.o seagwithsob.o tools.o && del *.o
a.exe
main.o: main.c
gcc -c main.c
seagwithsob.o: seagwithsob.c
gcc -c seagwithsob.c
tools.o: tools.c
gcc -c tools.c

View file

@ -3,7 +3,7 @@
void sort(double * array, int length) {
double zero[length];
double unit[length];
int index;
int index, timer = -clock();
for (int j = 0; j < 63; ++j) {
index = 0;
@ -25,6 +25,9 @@ void sort(double * array, int length) {
for (int i = 0; i < index; ++i) array[i] = unit[index - i - 1];
for (int i = index; i < length; ++i) array[i] = zero[i - index];
timer += clock();
printf("Required time for sorting is %lf seconds\n", (double)timer / CLOCKS_PER_SEC);
}
void rewrite(double * array, double * zero, int len_zero, double * unit, int len_unit) {

View file

@ -2,6 +2,8 @@
#define SEAGWITHSOB
#include <string.h>
#include <stdio.h>
#include <time.h>
void sort(double * array, int length);
void rewrite(double * array, double * zero, int len_zero, double * unit, int len_unit);

92
Sorting/9Ex/tools.c Normal file
View file

@ -0,0 +1,92 @@
#include "tools.h"
FILE * getFile() {
char filename[50];
printf("Enter file name: ");
if (scanf("%s", &filename) == 1) {
FILE * file = fopen(filename, "r");
if (file == NULL) {
printf("Error file!\n)");
return NULL;
} else {
return file;
}
} else {
printf("Empty name!\n");
return NULL;
}
}
double * getArray(FILE * file) {
char filename[50];
int i, size = 2;
double * array = NULL;
double current;
if (fscanf(file, "%lf", &current) != 1) {
printf("File if empty!");
return array;
}
array = (double *)malloc(size * sizeof(double));
i = 1;
do {
if (i >= size) {
size *= 2;
array = (double *)realloc(array, sizeof(double) * size);
}
array[i] = current;
++i;
} while (fscanf(file, "%lf", &current) == 1);
array = (double *)realloc(array, sizeof(double) * i);
array[0] = (double)i;
return array;
}
bool orderliness(double * array, int length) {
for (int i = 1; i < length; ++i) if ((array[i] - array[i - 1]) < exp) return false;
return true;
}
void randomArray() {
int length;
printf("Enter length of array: ");
if (scanf("%d", &length) == 1) {
double * array = (double *)malloc(length * sizeof(double));
generate(array, length);
printArray(array, length);
printf("\n");
sort(array, length);
printf("\n");
printArray(array, length);
} else {
printf("Length not entered!\n");
}
}
void generate(double * array, int length) {
srand(time(NULL));
for (int i = 0; i < length; ++i) {
array[i] = 1.*rand() / (1. + rand()) * 1000;
}
}
void printArray(double * array, int length) {
length = (length > 10) ? 10 : length;
for (int i = 0; i < length; ++i) {
printf("%.2lf ", array[i]);
}
printf("\n");
}

20
Sorting/9Ex/tools.h Normal file
View file

@ -0,0 +1,20 @@
#ifndef TOOLS
#define TOOLS
#include "seagwithsob.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define exp -1.e-6
FILE * getFile();
double * getArray(FILE * file);
bool orderliness(double * array, int length);
void randomArray();
void generate(double * array, int length);
void printArray(double * array, int length);
#endif