Упорядочение дат

Тема в разделе "Общие вопросы по С и С++", создана пользователем o1ps, 1 ноя 2007.

Статус темы:
Закрыта.
  1. o1ps

    o1ps Гость

    Есть небольшая программа
    Код (Text):
    #include <iostream.h>
    #include <fstream.h>
    #include <string.h>
    #include <time.h>
    #include <stdlib.h>
    #include <conio.h>


    #include <iostream.h>
    class class2;
    class class1
    {int a;
    friend void fun(class1&,class2&);
    public:
    class1(int A) : a(A) { };
    };  
    class class2
    {int a;                        
    friend void fun(class1&,class2&);
    public:
    class2(int A) : a(A) { };       };           
    void fun(class1& M1,class2& M2)
    {if (M1.a == M2.a) cout << "equal\n";
    else cout << "non equal\n"; }


    class class3
    {int x,y;
    public:
    void read(int& X, int& Y) const { X=x; Y=y; }
    void write(int X, int Y) { x=X; y=Y; }
    void display() const;
    void e(void) const { ((class3*) this)->x++; }    
    };
    void class3::display() const  { cout << x << '\t' << y << endl; }

    static union
    { int a;
    };

    struct Data {
    char magazin[10], fio[20], year[10], in[5];
    int count, ostatok, name, out;
    time_t date;
    float price;
    static void Stopper() {getch();}

    };

    class Antey {
    public:
    float price;
    int ostatok, out;
    };
    class Prodolit {
    public:
    float price;
    int ostatok, out;
    };
    class Svetlana {
    public:
    float price;
    int ostatok, out;
    };
    void Output(Data);

    void main(void)
    {  


    char *SrStK= "Srednyaya stoimost' knig v magazine ";
    char avtor[20], zoomzoom[15];
    float Ostatok=0, SrOstatok=0;
    int n=0,q=0, w=0, e=0,i,k=0, Kolichestvo=0, S=50;
    fstream inFile;
    inFile.open("data.txt",ios::in);

    fstream outFile("file.txt",ios::out);

    if(!inFile.is_open())
    {cerr << "Error\n";
    abort();     }  


    Data* Dan=new Data[S];
    Antey Ant[50];
    Prodolit Prod[50];
    Svetlana Svet[50];
    cout <<"\tHello \n";
    cout<<"Ves' spisok:" << endl;
    cout.setf(cout.left);
    cout.width(7);
    cout << "Magazin";
    cout.width(4);
    cout << "Type";
    cout.width(8);
    cout << "Country";
    cout.width(6);
    cout << "Price";
    cout.width(3);
    cout << "In";;
    cout.width(4);
    cout << "Out";
    cout.width(6);
    cout << "Prim.";
    cout.width(11);
    cout << "St.postup.";
    cout.width(9);
    cout << "St.prod.";
    //  cout.width(7);
    cout << "Date";
    //  cout.width(7);
    cout << "Date" << endl<<endl;


    ////////////////////////////////////////////


    while (inFile >> Dan[n].magazin>>Dan[n].fio>>
    Dan[n].year>>Dan[n].name>>Dan[n].count>>Dan[n].price>>Dan[n].in>>Dan[n].date)

    {   Dan[n].ostatok = Dan[n].name * Dan[n].price;
    Dan[n].out = Dan[n].name * Dan[n].price;
    Output(Dan[n]);
    n++;
    }
    inFile.close();

    cout<<endl<<endl;
    Data::Stopper();


    /////////////////////////////////////////////


    cout<<"Vvedite type PEVM"<<endl;
    cin >> avtor;
    outFile<<"\t"<<avtor<<"\n";

    for (i=0; i<n; i++)
    {if(strcmp (Dan[i].fio, avtor) == 0)
    {Output(Dan[i]);
    k+=1;
    outFile<<Dan[i].magazin<<" "<<Dan[i].fio<<" "<<Dan[i].name<<" "<<Dan[i].price<<" "<<Dan[i].ostatok<<" "<<Dan[i].out<<"\n";}
    }
    if (k==0)
    {cout << "Po vashemu zaprosy nichego ne najdeno";
    outFile<<"Po vashemu zaprosy nichego ne najdeno\n";}

    cout<<endl<<endl;




    cout<<"Vvedite magazin"<<endl;
    cin >> zoomzoom;
    outFile<<"\t"<<zoomzoom<<"\n";

    for (i=0; i<n; i++)
    {if(strcmp (Dan[i].magazin, zoomzoom) == 0)
    {Output(Dan[i]);
    k+=1;
    outFile<<Dan[i].magazin<<" "<<Dan[i].fio<<" "<<Dan[i].name<<" "<<Dan[i].price<<" "<<Dan[i].ostatok<<" "<<Dan[i].out<<"\n";}
    }
    if (k==0)
    {cout << "Po vashemu zaprosy nichego ne najdeno";
    outFile<<"Po vashemu zaprosy nichego ne najdeno\n";}




    cout<<endl<<endl;












    for (i=0; i<n; i++)
    { if (strcmp (Dan[i].magazin, "Antey")==0)
    { q+=1;
    Ant[q].price = Dan[i].price;
    Ant[q].ostatok = Dan[i].ostatok;}
    else
    {   if (strcmp (Dan[i].magazin, "Prodolit")==0)
    { w+=1;
    Prod[w].price = Dan[i].price;
    Prod[w].ostatok = Dan[i].ostatok;}
    else
    {   e+=1;
    Svet[e].price = Dan[i].price;
    Svet[e].ostatok = Dan[i].ostatok;}}
    }

    Data::Stopper();


    class1 mc1 = 100, mc3 = 200;
    class2 mc2 = 100;
    fun(mc1,mc2);                              
    fun(mc3,mc2);        

    int x,y;
    class3 A;  
    A.write(25,36);
    A.display();
    A.e();   
    A.read(x,y);                                       
    cout << x << '\t' << y << endl;
    const class3 B=A;
    cout <<"\n\t Spasibo za vnimanie!!! ";

    }

    void Output (Data d)
    {
    struct tm *t;

    cout.width(7);
    cout << d.magazin;
    cout.width(4);
    cout << d.fio;
    cout.width(8);
    cout << d.year;
    cout.width(6);
    cout << d.name;
    cout.width(4);
    cout << d.count;
    cout.width(5);
    cout << d.price;
    cout.width(5);
    cout << d.in;
    cout.width(10);
    cout << d.out;
    t=gmtime(&d.date);
    cout << t->tm_mday << "." << (t->tm_mon+1) << "." << (1900+t->tm_year);
    cout.width(10);
    cout<<(d.ostatok);
    //  t=gmtime(&d.date);
    cout << t->tm_mday << "." << (t->tm_mon+1) << "." << (1900+t->tm_year) << endl;
    }
    Будьте добры, подскажите как в ней организовать упорядочение по последнему столбцу дат методом пузырька.
    Код (Text):
    void my_class::sort(){                      //Сортировка структуры по возрастания
    int i, flag;                        //по полю "обеспеченность"
    char buf2[100];                 //используется метод пузырька
    a1: flag=0;
    for(i=1; i<n;i++){
    if (k[i]>k[i+1]){
    flag=1;
    buf.buf1=list[i].date;          //Обмен поля <Code>
    list[i].date=list[i+1].date;
    list[i+1].date=buf.buf1;
    Не получается. Будьте добры помочь исправить создавшиеся ошибки. Буду очень благодарен.
     

    Вложения:

    • data.txt
      Размер файла:
      1 КБ
      Просмотров:
      37
  2. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Пузырёк делается так:
    Код (Text):
    for (i = 0; i < array_size - 1; i++)
    for (k = i + 1; k < array_size; k++)
    {
    tmp = array[i];
    array[i] = array[k];
    array[k] = tmp;
    };
     
  3. o1ps

    o1ps Гость

    полностью переделал код
    Код (Text):
    #include<iostream.h>     // включение описаний классов ввода-вывода в потоке
    #include<stdio.h>       // для функций работы с файлами
    #include<string.h>       // включение описаний функций работы со строками
    #include <stdlib.h>  // включение описания функции abort()
    #include<fstream.h>      // включение описаний классов ввода-вывода из файла

    #define title1 "==================== Work ====================\n\n"
    #define title2 "Magazin Type Country Price In Out StPost StProd Prim DataProv DataPost"
    #define title3 "Process is completed..."<<"\n"

    const char con[]="Object of class [my_class] is constructed";   //Константы, значения которых
    const char des[]="Object of class [my_class] is destructed";    //нельзя изменить далее в программе

    static int global=10; //Определение глобальной переменной
    static union{ int a; char c;}; //глобальное анонимное объединение может быть только static
    ////////////////////////////////////////////////////////////////////////
    class general{      //Создание класса general
    protected:  //атрибут protected - доступ этой части класса защищен
    struct structura{       //Определение структуры. Структура содержит данные о театрах:
    char city[100];
    char nameth[100], magazin, tippvm[5], country[10], prim[5];
    char namesp[100];
    char genre[100];
    char data[100], dataprov[100] ,datapost[100];
    int datalet, inmag, outmag, stpost, stprod;
    int time;
    int price;};   
    public:         //Атрибут public - открытый доступ к этой части класса
    void complete();    //Определение функции-члена класса

    virtual void input_n(){cout<<"Virtual function is worked"<<"\n\n";};    //Виртуальная функция    
    };
    class my_vivod: public fstream, public general{//класс my_vivod полностью наследует класс fstream
    friend void complete();}; //Определение дружественной функции

    class my_class: public general{ //Создание производного класса my_class. Этот класс наследует класс general.

    public:     //Атрибут public - открытый доступ к этой части класса

    my_class(){         //Конструктор
    cout<<con<<"     "<<"Adress of object - "<<this<<"\n\n";}; //Использование указателя this
    ~my_class(){cout<<"\n\n"<<des<<"\n\n";};    //Деструктор

    static void first_gl(){cout<<"first global = "<<global<<"\n\n";}; //Статические
    static void last_gl(){cout<<"last global = "<<global<<"\n\n";}; //функции
    };
    class newew: public fstream, public general{
    public:
    void input_n(); //ввод количества записей о театрах
    void input();   //ввод таблицы
    void output();  //вывод результатов
    void poisk1(); //поиск1
    void poisk2(); //поиск2

    protected:  //атрибут protected - доступ этой части класса защищен
    int n;

    private:    //атрибут private - доступ этой части класса закрыт
    structura list[100];    //Определение массива list типа structura
    };
    ////////////////////////////////////////////////////////////////////////
    void general::complete(){
    cout<<title3;global++;};
    void newew:: input_n(){     //ввод количества записей
    fn: cout<<"Please, input quantity of records(<=10) - ";
    cin>>n;
    if (n<0) {
    printf("Error\n");
    goto fn;}
    if (n>10)
    n=global;   //Использование глобальной переменной
    cout<<"\n";
    global++;};
    void newew::input(){        //Заполнение таблицы
    my_vivod inp;
    int i;
    fstream input;
    inp.open("Vvod.txt", ios::in);   //открытие файла Vvod.txt для чтения
    if(!inp) // проверка на наличие ошибок
    {cerr << "Error\n"; // вывод данных в поток для ошибок
    abort();     }  // завершение программы при ошибке



    for(i=1; i<=n; i++){
    /
    inp>>list[i].magazin;
    inp>>list[i].tippvm;
    inp>>list[i].country;
    inp>>list[i].price;
    inp>>list[i].inmag;
    inp>>list[i].outmag;
    inp>>list[i].prim;
    inp>>list[i].dataprov;
    inp>>list[i].datapost;


    global++;}
    }; 
    void newew::output(){   //вывод результатов
    my_vivod file;          //переменная file типа my_vivod
    int i,k=0;

    cout << endl << "------------------------------------------------------------------------------" <<endl;
    cout<<title2<<endl;
    cout << "------------------------------------------------------------------------------" <<endl;
    for(i=1; i<=n; i++){        //вывод на экран таблицы
    cout.setf(ios::left);
    cout.width(8);   

    cout<<list[i].magazin;


    cout.width(5);
    cout<<list[i].tippvm;


    cout.width(9);
    cout<<list[i].country;

    cout.width(6);
    cout<<list[i].price;

    cout.width(3);
    cout<<list[i].inmag;

    cout.width(3);
    cout<<list[i].outmag;

    cout.width(11);
    cout<<list[i].stpost;

    cout.width(11);
    cout<<list[i].stprod;

    cout.width(5);
    cout<<list[i].prim;

    cout.width(11);
    cout<<list[i].dataprov;

    cout.width(11);
    cout<<list[i].datapost;


    cout<<"\n";


    while (input >> list[n].magazin>>list[n].tippvm>>
    list[n].country>>list[n].price>>list[n].inmag>>list[n].outmag>>list[n].prim>>list[n].dataprov>>list[n].datapost)

    {   list[n].ostatok = list[n].name * list[n].price;
    Output(list[n]);
    n++;
    }
    input.close();
    cout<<endl<<endl;
    Data::Stopper();



    }
    cout<<"\n\n";      

    file.open("Vivod.txt",ios::out);    //открытие файла Vivod.txt для записи
    file<<title2<<endl<<endl;      
    for(i=1; i<=n; i++){
    cout.width(10);
    file<<list[i].magazin;
    cout.width(17);
    file<<list[i].tippvm;
    cout.width(10);
    file<<list[i].country;
    cout.width(9);
    file<<list[i].price;
    cout.width(11);
    file<<list[i].inmag;
    cout.width(8);
    file<<list[i].outmag;
    cout.width(8);
    file<<list[i].stpost;
    cout.width(8);
    file<<list[i].stprod;
    cout.width(8);
    file<<list[i].prim;
    cout.width(8);
    file<<list[i].dataprov;
    cout.width(8);
    file<<list[i].datapost;
    file<<"\n\n";


    }
    file<<"\n\n\n\n"<<"The object which processed the data - "<<this;   //Использование указателя this
    global++;};

    // поиск1
    void newew::poisk1(){
    int i;
    char year[10];
    char *r;
    char yes_not;  
    yes_not=false;
    cout<< "\n Poisk po year: " <<"\n";
    cout<<"Vvedite year"<<endl;
    cin >> year;
    for(i=1; i<=n; i++){
    r=strstr(list[i].country);
    if (r!=NULL){

    cout.width(10);  
    cout<<list[i].magazin;
    cout.width(17);
    cout<<list[i].tippvm;
    cout.width(10);
    cout<<list[i].country;
    cout.width(9);
    cout<<list[i].price;
    cout.width(11);
    cout<<list[i].inmag;
    cout.width(8);
    cout<<list[i].outmag;
    cout.width(10);
    cout<<list[i].stpost;
    cout.width(4);
    cout<<list[i].stprod;
    cout.width(4);
    cout<<list[i].prim;
    cout.width(4);
    cout<<list[i].dataprov;
    cout.width(4);
    cout<<list[i].datapost;
    cout<<"\n";
    yes_not=true;}}
    if (!yes_not){
    cout<< "\n Not found "<< country <<"\n";
    }
    global++;};
    ////////////////////////////////////////////////////////////////////
    // поиск зимой
    void newew::poisk2(){
    char *p;
    int i;
    char st1[10];
    char st2[]="01";
    char st3[]="11";
    char st4[]="12";
    char yes_not;  
    yes_not=false;
    cout<< "\n Poisk po date mesaca " <<"\n";
    for(i=1; i<=n; i++){
    p=strstr(list[i].data,".");
    strncpy(st1,p,3);


    if (strstr(st1,st2)!=NULL){
    cout.width(10);  
    cout<<list[i].magazin;
    cout.width(17);
    cout<<list[i].tippvm;
    cout.width(10);
    cout<<list[i].country;
    cout.width(9);
    cout<<list[i].price;
    cout.width(11);
    cout<<list[i].inmag;
    cout.width(8);
    cout<<list[i].outmag;
    cout.width(10);
    cout<<list[i].stpost;
    cout.width(4);
    cout<<list[i].stprod;
    cout.width(4);
    cout<<list[i].prim;
    cout.width(4);
    cout<<list[i].dataprov;
    cout.width(4);
    cout<<list[i].datapost;
    cout<<"\n";
    yes_not=true;  }
    if (strstr(st1,st3)!=NULL){
    cout.width(10);  
    cout<<list[i].magazin;
    cout.width(17);
    cout<<list[i].tippvm;
    cout.width(10);
    cout<<list[i].country;
    cout.width(9);
    cout<<list[i].price;
    cout.width(11);
    cout<<list[i].inmag;
    cout.width(8);
    cout<<list[i].outmag;
    cout.width(10);
    cout<<list[i].stpost;
    cout.width(4);
    cout<<list[i].stprod;
    cout.width(4);
    cout<<list[i].prim;
    cout.width(4);
    cout<<list[i].dataprov;
    cout.width(4);
    cout<<list[i].datapost;
    cout<<"\n";
    yes_not=true; }
    if (strstr(st1,st4)!=NULL){

    cout.width(10);  
    cout<<list[i].magazin;
    cout.width(17);
    cout<<list[i].tippvm;
    cout.width(10);
    cout<<list[i].country;
    cout.width(9);
    cout<<list[i].price;
    cout.width(11);
    cout<<list[i].inmag;
    cout.width(8);
    cout<<list[i].outmag;
    cout.width(10);
    cout<<list[i].stpost;
    cout.width(4);
    cout<<list[i].stprod;
    cout.width(4);
    cout<<list[i].prim;
    cout.width(4);
    cout<<list[i].dataprov;
    cout.width(4);
    cout<<list[i].datapost;
    cout<<"\n";
    yes_not=true;}                                       
    }
    if (!yes_not){
    cout<< "\n Not found" <<"\n";
    }
    global++;};

    //////////////сортировка по дате поставки////////////////
    void my_class::sort(){                      //Сортировка структуры по возрастания
    int i, flag;                        //по полю "datapost"
    char buf2[100];                 //используется метод пузырька
    a1: flag=0;
    for(i=1; i<n;i++){
    if (k[i]>k[i+1]){
    flag=1;
    buf.buf1=list[i].magazin;          
    list[i].magazin=list[i+1].magazin;
    list[i+1].magazin=buf.buf1;

    strcpy(buf2,list[i].tippvm);       
    strcpy(list[i].tippvm, list[i+1].tippvm);  
    strcpy(list[i+1].tippvm, buf2);

    buf.buf3=list[i].country;          
    list[i].country=list[i+1].country;
    list[i+1].country=buf.buf3;

    buf.buf4=list[i].price;        
    list[i].price=list[i+1].price;
    list[i+1].price=buf.buf4;

    buf.buf5=list[i].inmag;        
    list[i].inmag=list[i+1].inmag;
    list[i+1].inmag=buf.buf5;

    buf.buf6=list[i].outmag;           
    list[i].outmag=list[i+1].outmag;
    list[i+1].outmag=buf.buf6;

    buf.buf7=list[i].stpost;           
    list[i].stpost=list[i+1].stpost;
    list[i+1].stpost=buf.buf7;

    buf.buf8=list[i].stprod;           
    list[i].stprod=list[i+1].stprod;
    list[i+1].stprod=buf.buf8;

    buf.buf9=list[i].prim;         
    list[i].prim=list[i+1].prim;
    list[i+1].prim=buf.buf9;

    buf.buf10=list[i].DataProv;        
    list[i].DataProv=list[i+1].DataProv;
    list[i+1].DataProv=buf.buf10;

    buf.buf11=list[i].DataPost;        
    list[i].DataPost=list[i+1].DataPost;
    list[i+1].DataPost=buf.buf11;

    buf.buf_k=k[i];                
    k[i]=k[i+1];
    k[i+1]=buf.buf_k;
    };
    };
    if (flag==1) goto a1;
    global++;};


    void my_class::output(){        //вывод результатов
    my_vivod file;          //переменная file типа my_vivod для демонстрации абалденного наследования
    int i;
    cout<<title2<<endl;
    for(i=1; i<=n; i++){                //На монитор
    cout<<list[i].magazin<<"        ";
    cout<<list[i].tippvm<<"      ";
    cout<<list[i].country<<"                ";
    cout<<list[i].price<<"          ";
    cout<<list[i].inmag<<"          ";
    cout<<list[i].outmag<<"         ";
    cout<<list[i].stpost<<"         ";
    cout<<list[i].stprod<<"         ";
    cout<<list[i].prim<<"           ";
    cout<<list[i].dataprov<<"           ";
    cout<<list[i].datapost<<"           ";
    cout<<k[i];
    cout<<"\n";
    }
    cout<<"\n\n";




    if (!yes_not){
    cout<< "\n Not found" <<"\n";
    }
    global++;};

    ////////////////////////////////////////////////////////////////////////
    void main(){
    newew you;
    my_class my_ob;  //Создание обьекта my_ob класса my_class. Здесь должен сработать конструктор
    my_vivod ff;      //Создание ff класса my_vivod.
    general z;        //Создание обьекта z класса  general
    char t;


    povtor:printf(title1);      //Заголовок программы

    my_ob.first_gl();   //Использование статической функции

    you.input_n(); 
    you.input();       
    you.complete();
    you.output();  
    you.poisk1();  
    you.poisk2();
    ff.complete();  //Использование дружественной функции

    z.input_n();    //Использование виртуальной функции

    my_ob.last_gl();    //Использование статической функции

    union {int a; char c;}; //локальное анонимное объединение
    a=10;
    ::a=55;  //оператор :: определяет доступ к глобальной переменной a
    cout << a << endl;
    cout << ::a << endl;
    c='$';
    ::c='#';  //оператор :: определяет доступ к глобальной переменной c
    cout << c << endl;
    cout << ::c << endl;

    cout<<"Do you want to repeat calculations? (y/n) ";     //запрос
    cin>>t;                                                 //на повторение
    switch(t){case 'y': printf("\n\n\n\n\n"); goto povtor;} //программы

    }   //Конец программы. В случае завершения должен сработать деструктор.
    Но не судите строго, пожалуйста, как всегда B) не могу справиться с ошибками. Подскажите как их можно исправить :) я буду вам очень благодарен.

    Исходная строка в фаиле:
    Komtek IBM China 45000 7 5 Bad 21.03.2001 18.03.2001
     
  4. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Пойми, у людей нет времени и желания разбираться в твоей писанине. Если есть конкретные вопросы, задавай. Например "Хотел это, написал вот так, а оно выдаёт такую вот ошибку на этой строчке, помогите".

    P.S. У тебя неверно сделана сортировка. У тебя только один проход по массиву, и меняются местами соседние значения. В итоге массив не будет отсортирован верно. И раз уж у тебя используются классы, то напиши хотя-бы конструктор копий (copy constructor). Это существенно уменьшит объём твоего кода.
     
  5. Pasha

    Pasha Гость

    Для: o1ps
    Отформатировать код, дать нормальные имена типам данных, убрать последствия копипаста в отдельные функции, разнести классы по разным файлам, переопределить опреаторы для ввода/вывода/сравнения, убрать глобальные переменные, убрать бесполезные комментарии в стиле "//Определение глобальной переменной", заставить все это скомпилироваться и потом уже искать ошибки.
     
  6. o1ps

    o1ps Гость

    в этом фрагменте
    Код (Text):
    while (input >> list[n].magazin>>list[n].tippvm>>
    list[n].country>>list[n].price>>list[n].inmag>>list[n].outmag>>list[n].prim>>list[n].dataprov>>list[n].datapost)

    {   list[n].ostatok = list[n].name * list[n].price;
    Output(list[n]);
    n++;
    }
    input.close();
    cout<<endl<<endl;
    Data::Stopper();
    идет ошибка error C2296: '>>' : illegal, left operand has type 'void (__thiscall newew::*)(void)'

    Не в тот класс записал?!
     
  7. gamecreator

    gamecreator Гость

    input должен быть типа istream
     
  8. o1ps

    o1ps Гость

    ну вот что касается вычисления двух значений.
    Я создал класс
    Код (Text):
        void newew::calc(){                    
    int i;
    for(i=1; i<=n; i++){
    q[i]=list[i].price*list[i].inmag;
    t[i]=list[i].price*list[i].outmag;};
    global++;};
    Его описал как паблик. Но при выводе на экран значений q и t они так и остаются абракадаброй. (-858993460)
    Подскажите пожалуйста почему так происходит, и, если вас не затруднит, как это можно исправить.
     
  9. Pasha

    Pasha Гость

    Для: o1ps
    не поверишь, но можно делать вот так:
    Код (Text):
    MojaStructura temp;
    ...
    temp = list[i+1];
    list[i+1] = list[i]
    list[i] = temp;
     
  10. o1ps

    o1ps Гость

    Код (Text):
    #include<iostream.h>     // включение описаний классов ввода-вывода в потоке
    #include<stdio.h>       // для функций работы с файлами
    #include<string.h>       // включение описаний функций работы со строками
    #include <stdlib.h>  // включение описания функции abort()
    #include<fstream.h>      // включение описаний классов ввода-вывода из файла

    #define title1 "==================== Laboratory Work 3. Variant 5 ====================\n\n"
    #define title2 "Magazin Type Country Price In Out StPost StProd Prim DataProv DataPost"
    #define title3 "Process is completed..."<<"\n"

    const char con[]="Object of class [my_class] is constructed";   //Константы, значения которых
    const char des[]="Object of class [my_class] is destructed";    //нельзя изменить далее в программе

    static int global=10; //Определение глобальной переменной
    static union{ int a; char c;}; //глобальное анонимное объединение может быть только static
    ////////////////////////////////////////////////////////////////////////
    class general{      //Создание класса general
    protected:  //атрибут protected - доступ этой части класса защищен
    struct structura{       //Определение структуры. Структура содержит данные о театрах:
    char city[100];
    char nameth[100], magazin[10], typepvm[5], country[10], prim[5];
    char namesp[100];
    char genre[100];
    char data[100], dataprov[100] ,datapost[100];
    int datalet, inmag, outmag, stpost, stprod;
    int time;
    int price;};   
    public:         //Атрибут public - открытый доступ к этой части класса
    void complete();    //Определение функции-члена класса

    virtual void input_n(){cout<<"Virtual function is worked"<<"\n\n";};    //Виртуальная функция    
    };
    class my_vivod: public fstream, public general{//класс my_vivod полностью наследует класс fstream
    friend void complete();}; //Определение дружественной функции

    class my_class: public general{ //Создание производного класса my_class. Этот класс наследует класс general.

    public:     //Атрибут public - открытый доступ к этой части класса

    my_class(){         //Конструктор
    cout<<con<<"     "<<"Adress of object - "<<this<<"\n\n";}; //Использование указателя this
    ~my_class(){cout<<"\n\n"<<des<<"\n\n";};    //Деструктор

    static void first_gl(){cout<<"first global = "<<global<<"\n\n";}; //Статические
    static void last_gl(){cout<<"last global = "<<global<<"\n\n";}; //функции
    };
    class newew: public fstream, public general{
    public:
    void calc();
    void sort();
    void input_n(); //ввод количества записей о театрах
    void input();   //ввод таблицы
    void output();  //вывод результатов

    void poisk1(); //поиск по годам
    void poisk2(); //поиск по посещаемости

    protected:  //атрибут protected - доступ этой части класса защищен
    int n;
    int q[100];
    int t[100];

    private:    //атрибут private - доступ этой части класса закрыт

    union buffer{           //Определение объединения
    int buf4;      
    int buf5;      
    int buf6;

    int buf_datapost;};    

    buffer buf;         //Определение обьекта buf типа buffer.


    structura list[100];    //Определение массива list типа structura

    };
    ////////////////////////////////////////////////////////////////////////
    void general::complete(){
    cout<<title3;global++;};
    void newew:: input_n(){     //ввод количества записей о театрах
    fn: cout<<"Please, input quantity of records(<=10) - ";
    cin>>n;
    if (n<0) {
    printf("Error\n");
    goto fn;}
    if (n>10)
    n=global;   //Использование глобальной переменной
    cout<<"\n";
    global++;};
    void newew::input(){        //Заполнение таблицы
    my_vivod inp;
    int i;
    inp.open("Vvod.txt", ios::in);   //открытие файла Vvod.txt для чтения
    if(!inp) // проверка на наличие ошибок
    {cerr << "Error\n"; // вывод данных в поток для ошибок
    abort();     }  // завершение программы при ошибке

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


    inp>>list[i].magazin;
    inp>>list[i].typepvm;
    inp>>list[i].country;
    inp>>list[i].price;
    inp>>list[i].inmag;
    inp>>list[i].outmag;
    inp>>list[i].prim;
    inp>>list[i].dataprov;
    inp>>list[i].datapost;


    global++;}


    }; 

    void newew::calc(){                    
    int i;
    for(i=1; i<=n; i++){
    q[i]=list[i].price*list[i].inmag;
    t[i]=list[i].price*list[i].outmag;};
    };






    void newew::output(){   //вывод результатов
    my_vivod file;          //переменная file типа my_vivod
    int i,k=0;

    cout << endl << "------------------------------------------------------------------------------" <<endl;
    cout<<title2<<endl;
    cout << "------------------------------------------------------------------------------" <<endl;
    for(i=1; i<=n; i++){        //вывод на экран таблицы
    cout.setf(ios::left);


    cout.width(8);                                     
    cout<<list[i].magazin;

    cout.width(4);
    cout<<list[i].typepvm;

    cout.width(7);
    cout<<list[i].country;

    cout.width(6);
    cout<<list[i].price;

    cout.width(3);
    cout<<list[i].inmag;

    cout.width(3);
    cout<<list[i].outmag;

    cout.width(11);
    cout<<q[i];

    cout.width(11);
    cout<<t[i];

    cout.width(5);
    cout<<list[i].prim;

    cout.width(11);
    cout<<list[i].dataprov;

    cout.width(11);
    cout<<list[i].datapost;




    }
    cout<<"\n\n";      

    file.open("Vivod.txt",ios::out);    //открытие файла Vivod.txt для записи
    file<<title2<<endl<<endl;      
    for(i=1; i<=n; i++){
    cout.width(10);
    file<<list[i].magazin;
    cout.width(17);
    cout.width(17);
    file<<list[i].typepvm;
    cout.width(10);
    file<<list[i].country;
    cout.width(9);
    file<<list[i].price;
    cout.width(11);
    file<<list[i].inmag;
    cout.width(8);
    file<<list[i].outmag;
    cout.width(8);
    file<<q[i];
    cout.width(8);
    file<<t[i];
    cout.width(8);
    file<<list[i].prim;
    cout.width(8);
    file<<list[i].dataprov;
    cout.width(8);
    file<<list[i].datapost;

    file<<"\n\n";
    }
    file<<"\n\n\n\n"<<"The object which processed the data - "<<this;   //Использование указателя this
    global++;};

    // поиск по спектаклям, выпущенные в каком-то году
    void newew::poisk1(){
    int i;
    char year[10];
    char *r;
    char yes_not;  
    yes_not=false;
    cout<< "\n Poisk po year: " <<"\n";
    cout<<"Vvedite year"<<endl;
    cin >> year;
    for(i=1; i<=n; i++){
    r=strstr(list[i].country,year);
    if (r!=NULL){

    cout.width(8);   
    cout<<list[i].magazin;
    cout.width(4);
    cout<<list[i].typepvm;
    cout.width(7);
    cout<<list[i].country;
    cout.width(6);
    cout<<list[i].price;
    cout.width(3);
    cout<<list[i].inmag;
    cout.width(3);
    cout<<list[i].outmag;
    cout.width(11);
    cout<<q[i];
    cout.width(11);
    cout<<t[i];
    cout.width(5);
    cout<<list[i].prim;
    cout.width(11);
    cout<<list[i].dataprov;
    cout.width(11);
    cout<<list[i].datapost;

    cout<<"\n";
    yes_not=true;}}
    if (!yes_not){
    cout<< "\n Not spektakls go out v "<< year <<"\n";
    }
    global++;};
    ////////////////////////////////////////////////////////////////////
    // поиск по посещаемости
    void newew::poisk2(){
    char *p;
    int i;
    char st1[10];
    char st2[]="01";
    char st3[]="11";
    char st4[]="12";
    char yes_not;  
    yes_not=false;
    cout<< "\n Poisk po poseshaemosti: " <<"\n";
    for(i=1; i<=n; i++){
    p=strstr(list[i].data,".");
    strncpy(st1,p,3);

    if (strstr(st1,st2)!=NULL){
    cout.width(8);   
    cout<<list[i].magazin;
    cout.width(4);
    cout<<list[i].typepvm;
    cout.width(7);
    cout<<list[i].country;
    cout.width(6);
    cout<<list[i].price;
    cout.width(3);
    cout<<list[i].inmag;
    cout.width(3);
    cout<<list[i].outmag;
    cout.width(11);
    cout<<q[i];
    cout.width(11);
    cout<<t[i];
    cout.width(5);
    cout<<list[i].prim;
    cout.width(11);
    cout<<list[i].dataprov;
    cout.width(11);
    cout<<list[i].datapost;

    cout<<"\n";
    yes_not=true;  }
    if (strstr(st1,st3)!=NULL){
    cout.width(8);   
    cout<<list[i].magazin;
    cout.width(4);
    cout<<list[i].typepvm;
    cout.width(7);
    cout<<list[i].country;
    cout.width(6);
    cout<<list[i].price;
    cout.width(3);
    cout<<list[i].inmag;
    cout.width(3);
    cout<<list[i].outmag;
    cout.width(11);
    cout<<q[i];
    cout.width(11);
    cout<<t[i];
    cout.width(5);
    cout<<list[i].prim;
    cout.width(11);
    cout<<list[i].dataprov;
    cout.width(11);
    cout<<list[i].datapost;

    cout<<"\n";
    yes_not=true; }
    if (strstr(st1,st4)!=NULL){

    cout.width(8);   
    cout<<list[i].magazin;
    cout.width(4);
    cout<<list[i].typepvm;
    cout.width(7);
    cout<<list[i].country;
    cout.width(6);
    cout<<list[i].price;
    cout.width(3);
    cout<<list[i].inmag;
    cout.width(3);
    cout<<list[i].outmag;
    cout.width(11);
    cout<<q[i];
    cout.width(11);
    cout<<t[i];
    cout.width(5);
    cout<<list[i].prim;
    cout.width(11);
    cout<<list[i].dataprov;
    cout.width(11);
    cout<<list[i].datapost;

    cout<<"\n";
    yes_not=true;}                                       
    }
    if (!yes_not){
    cout<< "\n Not spektakls vesnoi s poseshaemosti > 10 " <<"\n";
    }
    global++;};







    //////////////////////////////////////////////////
    /////////////СОРТИРОВКА//////////////////////////





    void newew::sort(){                     //Сортировка структуры по возрастания
    int i, flag;                        //по полю "обеспеченность"
    char buf1[100],buf2[100],buf3[100],buf7[100],buf8[100];                 //используется метод пузырька
    a1: flag=0;
    for(i=1; i<n;i++){
    if (list[i].datapost>list[i+1].datapost){
    flag=1;

    //////////1///////////
    strcpy(buf1,list[i].magazin);       //Обмен поля magazin
    strcpy(list[i].magazin, list[i+1].magazin);
    strcpy(list[i+1].magazin, buf1);

    //////////2///////////

    strcpy(buf2,list[i].typepvm);       //Обмен поля typepvm
    strcpy(list[i].typepvm, list[i+1].typepvm);
    strcpy(list[i+1].typepvm, buf2);

    //////////3//////////


    strcpy(buf3,list[i].country);       //Обмен поля country
    strcpy(list[i].country, list[i+1].country);
    strcpy(list[i+1].country, buf3);

    //////////4//////////

    buf.buf4=list[i].price;         //Обмен поля price
    list[i].price=list[i+1].price;
    list[i+1].price=buf.buf4;

    //////////5//////////

    buf.buf5=list[i].inmag;             //Обмен поля inmag
    list[i].inmag=list[i+1].inmag;
    list[i+1].inmag=buf.buf5;

    //////////6//////////
    buf.buf6=list[i].outmag;                //Обмен поля outmag
    list[i].outmag=list[i+1].outmag;
    list[i+1].outmag=buf.buf6;


    //////////7//////////

    strcpy(buf7,list[i].prim);      //Обмен поля prim
    strcpy(list[i].prim, list[i+1].prim);  
    strcpy(list[i+1].prim, buf7);

    /////////8///////////

    strcpy(buf8,list[i].dataprov);      //Обмен поля dateprov
    strcpy(list[i].dataprov, list[i+1].dataprov);  
    strcpy(list[i+1].dataprov, buf8);

    buf.buf_datapost=list[i]datapost;                   //Обмен значений datepost
    list[i].datapost=list[i+1].datapost;
    list[i+1].datapost=buf.buf_datapost;



    };
    };
    if (flag==1) goto a1;
    global++;};

    void newew::output(){       //вывод результатов
    my_vivod file;          //переменная file типа my_vivod для демонстрации абалденного наследования
    int i;
    cout<<title2<<endl;
    for(i=1; i<=n; i++){                //На монитор
    cout<<list[i].magazin<<"        ";
    cout<<list[i].typepvm<<"        ";
    cout<<list[i].country<<"        ";
    cout<<list[i].price<<"      ";
    cout<<list[i].inmag<<"      ";
    cout<<list[i].outmag<<"     ";
    cout<<list[i].prim<<"       ";
    cout<<list[i].dataprov<<"    ";
    cout<<list[i].datapost;
    cout<<"\n";
    }
    cout<<"\n\n";

    file.open("Data.txt",ios::out);         //В файл. Здесь используется то абалденное наследование
    file<<title2<<endl<<endl;           //так как обьекту file доступны все методы класса fstream
    for(i=1; i<=n; i++){
    cout<<list[i].magazin<<"        ";
    cout<<list[i].typepvm<<"        ";
    cout<<list[i].country<<"        ";
    cout<<list[i].price<<"      ";
    cout<<list[i].inmag<<"      ";
    cout<<list[i].outmag<<"     ";
    cout<<list[i].prim<<"       ";
    cout<<list[i].dataprov<<"    ";
    cout<<list[i].datapost;
    file<<"\n\n";
    }
    file<<"\n\n\n\n"<<"The object which processed the data - "<<this;   //Использование указателя this
    global++;};




    /////////////////////////////////////////////////////////////////////
    ///////////////////КОНЕЦ СОРТИРОВКИ//////////////////////////////////
    void main(){
    newew you;
    my_class my_ob;  //Создание обьекта my_ob класса my_class. Здесь должен сработать конструктор
    my_vivod ff;      //Создание ff класса my_vivod.
    general z;        //Создание обьекта z класса  general
    char t;

    povtor:printf(title1);      //Заголовок программы

    my_ob.first_gl();   //Использование статической функции


    you.input_n(); 
    you.input();       
    you.complete();
    you.calc();
    you.sort();
    you.output();
    you.poisk1();  
    you.poisk2();
    ff.complete();  //Использование дружественной функции

    z.input_n();    //Использование виртуальной функции

    my_ob.last_gl();    //Использование статической функции

    union {int a; char c;}; //локальное анонимное объединение
    a=10;
    ::a=55;  //оператор :: определяет доступ к глобальной переменной a
    cout << a << endl;
    cout << ::a << endl;
    c='$';
    ::c='#';  //оператор :: определяет доступ к глобальной переменной c
    cout << c << endl;
    cout << ::c << endl;

    cout<<"Do you want to repeat calculations? (y/n) ";     //запрос
    cin>>t;                                                 //на повторение
    switch(t){case 'y': printf("\n\n\n\n\n"); goto povtor;} //программы

    }   //Конец программы. В случае завершения должен сработать деструктор.
    Это весь код. Подскажите пожалуйста как исправить возникшие ошибки:

    C:\prog\zaam\yjyt.cpp(425) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'struct general::structura' (or there is no acceptable conversion)
    C:\prog\zaam\yjyt.cpp(425) : error C2146: syntax error : missing ';' before identifier 'datapost'
    C:\prog\zaam\yjyt.cpp(425) : error C2065: 'datapost' : undeclared identifier
    C:\prog\zaam\yjyt.cpp(426) : error C2106: '=' : left operand must be l-value
    C:\prog\zaam\yjyt.cpp(427) : error C2440: '=' : cannot convert from 'int' to 'char [100]'
    There are no conversions to array types, although there are conversions to references or pointers to arrays
    C:\prog\zaam\yjyt.cpp(436) : error C2084: function 'void __thiscall newew::eek:utput(void)' already has a body
    C:\prog\zaam\yjyt.cpp(493) : error C2264: 'output' : error in function definition or declaration; function not called


    Я Буду вам очень признателен и благодарен за помощь.
     
  11. Pasha

    Pasha Гость

    Для: o1ps
    Код (Text):
    list[i].datepost>list[i+1].datepost
    error C2039: 'datepost' : is not a member of 'structura'
    Ты пытаешься сортировать объекты типа structura по полю datepost. В объявлении structura поля datepost нет. Компилятор не понимает как можно сравнивать поля, которых нет.
    Демонстрация обалденного умения обалденно работать с обалденными структурами в обалденных плюсах. Все мегакуски, обозначенные "//////////xxx///////////" заменяются 3 (тремя!) строчками из моего предудыщего поста. Вообще слово struct о чем-нибудь говорит. Ну, это такая хрень, позволяющая работать с кучей полей как с цельным объектом. Никаких ассоциаций?
    <!--QuoteBegin-o1ps+5:11:2007, 13:55 -->
    <span class="vbquote">(o1ps @ 5:11:2007, 13:55 )</span><!--QuoteEBegin-->Плюс при выводе на монитор error C2143: syntax error : missing ';' before 'string' для всех переменных.
    [snapback]84262" rel="nofollow" target="_blank[/snapback]​
    [/quote]Это ошибка в 17-й строке, перед string надо поставить магическую комбинацию символов omgwtf. Ну, или поменять монитор на другой, более мощный.
     
  12. o1ps

    o1ps Гость

    Код (Text):
    #include<iostream.h>     // включение описаний классов ввода-вывода в потоке
    #include<stdio.h>       // для функций работы с файлами
    #include<string.h>       // включение описаний функций работы со строками
    #include <stdlib.h>  // включение описания функции abort()
    #include<fstream.h>      // включение описаний классов ввода-вывода из файла

    #define title1 "==================== Laboratory Work 3. Variant 5 ====================\n\n"
    #define title2 "Magazin Type Country Price In Out StPost StProd Prim DataProv DataPost"
    #define title3 "Process is completed..."<<"\n"

    const char con[]="Object of class [my_class] is constructed";   //Константы, значения которых
    const char des[]="Object of class [my_class] is destructed";    //нельзя изменить далее в программе

    static int global=10; //Определение глобальной переменной
    static union{ int a; char c;}; //глобальное анонимное объединение может быть только static
    ////////////////////////////////////////////////////////////////////////
    class general{      //Создание класса general
    protected:  //атрибут protected - доступ этой части класса защищен
    struct structura{       //Определение структуры. Структура содержит данные о театрах:
    char city[100];
    char nameth[100], magazin[10], typepvm[5], country[10], prim[5];
    char namesp[100];
    char genre[100];
    char data[100], dataprov[100] ,datapost[100];
    int datalet, inmag, outmag, stpost, stprod;
    int time;
    int price;};   
    public:         //Атрибут public - открытый доступ к этой части класса
    void complete();    //Определение функции-члена класса

    virtual void input_n(){cout<<"Virtual function is worked"<<"\n\n";};    //Виртуальная функция    
    };
    class my_vivod: public fstream, public general{//класс my_vivod полностью наследует класс fstream
    friend void complete();}; //Определение дружественной функции

    class my_class: public general{ //Создание производного класса my_class. Этот класс наследует класс general.

    public:     //Атрибут public - открытый доступ к этой части класса

    my_class(){         //Конструктор
    cout<<con<<"     "<<"Adress of object - "<<this<<"\n\n";}; //Использование указателя this
    ~my_class(){cout<<"\n\n"<<des<<"\n\n";};    //Деструктор

    static void first_gl(){cout<<"first global = "<<global<<"\n\n";}; //Статические
    static void last_gl(){cout<<"last global = "<<global<<"\n\n";}; //функции
    };
    class newew: public fstream, public general{
    public:
    void calc();
    void sort();
    void input_n(); //ввод количества записей о театрах
    void input();   //ввод таблицы
    void output();  //вывод результатов
    void outpat();

    void poisk1(); //поиск по годам
    void poisk2(); //поиск по посещаемости

    protected:  //атрибут protected - доступ этой части класса защищен
    int n;
    int q[100];
    int t[100];

    private:    //атрибут private - доступ этой части класса закрыт

    union buffer{           //Определение объединения
    int buf4;      
    int buf5;      
    int buf6;
    char buf_datapost[100];};      

    buffer buf;         //Определение обьекта buf типа buffer.


    structura list[100];    //Определение массива list типа structura

    };
    ////////////////////////////////////////////////////////////////////////
    void general::complete(){
    cout<<title3;global++;};
    void newew:: input_n(){     //ввод количества записей о театрах
    fn: cout<<"Please, input quantity of records(<=10) - ";
    cin>>n;
    if (n<0) {
    printf("Error\n");
    goto fn;}
    if (n>10)
    n=global;   //Использование глобальной переменной
    cout<<"\n";
    global++;};
    void newew::input(){        //Заполнение таблицы
    my_vivod inp;
    int i;
    inp.open("Vvod.txt", ios::in);   //открытие файла Vvod.txt для чтения
    if(!inp) // проверка на наличие ошибок
    {cerr << "Error\n"; // вывод данных в поток для ошибок
    abort();     }  // завершение программы при ошибке

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


    inp>>list[i].magazin;
    inp>>list[i].typepvm;
    inp>>list[i].country;
    inp>>list[i].price;
    inp>>list[i].inmag;
    inp>>list[i].outmag;
    inp>>list[i].prim;
    inp>>list[i].dataprov;
    inp>>list[i].datapost;


    global++;}


    }; 

    void newew::calc(){                    
    int i;
    for(i=1; i<=n; i++){
    q[i]=list[i].price*list[i].inmag;
    t[i]=list[i].price*list[i].outmag;};
    };






    void newew::output(){   //вывод результатов
    my_vivod file;          //переменная file типа my_vivod
    int i,k=0;

    cout << endl << "------------------------------------------------------------------------------" <<endl;
    cout<<title2<<endl;
    cout << "------------------------------------------------------------------------------" <<endl;
    for(i=1; i<=n; i++){        //вывод на экран таблицы
    cout.setf(ios::left);


    cout.width(8);                                     
    cout<<list[i].magazin;

    cout.width(4);
    cout<<list[i].typepvm;

    cout.width(7);
    cout<<list[i].country;

    cout.width(6);
    cout<<list[i].price;

    cout.width(3);
    cout<<list[i].inmag;

    cout.width(3);
    cout<<list[i].outmag;

    cout.width(11);
    cout<<q[i];

    cout.width(11);
    cout<<t[i];

    cout.width(5);
    cout<<list[i].prim;

    cout.width(11);
    cout<<list[i].dataprov;

    cout.width(11);
    cout<<list[i].datapost;




    }
    cout<<"\n\n";      

    file.open("Vivod.txt",ios::out);    //открытие файла Vivod.txt для записи
    file<<title2<<endl<<endl;      
    for(i=1; i<=n; i++){
    cout.width(10);
    file<<list[i].magazin;
    cout.width(17);
    cout.width(17);
    file<<list[i].typepvm;
    cout.width(10);
    file<<list[i].country;
    cout.width(9);
    file<<list[i].price;
    cout.width(11);
    file<<list[i].inmag;
    cout.width(8);
    file<<list[i].outmag;
    cout.width(8);
    file<<q[i];
    cout.width(8);
    file<<t[i];
    cout.width(8);
    file<<list[i].prim;
    cout.width(8);
    file<<list[i].dataprov;
    cout.width(8);
    file<<list[i].datapost;

    file<<"\n\n";
    }
    file<<"\n\n\n\n"<<"The object which processed the data - "<<this;   //Использование указателя this
    global++;};

    // поиск по спектаклям, выпущенные в каком-то году
    void newew::poisk1(){
    int i;
    char year[10];
    char *r;
    char yes_not;  
    yes_not=false;
    cout<< "\n Poisk po year: " <<"\n";
    cout<<"Vvedite year"<<endl;
    cin >> year;
    for(i=1; i<=n; i++){
    r=strstr(list[i].country,year);
    if (r!=NULL){

    cout.width(8);   
    cout<<list[i].magazin;
    cout.width(4);
    cout<<list[i].typepvm;
    cout.width(7);
    cout<<list[i].country;
    cout.width(6);
    cout<<list[i].price;
    cout.width(3);
    cout<<list[i].inmag;
    cout.width(3);
    cout<<list[i].outmag;
    cout.width(11);
    cout<<q[i];
    cout.width(11);
    cout<<t[i];
    cout.width(5);
    cout<<list[i].prim;
    cout.width(11);
    cout<<list[i].dataprov;
    cout.width(11);
    cout<<list[i].datapost;

    cout<<"\n";
    yes_not=true;}}
    if (!yes_not){
    cout<< "\n Not spektakls go out v "<< year <<"\n";
    }
    global++;};
    ////////////////////////////////////////////////////////////////////
    // поиск по посещаемости
    void newew::poisk2(){
    char *p;
    int i;
    char st1[10];
    char st2[]="01";
    char st3[]="11";
    char st4[]="12";
    char yes_not;  
    yes_not=false;
    cout<< "\n Poisk po poseshaemosti: " <<"\n";
    for(i=1; i<=n; i++){
    p=strstr(list[i].data,".");
    strncpy(st1,p,3);

    if (strstr(st1,st2)!=NULL){
    cout.width(8);   
    cout<<list[i].magazin;
    cout.width(4);
    cout<<list[i].typepvm;
    cout.width(7);
    cout<<list[i].country;
    cout.width(6);
    cout<<list[i].price;
    cout.width(3);
    cout<<list[i].inmag;
    cout.width(3);
    cout<<list[i].outmag;
    cout.width(11);
    cout<<q[i];
    cout.width(11);
    cout<<t[i];
    cout.width(5);
    cout<<list[i].prim;
    cout.width(11);
    cout<<list[i].dataprov;
    cout.width(11);
    cout<<list[i].datapost;

    cout<<"\n";
    yes_not=true;  }
    if (strstr(st1,st3)!=NULL){
    cout.width(8);   
    cout<<list[i].magazin;
    cout.width(4);
    cout<<list[i].typepvm;
    cout.width(7);
    cout<<list[i].country;
    cout.width(6);
    cout<<list[i].price;
    cout.width(3);
    cout<<list[i].inmag;
    cout.width(3);
    cout<<list[i].outmag;
    cout.width(11);
    cout<<q[i];
    cout.width(11);
    cout<<t[i];
    cout.width(5);
    cout<<list[i].prim;
    cout.width(11);
    cout<<list[i].dataprov;
    cout.width(11);
    cout<<list[i].datapost;

    cout<<"\n";
    yes_not=true; }
    if (strstr(st1,st4)!=NULL){

    cout.width(8);   
    cout<<list[i].magazin;
    cout.width(4);
    cout<<list[i].typepvm;
    cout.width(7);
    cout<<list[i].country;
    cout.width(6);
    cout<<list[i].price;
    cout.width(3);
    cout<<list[i].inmag;
    cout.width(3);
    cout<<list[i].outmag;
    cout.width(11);
    cout<<q[i];
    cout.width(11);
    cout<<t[i];
    cout.width(5);
    cout<<list[i].prim;
    cout.width(11);
    cout<<list[i].dataprov;
    cout.width(11);
    cout<<list[i].datapost;

    cout<<"\n";
    yes_not=true;}                                       
    }
    if (!yes_not){
    cout<< "\n Not spektakls vesnoi s poseshaemosti > 10 " <<"\n";
    }
    global++;};







    //////////////////////////////////////////////////
    /////////////СОРТИРОВКА//////////////////////////





    void newew::sort(){                     //Сортировка структуры по возрастания
    int i, flag;                        //по полю "обеспеченность"
    char buf1[100],buf2[100],buf3[100],buf7[100],buf8[100];                 //используется метод пузырька
    a1: flag=0;
    for(i=1; i<n;i++){
    if (list[i].datapost>list[i+1].datapost){
    flag=1;

    //////////1///////////
    strcpy(buf1,list[i].magazin);       //Обмен поля magazin
    strcpy(list[i].magazin, list[i+1].magazin);
    strcpy(list[i+1].magazin, buf1);

    //////////2///////////

    strcpy(buf2,list[i].typepvm);       //Обмен поля typepvm
    strcpy(list[i].typepvm, list[i+1].typepvm);
    strcpy(list[i+1].typepvm, buf2);

    //////////3//////////


    strcpy(buf3,list[i].country);       //Обмен поля country
    strcpy(list[i].country, list[i+1].country);
    strcpy(list[i+1].country, buf3);

    //////////4//////////

    buf.buf4=list[i].price;         //Обмен поля price
    list[i].price=list[i+1].price;
    list[i+1].price=buf.buf4;

    //////////5//////////

    buf.buf5=list[i].inmag;             //Обмен поля inmag
    list[i].inmag=list[i+1].inmag;
    list[i+1].inmag=buf.buf5;

    //////////6//////////
    buf.buf6=list[i].outmag;                //Обмен поля outmag
    list[i].outmag=list[i+1].outmag;
    list[i+1].outmag=buf.buf6;


    //////////7//////////

    strcpy(buf7,list[i].prim);      //Обмен поля prim
    strcpy(list[i].prim, list[i+1].prim);  
    strcpy(list[i+1].prim, buf7);

    /////////8///////////

    strcpy(buf8,list[i].dataprov);      //Обмен поля dateprov
    strcpy(list[i].dataprov, list[i+1].dataprov);  
    strcpy(list[i+1].dataprov, buf8);

    /*  buf.buf_datapost=list[i].datapost;                  //Обмен значений datepost
    list[i].datapost=list[i+1].datapost;
    list[i+1].datapost=buf.buf_datapost; */

    strcpy(buf.buf_datapost,list[i].datapost);      //Обмен поля dateprov
    strcpy(list[i].datapost, list[i+1].datapost);  
    strcpy(list[i+1].datapost, buf.buf_datapost);

    };
    };
    if (flag==1) goto a1;
    global++;};

    void newew::outpat(){       //вывод результатов
    my_vivod file;          //переменная file типа my_vivod для демонстрации абалденного наследования
    int i;
    cout<<title2<<endl;
    for(i=1; i<=n; i++){                //На монитор
    cout<<list[i].magazin<<" ";
    cout<<list[i].typepvm<<" ";
    cout<<list[i].country<<" ";
    cout<<list[i].price<<" ";
    cout<<list[i].inmag<<" ";
    cout<<list[i].outmag<<" ";
    cout<<list[i].prim<<" ";
    cout<<list[i].dataprov<<" ";
    cout<<list[i].datapost;
    cout<<"\n";
    }
    cout<<"\n\n";

    file.open("Data.txt",ios::out);         //В файл. Здесь используется то абалденное наследование
    file<<title2<<endl<<endl;           //так как обьекту file доступны все методы класса fstream
    for(i=1; i<=n; i++){
    cout<<list[i].magazin<<" ";
    cout<<list[i].typepvm<<" ";
    cout<<list[i].country<<" ";
    cout<<list[i].price<<" ";
    cout<<list[i].inmag<<" ";
    cout<<list[i].outmag<<" ";
    cout<<list[i].prim<<" ";
    cout<<list[i].dataprov<<" ";
    cout<<list[i].datapost;
    file<<"\n\n";
    }
    file<<"\n\n\n\n"<<"The object which processed the data - "<<this;   //Использование указателя this
    global++;};




    /////////////////////////////////////////////////////////////////////
    ///////////////////КОНЕЦ СОРТИРОВКИ//////////////////////////////////
    void main(){
    newew you;
    my_class my_ob;  //Создание обьекта my_ob класса my_class. Здесь должен сработать конструктор
    my_vivod ff;      //Создание ff класса my_vivod.
    general z;        //Создание обьекта z класса  general
    char t;

    povtor:printf(title1);      //Заголовок программы

    my_ob.first_gl();   //Использование статической функции


    you.input_n(); 
    you.input();       
    you.complete();
    you.calc();
    you.output();
    you.poisk1();  
    you.poisk2();
    you.sort();
    you.outpat();
    ff.complete();  //Использование дружественной функции

    z.input_n();    //Использование виртуальной функции

    my_ob.last_gl();    //Использование статической функции

    union {int a; char c;}; //локальное анонимное объединение
    a=10;
    ::a=55;  //оператор :: определяет доступ к глобальной переменной a
    cout << a << endl;
    cout << ::a << endl;
    c='$';
    ::c='#';  //оператор :: определяет доступ к глобальной переменной c
    cout << c << endl;
    cout << ::c << endl;

    cout<<"Do you want to repeat calculations? (y/n) ";     //запрос
    cin>>t;                                                 //на повторение
    switch(t){case 'y': printf("\n\n\n\n\n"); goto povtor;} //программы

    }   //Конец программы. В случае завершения должен сработать деструктор.
    Отрабатывает без ошибок. (извините за предыдущие посты, ошибки исправил сам). Но сортировка как таковая не проходит. Подскажите пожалуйста, где я ошибся.
     
  13. Pasha

    Pasha Гость

    Для: o1ps
    Ты ошибся когда решил сначала написать копи-пастом 600 строк кода, а потом методом тыка перевел из состояния "не компилируется" в состояние "не работает". Именно поэтому никто не отвечает на форуме - никтому не охота тратить время на поиск ошибки в неаккуратном и склеенном из кусков коде.
    А по теме - нажми на строчке you.sort() кнопку F9, потом F5, потом аккуратно нажимай F11. Учись пользоватся отладчиком.
     
  14. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Для: o1ps
    Такие простыни кода в следующий раз прикрепляй файлами к сообщению
     
  15. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Для: o1ps
    Я тебе уже писал кусочек кода, как делается сортировка пузырьком. И потом ещё указывал на ошибку в твоей сортировке, сказал, почему не работает. Читай форум внимательно.
     
  16. o1ps

    o1ps Гость

    Т.е. мне сделать так?! :
    Код (Text):
    buf_datapost=list[i+1].datapost;                   
    list[i+1].datapost=list[i].datapost;
    list[i].datapost=buf_datapost;
    Просто, подскажите, будьте добры, можно ли таким образом сортировать обьекты char?!... по int 4,5 и 6 буфер все просто, но вот по полям текстовым видимо надо по-другому. Или я глоубоко ошибаюсь?!
     
  17. o1ps

    o1ps Гость

    Дата записывается в обычном формате DD.MM.YYYY и если вас не затруднит, не могли бы вы помочь, как организовать сортровку сначало по году, потом по месяцу, а затем по дням.

    Видимо сначало необходимо отсчитать 4 символа с конца до точки, их отсортировать, потом цикл по месяцам и т.д. Помогите пожалуйста, буду благодарен.
     
  18. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Для работы с текстовыми полями используй функции для работы со строками:
    strcmp() - сравнение двух строк
    strcpy() - копирование строки
    strcat() - конкатенация (соединение вместе) двух строк
    И другие функции.
     
  19. o1ps

    o1ps Гость

    Знаю, спасибо огромное что напомнили, но не могли бы вы подсказать пожалуйста, как организовать именно переход сначало к последним 4 знакам, т.е. году, затем к месяцам и т.д. Буду очень признателен за помощь.
     
  20. Over

    Over Well-Known Member

    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Твоя строка - есть массив. Массив состоит из элементов, для строки это символы. К каждому элементу можно обратиться по индексу, и получить таким образом отдельный символ строки.
    Вот смотри, у тебя есть дата в строковой записи, например : "12.10.2007". Тогда делаешь следующее:
    Код (Text):
    char date[11];  //твоя дата в строковой записи - 10 символов и 11-й символ конца строки \0
    char day[3];     //день - два символа на дату и один на символ конца строки \0
    char month[3]; //месяц
    char year[5];   //год
    i = 0;
    k = 0;
    while (i < 2) //Копируем день
    {
    day[k] = date[i];
    k++;
    i++;
    }
    day[2] = "\0";

    i = 3;
    k = 0;
    while (i < 5) //Копируем месяц
    {
    month[k] = date[i];
    k++;
    i++;
    }
    month[2] = "\0";

    i = 6;
    k = 0;
    while (i < 10) //Копируем год
    {
    year[k] = date[i];
    k++;
    i++;
    }
    year[5] = "\0";

    //Вот после этого можно сравнивать day, month и year
    P.S. Я понимаю, что это можно было написать по-другому, и проще и лучше. Но для человека, для наглядности я написал именно так, чтобы до него дошло.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей