Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
pr1zrak
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 8
1

Случайным образом выбрать из списка три коллектива, напечатать их наименования

24.09.2011, 18:49. Просмотров 628. Ответов 7
Метки нет (Все метки)

Задание: С клавиатуры ввести последовательность данных о вокальных коллективах района: <Название коллектива>, <Год создания>, <Количество участников>, <Руководитель>. Распечатать введенные данные в виде таблицы, отсортировав их по названиям коллективов в алфавитном порядке. Случайным образом выбрать из списка три коллектива, напечатать их наименования и указать многочисленный среди этих коллективов.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#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;       
}
Помогите с написанием кода пожалуйста.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2011, 18:49
Ответы с готовыми решениями:

Случайным образом выбрать число от 0 до 5
Здравствуй, форум! Задача простая, но почему-то (не спал двое суток) я никак не могу придумать...

Как поменять случайным образом три переменных
Как можно реализовать принцип &quot;махнуть не глядя&quot; (то есть поменять случайным образом) линейно (без...

Из массива случайным образом выбрать 5 неповторяющихся чисел
Есть масив из 50 целых чисел, нужно случайным образом выбрать 5 чисел но при этом чтоб они не...

Как выбрать случайным образом название файла из имеющихся
Добрый день. В html-файле прописал так: &lt;script src=&quot;/js/gifbox.js&quot;...

Из массива A выбрать случайным образом m различных элементов и поместить их в массив B
Из массива A(n) выбрать случайным образом m различных элементов и поместить их в массив B(m)

7
Vergil111
31 / 31 / 16
Регистрация: 30.11.2010
Сообщений: 81
24.09.2011, 22:41 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Как-то так)
Данные в виде таблицы сделаешь сам, да и с выводом трех случайных коллективов ты, я думаю, тоже справишься) Удачи

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#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;
        }
    }
}
0
pr1zrak
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 8
28.09.2011, 22:17  [ТС] 3
Цитата Сообщение от Vergil111 Посмотреть сообщение
Как-то так)
Данные в виде таблицы сделаешь сам, да и с выводом трех случайных коллективов ты, я думаю, тоже справишься) Удачи
метод вставкой не работает
0
Vergil111
31 / 31 / 16
Регистрация: 30.11.2010
Сообщений: 81
28.09.2011, 22:53 4
Все прекрасно работает. Если конечно вы не использовали русские буквы=/
0
28.09.2011, 22:53
pr1zrak
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 8
29.09.2011, 01:39  [ТС] 5
функция и 3 элемента нормально не сортирует... (( дебажил

P.S только латиница

Добавлено через 1 час 30 минут
может это все из-за того что программа написана на С++, а я переписал на С..что-то с потоковым вводом выводом?!..

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#include <stdio.h>
 
 
struct band{
        char name[20];
        int year;
        int number_of_members;
        char head[20];
};
 
void init_band(band&);
void show_band(band&);
void insertion_sort(band*, int);
 
int main(){     
 
        int number_of_bands;
        printf("Enter number of collectivies: ");
        scanf("%d", &number_of_bands);
 
        band* arr_bands = new band[number_of_bands];
 
        for(int i=0; i<number_of_bands; i++){
                printf("\n");
                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));
                if (i==number_of_bands) printf("\n");
        }
        for(int i=0;i<3;i++){
            printf("\n%2d. ",i+1);
        }   
 
        return 0;
}
 
void init_band(band& tmp){
        printf("Enter name of band: ");
        scanf("%s",&tmp.name);
        printf("Enter year: ");
        scanf("%d", &tmp.year);
        printf("Enter number of members: ");
        scanf("%d", &tmp.number_of_members);
        printf("Enter name of head: ");
        scanf("%s",&tmp.head);
}
 
void show_band(band& tmp){
        printf("\nName of band: %s ", tmp.name);
        printf("Year: %d ", tmp.year);
        printf("Number of members: %d ", tmp.number_of_members);
        printf("Name of head: %s", tmp.head);
}
 
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;
                }
        }
        
 
}
0
Vergil111
31 / 31 / 16
Регистрация: 30.11.2010
Сообщений: 81
29.09.2011, 01:46 6
Хреново вы дебажили. Программа работает нормально, прикрепил скрины. Данный алгоритм найдете в книге Кормена "Алгоритмы. Построение и анализ" в виде псевдокода.
1
Миниатюры
Случайным образом выбрать из списка три коллектива, напечатать их наименования  
pr1zrak
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 8
29.09.2011, 03:09  [ТС] 7
Цитата Сообщение от Vergil111 Посмотреть сообщение
Хреново вы дебажили. Программа работает нормально, прикрепил скрины. Данный алгоритм найдете в книге Кормена "Алгоритмы. Построение и анализ" в виде псевдокода.
Извините если что не так, просто программу питаюсь писать на Си в "Borland C for Dos". По заданию я не должен использовать "iostream", только чистый Си. Компилировал в Visual, действительно работает ваш код как надо. Спасибо, буду дальше пробовать вдохнуть жизнь в программу.
0
pr1zrak
0 / 0 / 0
Регистрация: 24.02.2011
Сообщений: 8
04.10.2011, 03:26  [ТС] 8
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define N 10
 
typedef struct {
    char *name;
    int year;
    int number_of_members;
    char *head;
} BAND;
 
BAND * CreateBand(void){
    char buf[255];
 
    BAND * pb = (BAND *)malloc(sizeof(BAND));
 
    if (pb != NULL) {
        fflush(stdin);
        printf("Enter name of band: ");
        gets(buf);
        pb->name = (char*) malloc(strlen(buf)+1);
        if (pb->name != NULL) {
            strcpy(pb->name, buf);
        }
 
        fflush(stdin);
        printf("Enter year: ");
        scanf("%d", &pb->year);
 
        fflush(stdin);
        printf("Enter number of members: ");
        scanf("%d", &pb->number_of_members);
 
        fflush(stdin);
        printf("Enter name of head: ");
        gets(buf);
        pb->head = (char*) malloc(strlen(buf)+1);
        if (pb->head != NULL) {
            strcpy(pb->head, buf);
        }
    }
    return pb;
};
 
int main(void)
{
    BAND * bands[N], *temp;
    unsigned int actualSize = 0;
    char addBand = 'Y';
    unsigned int i, j, k, isNew, maxIdx, index[3];
    int max;
 
    while ((actualSize < N) && (addBand != 'n') && (addBand != 'N')) {
        printf("Enter information about the group:\n");
        temp = CreateBand();
        if (temp != NULL) {
            bands[actualSize++] = temp;
        }
        if (actualSize < N) {
            printf("\nDo you want add more group? (Y/N): ");
            scanf("%c", &addBand);
        }
        else {
            printf("\nYou have entered the maximum number of groups.\n");
        }
    }
 
    //ÑîðòóâГ*Г*Г*Гї âèáîðîì
    for (i = 0; i < actualSize; i++) { 
        for (j = i + 1; j < actualSize; j++) {
            if (strcmp(bands[j]->name, bands[i]->name) < 0) {
                temp = bands[j];
                bands[j] = bands[i];
                bands[i] = temp;
            }
        }
    }
 
    printf("|       NAME          |   YEAR  | NUM |          HEAD        |\n");
    printf("--------------------------------------------------------------\n");
    for (i = 0; i < actualSize; i++) {
        printf("| %-20s| %-5d | %-5d | %-20s |\n", bands[i]->name, bands[i]->year, bands[i]->number_of_members, bands[i]->head);
    }
    printf("--------------------------------------------------------------\n");
 
    if (actualSize > 3) {
        printf("Random bands:\n");
        max = -1;
        for (i = 0; i < 3; i++) {
            do {
                isNew = 1;
                j = rand() % actualSize;
                for (k = 0; k < i; k++) {
                    if (index[i] == j) {
                        isNew = 0;
                    }
                }
            } while(isNew == 0);
            index[i] = j;
            printf("%s\n", bands[j]->name);
            if (bands[j]->number_of_members > max) {
                max = bands[j]->number_of_members;
                maxIdx = j;
            }
        }
        printf("Band %s has %d members.\n", bands[maxIdx]->name, max);
    }
 
    fflush(stdin);
    getc(stdin);
 
    return 0;
}
0
04.10.2011, 03:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2011, 03:26

В группе учатся 18 юношей и 5 девушек. Для дежурства случайным образом отобраны три студента
Добрый день! Можете пожалуйста помочь решить задачу! В группе учатся 18 юношей и 5 девушек. Для...

Сменить цвет фона надписи, чередуя цвета случайным образом через три секунды
не используя доп компонент Timer не могу понять, как сделать рандомные цвета и как сделать без...

Выбрать случайным образом слова из массивов глаголов, существительных, прилагательных и составить предложения
С клавиатуры вводятся 4 массива слов: - существительные в именительном падеже (тормоз, дисковод)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru