Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Помогите с множеством


pikass ©   (2006-01-23 00:54:00) 

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

Я короче ввожу строку или слово одно, затем считываю все глухие в множество, а как мне вывести глухие которых нет в слове. Помогите, если нетрудно.


Zeqfreed   (2006-01-23 01:32:00) [1]

pikass   (23.01.06 0:54)

type
 TUnvoicedLetterType = (ulK = Ord('к'), ulP = Ord('п'), ulS = Ord('с'), ulT = Ord('т'), ulF = Ord('ф'),
                        ulH = Ord('х'), ulCh = Ord('ч'), ulShc = Ord('щ')); //Hope, didn't miss any?
 TUnvoicedLetters = set of TUnvoicedLetterType;

. . .

const
ULNUM = 8;

. . .

function GetUnvoicedLetters(const Str : String) : TUnvoicedLetters;
const
 AllUnvoiced : TUnvoicedLetters = [ulK, ulP, ulS, ulT, ulF, ulH, ulCh, ulShc];
var
 i : Integer;
begin
 Result := [];
 for i := 1 to length(Str) do begin
  if (TUnvoicedLetterType(Ord(Str[i])) in AllUnvoiced) then
   Include(Result, TUnvoicedLetterType(Ord(Str[i])));
 end;
end;

procedure TForm1.Button1Click(Sender: TObject);
const
 ularr : array[0..ULNUM - 1] of TUnvoicedLetterType = (ulK, ulP, ulS, ulT, ulF, ulH, ulCh, ulShc);
var
 ul : TUnvoicedLetters;
 i : Integer;
begin
 ul := GetUnvoicedLetters(AnsiLowerCase(Edit1.Text));
 Memo1.Clear;

 for i := 0 to ULNUM - 1 do begin
  if not (ularr[i] in ul) then
   Memo1.Lines.Add(Format('There''re no "%s" letters in string you typed!', [Chr(Ord(ularr[i]))]));
 end;
end;


Это если приспичит реализовать через множества, чего я делать не советую :)


Zeqfreed   (2006-01-23 01:12:00) [2]

pikass   (23.01.06 0:54)
Наиболее простой вариант: (1) завести массив, кол-во элементов которого равно кол-ву букв в алфавите, границы массива задать от Ord('а') до Ord('я'), тип массива — Boolean (2) обнулить массив (установить значения всех элементов в false (3) в цикле пройтись по строке и при нахождении глухой согласной установить соответствующий элемент Ord(Str[Idx]) массива в true (4) в цикле пройтись по всем элементам массива и вывести те из них, которые сброшены (равны false). Пользуйтесь на здоровье :)

p.s. Видимо, весьма популярна задача в институтах. Довольно-таки часто похожие поросы на форуме возникают :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо