1. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

Структуры

Тема в разделе "C/C++/C#", создана пользователем Burshf, 10 дек 2012.

  1. Burshf

    Burshf Гость

    Репутация:
    0
    Задание такое:В справочной автовокзала хранится расписание движения автобусов. Для каждого рейса указаны его номер, тип автобуса, пункт назначения, время отправления и прибытия. Вывести информацию о рейсах, которыми можно воспользоваться для прибытия в пункт назначения раньше заданного времени.
    Мой код:
    Код:
    #include <iostream>
    #include <string.h>
    #include <iomanip>
    using namespace std;
    
    struct Trip										 
    {												  
    
    int	 number;								  
    char	 type;							 
    char	 *destination;						 
    double  otTime;								
    double  prTime;							
    }; 
    int main() {
    struct Trip indexes[100];
    char dPoint[20];
    char *str;
    double time = 0.0;
    int p,q,i,j;
    
    
    cout << "Vvedite kolichestvo reisov: ";
    cin >> q;
    
    for ( i = 0; i < q; i++) 
    {
    cout << "-------------------------------" << endl;
    cout << "Nomer reisa: "; 
    cin >> indexes[i].number;
    cout << "Tip reisa: "; 
    cin >> indexes[i].type;
    cout << "Mesto nazhacheniya: ";
    cin >> indexes[i].destination;
    [b]cout << "Vremya otpravleniya: "; [/b]
    cin >> indexes[i].otTime;
    cout << "Vremya pribitiya: "; 
    cin >> indexes[i].prTime;
    cout << "-------------------------------" << endl;
    
    }
    
    cout <<"Vvedite mesto naznacheniya: "<<endl;
    cin.getline(dPoint, 20);
    cout<<"Vvedite vremya pribitiya(hours.minutes): ";
    cin >> time;
    cout<<endl<<"-----------------------------------------------" <<endl;
    for( i = p = 0; i < q; i++)
    {
    str = indexes[i].destination;
    if(strcmp(dPoint, str) == 0)
    {
    
    p++;
    }
    }
    for(j = 0; j < p; j++)
    {
    if(indexes[i].prTime < time)
    {
    cout.width(21);
    cout <<"Nomer reysa: "<<indexes[i].number<<endl;
    cout.width(21);
    cout<<"Tip reysa: "<<indexes[i].type<<endl;
    cout.width(21);
    cout<<"Mesto nazhacheniya: "<<indexes[i].destination<<endl;
    cout.width(19);
    cout<<"Vremia otpravleniya: "<<fixed<<setprecision(2)<<indexes[i].otTime<<endl;
    cout.width(21);
    cout<<"Vremya pribitiya: "<<fixed<<setprecision(2)<<indexes[i].prTime << endl;
    cout <<"-----------------------------------------------" << endl;
    
    }
    
    }
    
    return 0;
    }
    Компилятор ошибки не выдает,но при переходе в программе на строку "cout << "Vremya otpravleniya: ";" выдает ошибку Windows "прекращена работа программы". Чем это вызвано?
     
  2. rrrFer

    rrrFer Гость

    Репутация:
    0
    ошибка тут:
    Код:
    cin >> indexes[i].destination;
    память кто выделять будет?
     
  3. Burshf

    Burshf Гость

    Репутация:
    0
    Вы имеете ввиду динамическое выделение?
     
  4. Whatka

    Whatka Well-Known Member

    Репутация:
    0
    Регистрация:
    9 окт 2011
    Сообщения:
    428
    Симпатии:
    4
    любое выделение
    у тебя объявленны только указатели
     
  5. Burshf

    Burshf Гость

    Репутация:
    0
    Помогите пожалуйста выделить память для char *type(преподаватель попросила сделать через указатель) и char *destination,не понимаю как,чтобы не потерялось условие,необходимое для if(strcmp(dPoint, str) == 0)(т.е. destination должен быть * char).
     
  6. Burshf

    Burshf Гость

    Репутация:
    0
    Очень нужно в четверг сдать,помогите пожалуйста добиться работоспособности кода.
     
  7. Burshf

    Burshf Гость

    Репутация:
    0
    Код:
    	char* type = new char[20];
    char* destination= new char[20];
    Это динамическое выделение памяти под указатели,почему оно не работает,если его вставить сразу после Int main() { ?
     
  8. rrrFer

    rrrFer Гость

    Репутация:
    0
    память нужно выделять по указателю объекта структуры Trip

    Добавлено: indexes.destination = new char ...
     
  9. Burshf

    Burshf Гость

    Репутация:
    0
    сейчас попробую,спасибо
     
  10. Burshf

    Burshf Гость

    Репутация:
    0
    что то не получается,можете подсказать куда в программе всунуть это. Там выходит надо цикл на кол-во i вставить?
     
  11. Burshf

    Burshf Гость

    Репутация:
    0
    Код:
    for ( i = 0; i < q; i++)
    {
    indexes[i].destination = new char[20];
    indexes[i].type = new char[20];
    }
    Вставил такой цикл,заполнение структуры работает,спасибо.Только появилась новая проблема: строчку cin.getline(dPoint, 20); проскакивает и переходит сразу к следующей.
     
  12. rrrFer

    rrrFer Гость

    Репутация:
    0
    в потоке остается символ-разделитель после предыдущего ввода. Считай этот символ методом get():
    cin.get(); cin.getline ...
     
  13. Burshf

    Burshf Гость

    Репутация:
    0
    Переделал еще немного сам цикл вывода необходимого рейса,в итоге получилось вот так
    Код:
    #include <iostream>
    #include <string.h>
    #include <iomanip>
    using namespace std;
    struct Trip										 
    {												  
    
    int	 number;								  
    char*	type;							 
    char*	 destination;						 
    double  otTime;								
    double  prTime;							
    }; 
    int main() {
    char* type = new char[20];
    
    struct Trip indexes[100];
    char dPoint[20];
    double time = 0.0;
    int q,i;
    
    
    
    cout << "Vvedite kolichestvo reisov: ";
    cin >> q;
    for ( i = 0; i < q; i++)
    {
    indexes[i].destination = new char[20];
    indexes[i].type = new char[20];
    }
    for ( i = 0; i < q; i++) 
    {
    cout << "-------------------------------" << endl;
    cout << "Nomer reisa: "; 
    cin >> indexes[i].number;
    cout << "Tip reisa: "; 
    cin >> indexes[i].type;
    cout << "Mesto nazhacheniya: ";
    cin >> indexes[i].destination;
    cout << "Vremya otpravleniya: "; 
    cin >> indexes[i].otTime;
    cout << "Vremya pribitiya: "; 
    cin >> indexes[i].prTime;
    cout << "-------------------------------" << endl;
    
    }
    
    cout <<"Vvedite mesto naznacheniya: "<<endl;
    cin.get();
    cin.getline(dPoint, 20);
    cout<<"Vvedite vremya pribitiya(hours.minutes): ";
    cin >> time;
    cout<<endl<<"-----------------------------------------------" <<endl;
    for( i=0; i < q; i++)
    {
    char *str = indexes[i].destination;
    if(strcmp(dPoint, str) == 0)
    if(indexes[i].prTime < time)
    {
    cout.width(21);
    cout <<"Nomer reysa: "<<indexes[i].number<<endl;
    cout.width(21);
    cout<<"Tip reysa: "<<indexes[i].type<<endl;
    cout.width(21);
    cout<<"Mesto nazhacheniya: "<<indexes[i].destination<<endl;
    cout.width(19);
    cout<<"Vremia otpravleniya: "<<fixed<<setprecision(2)<<indexes[i].otTime<<endl;
    cout.width(21);
    cout<<"Vremya pribitiya: "<<fixed<<setprecision(2)<<indexes[i].prTime << endl;
    cout <<"-----------------------------------------------" << endl;
    
    }
    
    }
    
    return 0;
    }
    Может какому еще студенту понадобится.
    Спасибо большое за помощь,долго я вас мучал вопросами своими)
    Знал бы как поставить +,обязательно бы сделал.
     
  14. rrrFer

    rrrFer Гость

    Репутация:
    0

    последние 2 строчки можно безболезненно удалить, программа от этого работать только быстрее будет )


    можно заменить на
    if(strcmp(dPoint, indexes.destination) == 0)

    потом стоит удалить неиспользуемые переменные (type), устранить утечки памяти, отформатировать код и можно показывать преподу)
     
  15. Burshf

    Burshf Гость

    Репутация:
    0
    Это уже мелочи,главное что работает без проблем)
     
  16. Burshf

    Burshf Гость

    Репутация:
    0
    Рационально ли тут для описания времени использовать вложенную структуру,или это просто прихоть преподавателя?И какие типы значений тогда использовать?я добавил так
    Код:
    struct Time
    
    {
    double otTime;
    double prTime;
    };
    Но по факту от этого ничего не поменялось,кроме того что я показал что я знаю как использовать вложенную структуру.
     
  17. rrrFer

    rrrFer Гость

    Репутация:
    0
    сойдет.

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

    Добавлено: Хотя... в изначальном коде имени Time вообще не было => было лучше :)

    Если выделить структуру Time в этом коде, то может быть он станет более удобным, но это проявится на более адекватной задаче. Ваша же задача настолько тривиальна, что вообще неважно что тут и как сделано )
     
  18. Burshf

    Burshf Гость

    Репутация:
    0
    Значит есть все таки хоть какой смысл в том,чему нас учат в ВУЗах )
     
  19. Whatka

    Whatka Well-Known Member

    Репутация:
    0
    Регистрация:
    9 окт 2011
    Сообщения:
    428
    Симпатии:
    4
    вообще смысл есть во всём,что ты учишь,просто чтобы разгядеть его тоже необходимы знания
     
Загрузка...
Похожие Темы - Структуры
  1. Code Market
    Ответов:
    0
    Просмотров:
    9
  2. Code Market
    Ответов:
    0
    Просмотров:
    12
  3. TSoprano
    Ответов:
    1
    Просмотров:
    1.139
  4. vlada
    Ответов:
    6
    Просмотров:
    1.596
  5. Anastasia18
    Ответов:
    1
    Просмотров:
    1.293

Поделиться этой страницей