Сделал 13 усовершенствованную с иным заданием

This commit is contained in:
AZEN-SGG 2024-10-18 10:00:53 +03:00
parent 5852a9f034
commit 3f5c6299fc
11 changed files with 146 additions and 5 deletions

View file

@ -0,0 +1,23 @@
#include "equal.h"
int canFixArray(double * numbers) {
unsigned short indexNonEqualNumber = 0, indexSecondNonEqualNumber = 0, numberDiffernce = 0, length = (int)numbers[0];
for (int i = 2; i < length; ++i) {
if (!isEqual(numbers[i - 1], numbers[i])) {
numberDiffernce++;
if (!indexNonEqualNumber) indexNonEqualNumber = i;
else if (!indexSecondNonEqualNumber) indexSecondNonEqualNumber = i - 1;
}
}
if (numberDiffernce > 2) return -1;
else if (numberDiffernce == 2 && (!isEqual(numbers[indexNonEqualNumber - 1], numbers[length - 1]) || indexNonEqualNumber != indexSecondNonEqualNumber)) return -2;
else if (numberDiffernce == 1 && ((indexNonEqualNumber != 2) && (indexNonEqualNumber != (length - 1)))) return -3;
return 0;
}
bool isEqual(double first, double second) {
return (fabs(first - second) < eps);
}

View file

@ -0,0 +1,13 @@
#ifndef EQUAL
#define EQUAL
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
#define eps 1.e-6
int canFixArray(double * numbers);
bool isEqual(double first, double second);
#endif // EQUAL

View file

@ -0,0 +1 @@
1 1 1 2 2 2

View file

@ -0,0 +1,19 @@
#include <stdio.h>
#include "tools.h"
#include "equal.h"
int main(void) {
double * numbers;
FILE * file = getFile();
if (file == NULL) return 1;
numbers = getList(file);
if (numbers == NULL) return 1;
if (canFixArray(numbers)) printf("It can't be fixed!");
else printf("It is possible to make them equal!");
free(numbers);
return 0;
}

View file

@ -0,0 +1,11 @@
all: main.o equal.o tools.o
gcc main.o equal.o tools.o && del *.o
main.o: main.c
gcc -c main.c
equal.o: equal.c
gcc -c equal.c
tools.o: tools.c
gcc -c tools.c

View file

@ -0,0 +1,50 @@
#include "tools.h"
FILE * getFile(void)
{
FILE * file;
char filename[50];
printf("Enter filename: ");
if (scanf("%s", filename) == 1)
{
file = fopen(filename, "r");
if (file == NULL) {
printf("Error file!\n");
return NULL;
} else {
return file;
}
} else
{
printf("Empty name!\n");
return NULL;
}
}
double * getList(FILE * file) {
double current;
int i, length = 2;
double * numbers = NULL;
if (fscanf(file, "%lf", &current) != 1) {
printf("File is empty!");
return numbers;
}
numbers = (double *)malloc(length * sizeof(double));
i = 1;
do {
if (i >= length) {
length *= 2;
numbers = (double *)realloc(numbers, (length * sizeof(double)));
}
numbers[i] = current;
i++;
} while (fscanf(file, "%lf", &current) == 1);
numbers = (double *)realloc(numbers, i * sizeof(double));
numbers[0] = i;
return numbers;
}

View file

@ -0,0 +1,10 @@
#ifndef TOOLS
#define TOOLS
#include <stdio.h>
#include <stdlib.h>
FILE * getFile(void);
double * getList(FILE * file);
#endif