Супернаборщик в Delphi

Наверное, всем известна школьная игра Наборщик. В ней требуется из букв какого-либо заданного длинного слова составлять другие, более короткие слова, с условием, что они будут состоять только из тех букв, которые имеются в заданном слове. При этом, если в длинном слове, например, две буквы А, то и в каждом составленном слове их должно быть не больше двух. Побеждает тот игрок, который составит больше слов. Очень хорошая игра, в которую интересно играть, особенно на уроках математики.

 

Мы сделаем себе небольшое послабление в правилах игры - не будем тре­бовать, чтобы число одинаковых букв в искомых словах не превышало числа этих букв в заданном слове, иначе говоря, любую букву этого слова можно использовать сколько угодно раз. Все остальные правила трогать не будем.

 

 

Все компоненты программы нам уже хорошо известны, поэтому обратим своё внимание на процедуру составления списка слов, в которую мы попа­дём после нажатия на кнопку sbtFind НАИТИ СЛОВА: 

 //НАЙТИ НУЖНЫЕ СЛОВА procedure TfrmMain.sbtFindClick(Sender: TObject);
var word : AnSiString; i/j: integer;
ch: set of Char; flag: boolean;
begin //конвертируем буквы з верхний регистр - как з слозаре:
word:= AnsiUpperCase(txtWord.Text);
if length (word) < 2 then Application.MessageBox('Слишком короткое 1Супернаборщик1, МВ_ОК);
//з множестзе пока нет букв: ch:=[]; //формируем множестзо из букз заданного слоза:
for i:=l to length(word) do begin //добазить букву з множестзо:
include(ch, word]); 
ch:= ch + [word]; end; IstProtokol.Items.clear; 
for i:=l to WordsAll do
 begin flag:= TRUE; 
for j:=l to length(spisok) do
 begin 
if not (spisok[i,j] in ch) then 
begin 
//- такой букзы нет! 
flag:= FALSE; 
break; 
end; 
end; 
if flag then IstProtokol.Items.Add (spisok); 
end;
 end; 

Сначала мы должны конвертировать все буквы в верхний регистр, потому что в словаре все слова записаны «большими» буквами. Иначе ни одного слова программа не найдёт!

Ясно, что бесполезно искать слова, состоящие только из одной буквы, хотя бы и взятой много раз (но такие слова могут появиться в будущем!), по­этому необходимо проверить введённое слово.

 

Далее мы заполняем пустое множество буквами заданного слова и про­сматриваем весь словарь. Все буквы каждого слова проверяем, имеются ли они в множестве ch (а значит, и в заданном слове). Как только нам встре­тилась «лишняя» буква, проверку текущего слова прекращаем и перехо­дим к следующему в массиве spisok. Слово, которое с честью выдержало все испытания, печатаем в окне протокола. Все найденные слова можно сохранить в файле, нажав кнопку sbtSave с зазывным предложением Запи­сать.

 

Всего за несколько минут мы написали очень интересную и полезную про­грамму для игры в слова! Теперь вы смело можете играть в неё с кем угод­но, не боясь ударить в грязь лицом, и каждый поверженный вами против­ник скажет о вас: «Да, этот парень в карман за словом не полезет!». Вот так, с помощью ловкости рук и без всякого мошенничества вы прослывёте настоящим эрудитом даже за пределами своей родной школы.

Delphi

Нашу программу можно использовать и вот таким неожиданным образом.

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

Для определённости будем считать, что только русские буквы АВСЕНКМОРТХ имеют латинские аналоги

Злые шутки с идентификаторами

Так как Delphi позволяет записывать идентификаторы и русскими буквами, то легко разыграть начинающих программистов. Составьте идентификатор так, чтобы он мог быть записан русскими буквами, но при этом выглядел бы так, как будто записан латинскими.

Например, раса сера архар серсо. При попытке воспользоваться этими идентификаторами будет возникать ошибка, так как все про­граммисты уверены, что идентификаторы составлены из латинских букв.

Супернаборщик в Delphi


������� ������ ��� dle ������� ��������� ������

Помоги проекту! Расскажи друзьям об этом сайте: