Поиск однофамильцев в типизированном файле |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Поиск однофамильцев в типизированном файле |
alex9910 |
2.06.2012 18:15
Сообщение
#1
|
Новичок Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: 0 |
Нужно вывести из типизированного ф-ла однофамильцев. Типизированный файл состоит из типа запись.
Например: при запросе фамилии Петрова выводились все стоки с фамилиями Петрова и Петров. или при запросе : Петров выводились и Петров и Петрова. Как можно сделать проверку на подстановку или отброс окончаний? Всем заранее спасибо! procedure print_usl; |
IUnknown |
2.06.2012 18:48
Сообщение
#2
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Ну вот и сделай так:
IF str_v[length(str_v)]= 'а' then , а потом в цикле сравнивай test_fio с текущей фамилией: if (F.FIO_Stud = test_fio) or (F.FIO_Stud = test_fio + 'a') then(Можно было бы искать через if pos(F.FIO_Stud, test_fio) > 0 then, но будут ложные срабатывания: "Петров" и "Петровский" будут считаться похожими, а это не так). Но это не самая хорошая идея, сравнивать напрямую. Очень много несоответствий начнется. Скажем, фамилия "Ланская" - как сравнить ее с "Ланской"? Проверять на 'ая'? Найдется несколько других примеров, с которыми ни проверка на "а", ни проверка на "ая" не сработают. Т.е., тебе придется делать много проверок. У меня есть более интересная идея. Есть такое понятие, как "расстояние Левенштейна" - т.е., мера похожести двух строк. (Это не важно сейчас, но высчитывается эта мера как количество шагов, которые нужно проделать для преобразования одной строки в другую. Чем меньше это количество - тем строки ближе. Будет логично предположить, что для мужских/женских фамилий дистанция Левенштейна не будет больше 2, т.е., максимум за 2 шага из одной фамилии можно получить другую). Я бы все-таки подумал в эту сторону. Чем добавлять десятки проверок, и не факт, что будут учтены все сочетания, проще сделать подсчет этой дистанции, и проверять ее. Подумай над этим. Это из области Fuzzy Search, т.е., Нечеткого Поиска, а у тебя как раз поиск нечеткий, у тебя не жестко заданная строка, которую надо найти, а нужно "найти что-то, очень похожее вот на это". |
alex9910 |
2.06.2012 19:31
Сообщение
#3
|
Новичок Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: 0 |
Не получилось. Или я не понял куда подставить это
Вот весь проект.. Конечно сложно там во всем наверное будет быстро разобраться.. Но может получится. Эта процедура в модуле под названием PECHAT а запуск происходит через MENU Сообщение отредактировано: alex9910 - 2.06.2012 19:41 Прикрепленные файлы PR2.zip ( 103.81 килобайт ) Кол-во скачиваний: 217 |
IUnknown |
2.06.2012 21:37
Сообщение
#4
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Я имел в виду что-то типа:
{Процедура печати по условию}Извини, но разбираться, где ты там описываешь все переменные (и почему переменные не описываются как можно ближе к месту использования - это первое условие для написания менее глючной программы, а ты все норовишь затолкать их в другой модуль, ибо в этом же я подобных переменных не обнаружил) мне лень, да и не хочется. Неинтересно это, я тебе указывал уже на ошибки, ты В ТОЧНОСТИ их повторяешь. Как об стену горох. На фиг мне, спрашивается, опять тут расписывать на десяток страниц, КАК НАДО, если ты делаешь КАК ПОПАЛО??? |
alex9910 |
2.06.2012 22:48
Сообщение
#5
|
Новичок Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: 0 |
Увы делалось как было написано в задании....
Все в программе хорошо, но проверяет то только на фамилию Если в файле фамилии без инициалов то все прекрасно! А вот с инициалами ничего не находит.... |
IUnknown |
3.06.2012 14:33
Сообщение
#6
|
a.k.a. volvo877 Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: 627 |
Цитата Увы делалось как было написано в задании.... Задание не определяет (по крайней мере - не должно определять) способ решения. И не определяет, где описывать переменные, и переменные какого типа. И где ставить комментарии тоже не определяет задание. Задание ставит задачу, которую необходимо решить. А уж как ее программист будет решать - это не его (задания) дело. Твою программу можно влет сократить в 5 раз. В пять!!! Это что, задание так требует, чтобы в файле Redakt.pas было больше 600 строк? Да там и 150 по хорошему - перебор. Так что не надо валить на задание. Все зависит от того, кто это задание выполняет.Цитата Если в файле фамилии без инициалов то все прекрасно! А вот с инициалами ничего не находит.... А надо было сразу думать, а не пихать фамилию вместе с инициалами в одно поле. Ты что думаешь, это оттого, что программисту нечего было делать в любой нормальной базе фамилия хранится отдельно, имя - отдельно, а отчество - отдельно? Или ты думал, что все программисты недоумки, а ты вот один такой мудрый, догадался все запихать в одно поле, чтоб особо не заморачиваться? Ну, догадался запихать - догадывайся и переделывать теперь |
Гость |
3.06.2012 18:36
Сообщение
#7
|
Гость |
Задание не определяет (по крайней мере - не должно определять) способ решения. И не определяет, где описывать переменные, и переменные какого типа. И где ставить комментарии тоже не определяет задание. Задание ставит задачу, которую необходимо решить. А уж как ее программист будет решать - это не его (задания) дело. Твою программу можно влет сократить в 5 раз. В пять!!! Это что, задание так требует, чтобы в файле Redakt.pas было больше 600 строк? Да там и 150 по хорошему - перебор. Так что не надо валить на задание. Все зависит от того, кто это задание выполняет. А надо было сразу думать, а не пихать фамилию вместе с инициалами в одно поле. Ты что думаешь, это оттого, что программисту нечего было делать в любой нормальной базе фамилия хранится отдельно, имя - отдельно, а отчество - отдельно? Или ты думал, что все программисты недоумки, а ты вот один такой мудрый, догадался все запихать в одно поле, чтоб особо не заморачиваться? Ну, догадался запихать - догадывайся и переделывать теперь Печать по условию задал препод однофамильцев найти.... А что редакт на 600 строк. Я даже не знаю как по другому сократить до 150 |
alex9910 |
3.06.2012 18:44
Сообщение
#8
|
Новичок Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: 0 |
"Это что, задание так требует, чтобы в файле Redakt.pas было больше 600 строк? "
Нет задание требует редактирование в виде меню а как по другому его организовывать не знаю.. Да и уже некогда, еще диаграмму нужно делать... Как-то реально вывести гистограмму (столбиковую диаграмму) допустим сколько студентов получают стипендию до 980 ру. и сколько больше 1000 например? Сообщение отредактировано: alex9910 - 3.06.2012 19:52 |
Jakeline |
19.06.2012 8:02
Сообщение
#9
|
Гость |
And I thuohgt I was the sensible one. Thanks for setting me straight.
|
Текстовая версия | 8.06.2024 9:52 |