Случайным образом выбрать из списка три коллектива, напечатать их наименования - 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().
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д