Форум программистов, компьютерный форум CyberForum.ru

Расписание автобусов или как пользоваться time.h - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
16.11.2012, 15:40     Расписание автобусов или как пользоваться time.h #1
Здравтвуйте. Есть задача:

"В справочной автовокзала хранится расписание движения автобусов.
Для каждого рейса указаны его номер, тип автобуса, пункт назначения, время
отправления и прибытия. Вывести информацию о рейсах, которыми можно
воспользоваться для прибытия в пункт назначения раньше заданного времени."

Вот код(рабочий):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include <iostream.h>
#include <string.h>
int main ()
{
struct strc{
int a[100];//номер
char b[100];//тип автобуса
char c[100];//пункт назначения
int  d[100];//время отправления
int  D[100];
int  e[100];//время прибытия
int  E[100];
}bus[100];
int f,i,j,h,m;
cout << "vvedite kol-vo reisov"<<endl;
cin >> f;
for (i=0; i < f; i++)
{
bus[i].a[i] = 1+i;
cout << "vvedite tip avtobusa"<<endl;
cin >> bus[i].b;
cout << "vvedite punkt naznacheniya"<<endl;
cin >> bus[i].c;
cout << "vvedite vremya otpravleniya(hours(Enter)minutes)"<<endl;
cin >> bus[i].d[i];
cin >> bus[i].D[i];
cout << "vvedite vremya pribitiya(hours(Enter)minutes)"<<endl;
cin >> bus[i].e[i];
cin >> bus[i].E[i];
}
cout << "vvedite interesyUshee vas vremya pribitiya(hours(Enter)minutes)"<<endl;
cin >> h;
cin >> m;
j=0;
do
{
    if(h < bus[j].e[j])
    {
    cout << bus[j].a[j] << ". " << bus[j].b << " " << bus[j].c << " " << bus[j].d[j] << "." << bus[j].D[j] << " " << bus[j].e[j] << "." << bus[j].E[j]<<endl;
    }
    else
    {
        if(h == bus[j].e[j])
        {
        if(m <= bus[j].E[j])
        {
            cout << bus[j].a[j] << ". " << bus[j].b << " " << bus[j].c << " " << bus[j].d[j] << "." << bus[j].D[j] << " " << bus[j].e[j] << "." << bus[j].E[j]<<endl;
        }
    }
}
    j++;
}
while(j<f);
return 0;
}
Нужно организовать нормальный ввод времени и даты в расписание. Я пытался использовать функции библиотеки time.h, но я не понял как это работает, и абсолютно ничего не получилось.
Объясните пожалуйста как использовать time.h.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.11.2012, 15:40     Расписание автобусов или как пользоваться time.h
Посмотрите здесь:

C++ Не могу разобраться с заданием "Создайте класс Time с конструкторами Time(), Time( int hour)......"
Подскажите хороший компилятор, как его установить, как им пользоваться? C++
C++ клас Time через time(0)
в справочной автовокзала хранится расписание движения автобусов. Для каждого рейса указаны его номер, тип автобуса, пунт назначения, время отбытия и п C++
Напишите конструктор для инициализации объекта класса Time, который может использовать текущее время, возвращаемое функцией time (). C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pavell
14 / 14 / 0
Регистрация: 13.11.2012
Сообщений: 28
16.11.2012, 16:10     Расписание автобусов или как пользоваться time.h #2
А для чего у вас номер рейса объявлен, как массив?
А время прибытия и отправления объявлены как int, вы не будите использовать разделители часов и минут?

Ну и сам вопрос т.е. вам нужно ввести например 10:24? ввод руками из консоли?
если даты и время нужны только для отображения и с ними не будет никаких вычислений объявите их как char[6] для времени в формате 00:00 или как string.

Добавлено через 9 минут
Ой невнимательный я

функция time() возвращает время в секундах прошедших с 01.01.1970
для хранения время прибытия отправления можно использовать массив из двух элементов int[2] часы и минуты.
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
16.11.2012, 18:09  [ТС]     Расписание автобусов или как пользоваться time.h #3
для часов и минут 2 разных массива:
C++
1
2
3
4
int  d[100];//время отправления
int  D[100];
int  e[100];//время прибытия
int  E[100];
Мне нужно:
1)ввод времени такой, чтобы нельзя было ввести 25 часов или 61 минуту, например
2)суть задачи : я ввожу время - прога выбивает мне пункты расписания которые мне подходят(по условию - автобусы приходящие позже заданного времени прибытия), не думаю, что char подойдёт

Извините, интернет тупит)
но пункт 1 всёравно актуален))

Добавлено через 16 минут
впринципе код работает, но мне нужен нормальный ввод времени. т.е. в формате часы:минуты и чтобы нельзя было ввести невозможное время + чтобы код не перестал работать как надо)))
впринципе, если не лень, скомпилируйте мой код и посмотрите что он делает, может так моя просьба понятнее будет)

Добавлено через 1 час 38 минут
Жду помощи
Pavell
14 / 14 / 0
Регистрация: 13.11.2012
Сообщений: 28
16.11.2012, 18:16     Расписание автобусов или как пользоваться time.h #4
Ввод и проверка времени и минут:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int timeInput () {
     char timeChar[6];
     int h,m;
 
     std::cout<<"Input time!\n";
     std::cin>>timeChar;         
     timeChar[5]='\n';      
     
     h = (timeChar[0]-48)*10 + (timeChar[1]-48);
     m = (timeChar[3]-48)*10 + (timeChar[4]-48);
     if (h>24||m>60) {
          std::cout<<"Wrong time!";
          return 0;
     }
          return :);
}
возвращать надо будет либо массив, либо указатель
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
16.11.2012, 18:26     Расписание автобусов или как пользоваться time.h #5
Pavell, как вы будете возвращать массив?
указатель на локальный объект тоже будет никому не нужен.
тем более, что возвращаемый тип стоит int
Pavell
14 / 14 / 0
Регистрация: 13.11.2012
Сообщений: 28
16.11.2012, 18:45     Расписание автобусов или как пользоваться time.h #6
ну с массивом погорячился
кстати можно объявить массив за пределами функции передать его аргументом, и присвоить ему значения h и m, тогда функцию объявлять, как void
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
16.11.2012, 18:52     Расписание автобусов или как пользоваться time.h #7
Цитата Сообщение от Pavell Посмотреть сообщение
ну с массивом погорячился
кстати можно объявить массив за пределами функции передать его аргументом, и присвоить ему значения h и m, тогда функцию объявлять, как void
Hammer-On, делайте вот так. Этот вариант верный)
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
16.11.2012, 18:56  [ТС]     Расписание автобусов или как пользоваться time.h #8
спасибо) пробую)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.11.2012, 20:14     Расписание автобусов или как пользоваться time.h
Еще ссылки по теме:

C++ Для распараллеливание процессов лучше пользоваться OpenMP или Win32?
C++ Реализовать программу, позволяющую вводить с клавиатуры расписание авиарейсов, выводить на экран расписание це
C++ Расписание автобусов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Pavell
14 / 14 / 0
Регистрация: 13.11.2012
Сообщений: 28
16.11.2012, 20:14     Расписание автобусов или как пользоваться time.h #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
 
bool timeInput(int *tmp);
 
int main() {
    
    bool t=true;
    int timeInt[2];
    do {
         t=timeInput(&timeInt[0]);
    } while (!t);
 
}
 
bool timeInput (int *timeTmp) {
       char timeChar[6];
       int h,m;
 
       std::cout<<"Input time!\n";
       std::cin>>timeChar;         
       timeChar[5]='\n';      
     
       *timeTmp = (timeChar[0]-48)*10 + (timeChar[1]-48);
       *(timeTmp+1) = (timeChar[3]-48)*10 + (timeChar[4]-48);
       if (*timeTmp>24||*(timeTmp+1)>60) {
          std::cout<<"Wrong time!\n";
          return false;
        }
          return true;        
}
Добавлено через 55 минут
немного лишнего наворотил вот так красивее
bool timeInput(int *);

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main() {
    
    int timeInt[2];
    while (!timeInput(&timeInt[0]));
}
 
bool timeInput (int *timeTmp) {
       char timeChar[6];
       int h,m;
 
       std::cout<<"Input time in format hh:mm\n";
       std::cin>>timeChar;         
       timeChar[5]='\n';      
     
       *timeTmp = (timeChar[0]-48)*10 + (timeChar[1]-48);
       *(timeTmp+1) = (timeChar[3]-48)*10 + (timeChar[4]-48);
       if (*timeTmp>24||*(timeTmp+1)>60) {
          std::cout<<"Wrong time!\n";
          return false;
        }
          return true;        
}
Yandex
Объявления
16.11.2012, 20:14     Расписание автобусов или как пользоваться time.h
Ответ Создать тему
Опции темы

Текущее время: 00:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru