1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  2. Чат codeby в telegram перезагрузка. Обсуждаем вопросы информационной безопасности и методы защиты информации, программирование. Задавайте свои вопросы и комментируйте чужие. Подробнее ...

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

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

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

    o1ps Гость

    Репутация:
    0
    Есть небольшая программа
    Код:
    #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;
    }
    Будьте добры, подскажите как в ней организовать упорядочение по последнему столбцу дат методом пузырька.
    Код:
    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

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Пузырёк делается так:
    Код:
    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 Гость

    Репутация:
    0
    полностью переделал код
    Код:
    #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

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

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

    Pasha Гость

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

    o1ps Гость

    Репутация:
    0
    в этом фрагменте
    Код:
    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 Гость

    Репутация:
    0
    input должен быть типа istream
     
  8. o1ps

    o1ps Гость

    Репутация:
    0
    ну вот что касается вычисления двух значений.
    Я создал класс
    Код:
    	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 Гость

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

    o1ps Гость

    Репутация:
    0
    Код:
    #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::output(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 Гость

    Репутация:
    0
    Для: o1ps
    Код:
    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 Гость

    Репутация:
    0
    Код:
    #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 Гость

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

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

    Over Well-Known Member

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

    o1ps Гость

    Репутация:
    0
    Т.е. мне сделать так?! :
    Код:
    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 Гость

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

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

    Over Well-Known Member

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

    o1ps Гость

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

    Over Well-Known Member

    Репутация:
    0
    Регистрация:
    4 июл 2007
    Сообщения:
    116
    Симпатии:
    0
    Твоя строка - есть массив. Массив состоит из элементов, для строки это символы. К каждому элементу можно обратиться по индексу, и получить таким образом отдельный символ строки.
    Вот смотри, у тебя есть дата в строковой записи, например : "12.10.2007". Тогда делаешь следующее:
    Код:
    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. Я понимаю, что это можно было написать по-другому, и проще и лучше. Но для человека, для наглядности я написал именно так, чтобы до него дошло.
     
Загрузка...
Статус темы:
Закрыта.

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