Процедура сортировки для структур - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Пытаясь написать функцию сортировки процедур столкнулся с проблемой. Вод вид функции для обмена элементов:
void swap (Price *p1, Price *p2) {
        Price tmp;
        tmp=*p1;
        *p1=*p2;
        *p2=tmp;
}
Функцию вызываю вот так:
    swap(&Array[i], &Array[i+1]);
Price - структура вида:
    typedef
        struct {
            char NameOfProduct[30], NameOfShop[30];
            float PriceOfProduct;           
        } Price;
Собственно при попытке так поменять местами элементы массива из структур программа вылетает. Подскажите, как можно решить эту проблему? Потому что никак не могу поменять элементы массива. Вылетает даже когда пытаюсь менять отдельными полями.

Решение задачи: «Процедура сортировки для структур»

textual
Листинг программы
#include <stdio.h>
 
typedef struct {
    char NameOfProduct[30], NameOfShop[30];
    float PriceOfProduct;           
} Price;
 
void swap (Price *p1, Price *p2) {
    Price tmp;
    tmp=*p1;
    *p1=*p2;
    *p2=tmp;
}
 
int compare_price(Price * a, Price * b) {
    return ( a->PriceOfProduct < b->PriceOfProduct ) ? -1 :
        ( a->PriceOfProduct > b->PriceOfProduct ) ? 1 : 0;
}
 
#define elements_count(a) ( sizeof(a) / sizeof(*(a)) )
 
int main(void) {
    Price arr[] = {
        { "Pechenka", "Dixy", 1.5F },
        { "Keks", "Shmixy", 3.2F },
        { "Bublegum", "Kopeiko", 0.7F }
    };
    int i, j;
    
    for ( i = 0; i < elements_count(arr) - 1; ++i )
        for ( j = i + 1; j < elements_count(arr); ++j )
            if ( compare_price(&arr[i], &arr[j]) > 0 )
                swap(&arr[i], &arr[j]);
    
    for ( i = 0; i < elements_count(arr); ++i )
        printf("%s %s %.2f\n", arr[i].NameOfProduct, arr[i].NameOfShop, arr[i].PriceOfProduct);
    
    return 0;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы
  2. Объявляем структуру Price, которая содержит поля NameOfProduct, NameOfShop и PriceOfProduct
  3. Создаем функцию swap, которая меняет местами значения двух указателей на структуру Price
  4. Создаем функцию compare_price, которая сравнивает два указателя на структуру Price и возвращает -1, 0 или 1 в зависимости от того, меньше ли первое значение второго, равно ли или больше
  5. Создаем массив arr типа Price с элементами { Pechenka, Dixy, 1.5F }, { Keks, Shmixy, 3.2F }, { Bublegum, Kopeiko, 0.7F } соответственно
  6. Используем два вложенных цикла для сортировки массива arr по методу пузырька
  7. Выводим отсортированный массив на экран
  8. Возвращаем 0, чтобы указать, что программа успешно завершилась

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.625 из 5
Похожие ответы