Текущий архив: 2006.01.01;
Скачать: CL | DM;
Вниз
Кто-нибудь объясните пожалуйста код... Найти похожие ветки
← →
Silica © (2005-12-16 20:35) [0]В программе есть такой код:
function TForm1.WE(St1:string;st2:string):boolean;
var i1,i2,k:integer;
begin
WE:=false;
if Length(st1)>=Length(st2) then
begin
k:=0;
for i1:=1 to Length(st1) do
for i2:=1 to Length(st2) do
begin
if (st2[i2]<>"0") and (st1[i1]<>"0") then
if st2[i2]=st1[i1] then
begin
k:=k+1;
st2[i2]:="0";
st1[i1]:="0";
end;
end;
if k=Length(st2) then WE:=true
end;
end;
Скажите, пожалуйста что он делает. И почему использует именно
if Length(st1)>=Length(st2)
Суть программы:
В Edit1 комп вводит из словаря (текстого файла) любое слово. В Edit2 человек ввод какое-нибудь слово, содержащее буквы, которые есть в первом слове, выданном компьютере. Этот алгоритм проверяет наличие букв, введенных человеком, в слове, выданном компьютером.
Например:
1. Алгоритмизация
2. Ритм
← →
Fay © (2005-12-16 21:02) [1]> И почему использует именно
> if Length(st1)>=Length(st2)
Не потому ли, что в "Ритм" ни разу не встречается "Алгоритмизация" ?
← →
Fay © (2005-12-16 21:05) [2]Алгоритмизация и Ритм ...
Это поиск вхождения слова?
← →
Silica © (2005-12-16 21:14) [3]Это игра "Составление слов": из букв, предложенного компьютером, составлять слова. Поэтому алгоритмизация и ритм, также можно составить такие слова как: гора, ор, тир и т.д. и т.п.
Мне просто не понятно, почему именно Length(st1)>=Length(st2) :(
Ведь он проверяет побуквенно. Найдя соответствие он обнуляет и если
k=Length(st2) то значит, что буквы в первом слове найдены и нет несовпадения.
← →
kami © (2005-12-16 21:15) [4]Fay © (16.12.05 21:05) [2]
Это поиск вхождения слова?
Нет, не слова, а просто последовательности символов, причем в произвольном порядке.
Вот только в этой процедуре последовательность "Ритм" ни разу не встречается в "Алгоритмизация" - сравнение идет с учетом регистра символов
← →
kami © (2005-12-16 21:17) [5]Silica © (16.12.05 21:14) [3]
Потому что последовательность пользователя никак не может быть больше заданной компьютером. Хотя... можно и удалить это сравнение, на искомом результате это не скажется.
← →
Silica © (2005-12-16 21:41) [6]>kami
> Потому что последовательность пользователя никак не может
> быть больше заданной компьютером.
Поясни, пожалуйста, подробнее, а то я не совсем поняла.
Я убрала это условие, программа работает также. Тогда для чего нужно было это условие. Мне обязательно нужно точно знать во всех подробностях, что обозначает это условие.
← →
kami © (2005-12-16 21:55) [7]Пользователь должен ввести последовательность букв, используя исходную (заданную программой). Каждую из исходных букв (символов) можно использовать только один раз (это заложено в функции - каждый совпавший символ заменяется на 0 в обеих строках), поэтому максимум символов, возможных по заданию для ввода пользователем = length(st1). Ну, и, само собой, что по этим условиям из слова "ж..а" никак не должно получится слово "счастье" :)).
Это сравнение введено, скорее всего, чтобы не снизить время выполнения функции - на длинных сравниваемых строках он будет работать очень долго (в математике не силен, так что функцию возрастания времени сравнения от количества символов не приведу). Для этого сразу после входа сравниваем длины строк, и если строка пользователя (st2)длиннее строки программы (st1), то условие "составить слово только из предложенных символов) заведомо не выполнено, иожно не тратить время на циклы.
← →
kami © (2005-12-16 21:57) [8]kami © (16.12.05 21:55) [7]
чтобы не снизить время
чтобы снизить время.
Спать пора :)
← →
Silica © (2005-12-16 22:26) [9]Спасибо большое за помощь. Я оч благодарна!!! :)
Страницы: 1 вся ветка
Текущий архив: 2006.01.01;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.009 c