Форум программистов, компьютерный форум CyberForum.ru

Сортировка массива структур (запутался я) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Напишите программу замены в тексте всех букв «а» на «о» и наоборот с учетом регистра. Выведите исходные и преобразованный тексты. http://www.cyberforum.ru/cpp-beginners/thread783878.html
Напишите программу замены в тексте всех букв «а» на «о» и наоборот с учетом регистра. Выведите исходные и преобразованный тексты.
C++ Массив: посчитать в них количество положительных элементов... заданы 2 массива А 5 и В 5 посчиать в них количество положительных элементов первым на печать вывести массив имеющий наибольшее их количество http://www.cyberforum.ru/cpp-beginners/thread783876.html
Одномерные массивы (найти среднее арифметическое всех элементов массивов) C++
Заданы два массива А(5) и B(5). В каждом из массивов найти среднее арифметическое всех элементов массивов. На печать вывести исходные массивы и найденные значения
C++ Одномерные массивы и указатели (найти количество элементов массива, равных 0, сумму элементов массива...)
Помогите пожалуйста разработать программу и реализовать интуитивный понятный интерфейс (используя формы).При написании программы можно использовать как динамические так и не динамические массивы. "В одномерном массиве состоящем из n вещественных элементов, вычислить: 1) количество элементов массива, равных 0; 2) сумму элементов массива расположенных, после минимально элемента. упорядочить...
C++ Получить число отрицательных членов последовательности и сумму нулевых членов последовательности http://www.cyberforum.ru/cpp-beginners/thread783860.html
Помогите решить, данные задачки: 1. Даны целые числа a1,..., a15. Получить число отрицательных членов последовательности и сумму нулевых членов последовательности. Заранее благодарен!
C++ Программа "Орел или Решка" Нужно написать программу "Орел или Решка" моделирующая 100 бросаний монеты. Почему программа выводит, что Орел или Решка брошены по 100 раз ? Как сделать чтоб количество бросаний Орла и Решки были случайными ? #include<iostream> #include<stdlib.h> #include<time.h> using namespace std; int flip() { srand(time(NULL)); int chislo = rand()%2; return chislo; подробнее

Показать сообщение отдельно
zerO2hacK
1 / 1 / 0
Регистрация: 06.03.2012
Сообщений: 72
11.02.2013, 14:53     Сортировка массива структур (запутался я)
Доброго времени!

собственно сразу обращение за помощью.

есть структура и массив таких структур:
C++
1
2
3
4
5
6
7
8
9
10
11
    struct iDiscipline{
        char name[10];
        int num_course;
        int num_term;
        int am_lec;
        int am_pr;
        int am_lab;
        int am_one;
        int am_ALL;
        char form[1]; //e-exam || t-test
    }disciplines[3];
...там дальше куча функций...

и вот есть сортировка(сортировка ли? ):
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
//вывод c сортировкой: имя(А-Я), семестр(1-12)
    //сперва сама сортировка методом пузырька
    for (int i=0; i<3; i++){
        iDiscipline buffer;//создаем структуру нашего типа, где будет временно храниться 1 запись из массива
        //сорт. по семестру
        for (int k=i+1; k<2; k++){
            if (disciplines[i].num_term>disciplines[k].num_term){
                //копируем в буфер
                for(int j=0; j<10; j++) buffer.name[j]=disciplines[i].name[j];//посимвольное копирование
                buffer.num_course=disciplines[i].num_course;
                buffer.num_term=disciplines[i].num_term;
                buffer.am_lec=disciplines[i].am_lec;
                buffer.am_pr=disciplines[i].am_pr;
                buffer.am_lab=disciplines[i].am_lab;
                buffer.am_one=disciplines[i].am_one;
                buffer.am_ALL=disciplines[i].am_ALL;
                buffer.form[0]=disciplines[i].form[0];
                //на скопированное место вставляем нов.стр-ру
                for(int j=0; j<10; j++) disciplines[i].name[j]=disciplines[k].name[j];
                disciplines[i].num_course=disciplines[k].num_course;
                disciplines[i].num_term=disciplines[k].num_term;
                disciplines[i].am_lec=disciplines[k].am_lec;
                disciplines[i].am_pr=disciplines[k].am_pr;
                disciplines[i].am_lab=disciplines[k].am_lab;
                disciplines[i].am_one=disciplines[k].am_one;
                disciplines[i].am_ALL=disciplines[k].am_ALL;
                disciplines[i].form[0]=disciplines[k].form[0];
                //на место нов.стр-ры вставляем из буфера
                for(int j=0; j<10; j++) disciplines[k].name[j]=buffer.name[j];
                disciplines[k].num_course=buffer.num_course;
                disciplines[k].num_term=buffer.num_term;
                disciplines[k].am_lec=buffer.am_lec;
                disciplines[k].am_pr=buffer.am_pr;
                disciplines[k].am_lab=buffer.am_lab;
                disciplines[k].am_one=buffer.am_one;
                disciplines[k].am_ALL=buffer.am_ALL;
                disciplines[k].form[0]=buffer.form[0];
            };
        };
    };
    //сортируем по названию
    for (int i=0; i<3; i++){
        iDiscipline buffer;
        for (int k=i+1; k<2; k++){
            if (strcmp(disciplines[i].name,disciplines[k].name)>0){
                //копируем в буфер
                for(int j=0; j<10; j++) buffer.name[j]=disciplines[i].name[j];//посимвольное копирование
                buffer.num_course=disciplines[i].num_course;
                buffer.num_term=disciplines[i].num_term;
                buffer.am_lec=disciplines[i].am_lec;
                buffer.am_pr=disciplines[i].am_pr;
                buffer.am_lab=disciplines[i].am_lab;
                buffer.am_one=disciplines[i].am_one;
                buffer.am_ALL=disciplines[i].am_ALL;
                buffer.form[0]=disciplines[i].form[0];
                //на скопированное место вставляем нов.стр-ру
                for(int j=0; j<10; j++) disciplines[i].name[j]=disciplines[k].name[j];
                disciplines[i].num_course=disciplines[k].num_course;
                disciplines[i].num_term=disciplines[k].num_term;
                disciplines[i].am_lec=disciplines[k].am_lec;
                disciplines[i].am_pr=disciplines[k].am_pr;
                disciplines[i].am_lab=disciplines[k].am_lab;
                disciplines[i].am_one=disciplines[k].am_one;
                disciplines[i].am_ALL=disciplines[k].am_ALL;
                disciplines[i].form[0]=disciplines[k].form[0];
                //на место нов.стр-ры вставляем из буфера
                for(int j=0; j<10; j++) disciplines[k].name[j]=buffer.name[j];
                disciplines[k].num_course=buffer.num_course;
                disciplines[k].num_term=buffer.num_term;
                disciplines[k].am_lec=buffer.am_lec;
                disciplines[k].am_pr=buffer.am_pr;
                disciplines[k].am_lab=buffer.am_lab;
                disciplines[k].am_one=buffer.am_one;
                disciplines[k].am_ALL=buffer.am_ALL;
                disciplines[k].form[0]=buffer.form[0];
            };
        };
    };
1е что меня смущает, это размер кода!! можно ли как нибудь упростить?
2е....сортировка как то не так работает..А!да!..нужно чеб первым делом сортировалась по названию, вторым - по семестру (поле - num_term).

воот...голова ваще не соображает..не сплю 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
for (int i=0; i<3; i++) {
        cout<<i+1<<"я дисциплина:"<<endl;
        cout<<"\tНазвание дисциплины - "; scanf("%s",disciplines[i].name);
        cout<<"\tНомер курса - "; cin>>disciplines[i].num_course;
        //проверка адекватности ввода номера курса
        while (disciplines[i].num_course<1 || disciplines[i].num_course>6){
            cout<<"Введено неверное значение! Пожалуйста, поворите ввод - ";
            cin>>disciplines[i].num_course;
        }
        cout<<"\tНомер семестра - "; cin>>disciplines[i].num_term;
        //проверка адекватности ввода номера курса
        while (disciplines[i].num_term<1 || disciplines[i].num_term>12){
            cout<<"Введено неверное значение! Пожалуйста, поворите ввод - ";
            cin>>disciplines[i].num_term;
        }
        cout<<"\tКол-во часов лекций - "; cin>>disciplines[i].am_lec;
        cout<<"\tКол-во часов практик - "; cin>>disciplines[i].am_pr;
        cout<<"\tКол-во часов лабораторных - "; cin>>disciplines[i].am_lab;
        cout<<"\tКол-во часов сам. работ - "; cin>>disciplines[i].am_one;
        cout<<"\tКол-во часов ВСЕГО - "; cin>>disciplines[i].am_ALL;
        //проверяем адекватность поля ВСЕГО часов, путем сложения и сравнения
        while (disciplines[i].am_ALL != (disciplines[i].am_one+disciplines[i].am_lab+disciplines[i].am_pr+disciplines[i].am_lec)){
            cout<<"Введено неверное значение! Пожалуйста, поворите ввод - ";
            cin>>disciplines[i].am_ALL;
        }
        int choose;
        cout<<"\tФорма отчета:\n\t\t1.тест;\n\t\t2.экзамен\n\t\t-"; cin>>choose;
        //проверяем правильность ввода
        do {
            switch (choose){
            case 1:
                disciplines[i].form[0]='e';
                break;
            case 2:
                disciplines[i].form[0]='t';
                break;
            default:
                cout<<"Введено неверное значение! Пожалуйста, поворите ввод\n\t\t1.тест;\n\t\t2.экзамен\n\t\t-"; cin>>choose;
            };
        }
        while (choose<1 || choose>2);
    };
C++
1
2
3
4
5
6
7
8
9
cout<<"Наименование:    "; for (int i=0; i<3; i++) printf("|%s|",disciplines[i].name);
    cout<<endl<<"Номер курса;     "; for (int i=0; i<3; i++) cout<<"| "<<disciplines[i].num_course<<" |";
    cout<<endl<<"Номер семестра:  "; for (int i=0; i<3; i++) cout<<"| "<<disciplines[i].num_term<<" |";
    cout<<endl<<"Лекции (ч):      "; for (int i=0; i<3; i++) cout<<"| "<<disciplines[i].am_lec<<" |";
    cout<<endl<<"Практика (ч):    "; for (int i=0; i<3; i++) cout<<"| "<<disciplines[i].am_pr<<" |";
    cout<<endl<<"Лабы (ч):        "; for (int i=0; i<3; i++) cout<<"| "<<disciplines[i].am_lab<<" |";
    cout<<endl<<"Сам.раб. (ч):    "; for (int i=0; i<3; i++) cout<<"| "<<disciplines[i].am_one<<" |";
    cout<<endl<<"ВСЕГО (ч):       "; for (int i=0; i<3; i++) cout<<"| "<<disciplines[i].am_ALL<<" |";
    cout<<endl<<"Форма отчета:    "; for (int i=0; i<3; i++) cout<<"| "<<disciplines[i].form[0]<<" |";
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 13:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru