• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

C++

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

kolya

Всем привет:
Задача:Дан файл, содержащий информацию о движении пригородных поездов. Структура записи файла:
- номер поезда;
- время отправления;
- станция назначения;
- время прибытия;
- дни недели движения (е - ежедневно, р - рабочие дни, с - субботние и воскресные дни).
Написать программу, выдающую
- информацию о поездах, следующих до заданной станции по выходным дням, с указанием времени в пути (в порядке возрастания времени отправления);
Входная таблица
101 14:34 vnukovo 15:30 e
112 14:40 pulkovo 16:23 c
115 13:00 odincovo 15:00 p
205 15:00 moskva 19:00 e
132 12:05 vnukovo 14:20 c
345 15:00 vnukovo 17:00 p
234 16:45 kazan 18:50 p
567 16:40 vnukovo 17:55 e
Вызов:
C++:
int main()
...
clrscr();
poiskST(ms, &n);
sort(ms, n);
vyvod(ms,n);
....

void poiskST(struct POEZD ms[NMAX], int *n)
{
FILE *f;
char zstnaz[15];	/* zadannui pynkt otpravlenia*/
int a=0;				  /*nomer*/
int p=0;//min
int k=0; //perevod v sec
int c=0;//chas
int u=0;//perevod v sec
int n1=0;//perevod v sec
int i1=0;//perevod v sec
int i=0;
int j=0;
struct POEZD tz;		 /* tekyshaia zapis faila*/
clrscr();
f=fopen("F1.txt", "r");
if (f==NULL)
{
puts ("Fail poezda.txt ne naiden");
getch();
return;
}
puts("\nVvedite pynkt naznachenia:");
gets(zstnaz);
u=strlen(zstnaz);
rewind(f);
*n=0;
while (fgets(&tz,sizeof(struct POEZD),f)!= NULL)
{ if ((strncmp(tz.stnaz, zstnaz ,u)==0) && (tz.den[0]=='c' || tz.den[0] =='e') )
{
n1=atoi(&tz.prib);// просчет времени в пути
i1=atoi(&tz.prib[3]);
k=atoi(&tz.otpr);
j=atoi(&tz.otpr[3]);
n1=(n1*60)+i1;
k=(k*60)+j;
p=n1-k;
c=0;
while (p>=60)
{ p=p-60;
c=c+1;
}
tz.nom[3]='\0';
tz.stnaz[14]='\0';
tz.den[2]='\0';
strcpy(ms[*n].nom, tz.nom); //запись в массив
strcpy(ms[*n].otpr, tz.otpr);
strcpy(ms[*n].prib, tz.prib);
strcpy(ms[*n].stnaz, tz.stnaz);
(*n)++;
}
}//while
fclose(f);
}

//  Funkcia sortirovki po nomeru
void sort (struct POEZD ms[NMAX], int n)
{
int k,i; // parametry ciklov
struct POEZD s; //dlia perestanovki elementov
for (k=n-1; k>0; k--)
for (i=0; i<k; i++)
if (atof(ms[i].otpr) > atof(ms[i+1].otpr))
{
// perestanovka elementov
s=ms[i];
ms[i]=ms[i+1];
ms[i+1]=s;
}
}
void vyvod (struct POEZD ms[NMAX], int n)
{int i;
for ( i=0; i<n; i++)
{
printf("%s %s \n",ms[i].nom, ms[i].otpr);
if ((i+1)%20 == 0)
{
puts("\nDlia prodolgenia nagmite lubuu klavishu");
getch();
}
}
}
Проблема в том что я не могу вывести правильно таблицу результатов
сейчас он выводит
132 12:05 vnukovo
101 14:34 vnukovo
567 16:40 vnukovo а надо

132 12:05 vnukovo 2с15m
101 14:34 vnukovo 0c56m
567 16:40 vnukovo 1c15m
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!