Отсортировать введенные записи по возрастанию значений ключей и распечатать полученный список
С клавиатуры введите набор записей с полями: <Ключ>, <Сообщения> (ключ – целое число). Отсортировать введенные записи по возрастанию значений ключей и распечатать полученный список. В отсортированный массив ввести две новые записи так, чтобы сохранить общую упорядоченность массива. Распечатать дополненный массив.
Ответы (1 шт):
Автор решения: Мар'ян
→ Ссылка
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#define KST 50
#define _CRT_SECURE_NO_WARNINGS
typedef struct KeyMessage {
int key;
char message[50];
}KEYMESSAGE;
KEYMESSAGE starr[KST]; // глобальний масив структур
int kst; // реальна кількість повідомлень
void GetData(void);
void PrintAllData(void);
void Sort_by_Keys(void);
void GetData2(void);
int main()
{
system("chcp 1251");
GetData();
puts("\n\t\tВведенні дані: \n ");
PrintAllData();
Sort_by_Keys();
puts("\n\t\t Відсортовані записи за зростанням значень ключів :\n");
PrintAllData();
GetData2();
Sort_by_Keys();
PrintAllData();
return 0;
}
void GetData(void)
{
int k = 0;
printf("\n\t\t%-Ведіть <Ключ> та <Повідомлення> (0 - кінець введення) \n");
for (k = 0; k < KST; k++) { // цикл введення даних
printf("\n%2ld. Ключ : ", k + 1);
scanf_s("%d", &starr[k].key);
gets_s((starr + k)->message);
if ((starr + k)->key == '\0')
break;
printf(" Повідомлення : ");
gets_s((starr + k)->message);
rewind(stdin);
}
kst = k;
}
void PrintAllData(void)
{
KEYMESSAGE* pst;
for (pst = starr; pst < starr + kst; pst++) {
printf("%2d. Ключ: %-ld\t\t\t\t Повідомлення: %-s \n", pst - starr + 1,
pst->key, pst->message);
}
}
void Sort_by_Keys(void)
{
KEYMESSAGE* pst, * pst_min, mess;
for (int k = 0; k < kst - 1; k++) { // зовнішній цикл
pst_min = starr + k;
for (pst = pst_min + 1; pst < starr + kst; pst++) // внутрішній цикл
if (pst->key < pst_min->key)
pst_min = pst;
if (pst_min != starr + k) {
mess = *pst_min; // ставимо найменший на місце k-го
*pst_min = *(starr + k);
*(starr + k) = mess;
}
}
}
void GetData2(void)
{
int k = 0;
for (k = 0; k < 2; k++) { // цикл введення даних
printf("\n%2ld. Ключ : ", k + 1);
scanf_s("%d", &starr[k].key);
gets_s((starr + k)->message);
printf(" Повідомлення : ");
gets_s((starr + k)->message);
}
}