Другие языки программирования и технологии

Помогите с массивом и сортировкой методом пузырька в языке Си! Прогу надо сдать в пятницу срочно, не знаю как начать!

Вычислить и записать в массив значение функции y=a*x^2+b*x+c при изменении x от х (начальн) до х (конечной) с шагом h. Массив значений отсортировать по убыванию методом пузырька и х (нач) = -4.5, х (кон) = -33.5, h=0.5; напечатать результат.
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <locale.h>
size_t size_array(double, double, double);
void method_bubble(double *, size_t);
void show_array(double *, size_t);
int main() {
    double x_beg = -4.5, x_end = -33.5, h = 0.5, a, b, c, * arr = NULL, x_next = x_beg;
    size_t size = size_array(x_beg, x_end, h), n;
    setlocale(LC_CTYPE, "Russian_Russia.1251");
    printf("Введите a: "); scanf_s("%Lf", &a);
    printf("Введите b: "); scanf_s("%Lf", &b);
    printf("Введите c: "); scanf_s("%Lf", &c);
    arr = (double *)calloc(size, sizeof(double));
    for (n = 0; n < size; n++) {
        arr[n] = a * pow(x_next, 2) + b * x_next + c;
        x_next -= h;
    }    
    printf("До сортировки: \n");
    show_array(arr, size);
    method_bubble(arr, size);
    printf("После сортировки: \n");
    show_array(arr, size);
    free(arr);
_getch();
    return 0;
}
size_t size_array(double beg, double end, double step) {
    size_t size;
    double abs_beg = fabs(beg), abs_end = fabs(end), abs_step = fabs(step);
    double max = abs_beg > abs_end? abs_beg : abs_end;
    double min = abs_beg + abs_end - max;
    double eps = 1e-10;
    if (abs_step < eps) size = 0;
    else size = (size_t)((max - min + eps) / abs_step) + 1;
    return size;
}
void method_bubble(double * ptr, size_t size) {
    size_t n, m;
    double temp;
    for (n = 1; n < size; n++)    
        for (m = 0; m < size - n; m++)
            if (ptr[m] < ptr[m + 1]) {
                temp = ptr[m];
                ptr[m] = ptr[m + 1];
                ptr[m + 1] = temp;
            }
}
void show_array(double * ptr, size_t size) {
    size_t n;
    for (n = 0; n < size; n++) printf(" %Lf\n", ptr[n]);
    printf("\n");
}
Андрей Антипов
Андрей Антипов
51 326
Лучший ответ
Сергей Кузнецов Обалдеть! Вот это программа! Спасибо, конечно, большое, но такую показывать - самой себе хуже! На первом курсе никто не умеет такие писать((((
Igor Sisjuk Для красоты можно еще вставить заместо указателей на массив шаблонный класс списка с реализацией. Или класс итератора (с реализацией).