структуры. не получается сортировка.

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

grewnica

#1
описать структуру с именем train, содержащую след. поля:
1)название пункта назначения
2)номер поезда
3)время отправления
написать программу, выполняющую след. действия:
1)ввод с клавиатуры данных в массив, состоящий из 8 элементов типа train, записи должны быть размещены в алфавитном орядке по названиям пунктов назначения
2)вывод на экран информации о поездах, отправляющихся после введенного с клавы времени
3)если таких нет, выдать соответствующее сообщение


вот код:
[codebox]#include <iomanip.h>
#include <windows.h>
#include <conio.h>

char bufRus[256];

char *Rus(const char *text)
{
CharToOem(text,bufRus);
return bufRus;
}

struct TRAIN
{
char punkt[10];
int number;
int time[2];
};

int main()
{
//-----------Введение данных о маршруте----------------------------------------------------------------
const int n = 8;
TRAIN tran[n];

for(int i = 0; i < n; i++)
{
system("cls");
cout << Rus("Введите пункт назначения:");
cin >> tran.punkt;

cout << Rus("Введите номер маршрута:");
cin >> tran.number;

cout << Rus("Введите через пробел часы и минуты времени отправления:");
cin >> tran.time[0] >> tran.time[1];
}
//------------Сортировка масива структур--------------------------------------------------------------
for ( i=0 ; i<n-1 ; i++)
{
int imin = i;
for (int j = i ; j<n ;j++)
{

for(int k = 0; ((tran[j].punkt[k] != 0) || (tran[imin].punkt[k] !=0)); k++)
{
if (tran[j].punkt[k] < tran[imin].punkt[k])
{
imin = j;
break;
}
}
}

TRAIN tranVr = tran;
tran = tran[imin];
tran[imin] = tranVr;
}
//-------------------Вывод данных о маршруте-------------------------------------------------------------
system("cls");
cout << setfill('-') << setw(59) <<endl << setfill(' ');

cout << Rus("| Номер маршрута ");
cout << Rus("| Пункт назначения ");
cout << Rus("| Время отпавления |") << endl;

cout << setfill('-') << setw(59) <<endl << setfill(' ');

for(i = 0; i < n; i++)
{
cout << '|' << setw(18) << tran.number << '|'
<< setw(18) << tran.punkt << '|'
<< setw(15) << tran.time[0] << ':' << setw(2) << setfill('0') << tran.time[1] << '|' << endl;

cout << setfill('-') << setw(59) <<endl << setfill(' ') ;
}
getch();
//---------Вывод номеров по заданному времени--------------------------------------------------------------

int time_vr[2];

cout << Rus("Введите время отправления через пробел: ");
cin >> time_vr[0] >> time_vr[1];

system("cls");
cout << setfill('-') << setw(59) <<endl << setfill(' ');

cout << Rus("| Номер маршрута ");
cout << Rus("| Пункт назначения ");
cout << Rus("| Время отпавления |") << endl;

cout << setfill('-') << setw(59) <<endl << setfill(' ');

bool bla = false;
for(i = 0; i < n; i++)
{
if(time_vr[0] < tran.time[0])
{
cout << '|' << setw(18) << tran.number << '|'
<< setw(18) << tran.punkt << '|'
<< setw(15) << tran.time[0] << ':' << setw(2) << setfill('0') << tran.time[1] << '|' << endl;

cout << setfill('-') << setw(59) <<endl << setfill(' ') ;
bla = true;
}
else if(time_vr[0] == tran.time[0])
{
if(time_vr[1] < tran.time[1])
{
cout << '|' << setw(18) << tran.number << '|'
<< setw(18) << tran.punkt << '|'
<< setw(15) << tran.time[0] << ':' << setw(2) << setfill('0') << tran.time[1] << '|' << endl;

cout << setfill('-') << setw(59) <<endl << setfill(' ') ;
bla = true;
}
}
}

if(bla == false)
{
system("cls");
cout << Rus("Поездов, отправляющихся после заданного времени нет!") << endl;
}

getch();
return 0;
}[/codebox]
 
G

Guest

#3
То что очевидно: ты сделал сортировку не по тому признаку, по которому заявлено в условии задачи.
Ты сделал по времени отправления, а в условии - по пункту назначения.
может с этим проблема?
Далее, сортировку можно сделать и по другому.
Добавляешь в структуру два указателя типа самой структуры - prev и nex, указывающие соответственно на предведущий и на последующий элементы.
Но в первую очередь проверь по какому условию ты сортируешь.
 
Статус
Закрыто для дальнейших ответов.