Сортировка массивов структур - не получается отсортировать строки по значению первого столбца - C (СИ)

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

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

Нидхэлп. В функции sort_by_number(size) не получается отсортировать строки по значению первого столбца, т.е. сортируются только значения con[i].num, а надо, чтобы вся строка "ложилась" в новую таблицу...
#include <iostream>
#include <stdio.h>
 
int size = 0;
 
typedef struct contracts 
{
int num; // номер контракта
double sum; // сумма по контракту
double tamozh; // сумма таможенного сбора
} CONTR;
 
CONTR con[100]; // оглашение масива структур
 
void sum_to_tam(int size)  // Функция расчета суммы таможенного сбора (с коэфициентом 0,15)
{
    for(int i = 0; i < size; i++) 
    {
    con[i].tamozh=con[i].sum*0.15;
    }
}
 
void input(int size) // ввод данных
{
    for(int i = 0; i < size; i++) 
    {
       printf("\n *Позиция № %d*", i+1);
       printf("\n Введите номер контракта: ");
       scanf_s("%d", &con[i].num);
       printf(" Сумма по контракту: ");
       scanf_s("%lf", &con[i].sum); 
    }
}
 
void show(int size) //вывод данных в таблицу
{
    printf("\n №  | Сумма     | Сумма сбора \n");
    printf("*******************************\n");
    for(int i = 0; i < size; i++) 
    {
    printf(" %-2d | %-9.1lf | %-9.1lf \n", 
            con[i].num, con[i].sum, con[i].tamozh);
    }
}
 
void sort_by_number(int size) // сортировка методом выбора
{
    int i, j, pos, tmp;
    for(i = 0; i < size; ++i) 
    { 
        pos = i; 
        tmp = con[i].num;
        for(j = i + 1; j < size; ++j) 
        {
            if (con[j].num < tmp) 
            {
               pos = j; 
               tmp = con[j].num; 
            }
        }
        con[pos].num = con[i].num;
        con[i].num = tmp; 
    }      
}  
 
int main (void){
setlocale(LC_ALL, "");
printf("Введите количество контрактов: ");
scanf_s("%d", &size);
input(size);
sum_to_tam(size);
printf("\n\n Перед сортировкой:\n");
show(size);
sort_by_number(size);
printf("\n\n После сортировки:\n");
show(size);
 
getchar ();
getchar ();
return 0;
}

Решение задачи: «Сортировка массивов структур - не получается отсортировать строки по значению первого столбца»

textual
Листинг программы
void sort_by_number(int size) // сортировка методом выбора
{
    int i, j, pos;
    CONTR tmp;
 
    for (i = 0; i < size; ++i)
    {
        pos = i;
        for (j = i + 1; j < size; ++j)
        {
            if (con[j].num < con[pos].num)
            {
                pos = j;
            }
        }
        tmp = con[pos];
        con[pos] = con[i];
        con[i] = tmp;
    }
}

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

В этом коде реализована сортировка массива структур по значению первого столбца. Список элементов кода:

  1. В первой строке определяется функция с именем sort_by_number, которая принимает целочисленный аргумент size.
  2. Переменные i, j, pos и tmp объявляются внутри цикла for.
  3. Внутренний цикл for начинается с i = 0 и продолжается до size.
  4. Внешний цикл for начинается с i = 0 и продолжается до size.
  5. Внутренний цикл for ищет минимальное значение в оставшейся части массива структур и сохраняет его позицию в переменную pos.
  6. Значение переменной pos заменяется на индекс минимального элемента.
  7. Значение переменной tmp заменяется на значение элемента по индексу pos.
  8. Значение элемента по индексу pos заменяется на значение переменной con[i].
  9. Значение переменной con[i] заменяется на значение переменной tmp.
  10. Циклы for завершаются.
  11. Значение переменной size используется в качестве аргумента для функции sort_by_number. В данном коде используется алгоритм сортировки выбором. Он работает следующим образом:
  12. На каждом шаге выбирается наименьший элемент из неотсортированной части массива и меняется на первое место.
  13. Процесс повторяется до тех пор, пока массив не будет полностью отсортирован.

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


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

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

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