![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Помогите с множеством
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. Видимо, весьма популярна задача в институтах. Довольно-таки часто похожие поросы на форуме возникают :)