Объединить функции в одну
Хотел объединить функции maximum и minimum в одну, получилась minmax. Но в итоге все поломалось и не могу понять, что не так.
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#define swap(a, b) { int t = (a); (a) = (b); (b) = t; }
#define N 10
void gen_mass (int a[], int size);
void print_mass (int a[], int size);
void minmax (int a[], int size, int *pmin, int *pmax);
//int maximum (int a[], int size);
//int minimum (int a[], int size);
int sort_mass (int a[], int size, int (* get_position) (int a[], int size, int *pmin, int *pmax));
int main () {
int a[N], minp, maxp;
gen_mass(a, N);
print_mass(a, N);
// minp = minimum(a, N); было
// maxp = maximum(a, N); было
minmax(a, N, &min_pos, &max_pos);
if (minp < maxp) {
sort_mass(a, minp, minmax); // было (a, minp, maximum)
sort_mass(a+minp+1, maxp-minp, minmax); // было (a+minp+1, maxp-minp, minimum)
sort_mass(a+maxp+1, N-maxp-1, minmax); // было (a+maxp+1, N-maxp-1, maximum)
}
else {
sort_mass(a, maxp, minmax); // было(a, maxp, minimum)
sort_mass(a+maxp+1, minp-maxp, minmax); // было (a+maxp+1, minp-maxp, maximum)
sort_mass(a+minp+1, N-minp-1, minmax); // было (a+minp+1, N-minp-1, minimum)
}
print_mass(a, N);
return 0;
}
void gen_mass (int a[], int size) {
int i = 0;
for (; i < size; i++)
scanf("%d", &a[i]);
}
void print_mass(int a[], int size) {
int i = 0;
for (; i < size; i++)
printf("%d ", a[i]);
printf("\n");
}
/* хотел заменить(объединить) эти две функции
int minimum (int a[], int size) {
int pos = 0, i;
for (i = 1; i < size; i++)
if (a[i] < a[pos])
pos = i;
return pos;
}
int maximum (int a[], int size) {
int pos = 0, i;
for (i = 1; i < size; i++)
if (a[i] > a[pos])
pos = i;
return pos;
}
*/
// на эту функцию
int minmax (int a[], int size, int *pmin, int *pmax) {
int pos_min = 0, pos_max = 0, i = 1;
for (; i < size; i++)
if (a[i] < a[pos_min])
pos_min = i;
else if (a[pos_max] < a[i])
pos_max = i;
*pmin = pos_min;
*pmax = pos_max;
}
int sort_mass (int a[], int size, int (* get_position) (int a[], int size, int *pmin, int *pmax)) {
int pos, i=0, t, minp, maxp;
for (; i < size; i++) {
pos = i + get_position(a + i, size - i, minp, maxp);
swap(a[i], a[pos]);
}
return minp, maxp;
}
Ответы (1 шт):
Автор решения: AlexGlebe
→ Ссылка
Задача из комментария
Дан массив, найти максимум и минимум. Расположить элементы массива таким образом, чтобы к максимуму они возрастали, а к минимуму убывали. Положение максимального и минимального элементов изменять запрещено, их расположение в массиве может быть любым. Максимум и минимум могут быть только в единственном экземпляре
говорит, что сортировка должна быть между двумя точками экстремума. Возвращаете назад функции minimum и maximum. И передаёте для функции сортировки. Как и было изначально.
minmax(a, N, &minp, &maxp);
if (minp < maxp)
sort_mass(a+minp+1, maxp-minp, minimum);
else
sort_mass(a+maxp+1, minp-maxp, maximum);
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#define swap(a, b) { int t = (a); (a) = (b); (b) = t; }
#define N 10
void gen_mass (int a[], int size);
void print_mass (int a[], int size);
void minmax (int a[], int size, int *pmin, int *pmax);
int maximum (int a[], int size);
int minimum (int a[], int size);
void sort_mass (int a[], int size, int (* fun) (int a[], int size));
int main () {
srand(time(NULL));
int a[N], minp, maxp;
gen_mass(a, N);
print_mass(a, N);
minmax(a, N, &minp, &maxp);
printf("minp = %d , maxp = %d\n",minp,maxp);
if (minp < maxp)
sort_mass(a+minp+1, maxp-minp, minimum);
else
sort_mass(a+maxp+1, minp-maxp, maximum);
print_mass(a, N);
return 0;
}
void gen_mass (int a[], int size) {
int i = 0;
for (; i < size; i++)
a[i]=rand()%10000-5000;
//scanf("%d", &a[i]);
}
void print_mass(int a[], int size) {
int i = 0;
for (; i < size; i++)
printf("%d ", a[i]);
printf("\n");
}
// хотел заменить(объединить) эти две функции
int minimum (int a[], int size) {
int pos = 0, i;
for (i = 1; i < size; i++)
if (a[i] < a[pos])
pos = i;
return pos;
}
int maximum (int a[], int size) {
int pos = 0, i;
for (i = 1; i < size; i++)
if (a[i] > a[pos])
pos = i;
return pos;
}
// на эту функцию
void minmax (int a[], int size, int *pmin, int *pmax) {
int pos_min = 0, pos_max = 0, i = 1;
for (; i < size; i++)
if (a[i] < a[pos_min])
pos_min = i;
else if (a[pos_max] < a[i])
pos_max = i;
*pmin = pos_min;
*pmax = pos_max;
}
void sort_mass (int a[], int size, int (* get_position) (int a[], int size)) {
int pos, i=0;
for (; i < size; i++) {
pos = i + get_position(a + i, size - i);
swap(a[i], a[pos]);
}
}