![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
baleGos |
|
||||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 9.3.2005 Репутация: нет Всего: нет |
мне нужно добавить сортировку по фамилии(по алфавиту) и исправить баг в функции void clear.
вот текст программы
Это сообщение отредактировал(а) chipset - 9.3.2005, 02:35 |
||||
|
|||||
Atos |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 108 Регистрация: 2.9.2004 Где: Омск Репутация: нет Всего: нет |
![]()
Такое прокатило бы, если p- указатель на массив(хотя, имхо, всё равно извратный способ...) Но p- указатель на структуру!! Бедный компилятор! Попробуй представить себя на его месте: ведь в процессе работы функции ты потаешься получить доступ к её полям, указывая не на саму структуру, а на какое-то место памяти внутри неё |
|||
|
||||
Chaos A.D. |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 172 Регистрация: 16.1.2005 Где: 09 RUS Репутация: 6 Всего: 7 |
Какой кашмар!!! Блин, когда я решил тебе помочь, то только минут пять расставлял отступы в твоем коде согласно моим представлениям о его читаемости. Может можно на С++ переписать? Будет раз в пять понятнее. Особенно, если со стандартными контейнерами из STL. Ну да ладно. Чесно говоря, я сидел минут тридцать, чтобы разобраться, что же все-таки делается в программе. Странный стиль у тебя. Начиная с выбора имен для переменных, и заканчивая злоупотреблением глобальными переменными. Но это моё личное и оччень скромное мнение. Вот, адаптировал с горем пополам QuickSort под твои нужды:
Тут base - начало массива, который требуется отсортировать, n - его размер. Т.е. вызываешь так : myqsort( D, n-1 ), и все элементы сортируются. По крайней мере, на моем наборе данных (около 8 man-ов) это сработало. Может быть функция бажная. Я не могу за нее ручаться. Если бы я захотел уверенности в ее работе, я бы все переписал в соответствии с моими представлениями о хорошем коде с самого начала (без обид, ладно?). Далее, с clear у тебя вообще все так запутано. Чего ты от нее ожидаешь? Если она тебе нужна для того, чтобы очищать все и вся, то вызывай ее как clear(D,n); Только после того, как ты все очищаешь, непомешало бы глобальную переменную n изменить.
Еще один минус - у тебя память из под этих очищенных данных так и будет занята. Но если уж браться за улучшение удаления элементов, то тут опять же руки чешутся все переписать. И еще - в функции save у тебя ... for (int i=0;i<n;i++) { fprintf(fd,"%s\n",D.FIO); ... }; Должно быть не D.FIO а D[i].FIO. То же касается и всех остальных полей структуры D. То же самое и в show. Это сообщение отредактировал(а) Chaos A.D. - 9.3.2005, 13:55 --------------------
Надо смеяться над тем, что тебя мучит, иначе не сохранишь равновесия, иначе мир сведет тебя с ума...Ken Kesey - One Flew Over The Cocoo's Nest |
||||
|
|||||
Ptica |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 69 Регистрация: 27.7.2004 Репутация: нет Всего: 2 |
IMHO здесь что-то не так. Вот здесь вот:
Однако без компилятора я сходу не соображу, как лучше это исправить... |
||||
|
|||||
baleGos |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 9.3.2005 Репутация: нет Всего: нет |
Спасибо Chaos A.D. за сортировочку, а то у меня голова уже вечером не варила.
Я все проверял, и было D[i].***. незнаю почему так отправилось. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |