Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ РЕШЕНИЕ СИСТЕМЫ РЕГУЛЯРНЫХ УРАВНЕНИЙ. Не хватает длины string

Автор: Людмила 28.04.2010 20:32

Очень нужна помощь!
Написала программу решения системы регулярных выражений. Как смогла, но зато сама. Возникла проблема при тестировании, когда размерность системы больше трех в результате строка намного больше 255, естественно на экран выдается совсем не то что ожидалось. Я полный ноль в паскале, писала несколько суток, при этом не спала практически, а на днях сдавать. Помогите разобраться, что можно сделать !mol1.gif

Автор: Ozzя 28.04.2010 21:38

Использовать pchar
http://forum.sources.ru/index.php?showtopic=40396

Добавлено через 2 мин.
И тут тоже есть, оказывается
http://forum.pascal.net.ru/index.php?showtopic=2361

Автор: Людмила 29.04.2010 3:34

Цитата(Ozzя @ 28.04.2010 20:38) *

Использовать pchar
http://forum.sources.ru/index.php?showtopic=40396

Добавлено через 2 мин.
И тут тоже есть, оказывается
http://forum.pascal.net.ru/index.php?showtopic=2361


Ни как не могу понять какие мне нужно сделать изменения что бы перейти на Pchar. cray.gif Пыталась сделать по примеру на ссылках.... не получается.

Вот мои пременные:

type

{urType=array [1..MaxInt div SizeOf(string)] of string;
TurType=^urType;}

reg_ur=record
x:string; {левая часть уравнения Xn}
ur:array [1..100] of string[70]; { коэфиценты уравнения: регулярные выражения, e,0}
size:integer;
end;

var
T,T2:Text;
S,C,st,ct,kt,mt,lt:String;
n,i,j,k,l,h,g:integer;
sis:array[1..8] of reg_ur;


Автор: Lapp 29.04.2010 4:18

Цитата(Людмила @ 29.04.2010 0:34) *
Пыталась сделать по примеру на ссылках.... не получается.
Люд, что именно не получается? Чем точнее ты описываешь свою проблему, тем быстрее и лучше тебе ответят.

1. Какой у тебя компилятор? Рекомендую использовать FPC с http://FreePascal.org
2. Для того, чтоб использовать pChar, нужно подключить модуль Strings.
3. Нужно переделать не только сами строки, но и операции со строками.

Начни с ответа на первый вопрос, над остальными подумай.

Автор: Людмила 29.04.2010 4:33

Цитата(Lapp @ 29.04.2010 3:18) *

1. Какой у тебя компилятор? Рекомендую использовать FPC с http://FreePascal.org

У меня TP7. FreePascal пробовала установить выдает ошибку. потратила на него пол дня и так и не смогла.

Цитата(Lapp @ 29.04.2010 3:18) *

2. Для того, чтоб использовать pChar, нужно подключить модуль Strings.
3. Нужно переделать не только сами строки, но и операции со строками.

модуль подключала, и операции тоже переделывала, но в результате на экране зюки sad.gif

Проблема в том, что пред написанием программы пытала разобраться с динамическими структурами, но увы не смогла понять как они работают. Решила пойти путем где хоть чуть чуть что то могу сама. При разрядности системы больше двух, количество коэффициентов в уравнениях превышает 255 и естественно в результате часть обрезается. Времени все переделывать нет. Если можно пример объявления моих переменных с учетом нужных изменений?

Автор: Lapp 29.04.2010 4:40

Цитата(Людмила @ 29.04.2010 1:33) *
можно пример объявления моих переменных с учетом нужных изменений?
Можно, конечно, но это тут не главное и вряд ли поможет. Лучше бы ты привела пару фрагментов с переделками..
Во-первых, скажи точнее, какие именно строки переполняются. Например, у тебя в записи есть массив из string[70] - явно их длины тебе хватает, если ты даже 255 не использовала. Остальное - я же не знаю, какие строки ты как используешь..
По идее, если строка s нужна длиннее, чем 255, то вместо
s: string;
нужно писать
s: pChar;
Вот и все объявление. Ну, помогло тебе оно? Главное не в этом. Главное - в работе с ними.

Автор: TarasBer 29.04.2010 13:07

> Главное - в работе с ними.

Ага, главный геморрой - в работе с ними. Я как-то попробовал, даже получилось, но нервов на это я потратил немало.
Я бы забил на это и скачал другой компилятор, который умеет работать со строками любой длины (при этом ничего переписывать в коде не надо, если только вы не баловались с S[0]), автоматически выделяя и освобождая для них память.

Автор: Людмила 29.04.2010 16:03

Цитата(TarasBer @ 29.04.2010 12:07) *

скачал другой компилятор, который умеет работать со строками любой длины (при этом ничего переписывать в коде не надо

не можете уточнить какой? (что бы переделывать не надо было)

Автор: Ozzя 29.04.2010 16:18

Цитата
не можете уточнить какой? (что бы переделывать не надо было)


Цитата
Рекомендую использовать FPC с http://FreePascal.org


Тип ansistring

Автор: Людмила 29.04.2010 20:39

Цитата(Ozzя @ 29.04.2010 15:18) *

Тип ansistring


Попробовала сделать так, но ситуация не изменилась при разрядности 2 все нормально, а при большем числе X не хватает длины строки. Может надо как ни будь явно указывать максимальную длину?

Автор: volvo 29.04.2010 21:35

Может быть уже пора представить программу? Ибо говорить можно сколь угодно долго, но это будет пустой треп, пока не видим кода - "Ошибка в 15-ой строке", и ничего кроме этого сказать нельзя.

Автор: Ozzя 29.04.2010 21:37

Людмила, Вам не кажется, что получается гадание на кофейной гуще? Как-то бы поконкретнее вопрос, что-ли?