![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Carin |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 9 Пол: Женский Репутация: ![]() ![]() ![]() |
Здравствуйте, господа!
Такая проблема возникла. Задачка на поиск дублетов(пар слов, разнящихся между собой в одной букве) в считанном из файла словарике. Для того чтобы эти самые дублеты найти, необходимо, как я понимаю не раз погонять словарь. Соотвественно считать надо все это счастье в строковый массив. В условии оговорено, что размер словаря не должен превышать 25143 слова, каждое из которых не более 16 символов. Вот тут и все проблемы начались. То, что я в статический массив не уложусь со своим словариком я поняла сразу ![]() Код const n_max = 25000;{это максимальное количество слов в словаре} w_max = 16;{это максимальная длина слова} label 1, 2;{метки для проверок} type str_char = string[w_max];{это для динамического строкового массива} TDynArr = array[1..1] of str_char; PDynArr = ^TDynArr; var f: text;{файл со словарем и парами для поиска} t_wd2: str_char; n, i, j: word; p_arr: PDynArr;{динамический строковый массив} begin assign(f, 'input.txt'); {сначала выясняем количество слов для получения динамического массива} reset(f); n:= 0; while not eof(f) do begin readln(f, t_wd2); if (n > n_max) or (length(t_wd2) = 0) then goto 1; n:= n + 1; end; 1: close(f); reset(f); {этот самый динамический строковый массив объявляем} GetMem(p_arr, n * SizeOf(str_char)); {зачитываем слова в словарь} writeln('Производится считывание словаря...'); i:= 1; n:= 0; while not eof(f) do begin readln(f, t_wd2); if (n > n_max) or (length(t_wd2) = 0) then goto 2; n:= n + 1; p_arr^[n]:= t_wd2; end; 2: writeln('Найдено ', n, ' слов в словаре'); close(f); {чистим собственно массив} FreeMem(p_arr, n * SizeOf(str_char)); Вот когда производится зачитывание всего словарика около 20 тыс слов разной длины, то выходит при попытке вывода на экран полученного массива, какая-то белиберда. То есть почему-то первые элементы массива оказываются затертыми последующими с повторами, с вкраплениями каких-то непечатных символов и т.д. Хотя при считываниии когда вывожу каждый новый считанный элемент для контроля - все правильно. Что это? Игры с памятью? Могу приложить полный код и словарик при необходимости. Сообщение отредактировано: Carin - 14.05.2007 17:14 |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Попробуй выйти из IDE, и запустить без нее EXE-шник, если будет то же самое, я присоединю свой, проверишь его у себя... Что-то не в порядке, однако...
|
Carin |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 9 Пол: Женский Репутация: ![]() ![]() ![]() |
|
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 17:42 |