Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.01.01;
Скачать: [xml.tar.bz2];

Вниз

Кто-нибудь объясните пожалуйста код...   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.01 c
5-1120549619
Mutex
2005-07-05 11:46
2006.01.01
Найти название свойства для csSubComponent через OpenToolsAPI


1-1132811400
Pank83
2005-11-24 08:50
2006.01.01
taskbar


2-1134377675
Id
2005-12-12 11:54
2006.01.01
Пароль


14-1134047962
Kerk
2005-12-08 16:19
2006.01.01
Нашел в папке "Спам"


8-1122266318
Sankez
2005-07-25 08:38
2006.01.01
Как можно проиграть avi на рабочем столе ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский