Процедура сортировки для структур - C (СИ)
Формулировка задачи:
Пытаясь написать функцию сортировки процедур столкнулся с проблемой.
Вод вид функции для обмена элементов:
Функцию вызываю вот так:
Price - структура вида:
Собственно при попытке так поменять местами элементы массива из структур программа вылетает. Подскажите, как можно решить эту проблему? Потому что никак не могу поменять элементы массива. Вылетает даже когда пытаюсь менять отдельными полями.
void swap (Price *p1, Price *p2) { Price tmp; tmp=*p1; *p1=*p2; *p2=tmp; }
swap(&Array[i], &Array[i+1]);
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; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Объявляем структуру Price, которая содержит поля NameOfProduct, NameOfShop и PriceOfProduct
- Создаем функцию swap, которая меняет местами значения двух указателей на структуру Price
- Создаем функцию compare_price, которая сравнивает два указателя на структуру Price и возвращает -1, 0 или 1 в зависимости от того, меньше ли первое значение второго, равно ли или больше
- Создаем массив arr типа Price с элементами {
Pechenka
,Dixy
, 1.5F }, {Keks
,Shmixy
, 3.2F }, {Bublegum
,Kopeiko
, 0.7F } соответственно - Используем два вложенных цикла для сортировки массива arr по методу пузырька
- Выводим отсортированный массив на экран
- Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д