Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сортировка массива структур 
V
    Опции темы
DareDevil225
Дата 17.11.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 19.9.2006

Репутация: 1
Всего: 1



SergXP, 
в общем подключай просто 
1. #include <iostream.h>
2. using namespace std; - вообще не пиши
3. и шаблонную функцию sort переименуй - например в Sort или MySort

все должно заработать
PM MAIL   Вверх
SergXP
Дата 17.11.2008, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



Цитата(DareDevil225 @ 17.11.2008,  15:22)
3. и шаблонную функцию sort переименуй - например в Sort или MySort

 А это как? т.е. всмысле?

Это сообщение отредактировал(а) SergXP - 17.11.2008, 15:28
--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
DareDevil225
Дата 17.11.2008, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 19.9.2006

Репутация: 1
Всего: 1



Код

template <typename T, typename M>
void MySort(T *a, size_t length, M (T::*member))
{
    for(int i = 0; i < (int)length; i++)
    {
        for( int j = 0; j <(int)length; j++)
        {
            if (a[i].*member < a[j].*member)
            {
                 T temp = a[i];
                 a[i] = a[j];
                 a[j] = temp;
            }
        }
    }
}


и в функции indexing вызывай
Код

MySort(bd, count, &base::key);


переименовать нужно, потому что в файле iostream.h есть своя функция sort, а поскольку пространства имен (namespace) еще не было, то происходит перекрытие методов.

Это сообщение отредактировал(а) DareDevil225 - 17.11.2008, 15:33
PM MAIL   Вверх
Lazin
Дата 17.11.2008, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 41
Всего: 154



этот компилятор скоро будет отмечать 20-ти летний юбилей, как можно им пользоваться, когда есть столько альтернатив, в том числе и бесплатных?
PM MAIL Skype GTalk   Вверх
DareDevil225
Дата 17.11.2008, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 19.9.2006

Репутация: 1
Всего: 1



Lazin, вопрос не в том как можно им пользоваться, а как решить поставленную задачу - раз пользуются, значит либо есть только он, либо необходимо использовать только его
PM MAIL   Вверх
SergXP
Дата 17.11.2008, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



DareDevil225,  таже самая ошибка. 
--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
DareDevil225
Дата 17.11.2008, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 19.9.2006

Репутация: 1
Всего: 1



SergXP, тогда не знаю, значит компилятор не понимает, нужно именно на нем или можно другой использовать?
PM MAIL   Вверх
SergXP
Дата 17.11.2008, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



DareDevil225, ну мы используем его. А вы проверяли у себя мой код на компиляторе? Работает?
--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
DareDevil225
Дата 17.11.2008, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 19.9.2006

Репутация: 1
Всего: 1



У меня работает вот так
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#include <stdio.h>
#include <alloc.h>
#include <iostream.h>
#include <math.h>
#include <ctype.h>
#include <string.h>
#include <conio.h>
#include <PROCESS.H>
//#include <bios>
//#include <graphics>
#include <stdlib.h>
#include <dos.h>


const int n = 100;
int count;
char data[21][6][255];

template <class T, class M>
void sort(T *a, size_t length, M (T::*member))
{
    for(int i = 0; i < (int)length; i++)
    {
        for( int j = 0; j <(int)length; j++)
        {
            if (a[i].*member < a[j].*member)
            {
                 T temp = a[i];
                 a[i] = a[j];
                 a[j] = temp;
            }
        }
    }
}

struct base
{
    int  key;
    char family;
    char model;
    int  num_dvig;
    char color;
    char city;
};

struct index
{
    int key;
    int num;

};


index ind[n],z,ind2;
base bd[n];
////////////////////////////////////////
//  Sorting method 'Puzirek'
////////////////////////////////////////
sort_puzirek (int tp)
{
    char trash[255];

    for (int i=1; i<=count ; i++)
    {
       for (int j=1; j<=count-i; j++)
       {
        if (strcmpi(data[j][tp],data[j+1][tp])>0)
        {
            for(int row=1;row<=5;row++)
            {
                strcpy(trash,data[j][row]);
                strcpy(data[j][row],data[j+1][row]);
                strcpy(data[j+1][row],trash);
            }
        }
       }
    }

}
//------------------------------------------------------------------------//

//////////////////////////////////////
//Sorting Binary method
//////////////////////////////////////
sort_binary(int tp)
{
    int r,i,l,j;
    int m;
    char x[6][255];

    for (i=2;i<=count;i++)
    {
        for(int row=1;row<=5;row++)
        strcpy(x[row],data[i][row]);

        l=1;
        r=i-1;

           while(l<=r)
           {
          m=(l+r)/2;
          if (strcmpi(x[tp],data[m][tp])<0) r=m-1;
          else l=m+1;
           }
           for(j=i-1;j>=l;j--) for(int row=1;row<=5;row++)
           strcpy(data[j+1][row],data[j][row]);

           for(int row=1;row<=5;row++)
           strcpy(data[l][row],x[row]);
    }
}


//------------------------------------------------------------------------//

//////////////////////////////////
//  Sorting Fast
//////////////////////////////////
sort_fast(int l, int r,int tp)
{

    int i, j, row;
        int d=(l+r)/2;
     char x[6][255], y[6][255];

     i=l; j=r;

     for(row=1;row<=5;row++)strcpy(x[row],data[d][row]);
     while(i<j){

       while(strcmpi(data[i][tp],x[tp])<0)
       {
        i++;
           //    cout<<"I++ "<<i;
       }
       while(strcmpi(x[tp],data[j][tp])<0)
       {
        j--;
           //    cout<<"J-- "<<j;
       }
      // cout<<"i="<<i<<" j="<<j;
      // getche();
       if(i<=j){
           for(row=1;row<=5;row++){
        strcpy(y[row],data[i][row]);
        strcpy(data[i][row],data[j][row]);
        strcpy(data[j][row],y[row]);
           }
        i++; j--;
       }
     }
       //    cout<<"ceil l="<<l<<"r="<<r;
    //    getche();
     if(l<j) sort_fast(l, j, tp);
     if(i<r) sort_fast(i, r, tp);
       }


//--------------------------------------------------------------------//

/////////////////////////////////////
// Load from file Register Auto
/////////////////////////////////////
LoadFromFile()
{
    int col,row=1;
    count=0;
    clrscr();
    FILE *f;

    f=fopen("base.txt","r");

    if (!f)
    {
        cout<<"Cannot open file!";

    }

    while(!feof(f))
    {
        for(col=1;col<=6;col++)
        fscanf(f,"%s",data[row][col]);
        ind[row].key = row;
        ind[row].num = row;
        count++;
        row++;
    }
    fclose(f);

}

//--------------------------------------------------------//

//////////////////////////////////
// Print Base on Display
//////////////////////////////////
print_base()
{
    int i=1;
    clrscr();
    textcolor(2);
    gotoxy(1,1);  cprintf("N");
    gotoxy(4,1);  cprintf("Family");
    gotoxy(19,1); cprintf("Model");
    gotoxy(34,1); cprintf("Motor");
    gotoxy(49,1); cprintf("Color");
    gotoxy(64,1); cprintf("Adres");
    gotoxy(1,2);  cprintf("--------------------------------------------------------------------------");

    textcolor(7);

    for(i=1;i<=count;i++)
    {
           //    gotoxy(1,i+2);  cprintf(data[i][1]);
        gotoxy(1,i+2);  cprintf(data[i][1]);
        gotoxy(4,i+2);  cprintf(data[i][2]);
        gotoxy(19,i+2); cprintf(data[i][3]);
        gotoxy(34,i+2); cprintf(data[i][4]);
        gotoxy(49,i+2); cprintf(data[i][5]);
        gotoxy(64,i+2); cprintf(data[i][6]);

        bd[i].key    = (int)data[i][1];
        bd[i].family = (char)data[i][2];
        bd[i].model  = (char)data[i][3];
        bd[i].num_dvig = (int)data[i][4];
        bd[i].color = (char)data[i][5];
        bd[i].city = (char)data[i][6];


    }
       //    cout<<count<<endl;
    cout<<endl<<"Press any key..."<<endl;

    getche();

}


//--------------------------------------------------------//

///////////////////////
// Save in File
///////////////////////
SaveInFile()
{
    char text[255];
    int i;
    clrscr();

    FILE *f;

    f=fopen("base.txt","a");

    if (!f)
    {
        cout<<"Cannot open file!";

    }

    fprintf(f,"\n");
    fprintf(f,"%i\n",count+1);

    cout<<"Enter Family:            "; cin>>text; fprintf(f,"%s\n",text);
    cout<<"Enter Model Auto:        "; cin>>text; fprintf(f,"%s\n",text);
    cout<<"Enter Number Motor:      "; cin>>i;    fprintf(f,"%d\n",i);
    cout<<"Enter Color Auto:        "; cin>>text; fprintf(f,"%s\n",text);
    cout<<"Enter Adress Owner Auto: "; cin>>text; fprintf(f,"%s\n",text);
    cout<<"Information success save"<<endl;
    fclose(f);
    cout<<"Press any key..."<<endl;
    getche();
}
//--------------------------------------------------------//

//////////////////////////////////
// SubMenu for Sorting
//////////////////////////////////
select(int tp)
{

    int cursor;
    char key;

    while(cursor!=255)
    {
        clrscr();
        textcolor(6);
        gotoxy(8,2);
        if(tp==1) cprintf("Sorting Puzirek");
        if(tp==2) cprintf("Sorting Binary");
        if(tp==3) cprintf("Sorting Fast");
        gotoxy(2,4); cprintf("Key Sorting:");

        textcolor(10);
        gotoxy(2,cursor+4);cprintf("*");

        textcolor(7);
        gotoxy(5,5);cprintf("Family");
        gotoxy(5,6);cprintf("Model");
        gotoxy(5,7);cprintf("Motor");
        gotoxy(5,8);cprintf("Color");
        gotoxy(5,9);cprintf("Adres");

        textcolor(4);
        gotoxy(5,10);cprintf("Back");

        gotoxy(1,1);

        key = getche();

        if(key=='H')cursor--;
        if(key=='P')cursor++;

        if(key==13)
        {
            if((cursor>=1)&&(cursor<=5))
            {
                if(tp==1)sort_puzirek(cursor);
                if(tp==2)sort_binary(cursor);
                if(tp==3)sort_fast(1,count,cursor);
                print_base();
            }

            if(cursor==6)return 0;
        }
        if(key==27)return 0;

        if(cursor<1)cursor=6;
        if(cursor>6)cursor=1;

    }


}
//-----------------------------------------------------------------------//

///////////////////////////////
// Function Indexer Laboratory 2
///////////////////////////////
int compare (const void * a, const void * b)
{
    return (*(int*)a - *(int*)b);
}


indexing()
{
    int i;
    char *w;
    i=0;

    clrscr();



    for(i=1;i<=count;i++)
    {

        bd[i].key      = (int)data[i][1];
        bd[i].family   = (char)data[i][2];
        bd[i].model    = (char)data[i][3];
        bd[i].num_dvig = (int)data[i][4];
        bd[i].color    = (char)data[i][5];
        bd[i].city     = (char)data[i][6];


    }
    sort(bd, count, &base::key);

 

getche();
}
//-----------------------------------------------------------------------//

//------------------------------------------------------------------------//
#pragma argsused
int main(int argc, char* argv[])
{
    FILE *f;

    if((f=fopen("base.txt","r"))==0)
    {
        fopen("base.txt","w");
        fclose(f);
    }

    int cursor=1;
    char key;

    while(cursor!=255)
    {
        clrscr();

        LoadFromFile();

        textcolor(10);
        gotoxy(5,3); cprintf("Navigation:");
        gotoxy(1,2); cprintf("===========================================================");
        textcolor(3);
        gotoxy(20,1); cprintf("System Manage Register Auto");

        textcolor(10);
        gotoxy(2,cursor+4);
        cprintf(">>");

        textcolor(6);
        gotoxy(5,5);
        if (cursor == 1) textbackground(WHITE);
        else textbackground(BLACK);
        cprintf("Sorting 'Puzirek'");

        gotoxy(5,6);
        if (cursor == 2) textbackground(WHITE);
        else textbackground(BLACK);
        cprintf("Sorting binary method");

        gotoxy(5,7);
        if (cursor == 3) textbackground(WHITE);
        else textbackground(BLACK);
        cprintf("Sorting Fast");

        textcolor(5);
        gotoxy(5,8);
        if (cursor == 4) textbackground(WHITE);
        else textbackground(BLACK);
        cprintf("Add Auto");

        textcolor(5);
        gotoxy(5,9);
        if (cursor == 5) textbackground(WHITE);
        else textbackground(BLACK);
        cprintf("Print full base");

        gotoxy(5,10);
        if (cursor == 6) textbackground(WHITE);
        else textbackground(BLACK);
        cprintf("Indexer");

        textcolor(4);
        gotoxy(5,11);
        if (cursor == 7) textbackground(WHITE);
        else textbackground(BLACK);
        cprintf("Exit");
        textbackground(BLACK);

        textcolor(8);
        cout<<endl<<endl<<"Press key Esc for Exit...";
        gotoxy(1,1);

        key = getche();

        if(key=='H') cursor--;
        if(key=='P') cursor++;

        if (key==13)
        {
            if((cursor>=1)&&(cursor<=3)) select(cursor);

            if (cursor==4) SaveInFile();
            if (cursor==5) print_base();
            if (cursor==6) indexing();
            if (cursor==7) return 0;
        }

        if (key==27) return 0;;

        if (cursor<1) cursor=7;
        if (cursor>7) cursor=1;
    }
    return 0;
}
//---------------------------------------------------------------------------


PM MAIL   Вверх
SergXP
Дата 17.11.2008, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



DareDevil225,  в моем компиляторе таже самая ошибка! Сейчас попробую в другом
--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
SergXP
Дата 17.11.2008, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



DareDevil225,  в Билдере 6 не компилируется очень много ошибок  smile:
Что делать? Уже несколько дней бьюсь с этой проблемой. Не бросайте, пжл! 
Каким еще можно компилятором проверить?  
--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
DareDevil225
Дата 17.11.2008, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 19.9.2006

Репутация: 1
Всего: 1



SergXP, какие ошибки хоть выдает?
PM MAIL   Вверх
SergXP
Дата 17.11.2008, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



DareDevil225, очень разные и не понятные

Код

Build
  [C++ Error] auto.cpp(70): E2015 Ambiguity between 'count' and '_STL::count<_InputIter,_Tp>(_InputIter,_InputIter,const _Tp &)'
  [C++ Error] auto.cpp(72): E2015 Ambiguity between 'count' and '_STL::count<_InputIter,_Tp>(_InputIter,_InputIter,const _Tp &)'
  [C++ Warning] auto.cpp(86): W8070 Function should return a value
  [C++ Error] auto.cpp(98): E2015 Ambiguity between 'count' and '_STL::count<_InputIter,_Tp>(_InputIter,_InputIter,const _Tp &)'
  [C++ Warning] auto.cpp(118): W8070 Function should return a value
  [C++ Warning] auto.cpp(163): W8070 Function should return a value
  [C++ Error] auto.cpp(174): E2015 Ambiguity between 'count' and '_STL::count<_InputIter,_Tp>(_InputIter,_InputIter,const _Tp &)'
  [C++ Error] auto.cpp(192): E2015 Ambiguity between 'count' and '_STL::count<_InputIter,_Tp>(_InputIter,_InputIter,const _Tp &)'
  [C++ Warning] auto.cpp(197): W8070 Function should return a value
  [C++ Error] auto.cpp(219): E2015 Ambiguity between 'count' and '_STL::count<_InputIter,_Tp>(_InputIter,_InputIter,const _Tp &)'
  [C++ Warning] auto.cpp(243): W8070 Function should return a value
  [C++ Error] auto.cpp(268): E2015 Ambiguity between 'count' and '_STL::count<_InputIter,_Tp>(_InputIter,_InputIter,const _Tp &)'
  [C++ Warning] auto.cpp(279): W8070 Function should return a value
  [C++ Error] auto.cpp(327): E2015 Ambiguity between 'count' and '_STL::count<_InputIter,_Tp>(_InputIter,_InputIter,const _Tp &)'
  [C++ Warning] auto.cpp(341): W8070 Function should return a value
  [C++ Error] auto.cpp(363): E2015 Ambiguity between 'count' and '_STL::count<_InputIter,_Tp>(_InputIter,_InputIter,const _Tp &)'
  [C++ Error] auto.cpp(375): E2015 Ambiguity between 'count' and '_STL::count<_InputIter,_Tp>(_InputIter,_InputIter,const _Tp &)'
  [C++ Warning] auto.cpp(380): W8070 Function should return a value


Прикрепил свой исходник Builder

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  Projects.rar 42,69 Kb
--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
DareDevil225
Дата 17.11.2008, 19:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 19.9.2006

Репутация: 1
Всего: 1



Посмотрю, только завтра, с работы уже ухожу!
PM MAIL   Вверх
SergXP
Дата 17.11.2008, 19:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 150
Регистрация: 16.4.2008

Репутация: нет
Всего: нет



Изменил переменную с count на zap, программа запускается! 
--------------------
База IMEI-номеров украденных и утерянных мобильных телефоновhttp://imeis.net.ru/
PM MAIL WWW ICQ   Вверх
Страницы: (4) Все 1 [2] 3 4 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0716 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.