Задача такая. Нужно упорядочить значения введенные с клавиатуры по возрастанию. Причем эти значения это часть массива типа class. Но программа вместо этого при каждом цикле переносит последний элемент на место первого. Т.е. Если было: 4321 то после 4 циклов будет 4321->1324->1423->1432, вместо 1234. Вот код на с++ с выделенным местом ошибки: | Код | #include<iostream.h> #include<conio.h> #include<string.h> class bloknot{ int day; // den proizvedenia zapisi int srok; // srochnost' dela char text[10]; // zametka public: void store (int d,int sr,char *zam); void show (); };
void bloknot::store(int d,int sr,char *zam) { day=d; srok=sr; strcpy(text,zam); }
void bloknot::show() { cout << "\n\n\n den'. srochnost'. subject. \n " << day << " " << srok << " " << text; }
main () { bloknot list[10]; int d[10],sr[10],i,n,j,min,h,g,exp=0; char zam[10]; clrscr(); cout << "\n\n\n skolko zapisey budem delat' :"; cin >> n; clrscr(); for(i=0; i<n; i++) { cout << "\n\n\n den' :"; cin >> d[i]; cout << " srochnost':"; cin >> sr[i]; cout << " subject :"; cin >> zam;
list[i].store(d[i],sr[i],zam); clrscr(); } a: for(i=0; i<n; i++) { list[i].show(); } getch(); clrscr();
cout << "\n\n\n kak uporyadochit'? 1-den'; 2-srochnost':"; cin >> h;
|
Здесь начинается проблемный цикл. | Код | if(h==1){
for(j=0;j<n-1;j++) { min=d[j]; g=j; for(i=j+1;i<n;i++) {
if(min>d[i]) //даже если min<d[i] все равно выполняются следующие //две строчки из-за этого и получается неправильный ответ! { min=d[i]; g=i; }
} if(g!=j){ list[9].store(0,0,0); list[9]=list[j]; list[j]=list[g]; list[g]=list[9];} }
}
goto a;
return 0; }
|
Подскажите пожалуйста чего надо исправить, или если есть вариант упорядочивания по-другому.
|