Сортировка методом линейного выбора с обменом для массива структур - C (СИ)
Формулировка задачи:
Задача,отсортировать массив структур по температуре методом линейного выбора с обменом.Вообщем код отказывается сортировать массив структур ,прошу помощи в исправлении кода,заранее благодарен.Код:
#include <stdio.h> struct st { int den; int sred; // Sredn99 temperatura int dav; }; int main() { int n; puts("Vvedite kol-vo elem-ov"); scanf("%d",&n); getchar(); struct st pogoda[n]; struct st buf,min; for(int sch=0;sch<n;sch++) { puts("Den'");scanf("%d",&pogoda[sch].den); puts("Sred temp");scanf("%d",&pogoda[sch].sred); puts("Davlenie");scanf("%d",&pogoda[sch].dav); getchar(); } int i, j,nom; for(i=0; i<n-1; i++) { min.den=pogoda[i].den; min.sred=pogoda[i].sred; min.dav=pogoda[i].dav; nom=i; for(j=i; j<n; j++) { if (pogoda[i].sred<min.sred) { min.den=pogoda[j].den; min.sred=pogoda[j].sred; min.dav=pogoda[j].dav; nom=j; } } buf.den=pogoda[i].den; buf.sred=pogoda[i].sred; buf.dav=pogoda[i].dav; // pogoda[i].den=min.den; pogoda[i].sred=min.sred; pogoda[i].dav=min.dav; // pogoda[nom].den=buf.den; pogoda[nom].sred=buf.sred; pogoda[nom].dav=buf.dav; } for (j=0; j<n; j++) { printf("Den' %d Temperatura %d Davlenie %d\n",pogoda[j].den,pogoda[j].sred,pogoda[j].dav); } return 0; }
Решение задачи: «Сортировка методом линейного выбора с обменом для массива структур»
textual
Листинг программы
#define MAX_STRUCTURES 3 typedef struct St { int day; int avgtemp; int pressure; } st; st structures[MAX_STRUCTURES]; void swap_structures(int a, int b) { st tmp = structures[a]; structures[a] = structures[b]; structures[b] = tmp; } // функция ищет минимальную структуру, начиная с i-ой int find_min_avgtemp(int i) { int min = i; int min_avgtemp = structures[i].avgtemp; for( ++i; i < MAX_STRUCTURES; ++i ) { if( structures[i].avgtemp < min_avgtemp ) { min_avgtemp = structures[i].avgtemp; min = i; } } return min; } void sort_structures(void) { int min; for( int i = 0; i < MAX_STRUCTURES; ++i ) { min = find_min_avgtemp(i); if( min != i ) swap_structures(min, i); } } int main(void) { structures[0].avgtemp = 1; structures[1].avgtemp = 3; structures[2].avgtemp = 2; sort_structures(); printf("%d %d %d\n", structures[0].avgtemp, structures[1].avgtemp, structures[2].avgtemp); return 0; }
Объяснение кода листинга программы
- Объявляется массив структур типа st с именем
structures
и размером MAX_STRUCTURES. - Создается функция swap_structures(int a, int b), которая меняет местами элементы массива с индексами a и b.
- Создается функция find_min_avgtemp(int i), которая ищет минимальное значение поля avgtemp в структурах, начиная с i-ой.
- Создается функция sort_structures(void), которая сортирует массив структур по возрастанию поля avgtemp.
- В функции main() создаются структуры с некоторыми значениями полей avgtemp.
- Вызывается функция sort_structures().
- Выводится отсортированный массив структур на экран.
- Возвращается 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д