Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Ulceratio
5 / 5 / 3
Регистрация: 04.11.2013
Сообщений: 50
#1

Сортировка методом линейного выбора с обменом для массива структур - C (СИ)

24.04.2014, 13:40. Просмотров 571. Ответов 4
Метки нет (Все метки)

Задача,отсортировать массив структур по температуре методом линейного выбора с обменом.Вообщем код отказывается сортировать массив структур ,прошу помощи в исправлении кода,заранее благодарен.Код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#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;           
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.04.2014, 13:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сортировка методом линейного выбора с обменом для массива структур (C (СИ)):

Сортировка массива методом выбора
Всем добрый вечер.Не успеваю решить все задачи Люди помогите Как можно ...

Сортировка массива методом прямого выбора
Люди, помогите плиз сортировку массива методом прямого выбора сделать

Сортировка одномерного массива методом выбора
Здравствуйте, подскажите кто может, по заданию мне нужно&quot;Сортировка выбором:...

Не работает сортировка двумерного массива методом простого выбора
Написал программу сортировки двумерного массива методом простого выбора, но она...

Строки матрицы упорядочить по возрастанию методом линейного выбора с подсчетом
Если сумма элементов матрицы А размерности nxn больше удвоенной суммы...

Сортировка выбором с обменом неотсортированного массива из 1000 элементов
#include &lt;stdio.h&gt; #define MAS 1000 void main(void) { int S; int P;...

4
Vtulhu
423 / 377 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
24.04.2014, 15:23 #2
Сортировать массив структур вообще дурость. Надо сортировать указатели на структуры. Кто такие задания даёт?
0
Ulceratio
5 / 5 / 3
Регистрация: 04.11.2013
Сообщений: 50
24.04.2014, 16:33  [ТС] #3
и тем не менее ,можете помочь?
0
Vtulhu
423 / 377 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
24.04.2014, 23:06 #4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#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;
}
0
Ulceratio
5 / 5 / 3
Регистрация: 04.11.2013
Сообщений: 50
25.04.2014, 16:06  [ТС] #5
спасибо
0
25.04.2014, 16:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.04.2014, 16:06
Привет! Вот еще темы с решениями:

Сортировка массивов структур с использованием метода выбора
Привет всем. Помогите, пожалуйста, разобраться с сортировкой. Пытаюсь...

Сортировка методом выбора
Что-то не получается... Может быть сделаете замечания? Или посмотрите на...

Сортировка методом простого выбора по убыванию
Подскажите, подойдет ли эта функция для сортировке методом просто выбора по...

Сортировка методом выбора - прокомментировать код
Кто может написать подробно,как программа сортирует елементы. Вот часть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru