Случайным образом выбрать из списка три коллектива, напечатать их наименования - C (СИ)
Формулировка задачи:
Задание
: С клавиатуры ввести последовательность данных о вокальных коллективах района: <Название коллектива>, <Год создания>, <Количество участников>, <Руководитель>. Распечатать введенные данные в виде таблицы, отсортировав их по названиям коллективов в алфавитном порядке. Случайным образом выбрать из списка три коллектива, напечатать их наименования и указать многочисленный среди этих коллективов.#include <stdio.h>
int main()
{
struct VocalCo {
char name[20];
int date;
int mber;
char head[10];
}n1,d1,m1,h1;
int k, kst;
printf("Number of groups - ");
scanf("%d",&kst); getchar();
puts("DATA: ");
for (k=0; k<kst; k++) {
printf("\n%2d. Name of group: ", k+1);
scanf("%d",&n1.name);
printf("\n%2d. Year of creation: ",k+1);
scanf("%d",&d1.date);
printf("\n%2d. Number of members: ",k+1);
scanf("%d",&m1.mber);
printf("\n%2d. Head of group: ",k+1);
scanf("%d",&h1.head);
}
getchar();
return 0;
}Решение задачи: «Случайным образом выбрать из списка три коллектива, напечатать их наименования»
textual
Листинг программы
#include <iostream>
#include <string>
using namespace std;
//исходная структура
struct band{
string name;
int year;
int number_of_members;
string head;
};
//объявляем функции инициализации, вывода и сортировки соответственно
void init_band(band&);
void show_band(band&);
void insertion_sort(band*, int);
int main(){
//задаем количество коллективов
int number_of_bands;
cout << "Enter number of collectivies: ";
cin >> number_of_bands;
//выделяем память под наш массив структур
band* arr_bands = new band[number_of_bands];
//производим инициализацию массива
for(int i=0; i<number_of_bands; i++){
init_band(*(arr_bands+i));
}
//сортируем коллективы в массиве по названию методом вставки
insertion_sort(arr_bands, number_of_bands);
//выводим
for(int i=0; i<number_of_bands; i++){
show_band(*(arr_bands+i));
}
return 0;
}
void init_band(band& tmp){
cout << "Enter name of band: ";
cin >> tmp.name;
cout << "Enter year: ";
cin >> tmp.year;
cout << "Enter number of members: ";
cin >> tmp.number_of_members;
cout << "Enter name of head: ";
cin >> tmp.head;
}
void show_band(band& tmp){
cout << "\nName of band " << tmp.name << endl;
cout << "Year " << tmp.year << endl;
cout << "Number of members " << tmp.number_of_members << endl;
cout << "Name of head " << tmp.head << endl << endl;
}
void insertion_sort(band* arr, int num_of_bands){
band key;
int i;
for(int j=1; j<num_of_bands; j++){
key=*(arr+j);
i=j-1;
while(i>-1 && ((arr+i)->name) > key.name){
*(arr+i+1) = *(arr+i);
i--;
*(arr+i+1) = key;
}
}
}
Объяснение кода листинга программы
- Сначала пользователю предлагается ввести количество коллективов.
- Затем выделяется память под массив структур типа band и производится инициализация массива.
- Далее происходит сортировка коллективов в массиве по названию методом вставки.
- Наконец, выводятся наименования отсортированных коллективов.
- В функции init_band() пользователю предлагается ввести данные для текущего коллектива.
- В функции show_band() выводятся данные текущего коллектива.
- В функции insertion_sort() происходит сортировка массива по наименованию.
- При сортировке используется алгоритм сортировки вставками.
- Алгоритм работает в одном проходе, за один проход полностью упорядочивая только один элемент массива.
- Алгоритм стабилен, то есть сохраняет относительный порядок элементов, равных по отношению друг к другу.
- Не используется дополнительная память для хранения временных данных.
- Для каждого элемента, начиная с первого, ищутся элементы, которые нужно передвинуть, чтобы удовлетворить условие порядка.
- Если такие элементы есть, то они сдвигаются влево, а вставленный элемент становится последним в упорядоченной части массива.
- Если таких элементов нет, то вставляемый элемент просто становится последним в упорядоченной части массива.
- Алгоритм завершается, когда все элементы массива упорядочены.
- Для каждого элемента массива выводится его наименование.
- Используется оператор new для выделения памяти под массив.
- При выделении памяти под массив используется переменная number_of_bands.
- Для каждого элемента массива вызывается функция init_band().
- Для вывода данных каждого элемента массива вызывается функция show_band().