Сортировка массивов структур - не получается отсортировать строки по значению первого столбца - 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; } }
Объяснение кода листинга программы
В этом коде реализована сортировка массива структур по значению первого столбца. Список элементов кода:
- В первой строке определяется функция с именем sort_by_number, которая принимает целочисленный аргумент size.
- Переменные i, j, pos и tmp объявляются внутри цикла for.
- Внутренний цикл for начинается с i = 0 и продолжается до size.
- Внешний цикл for начинается с i = 0 и продолжается до size.
- Внутренний цикл for ищет минимальное значение в оставшейся части массива структур и сохраняет его позицию в переменную pos.
- Значение переменной pos заменяется на индекс минимального элемента.
- Значение переменной tmp заменяется на значение элемента по индексу pos.
- Значение элемента по индексу pos заменяется на значение переменной con[i].
- Значение переменной con[i] заменяется на значение переменной tmp.
- Циклы for завершаются.
- Значение переменной size используется в качестве аргумента для функции sort_by_number. В данном коде используется алгоритм сортировки выбором. Он работает следующим образом:
- На каждом шаге выбирается наименьший элемент из неотсортированной части массива и меняется на первое место.
- Процесс повторяется до тех пор, пока массив не будет полностью отсортирован.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д