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

Написать структуру типа STUDENT, создать динамический массив - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить значение выражения b = (1+1/2+1/2^2+1/2^3+...+1/2^n)^n http://www.cyberforum.ru/cpp-beginners/thread764433.html
Вычислить значение выражения b = (1+1/2+1/2^2+1/2^3+...+1/2^n)^n .Где n ввести с клавиатуры.
C++ Чем отличаются указатели от ссылок? Как я понимаю указатель,он хранит адрес переменной,а ссылка просто берёт значение переменной?Привидите примерчик какой=) http://www.cyberforum.ru/cpp-beginners/thread764407.html
Найти корень уравнения 2x^3-x-10=0 C++
заранее благодарен
C++ Написать программу на языке С + + которая реализует конструктор который инициализирует исходные данные класса
#include <vcl.h> #include <iostream.h> #include <conio.h> struct Phone { char prizviche; char imya; char po_batkovi;
C++ транспонировать матрицу А [1 7 6 ] [0 2 3] [9 5 0 ]. заранее благодарен http://www.cyberforum.ru/cpp-beginners/thread764396.html
транспонировать матрицу А
C++ не выводится строка в Visual Studio #include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv) { string s="Press the enter key to continue ..."; cout << s; cin.get(); подробнее

Показать сообщение отдельно
Asker
114 / 102 / 11
Регистрация: 18.12.2010
Сообщений: 378
17.01.2013, 16:36  [ТС]     Написать структуру типа STUDENT, создать динамический массив
Этот динамический массив надо потом отсортировать... сначала сортировать по классу, в классе по букве, в букве по фамилии, в фамилии по имени...

Почему не работает - понять я не могу...
ввод, как выяснилось благодаря UserAK, работает теперь исправно... Это значит, что ошибка где-то либо в swap, либо в операторе присваивания, либо в сортировке. Т.е. все так же выводит иногда билебирду...

код ниже. его не так много, как кажется, просто я прокомментировал немного
Кликните здесь для просмотра всего текста

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
// НАПИСАНО НА ВИЗЕ
/* */
#include <stdio.h>
#include <windows.h>
#include <string.h>
 
//using namespace std;
 
struct STUDENT // структура STUDENT
{
char Name[20], Surname[20]; // имя, фамилия
char Letter; // буква класса
short int Class; // Номер класса
int Day, Month, Year; // дата рождения
};
 
 
 
//--------------- перегрузка оператора > -------------
// Мы считаем a>b, если класс a больше, чем класс b
// если буква класса a больше, чем буква класса b
// если фамилия a в лексикографическом порядке дальше, чем 
// фамилия b (аналогично имя)
 
bool operator>(const STUDENT &a, const STUDENT &b)
{
bool res=false; 
int temp;
if (a.Class>b.Class) res=true;
 else if (a.Class==b.Class) 
    if (a.Letter>b.Letter) res=true;
    else if (a.Letter==b.Letter)
        {temp=strcmp(a.Surname, b.Surname);
        if (temp>0) res=true;
        else if (temp==0)
            if (strcmp(a.Name, b.Name)>0) res=true;
        }
return res;
};
 
//--- копирование структуры STUDENT b в структуру a
 
void copy(STUDENT &a, STUDENT &b)
{
a.Letter = b.Letter;
a.Class = b.Class;
a.Day=b.Day;
a.Month=b.Month;
a.Year=b.Year;
strcpy(a.Name, b.Name); // из-за строк пришлось ввести 
strcpy(a.Surname, b.Surname); // эту функцию
}
 
// --- функция обмена двух структур местами
 
void swap(STUDENT &a, STUDENT &b)
{
STUDENT temp;
copy(temp, a);
copy(a, b);
copy(b, temp);
}
 
// ------ MAIN ------------
 
int main()
{
unsigned int n;
scanf("%i", &n);
STUDENT *a = new STUDENT [n]; // создали массив учащихся
 
for (unsigned int i=0; i<n; i++) // это ввод, он работает
    scanf("%s%s%i%c%i.%i.%i", &a[i].Surname, &a[i].Name, &a[i].Class, 
       &a[i].Letter, &a[i].Day, &a[i].Month, &a[i].Year); 
 
for (unsigned int k=2; k<=n; k++) // сортировка пузырьком
    for (unsigned int i=0; i<=n-k; i++) // ошибка, наверно, где-нибудь здесь
        if (a[i]>a[i+1]) swap(a[i], a[i+1]); // если студент1>студент2, то
                                            // обменять местами
 
for (unsigned  int i=0; i<n; i++)  // это вывод, он работает
     printf("%d%c %s %s %02d.%02d.%02d\n", a[i].Class, a[i].Letter, a[i].Surname, a[i].Name,
     a[i].Day, a[i].Month, a[i].Year); 
    
delete [] a;
 
system("pause");
 
return 0;
}


Я был бы вам весьма признателен, если Вы поможете мне найти ошибку. Мне очень нужно понять этот материал...

Добавлено через 29 минут
Вывод все равно не работает
 
Текущее время: 06:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru