Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2016, 19:09   #1
Vladkp
Пользователь
 
Регистрация: 05.10.2016
Сообщений: 24
По умолчанию Нужно подправить код: вывести на экран информацию о поездах, дата отправления которых введена с клавиатуры

Нужно вывести на экран информацию о поездах, дата отправления которых введена с клавиатуры; если таких поездов нет, то вывести соответствующее сообщение.
Какую бы дату не ввел постоянно пишет что "таких поездов нет" как исправить??

Код:
#include <iostream>
#include <string>
#include <conio.h>
 
using namespace std;
struct vremya {
    int day;
    int month;
    int year;
    int hour;
    int min;
    int sec;
}
; struct TIMETABLE
{
    char Nazv[100];
    int NUMR;
    vremya Date;
    vremya Time;
};
 
int main() {
    setlocale(LC_ALL, "");
    int n;
    char ch;
    TIMETABLE RASP[100];
    TIMETABLE Rasp2[100];
    TIMETABLE vved;
    int counter = 0;
 
#pragma region ВВОД МАССИВА СТРУКТУР
 
    cout << "Введите кол-во интересующих вас поездов ";
    cin >> n;
    for (int i = 0; i < n; i++) {
        cout << "введите место назначения на англ ";
        cin >> RASP[i].Nazv;
        cout << "введите номер поезда ";
        cin >> RASP[i].NUMR;
        cout << "введите дату отправления(день/месяц/год) : ";
        cin >> RASP[i].Date.day >> ch >> RASP[i].Date.month >> ch >> RASP[i].Date.year;
        cout << "введите время отправлени (час/мин/сек) : ";
        cin >> RASP[i].Time.hour >> ch >> RASP[i].Time.min >> ch >> RASP[i].Time.sec;
    }
#pragma endregion
 
#pragma region СОРТИРОВКА
 
    for (int i = 0; i < n; i++) {
        for (int j = 1; j < n; j++) {
            if (strcmp(RASP[j - 1].Nazv, RASP[j].Nazv) > 0) {
                swap(RASP[j - 1].Nazv, RASP[j].Nazv);
            }
        }
    }
 
#pragma endregion
 
#pragma region ВЫВОД СОРТИРОВКИ 
 
    for (int i = 0; i < n; i++) {
        cout << "Упорядочение записей по номерам поездов" << endl;
        cout << RASP[i].NUMR << endl;
 
#pragma endregion
 
#pragma region ИНФОРМАЦИЯ О ПОЕЗДАХ, ДАТА КОТОРЫХ ВВЕДЕНА С КЛАВИАТУРЫ
        bool flag = true;
        cout << "Введите дату(день/месяц/год) отправления поезда ";
        cin >> vved.Date.day >> ch >> vved.Date.month >> ch >> vved.Date.year;
        cout << "Время(час/мин/сек) отправления поезда ";
        cin >> vved.Time.hour >> ch >> vved.Time.min >> ch >> vved.Time.sec;
        for (int i = 0; i < n; i++) {
            if (vved.Date.day == RASP[i].Date.day &&
                vved.Date.month == RASP[i].Date.month &&
                vved.Date.year == RASP[i].Date.year &&
                vved.Time.hour < RASP[i].Time.hour) {
                flag = false;
                Rasp2[counter] = RASP[i];
                counter++;
            }
        }
        if (flag == false) {
            for (int i = 0; i < counter; i++) {
                cout << "номер поезда " << Rasp2[i].NUMR << endl;
                cout << "направление  " << Rasp2[i].Nazv << endl;
                cout << "Время отправления " << Rasp2[i].Time.hour <<
                    ch << Rasp2[i].Time.min << ch
                    << Rasp2[i].Time.sec << endl;
            }
        }
        else {
            cout << "Поездов на такое время к сожалению нет! ";
        }
 
#pragma endregion
 
        _getch();
    }
}
Vladkp вне форума Ответить с цитированием
Старый 23.12.2016, 11:41   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, вроде бы всё в порядке (кроме сортировки - она явно с большим багом!!).

но, может быть, Вы вводите неверные данные для поиска?
Ведь день, месяц, год у Вас сравниваются точно, а вот час, указанный в поиске, должен быть СТРОГО МЕНЬШЕ, чем у поезда (вы проверяете vved.Time.hour < RASP[i].Time.hour ) (а минуты и секунды вообще непонятно для чего вводятся, они в поиске вообще не проверяются).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.12.2016, 23:23   #3
Vladkp
Пользователь
 
Регистрация: 05.10.2016
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ну, вроде бы всё в порядке (кроме сортировки - она явно с большим багом!!).

но, может быть, Вы вводите неверные данные для поиска?
Ведь день, месяц, год у Вас сравниваются точно, а вот час, указанный в поиске, должен быть СТРОГО МЕНЬШЕ, чем у поезда (вы проверяете vved.Time.hour < RASP[i].Time.hour ) (а минуты и секунды вообще непонятно для чего вводятся, они в поиске вообще не проверяются).
что и как подправить? а то не очень шарю честно говоря )
Vladkp вне форума Ответить с цитированием
Старый 24.12.2016, 01:18   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Vladkp Посмотреть сообщение
что и как подправить?
простите, а что Вы хотите исправить: сортировку или выдачу данных о поездах?

если сортировку, то попробуйте заменить
Цитата:
Код:
swap(RASP[j - 1].Nazv, RASP[j].Nazv);
на
Код:
swap(RASP[j - 1], RASP[j]);
если же выдачу - то там, насколько я понимаю, нужно просто данные вносить правильно.

что не работает?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.12.2016, 13:18   #5
Vladkp
Пользователь
 
Регистрация: 05.10.2016
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
простите, а что Вы хотите исправить: сортировку или выдачу данных о поездах?

если сортировку, то попробуйте заменить
на
Код:
swap(RASP[j - 1], RASP[j]);
если же выдачу - то там, насколько я понимаю, нужно просто данные вносить правильно.

что не работает?
смотри, я вот тут вроде подправил код, но если ввожу 1 поезд то все хорошо, а если 2 то сортировка как то не правильно начинает работать и после информации о 2 поездах номер время и тд еще раз показывает номер время и тд. Т.е по 2 раза то же самое. Как исправить?
Код:
#include <iostream>
#include <string>
#include <conio.h>

using namespace std;
struct vremya {
	int day;
	int month;
	int year;
	int hour;
	int min;
	int sec;
}
; struct TIMETABLE
{
	char Nazv[100];
	int NUMR;
	vremya Date;
	vremya Time;
};

int main() {
	setlocale(LC_ALL, "");
	int n;
	char ch;
	TIMETABLE RASP[100];
	int counter = 0;

#pragma region ВВОД МАССИВА СТРУКТУР

	cout << "Введите кол-во интересующих вас поездов ";
	cin >> n;
	for (int i = 0; i < n; i++) {
		cout << "введите место назначения на англ ";
		cin >> RASP[i].Nazv;
		cout << "введите номер поезда ";
		cin >> RASP[i].NUMR;
		cout << "введите дату отправления(день/месяц/год) : ";
		cin >> RASP[i].Date.day >> ch >> RASP[i].Date.month >> ch >> RASP[i].Date.year;
		cout << "введите время отправления (час/мин/сек) : ";
		cin >> RASP[i].Time.hour >> ch >> RASP[i].Time.min >> ch >> RASP[i].Time.sec;
	}
#pragma endregion

#pragma region СОРТИРОВКА

	for (int i = 0; i < n; i++) {
		for (int j = 1; j < n; j++) {
			if (strcmp(RASP[j - 1].Nazv, RASP[j].Nazv) > 0) {
				swap(RASP[j - 1].Nazv, RASP[j].Nazv);
			}
		}
	}

#pragma endregion

#pragma region ВЫВОД СОРТИРОВКИ 

	for (int i = 0; i < n; i++) {
		cout << "Упорядочение записей по номерам поездов" << endl;
		cout << RASP[i].NUMR << endl;

#pragma endregion

#pragma region ИНФОРМАЦИЯ О ПОЕЗДАХ, ДАТА КОТОРЫХ ВВЕДЕНА С КЛАВИАТУРЫ
		cout << "Введите дату (день/месяц/год) отправления поезда : ";
		; int privet;
		bool found = false;
		cin >> privet;
		for (int i = 0; i < n; i++) {
			if (RASP[i].Date.day == privet) {
				cout << " " << RASP[i].Nazv << " № " << RASP[i].NUMR << "  " << RASP[i].Date.day << " " << RASP[i].Date.month << " " << RASP[i].Date.year << " " << RASP[i].Time.hour << " " << RASP[i].Time.min << " " << RASP[i].Time.sec << " " << endl;
				found = true;




			}
			if (found == false) {
				cout << "Поездов на такую дату к сожалению нет! ";
			}
			system("pause");

		}
	}
}

Последний раз редактировалось Vladkp; 24.12.2016 в 14:29.
Vladkp вне форума Ответить с цитированием
Старый 25.12.2016, 13:35   #6
Vladkp
Пользователь
 
Регистрация: 05.10.2016
Сообщений: 24
По умолчанию

upup
Vladkp вне форума Ответить с цитированием
Старый 25.12.2016, 14:17   #7
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

А почему при сортировке Вы свопаете только название поезда?
Croessmah вне форума Ответить с цитированием
Старый 25.12.2016, 22:23   #8
Vladkp
Пользователь
 
Регистрация: 05.10.2016
Сообщений: 24
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
А почему при сортировке Вы свопаете только название поезда?
а что еще свапать надо?
Vladkp вне форума Ответить с цитированием
Старый 25.12.2016, 23:40   #9
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от Vladkp Посмотреть сообщение
а что еще свапать надо?
По логике - все данные о поезде.
Иначе получается, что было:
Имя_поезда_1 Данные_поезда_1
Имя_поезда_2 Данные_поезда_2
А после сортировки получилось:
Имя_поезда_2 Данные_поезда_1
Имя_поезда_1 Данные_поезда_2
т.е. данные уже неверные.

Плюс вот это:
Код:
			if (found == false) {
				cout << "Поездов на такую дату к сожалению нет! ";
			}
Надобно вынести за пределы цикла.
Croessmah вне форума Ответить с цитированием
Старый 26.12.2016, 00:08   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Vladkp Посмотреть сообщение
а что еще свапать надо?
мой пост #4
(от слов "если сортировку, то попробуйте заменить" и ниже по тексту).
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно сделать задачу (по-могите). Вывести на экран сумму двух введённых с клавиатуры цифр. Milve Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 07.12.2016 16:19
Определить и вывести на экран информацию о стране (DOS 38h). Влад_+_ Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 22.12.2015 22:17
Определить и вывести на экран информацию о стране (DOS 38h). INSIDER73 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 20 22.12.2015 15:41
Вывести на экран информацию о всех диск windetta35555 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 31.05.2011 20:02
Нужно подправить код zeppelin58 Общие вопросы C/C++ 1 28.05.2010 12:11