Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
denstan
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 28
#1

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

23.05.2014, 01:44. Просмотров 392. Ответов 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; }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2014, 01:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сортировка по ключу одномерных массивов структур (C++):

Обработка одномерных массивов. Сортировка массивов - C++
Здравствуйсте! Помогите пожалуйста написать программу! В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1)...

Обработка одномерных массивов. Сортировка массивов - C++
Здравствуйте, помогите пожалуйста решить задачу легким способом. В одномерном массиве, состоящем из n вещественных элементов, вычислить: ...

Сортировка одномерных массивов - C++
Дан целочисленный массив A(n) с элементами, сгенерированными случайными числами в диапазоне (-20;20). Требуется отсортировать по убыванию...

Сортировка одномерных массивов - C++
В C++.Подскажите, что не так? вроде все правильно, но работает она неправильно Задание:Сформировать другой массив из элементов исходного...

Сортировка одномерных массивов! - C++
Ребят, у меня задание найти сумму трех наименьших положительных четных чисел массива. Код есть. Сможете мне написать несколько...

Сортировка одномерных массивов!!! - C++
все должно быть написано одним кодом и если можно на языке С

1
sedalish
0 / 0 / 0
Регистрация: 15.03.2016
Сообщений: 1
31.03.2016, 17:58 #2
есть исходник?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2016, 17:58
Привет! Вот еще темы с ответами:

Сортировка одномерных числовых массивов - C++
Пожалуйста, помогите кодом. В прошлой теме не ответили.. Задание: Сгенерировать одномерный массив из 60 элементов целого типа в...

Объединение и сортировка одномерных массивов - C++
Подскажите как правильно можно создать одномерный массив из двух ранее сгенерированных случайным образом одномерных массива и отсортировать...

Сортировка 2-х одномерных массивов в 1 упорядоченный массив по возрастанию - C++
Задача такая, на форуме где то была уже. Но суть совсем другая. Есть два упорядоченных массива одномерных массива А(N) и B(M). Соединить...

Поиск ключу в одномерном массиве структур - C++
Найти сотрудника, работающего с 1975 года.


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

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

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