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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.06.2013, 11:41   #1
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию Проблема с поиском. С

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

п.с. особенно просьба к BDA посмотрите тему пожалуйста
Вложения
Тип файла: rar KR_2S.rar (3.25 Мб, 13 просмотров)
NewLamer&Programer вне форума Ответить с цитированием
Старый 16.06.2013, 15:45   #2
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Т.е. советы других участников форума не интересуют???
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 16.06.2013, 15:47   #3
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Если проблема с поиском, почему бы сам фрагмент поиска не выложить? Зачем нам нужен ваш проект целиком?
Базиля вне форума Ответить с цитированием
Старый 16.06.2013, 15:56   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Базиля замечание по существу.
Действительно взглянуть на реализацию поиска или автор считает что необходим весь проект для решения проблемы с поиском...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 16.06.2013, 16:04   #5
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Т.е. советы других участников форума не интересуют???
интересуют просто BDA уже в теме, несколько раз с этой курсовой хорошо помог

по поводу поиска я просто предполагаю что ошибка может быть и в функции Menu использующей функцию Search, но ладно:

Код:
int Search(TPhoneBook *PB, int COUNT, char Text[100], int MainField, int SubField)
{
	for (int i = 0; i < COUNT-1; i++)
	switch(MainField)
	{
		case 1: if (PB[i].Family == Text) return i; else return NULL;
		case 2: if (PB[i].Name == Text) return i; else return NULL;
		case 3: if (PB[i].Patronymic == Text) return i; else return NULL;
		case 4: switch(SubField)
				{
					case 1: if (PB[i].Phone.Home == Text) return i; else return NULL;
					case 2: if (PB[i].Phone.Work == Text) return i; else return NULL;
					case 3: if (PB[i].Phone.Mobile == Text) return i; else return NULL;
				}
		case 5: switch(SubField)
				{
					case 1: if (PB[i].Address.Country == Text) return i; else return NULL;
					case 2: if (PB[i].Address.City == Text) return i; else return NULL;
					case 3: if (PB[i].Address.Street == Text) return i; else return NULL;
					case 4: if (PB[i].Address.N_Home == Text) return i; else return NULL;
					case 5: if (PB[i].Address.N_Apartment == Text) return i; else return NULL;
				}
		case 6: if (PB[i].Email == Text) return i; else return NULL;
	}
}

Последний раз редактировалось NewLamer&Programer; 16.06.2013 в 16:08.
NewLamer&Programer вне форума Ответить с цитированием
Старый 16.06.2013, 16:32   #6
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

А кто вам сказал, что таким образом можно сравнивать значения строк?
Для этого есть библиотечная функция strcmp.
В вашем же случае вы сравниваете именно указатели, а не сами значения ваших строк.
P.S. Это первое что бросилось в глаза.
Базиля вне форума Ответить с цитированием
Старый 16.06.2013, 17:02   #7
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Цитата:
Сообщение от Базиля Посмотреть сообщение
А кто вам сказал, что таким образом можно сравнивать значения строк?
Для этого есть библиотечная функция strcmp.
В вашем же случае вы сравниваете именно указатели, а не сами значения ваших строк.
P.S. Это первое что бросилось в глаза.
ну на самом деле мне в этом месте уже про это говорили, но сошлись на том что как сейчас вроде правильно тем не менее... это даже работало... потом были просто еще другие изменения... ну ок, переписал, все равно не работает:

Код:
int Search(TPhoneBook *PB, int COUNT, char Text[100], int MainField, int SubField)
{
	for (int i = 0; i < COUNT-1; i++)
	switch(MainField)
	{
		case 1: if (strcmp(PB[i].Family,Text) == 0) return i; else return NULL;
		case 2: if (strcmp(PB[i].Name,Text) == 0) return i; else return NULL;
		case 3: if (strcmp(PB[i].Patronymic,Text) == 0) return i; else return NULL;
		case 4: switch(SubField)
				{
					case 1: if (strcmp(PB[i].Phone.Home,Text) == 0) return i; else return NULL;
					case 2: if (strcmp(PB[i].Phone.Work,Text) == 0) return i; else return NULL;
					case 3: if (strcmp(PB[i].Phone.Mobile,Text) == 0) return i; else return NULL;
				}
		case 5: switch(SubField)
				{
					case 1: if (strcmp(PB[i].Address.Country,Text) == 0) return i; else return NULL;
					case 2: if (strcmp(PB[i].Address.City,Text) == 0) return i; else return NULL;
					case 3: if (strcmp(PB[i].Address.Street,Text) == 0) return i; else return NULL;
					case 4: if (strcmp(PB[i].Address.N_Home,Text) == 0) return i; else return NULL;
					case 5: if (strcmp(PB[i].Address.N_Apartment,Text) == 0) return i; else return NULL;
				}
		case 6: if (strcmp(PB[i].Email,Text) == 0) return i; else return NULL;
	}
}
NewLamer&Programer вне форума Ответить с цитированием
Старый 16.06.2013, 17:24   #8
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Цитата:
ну на самом деле мне в этом месте уже про это говорили, но сошлись на том что как сейчас вроде правильно тем не менее... это даже работало..
Ну что значит "вроде правильно", там шло сравнение указателей, о какой правильности шла речь?

Вопрос можно?
Вот исходя из вашего кода, каков вообще смысл цикла в этой п/п?
При корректном значении MainField и SubField вы не дойдете даже до второй записи.

Далее, возвращать значение NULL из функции исходя из того, что строки не равны по значениям не есть корректно, даже просто потому что нумерация идет с того же 0.

Я полагаю вы используете возвращаемое значение функцией для индексации нужной записи из структуры.

Я предлагаю сменить прототип вашей функции на такой:
Код:
bool Search(TPhoneBook *PB, int COUNT, char Text[100], int MainField, int SubField, int &index);
Функция будет возвращать значение true если такая запись существует, соотв. в index будет содержаться ее индекс, иначе функция возвращает false.

Или же конечно можно оставить все как есть (прототип), но при не сущ. записи возвращать, к примеру, отрицательное значение, но тогда необходимо строго отслеживать этот возможный исход.

Но опять таки, вся проблема у вас в том, о чем я писал изначально в этом сообщении.

Последний раз редактировалось Базиля; 16.06.2013 в 17:30.
Базиля вне форума Ответить с цитированием
Старый 16.06.2013, 18:31   #9
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Базиля,
1. про bool это тема, пожалуй сделаю
2. про цикл, в смысле какой смысл? в том то и дело что вы смотрите лучше проект, по одной функции мало что сделаешь, у меня есть массив структур, цикл проверяет все записи в массиве
NewLamer&Programer вне форума Ответить с цитированием
Старый 16.06.2013, 18:49   #10
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

NewLamer&Programer
Цитата:
2. про цикл, в смысле какой смысл? в том то и дело что вы смотрите лучше проект, по одной функции мало что сделаешь, у меня есть массив структур, цикл проверяет все записи в массиве
В Цикле НЕ проверяются все записи.
В этом и вся проблема.

Не вижу смысла смотреть проект, если уже видно что функция работает некорректно.

Даже могу угадать, функция возвращает всегда 1-ую запись, так?
Базиля вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с поиском в ворде Aleksey1989 Общие вопросы Delphi 2 09.08.2013 14:24
проблема с поиском решения valek00794 Microsoft Office Excel 2 04.06.2013 23:00
Проблема с поиском, лол. Caxap_ok Microsoft Office Excel 3 16.08.2011 01:02
Проблема с поиском в БД Evgenii БД в Delphi 15 25.06.2009 00:14
Проблема с поиском Zeraim Microsoft Office Access 2 04.06.2008 05:42