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

  • Автор темы o1ps
  • Дата начала
Статус
Закрыто для дальнейших ответов.
O

o1ps

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

Вложения

  • 1 КБ Просмотры: 37

Over

Well-known member
04.07.2007
116
0
#2
Пузырёк делается так:
Код:
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;
};
 
O

o1ps

#3
полностью переделал код
Код:
#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
 

Over

Well-known member
04.07.2007
116
0
#4
Пойми, у людей нет времени и желания разбираться в твоей писанине. Если есть конкретные вопросы, задавай. Например "Хотел это, написал вот так, а оно выдаёт такую вот ошибку на этой строчке, помогите".

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

Pasha

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

o1ps

#6
в этом фрагменте
Код:
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)'

Не в тот класс записал?!
 
O

o1ps

#8
ну вот что касается вычисления двух значений.
Я создал класс
Код:
	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)
Подскажите пожалуйста почему так происходит, и, если вас не затруднит, как это можно исправить.
 
P

Pasha

#9
Для: o1ps
не поверишь, но можно делать вот так:
Код:
MojaStructura temp;
...
temp = list[i+1];
list[i+1] = list[i]
list[i] = temp;
 
O
#10
Код:
#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


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

Pasha

#11
Для: 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. Ну, или поменять монитор на другой, более мощный.
 
O
#12
Код:
#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;}	//программы

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

Pasha

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

Over

Well-known member
04.07.2007
116
0
#15
Для: o1ps
Я тебе уже писал кусочек кода, как делается сортировка пузырьком. И потом ещё указывал на ошибку в твоей сортировке, сказал, почему не работает. Читай форум внимательно.
 
O
#16
Т.е. мне сделать так?! :
Код:
buf_datapost=list[i+1].datapost;					
list[i+1].datapost=list[i].datapost;
list[i].datapost=buf_datapost;
Просто, подскажите, будьте добры, можно ли таким образом сортировать обьекты char?!... по int 4,5 и 6 буфер все просто, но вот по полям текстовым видимо надо по-другому. Или я глоубоко ошибаюсь?!
 
O
#17
Дата записывается в обычном формате DD.MM.YYYY и если вас не затруднит, не могли бы вы помочь, как организовать сортровку сначало по году, потом по месяцу, а затем по дням.

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

Over

Well-known member
04.07.2007
116
0
#18
Для работы с текстовыми полями используй функции для работы со строками:
strcmp() - сравнение двух строк
strcpy() - копирование строки
strcat() - конкатенация (соединение вместе) двух строк
И другие функции.
 
O
#19
Знаю, спасибо огромное что напомнили, но не могли бы вы подсказать пожалуйста, как организовать именно переход сначало к последним 4 знакам, т.е. году, затем к месяцам и т.д. Буду очень признателен за помощь.
 

Over

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