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

Сортировка по ключу одномерных массивов структур - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Получить первое слово в строке до пробела http://www.cyberforum.ru/cpp-beginners/thread1185511.html
Есть строка, нужно получить все символы до пробела, подскажите функцию которая поможет это реализовать. PS.Я имею в виду стандартную, типа copy() из дельфи
C++ Static переменные Написал небольшую программу, подключил к проекту name.h файл. В нем описание переменных static int a, b; Почему их значения можно выводить в main? Они же static. (VS2013) В книге Шилдnа написано, что стандарт против использования static переменных, рекомендуется метод, заключенный в использовании пространства имен. Так ли это? http://www.cyberforum.ru/cpp-beginners/thread1185509.html
Считать в файле строки и отобразить их в массиве C++
Задача состоит в том, чтобы задать данные с клавиатуры, найти их в файле и отобразить всю строку, где их нашли как элемент массива(используя классы). Получилось только найти в файле слова и отобразить их. #include<iostream> #include<conio.h> #include<fstream> #include<string> #include<Windows.h> #include<vector>
Генерация числа C++
Ребята помогите пожалуйста сгенерировать число от 45300000 к 45329999. пробовал вот так вот : h=rand()%45300000+45329999, но выдает значение больше чем в этом диапазоне.
C++ Перегрузка оператора "-" (вычитание матриц) http://www.cyberforum.ru/cpp-beginners/thread1185490.html
Нужно сделать вычитание матриц. class massiv { public: massiv(void); massiv(int,int,bool);// n m 1(ввод самим)или0(ввод автоматически) void Print(); friend massiv operator-(massiv,massiv);
C++ Число задом наперед Помогите пожалуйста!!!! Задача. Перевернуть число, введенное с клавиатуры, задом на перед. Например, введено 12345, должны вывести 54321 # include <iostream> using namespace std; void main () { int n(0); cout<<"Enter number: "; cin>>n; подробнее

Показать сообщение отдельно
denstan
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 28

Сортировка по ключу одномерных массивов структур - C++

23.05.2014, 01:44. Просмотров 361. Ответов 1
Метки (Все метки)

ребят не понимаю куда надо впихнуть эту сортировку
вот задание: 1. В магазине составлен список людей, которым выдана карта постоянно-го покупателя. Каждая запись этого списка содержит номер карточки, ФИО, предоставляемую скидку. Вывести информацию о покупателях, имеющих 10 %-ную скидку в магазине.
код к нему(рабочий)
Кликните здесь для просмотра всего текста
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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
 
FILE *fl;
typedef struct
{ 
    char fio[30];
    int kard;
    int skid;
} TMagaz;
TMagaz pokup[30];
char name[20]; 
int nst=0; 
int menu(); 
void nnf(); 
void newf(); 
void spisok(); 
void opf(); 
void resc(); 
void resf(); 
 
int main()
{
    while (true)
    {
        switch (menu())
        {
        case 1: nnf(); break;
        case 2: newf(); break;
        case 3: spisok(); break;
        case 4: opf(); break;
        case 5: resc(); break;
        case 6: resf(); break;
        case 7: return 0;
        default: puts ("Viberite pravilno!");
        }
        puts("Press any key to continue");
        getch(); system("cls");
    }
}
int menu() 
{
    cout << "VIBERITE:" << endl;
    cout << "1. Vvod file name" << endl;
    cout << "2. New file" << endl;
    cout << "3. Vvesti spisok" << endl;
    cout << "4. Open file" << endl;
    cout << "5. Vivesti result" << endl;
    cout << "6. Vivesti v fail" << endl;
    cout << "7. Exit" << endl;
    int i;
    cin >> i;
    return i;
}
void nnf() 
{
    cout << "Vvedite file name" << endl;
    cin >> name;
}
void newf() 
{
    if ((fl = fopen(name,"wb"))==NULL)
    {
        cout << "Oshibka pri sozdanii"<<endl;
        exit(1);
    }
    cout << "OK" << endl;
    fclose(fl);
}
void spisok() 
{
    if ((fl = fopen(name,"rb+"))==NULL)
    {
        cout << "Oshibka pri sozdanii"<<endl;
        exit(1);
    }
    cout << "Vvedite chislo skidok " << endl;
    cin >> nst;
    for (int i=0; i<nst; i++)
    {
        cout << "Vvedite imya: ";
        cin >> pokup[i].fio;
        cout << "Vvedite nomer karti: ";
        cin >> pokup[i].kard;
        cout << "Vvedite procent ckidki: ";
        cin >> pokup[i].skid;
        fwrite( &pokup[i], sizeof(TMagaz), 1, fl );
    }
    fclose(fl);
}
void opf() 
{
    if ((fl = fopen(name,"rb"))==NULL)
    {
        cout << "Oshibka pri otkritii"<<endl;
        exit(1);
    }
    nst=0; TMagaz pok;
    while(true)
{
        int nwrt = fread( &pok, sizeof(TMagaz), 1, fl );
        if (nwrt !=1) break;
        pokup[nst]=pok;
        cout << pokup[nst].fio << " " << pokup[nst].kard
            << " " << pokup[nst].skid << endl;
        nst++;
}
    fclose(fl);
}
 
void resc() 
{
    for (int i=0; i<nst; i++)
        if (pokup[i].skid==10)
            cout << pokup[i].fio << " " << pokup[i].kard << " " << endl;
}
void resf() 
{
    char namet[30];
    FILE *ft;
    cout << "Vvedite imya faila" << endl;
    cin >> namet;
    if ((ft = fopen(namet,"w"))==NULL)
    {
        cout << "Oshibka pri sozdanii "<<endl;
        exit(1);
    }
    char s[80];
    for (int i=0; i<nst; i++)
        if (pokup[i].skid==10)
        {
            strcpy(s, pokup[i].fio);
            strcat(s, "\n"); 
            fputs(s, ft);
        }
        fclose(ft);
}

2. Использовать эту программу. Упорядочить по неубыванию массив структур по заданному ключу.Ключ: номер карточки. Методы сортировки: QuickSort и пузырьковая сортировка.

куда вставить сортировку quickshort
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
void s_qs(TMagaz st[], int n)
{
    struct
    {
        int l;
        int r;
    } stack[20];
    int i,j, left, right, x, s=0;
    TMagaz t;
    stack[s].l=0; stack[s].r=n-1;
    while (s != -1)
    {
        left=stack[s].l; right=stack[s].r;
        s--;
        while (left < right)
        {
            i=left; j=right; x=st[(left+right)/2].kard;
            while (i <= j)
            {
                while (st[i].kard < x) i++;
                while (st[j].kard > x) j--;
                if (i<=j) 
                {
                    t=st[i]; st[i]=st[j]; st[j]=t;
                    i++; j--;
                }
            }
            if ((j-left)<(right-i))
            {
                if (i<right) {s++; stack[s].l=i; stack[s].r=right; }
                right=j;
            }
            else 
            {
                if (left<j) {s++; stack[s].l=left; stack[s].r=j; }
                left=i;
            }
        }
    }
}
и пузырьковую
C++
1
2
3
4
5
6
7
8
void s_puz(int a[], int n)
{
int i,j,t;
for(i=1; i < n; i++)
for( j=n-1; j >= i; j--)
if (a[j-1] > a[j])
{ t = a[j-1]; a[j-1] = a[j]; a[j] = t; }
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru