IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> о динамических строковых массивах в Паскале
Carin
сообщение 14.05.2007 17:12
Сообщение #1





Группа: Пользователи
Сообщений: 9
Пол: Женский

Репутация: -  0  +


Здравствуйте, господа!

Такая проблема возникла.

Задачка на поиск дублетов(пар слов, разнящихся между собой в одной букве) в считанном из файла словарике. Для того чтобы эти самые дублеты найти, необходимо, как я понимаю не раз погонять словарь. Соотвественно считать надо все это счастье в строковый массив. В условии оговорено, что размер словаря не должен превышать 25143 слова, каждое из которых не более 16 символов.

Вот тут и все проблемы начались. То, что я в статический массив не уложусь со своим словариком я поняла сразу smile.gif. Сделала динамический вариант обработки.

Код
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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 14.05.2007 22:03
Сообщение #2


Гость






Попробуй выйти из IDE, и запустить без нее EXE-шник, если будет то же самое, я присоединю свой, проверишь его у себя... Что-то не в порядке, однако...
 К началу страницы 
+ Ответить 
Carin
сообщение 14.05.2007 22:11
Сообщение #3





Группа: Пользователи
Сообщений: 9
Пол: Женский

Репутация: -  0  +


Цитата(volvo @ 14.05.2007 22:03) *

Попробуй выйти из IDE, и запустить без нее EXE-шник, если будет то же самое, я присоединю свой, проверишь его у себя... Что-то не в порядке, однако...


Да, сделала exe - шку, тоже самое ошибка run-time. Давай свой exe.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Carin   о динамических строковых массивах в Паскале   14.05.2007 17:12
volvo   , то тогда у тебя происходит следующее: ... ...   14.05.2007 17:18
Carin   Сколько памяти ты берешь? 20000 * 16 = 320000, а ...   14.05.2007 17:28
volvo   type p_str = ^str_char; { <--- Вот этот ука...   14.05.2007 17:36
Carin   volvo, большое спасибо тебе за помочь, но! 88...   14.05.2007 18:07
volvo   Я посмотрел на словарик, и у меня созрело еще одно...   14.05.2007 18:11
Carin   Я посмотрел на словарик, и у меня созрело еще одн...   14.05.2007 18:15
volvo   Вот, посмотри чего я наваял... Программа заточена ...   14.05.2007 19:25
Carin   Вот, посмотри чего я наваял... Программа заточена...   14.05.2007 20:19
volvo   Без понятия... У меня вот такие настройки: Как ви...   14.05.2007 21:00
Carin   Без понятия... У меня вот такие настройки: Как в...   14.05.2007 21:30
volvo   Попробуй выйти из IDE, и запустить без нее EXE-шни...   14.05.2007 22:03
Carin   Попробуй выйти из IDE, и запустить без нее EXE-шн...   14.05.2007 22:11
volvo   Попробуй...   14.05.2007 22:14
Carin   Попробуй... Нда, не хочет.... Чем дальше, тем з...   14.05.2007 22:24
Lapp   Я извиняюсь, что вторгаюсь в беседу :) Но почему б...   15.05.2007 7:16
volvo   И чем это принципиально отличается от решения в по...   15.05.2007 9:17
Carin   Lapp, раз Вы заинтересовались данной темой, то не ...   16.05.2007 2:02
Lapp   А то как-то даже раздражает такое непоследователь...   16.05.2007 5:33
ramzes   А "protected mode" можно использовать?   16.05.2007 3:07
volvo   А "protected mode" можно использовать?Ка...   16.05.2007 10:13


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 17:42
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"