Задача 1. Определить, меньше ли массив A массива B (один массив меньше другого, если в отсортированных массивах все элементы А меньше соответствующих элементов B; более короткий массив дополняется до нужного размера своим максимальным элементом). Элементы массивов находятся в файлах ina.txt и inb.txt, их количество неизвестно. В файл output.txt записать “YES”/”NO”
Исходный текст, разработанный во время лекции
#include <stdio.h>
int func(double *a, int nA, double *b, int nB);
void sort(double *a, int n);
int main(void) {
FILE *INA, *INB, *OUT;
double *a, *b;
int nA = 0, nB = 0;
double x;
int i;
int res;
INA = fopen("ina.txt", "r");
if (INA == NULL) return -1;
while (fscanf(INA, "%lf", &x) == 1) ++nA;
fclose(INA);
INB = fopen("inb.txt", "r");
if (INB == NULL) return -1;
while (fscanf(INB, "%lf", &x) == 1) ++nB;
fclose(INB);
INA = fopen("ina.txt", "r");
if (INA == NULL) return -1;
if ((nA <= 0) || (nB <= 0)) return -1;
a = (double*)malloc(nA * sizeof(double));
if (a == NULL) return -1;
for (i = 0; i < nA; i++) {
if (fscanf(INA, "%lf", &a[i]) != 1) {
fclose(INA);
return -1;
}
}
fclose(INA);
INB= fopen("inb.txt", "r");
if (INB == NULL) return -1;
b = (double*)malloc(nB * sizeof(double));
if (b == NULL) return -1;
for (i = 0; i < nB; i++) {
if (fscanf(INB, "%lf", &b[i]) != 1) {
fclose(INB);
return -1;
}
}
sort(a, nA);
sort(b, nB);
res = func(a, nA, b, nB);
OUT = fopen("output.txt", "w");
if (OUT == NULL) return -1;
fprintf(OUT, "%s", res ? "YES" : "NO");
fclose(OUT);
return 0;
}
int func(double *a, int nA, double *b, int nB) {
double A, B;
int N = nA;
int i;
if (nB > N) N = nB;
for (i = 0; i < N; i++) {
A = (i < nA) ? a[i] : a[nA-1];
B = (i < nB) ? b[i] : b[nB-1];
if (A >= B)
return 0;
}
return 1;
}
void sort(double *a, int n) {
double buf;
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n-1; j++) {
if (a[j] > a[j+1]) {
buf = a[j];
a[j] = a[j+1];
a[j+1] = buf;
}
}
}
}