| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Вывод фамилий в алфавитном порядке |
| Автор: ioManip 16.2.2014, 07:22 | ||||
| Привет! Алгоритм:
Применение:
|
| Автор: rudolfninja 16.2.2014, 17:39 |
| А почему бы не использовать strcmp для сравнения, а не приводить все к int? |
| Автор: ioManip 17.2.2014, 11:42 | ||||||
| feodorv, rudolfninja, Попробыл! Исправил! Но все равно не получается. Даже, елс ивот так делать
Дело в том, что мне кажется я не правильно данные передаю, потому что при выводе всегда последняя введенная фамилия выводится. Вообщем вот:(если кратко, то) Заполнение фамилий
Сортировка
|
| Автор: xvr 17.2.2014, 13:58 |
| Вы вместо того, что бы сортировать пациентов в массиве patients (по их полю _surnam), сортуруете само поле _surnam (строку в нем), причем неправильно, т.к. для определения размера используется не строка (которую вы пытаетесь сортировать), а количество пациентов, которое никакого отношения к строке не имеет. |
| Автор: ioManip 17.2.2014, 15:09 |
| Ага, т.е. Мне нужно массив патиентс передавать. Так,а как это сделать, ведь там получается массив объектов, как передать именно поле с фамилией? |
| Автор: ioManip 18.2.2014, 02:11 | ||||
| Вообщем думал, думал...и пришел к этому. Сортировка:
Передача в метод:
Но в сортировке, есть ошибка, компилятор ругается на переменную temp типа char. Я думаю она должна быть типа PatientInfo, но не представляю как это сделать. Вот мои мысли |
| Автор: feodorv 18.2.2014, 05:48 | ||||
Как-то Вы хитро хотите строки сравнивать. Ведь тип у _patients - аж string **!!! Вот Ваши мысли: Так чего же Вы делаете-то?
Что Вы здесь сортируете? Ну разве так трудно написать
Только при этом getSurname() должен возвращать ссылку на string, а не неизвестно что... |
| Автор: ioManip 18.2.2014, 10:10 | ||||
| Не получается! Ничего не происходит! Вот get - метод:
Вот переписал сортировку:
|
| Автор: xvr 18.2.2014, 13:34 |
Вы пытаетесь менять имена у пациентов, а надо самих пациентов (строки 5-7) |
| Автор: feodorv 18.2.2014, 17:36 | ||||
Как минимум:
А то Вы каждый раз создаёте по новому экземпляру класса string.
Да, swap нужен для указателей на пациентов, а не для их имён... |
| Автор: ioManip 22.2.2014, 06:53 | ||
Оно?
Только так, тоже не выходит |
| Автор: xvr 22.2.2014, 11:52 |
Если не обращать внимания на то, что печатать вы пытаетесь не имена а указатели на классы, должно работать |
| Автор: feodorv 22.2.2014, 16:01 |
Точка с запятой здесь зачем??? Присоединяюсь))) |
| Автор: xvr 22.2.2014, 17:43 |
О! Точно! А слона то я и не заметил. Так явно работать не будет |
| Автор: akizelokro 23.2.2014, 00:11 |
| А кто вообще такие переменные в функцию передаёт? И кто вообще такие комментарии пишет? Плюнь на этих кадров, cсделай эту перестановку жёстче, и всё пройдёт |
| Автор: ioManip 23.2.2014, 05:35 | ||||||
| Убрал точку с запятой, но все равно нет.... main.cpp
PatientInfo.cpp
PatientInfo.h
|
| Автор: feodorv 23.2.2014, 09:45 | ||||
Зачем в DisplayHosPatient вставлена сортировка клиентов? А ведь в DispalyNotHosPatient() этой сортировки нет. Зачем сортировать весь список при печати одного клиента? Зачем для сортировки там проверка на У Вас ведь задача какая:
Ну вот и подскажите, пожалуйста, почему в DispalyNotHosPatient() такой вывод:
|
| Автор: ioManip 23.2.2014, 12:13 |
Изначально задача такая была: По требованию пользователя организовать 1. Вывод на экран списка госпитализированных пациентов в алфавитном порядке (DisplayHosPatient) 2. Список негоспитализированных пациентов с указанием домашнего адреса (DisplayNotHosPatient) 3. Список детей с указанием диагноза. (DisplayHosChildren) Т.е. да, задача такая, но только это часть из того, что нужно сделать. Как раз с алфавитным выводом у меня проблемы, поэтому к вам и обратился! |
| Автор: ioManip 26.2.2014, 11:02 | ||
| Победа! Вообщем сидел, сидел, дай думаю индексы поменяю( j на i ) и ооо чудо!! Все получилось!
Всем спасибо! |
| Автор: xvr 26.2.2014, 11:44 |
| Не получится у вас чуда - введите штук 5 пациентов, с фамилиями строго в обратном алфавитном порядке |
| Автор: ioManip 27.2.2014, 08:53 |
| xvr, Да, Вы правы! :( |
| Автор: ioManip 27.2.2014, 09:14 | ||
| Оххх....уже столько вожусь с этой сортировкой!!! Ну вообщем, поробовал я запустить эту программу при помощи отладчика, на этапе вывода отсортированных фамилий, отладчик мне выдает: "Сигнал перехвачен - SIGSEGV" , погуглив, узнал, что SIGSEGV - это в POSIX-системах сигнал, посылаемый процессу при попытке обращения к несуществующей памяти или обращения с нарушением прав доступа. При этом у меня открывается файл basig_string.h и открывается на строчкке с таким содержанием
У меня 3 вопроса: у меня не работает, потому что linux ? Или я действительно обращаюсь к несуществующей памяти? Или я уже не в те дебри полез? |
| Автор: xvr 27.2.2014, 10:16 | ||
Linux тут не при чем, а памяти действительно нет. Судя по всему у вас сломалось на сравнении строк (стр 12), из за выхода за пределы массива. Вам feodorv совершенно правильно заметил, что сортировка не должна быть внутри PatientInfo, она должна быть снаружи и вызываться 1 раз, а не на каждого пациента |
| Автор: ioManip 27.2.2014, 12:55 | ||||
| Ну вот смотрите! Теперь сортировка в main. main.cpp
DisplayHosPatient()
Т.е. идет заполнение массива клиентами, затем сортировка, затем уже отсортированный массив передается в DisplayHosPatient, а там уже по условию infoHos производится вывод результата....ну разве не так??!! Но только все равно крашится! :( |
| Автор: feodorv 28.2.2014, 17:13 | ||
Гм. По ссылке, что я Вам дал, опечатка: Хотя, быть может, имелось в виду:
В любом случае правильный вариант http://forum.vingrad.ru/index.php?showtopic=200441&view=findpost&p=1441458 |
| Автор: xvr 28.2.2014, 17:39 |
Цикл внутри DisplayHosPatient не нужен - у вас уже есть цикл снаружи. Но крашится не должно. Видимо еще где то бага. Что отладчик показывает? Где ломается? |
| Автор: feodorv 28.2.2014, 17:43 |
Должно))) Выход за пределы массива))) |
| Автор: ioManip 2.3.2014, 04:46 |
Слушайте! Скорей всего именно это и имелось в виду! Все заработало! Уххх, спасибо, всем! Хороший форум! |