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

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

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

Очередная сортировка структуры - C++

12.06.2011, 09:34. Просмотров 327. Ответов 4
Метки нет (Все метки)

Подобных вопросов были тонны, и тонны еще будут.
Есть прога, кривая и написанная собственноручно. Написать ее ума хватило, а вот чтоб откомпилировать...
Описание: Имеется файл со структурой. Научить прогу писать, дополнять и внятно выводить результат чтения сего файла получилось. На сортировке все застопорилось - не пойму никак, где у меня написано не правильно, ибо плоховато понимаю саму механику работы со структурой. За код, приведенный ниже не пинать. Как и всегда в подобных вопросах, все срочно. И спасибо большое всем отписавшимся.

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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#include <stdio.h>
#include <conio.h>
#include <string.h>
struct zemlya
{
    char name[25];
    int  S, Sp, Sr, So, Sy, Up, Ur, Uo, Uy;
};
 
void Merge(zemlya *A, int const nA, zemlya *B, int const nB, zemlya *C)
{
     int a(0), b(0);
     while( a+b < nA+nB )
     {
         if( (b>=nB) || ((a<nA) && (strcmp(A[a].name,B[b].name))) )
         {
             C[a+b] = A[a];
             ++a;
         }
         else
         {
             C[a+b] = B[b];
             ++b;
         }
     }
}
 
void MergeSort(zemlya *A, int n)
{
     zemlya t;
     if( n < 2 )
        return;
     if( n == 2 )
     {
        if(strcmp(A[1].name,A[0].name)) {t=A[0]; A[0]=A[1]; A[1]=t; }
            return;
     }
     MergeSort(A, n/2);
     MergeSort(A+n/2, n-n/2);
     zemlya *C;
     Merge(A,n/2, A+n/2,n-n/2, C);
     for(int i=0; i<n; ++i)
        A[i]=C[i];
}
 
void main()
{
    zemlya zl;
    char filename[]="C:\\area.dat";
    char s='\0';
    int SoblP=0, SoblR=0, SoblO=0, SoblY=0, S=0;
    int UoblP=0, UoblR=0, UoblO=0, UoblY=0;
    float UroblP, UroblR, UroblO, UroblY;
    float URp, URr, URo, URy, buff;
    FILE *f;
    clrscr();
    f=fopen(filename,"rb+");
    if(f)
    {
    do
    {
        fflush(stdin);
        printf("\n File suhcestvuet. Chto delat'? \n");
        printf(" 0-sozdat' zanovo \n 1-dobavit' dannie v etu structuru \n 2-otkazat'sya ot vvoda \n");
        s=getche();
        if(s=='0')
        f=fopen(filename,"wb+");
        else
        if(s=='1')
            f=fopen(filename, "ab+");
    }
    while(s!='0' && s!='1' && s!='2');
    if(s!='2')
    {
        do
        {
        fflush(stdin);
        printf("\n Nazvanie rayona: ");                     scanf("%s", &zl.name);
        fflush(stdin);
        printf("\n Plosh'yad', zaseyannaya pshenicey: ");   scanf("%d", &zl.Sp);
        fflush(stdin);
        printf("\n Plosh'yad', zaseyannaya rozhyu: ");      scanf("%d", &zl.Sr);
        fflush(stdin);
        printf("\n Plosh'yad', zaseyannaya ovsom: ");       scanf("%d", &zl.So);
        fflush(stdin);
        printf("\n Plosh'yad', zaseyannaya yachmenem: ");   scanf("%d", &zl.Sy);
        fflush(stdin);
        zl.S=zl.Sp+zl.Sr+zl.So+zl.Sy;
        printf("\n Predidush'iy urozhay pshenici: ");       scanf("%d", &zl.Up);
        fflush(stdin);
        printf("\n Predidush'iy urozhay rzhi: ");           scanf("%d", &zl.Ur);
        fflush(stdin);
        printf("\n Predidush'iy urozhay ovsa: ");           scanf("%d", &zl.Uo);
        fflush(stdin);
        printf("\n Predidush'iy urozhay yachmenya: ");      scanf("%d", &zl.Uy);
        fflush(stdin);
        fwrite(&zl, sizeof(zl),1,f);
        printf("\n Prodolzhit' vvod? [Y/N]: ");
        fflush(stdin);
        s=getchar();
        }
        while(s=='Y' || s=='y');
        fflush(stdin);
    }
        printf("\n File zapolnen. Chto delat'? \n");
        printf(" 0-vivesti statistiku \n 1-prochitat' tablicu \n 2-uiti \n");
        s=getche();
        if (s!='2')
        {
        if (s=='0')
        {
            printf("\n Obshyaya statistika: \n Srednyaya urozhaynost' po rayonam s 1 posevnoy plosh'yadi");
            printf("\n ЪДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДї");
            printf("\n |     Nazvanie rayona     | pshenica |   rozh   |   oves   | yachmen' |");
            printf("\n ГДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДґ");
            rewind(f);
            while (fread(&zl, sizeof(zl),1,f))
            {
            SoblP=SoblP+zl.Sp;  SoblR=SoblR+zl.Sr;  SoblO=SoblO+zl.So;  SoblY=SoblY+zl.Sy;  S=S+zl.Sp+zl.Sr+zl.So+zl.Sy;
            UoblP=UoblP+zl.Up;  UoblR=UoblR+zl.Ur;  UoblO=UoblO+zl.Uo;  UoblY=UoblY+zl.Uy;
            buff=zl.Up;      URp=buff/zl.Sp;
            buff=zl.Ur;      URr=buff/zl.Sr;
            buff=zl.Uo;      URo=buff/zl.So;
            buff=zl.Uy;      URy=buff/zl.Sy;
            printf("\n |%-25s|%10.4f|%10.4f|%10.4f|%10.4f|",zl.name, URp, URr, URo, URy);
            }
            printf("\n АДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДЩ");
            getch();
            buff=UoblP;     UroblP=buff/SoblP;
            buff=UoblR;     UroblR=buff/SoblR;
            buff=UoblO;     UroblO=buff/SoblO;
            buff=UoblY;     UroblY=buff/SoblY;
            printf("\n Oblastnaya statistika");
            printf("\n ЪДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДВДДДДДДДДДДї");
            printf("\n |                     | pshenica |   rozh   |   oves   | yachmen' |");
            printf("\n ГДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДЕДДДДДДДДДДґ");
            printf("\n |Sredyaya urozhaynost'|%10.4f|%10.4f|%10.4f|%10.4f|", UroblP, UroblR, UroblO, UroblY);
            printf("\n |Obsh'iy urozhay      |%10d|%10d|%10d|%10d|", UoblP, UoblR, UoblO, UoblY);
            printf("\n АДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДБДДДДДДДДДДЩ");
            printf("\n V oblasti zernovimi zaseyano %d zemli", S);
            getch();
        }
        if (s=='1')
        {
            printf("\n ЪДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДДї");
            printf("\n |     Nazvanie rayona     | S / Ur | S / Ur | S / Ur | S / Ur |    S   |");
            printf("\n |                         |pshenica|  rozh  |  oves  |yachmen'|zernovih|");
            printf("\n ГДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ");
            while (fread(&zl, sizeof(zl),1,f))
            {
            printf("\n |%-25s|%3d /%3d|%3d /%3d|%3d /%3d|%3d /%3d|%8d|",zl.name, zl.Sp, zl.Up, zl.Sr, zl.Ur, zl.So, zl.Uo, zl.Sy, zl.Uy, zl.S);
            }
            printf("\n АДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДДЩ");
            getch();
        }
        }
    }
    printf ("\n Vi hotite sortirovat' dannie? [Y/N]");
    fflush(stdin);
    s=getche();
    if (s=='Y' || s=='y')
    {
    S=0;
    while (fread(&zl, sizeof(zl),1,f))   S++;
    MergeSort(*zl,S);
    printf("\n ЪДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДДВДДДДДДДДї");
    printf("\n |     Nazvanie rayona     | S / Ur | S / Ur | S / Ur | S / Ur |    S   |");
    printf("\n |                         |pshenica|  rozh  |  oves  |yachmen'|zernovih|");
    printf("\n ГДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ");
    for (int i=0;i<S;i++)
    {
        printf("\n |%-25s|%3d /%3d|%3d /%3d|%3d /%3d|%3d /%3d|%8d|",zl.name, zl.Sp, zl.Up, zl.Sr, zl.Ur, zl.So, zl.Uo, zl.Sy, zl.Uy, zl.S);
    }
        printf("\n АДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДДБДДДДДДДДЩ");
    }
    fclose(f);
    getch();
}
Чуть не забыл, все на простом С#, без плюсов. И алгоритм сортировки на числовых массивах как часы. Именно в работе со структурой косяки.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.06.2011, 09:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Очередная сортировка структуры (C++):

Очередная сортировка пузырьком - C++
Здравствуйте! :) Нашёл я сортировку пузырьком на Википедии: void bubble_sort(int *a, int length) { for (int i = 0; i &lt;=...

Структуры. Сортировка массива структуры - C++
Здравствуйте! В чем моя ошибка?? Нужно отсортировать массив структуры по возрастанию среднего балла?? Делаю это с помощью...

Сортировка структуры - C++
Не могу придумать алгоритм сортировки структуры, пока все что получилось это найти наибольшее значение. //Макросы #define FILE_PATH ...

Сортировка структуры - C++
Второй день бьюсь с сортировкой структур, покажу код, входные и выходные данные: struct TZap{ char Name; char...

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

Сортировка структуры - C++
Всем привет. Нужна помощь при сортировке. Во время сортировки углов нужно так же отсортировать их координаты чтобы каждая координата...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
12.06.2011, 11:21 #2
Эта фраза
Цитата Сообщение от Kr1s Посмотреть сообщение
Чуть не забыл, все на простом С#, без плюсов
меня убила...

Не по теме:

C#++ - очень круто


Насчет вашей темы - ищите на форуме, вот есть
1
Kr1s
0 / 0 / 0
Регистрация: 03.05.2011
Сообщений: 16
12.06.2011, 11:31  [ТС] #3
Спасибо, а про плюсы - шутка юмора же)
0
Mиxaил
533 / 438 / 37
Регистрация: 10.12.2009
Сообщений: 1,857
12.06.2011, 11:33 #4
Я про то, что нет C# с плюсами и без, есть просто C, C++, C#
0
Kr1s
0 / 0 / 0
Регистрация: 03.05.2011
Сообщений: 16
12.06.2011, 12:06  [ТС] #5
Mиxaил, ты - кэп...
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2011, 12:06
Привет! Вот еще темы с ответами:

Сортировка структуры - C++
Есть структура struct v{ string one; string two; int three; }; Подскажите как отсортировать массив структур по полю...

Сортировка структуры - C++
Отсортировать структуру по желанию пользователя. 1. Вывести на экран книги в алфавитном порядке с указанием авторов, 2. Число книг...

Сортировка и структуры - C++
Задача : &quot;Имеется список 10 политических деятелей. Каждый из 100 опрошенных называет трех политиков, и назначает каждому из них одно из...

Структуры. Сортировка - C++
Здравствуйте, ув. форумчане. Я студент 1ого курса и только недавно начал изучать C++, учился по видеоурокам, но застрял на структурах, не...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.06.2011, 12:06
Ответ Создать тему
Опции темы

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