Форум: "Начинающим";
Текущий архив: 2014.06.08;
Скачать: [xml.tar.bz2];
ВнизМножество. ЯП делфи 7 Найти похожие ветки
← →
Дмитрий (2013-08-19 13:35) [0]Текст задан строкой. Напечатать все латинские буквы (заглавные и строчные), которые входят только один раз.
в едит я ввожу
а в listbox результат
ну и конечно button (Выполнить)
← →
Inovet_ (2013-08-19 13:39) [1]Отлично. И что дальше?
← →
Кщд (2013-08-19 13:43) [2]>Дмитрий (19.08.13 13:35)
1т.р. - нормально?
← →
ProgRAMmer Dimonych © (2013-08-19 14:40) [3]Сделаю за 900, но за то, что в e-mail фигурирует фамилия моего бывшего начальника, ещё +100. Итого 1000 :)
← →
Dmitry (2013-08-19 14:47) [4]Не сложно помочь без денег, просто покажите один раз тогда я сам все разберусь.....
← →
брат Птибурдукова (2013-08-19 14:53) [5]заведи два множества. если очередная буква строки есть в первом множестве, то удаляй её из второго множества, иначе добавляй в первое и второе. затем выведи символы, входящие во второе множество.
← →
Sha © (2013-08-19 15:35) [6]> брат Птибурдукова (19.08.13 14:53) [5]
а если нужны те, что входят ровно 3 раза? )
← →
брат Птибурдукова (2013-08-19 16:07) [7]
> Sha © (19.08.13 15:35) [6]
Очевидно, тогда мой совет будет другим.
← →
Sha © (2013-08-19 16:31) [8]> брат Птибурдукова (19.08.13 16:07) [7]
Разумеется.
Но задача-то идиотская. Или это только мне кажется?
← →
брат Птибурдукова (2013-08-19 16:37) [9]Задача учебная :-)
Вот если бы "ровно три раза, решать через множество", тогда бы была идиотской и садистской.
← →
Sha © (2013-08-19 16:47) [10]А ровно два раза - еще не идиотская? )
← →
брат Птибурдукова (2013-08-19 16:54) [11]а чёрт его знает, как нынче в институте дрессируют %-)
я бы решал не через множества (в делфи). если бы задачка про "ровно три, два, эн вхождений" была в курсе функционального программирования, то не удивился бы.
← →
icWasya © (2013-08-19 17:32) [12]завести вот такой массив
var
C:Char;
I:Integer;
LetterCount: array [Char] of integer; // не удивляться
с начала его очистить, используя FillChar - посмотри сам как именно
цикл по символам строкиfor I:=1 to Length(S) do Inc(LetterCount[S[I]]);// внимательно разберись, что означает каздая функция
Ну а затем вывод в ListBoxfor C:=Low(LetterCount) to High(LetterCount) do
if (LetterCount[C] == 1) then ListBox.Items.Add(C);
← →
брат Птибурдукова (2013-08-19 17:36) [13]где же множество?
← →
Sha © (2013-08-19 17:46) [14]> брат Птибурдукова (19.08.13 16:54) [11]
> если бы задачка про "ровно три, два, эн вхождений" была
> в курсе функционального программирования, то не удивился бы.
ну тогда так:
procedure TForm1.Button1Click(Sender: TObject);
var
a: array[0..31] of set of AnsiChar;
b, c: set of AnsiChar;
i, k, n: integer;
s: AnsiString;
ch: AnsiChar;
begin;
ListBox1.Items.Clear;
n:=StrToIntDef(Edit1.Text,0);
if n<=0
then ListBox1.Items.Add("неверно задано число повторений")
else begin;
for i:=0 to 31 do a[i]:=[];
s:=Edit2.Text;
for k:=1 to Length(s) do begin;
ch:=s[k];
if ch in["A".."Z","a".."z"] then begin;
i:=0;
while true do begin;
if not (ch in a[i]) then begin;
include(a[i],ch);
break;
end;
exclude(a[i],ch);
inc(i);
end;
end;
end;
c:=[]; for ch:=#0 to #255 do include(c,ch);
b:=c;
k:=n;
for i:=0 to 31 do begin;
if (k and 1)<>0 then b:=b*a[i] else b:=b*(c-a[i]);
k:=k shr 1;
end;
for ch:=#0 to #255 do if ch in b then ListBox1.Items.Add(ch);
end;
end;
← →
Плохиш © (2013-08-19 17:47) [15]
> icWasya © (19.08.13 17:32) [12]
Зачёт не сдан. Тема по множествам не усвоена.
← →
Sha © (2013-08-19 17:51) [16]только ничего не спрашивайте про множество c ))
← →
брат Птибурдукова (2013-08-19 18:05) [17]
> только ничего не спрашивайте про множество c
Обижаешь, начальник! это ж первое правило бойцовского клуба!
← →
Sha © (2013-08-19 18:10) [18]> только ничего не спрашивайте про множество c
все равно не отвечу, и вам не советую ))
← →
Sha © (2013-08-20 12:42) [19]Что-то молчит студент, может не нравится предложенный вариант?
Ладно, вот тогда его чуть укороченная версия.
Как и раньше, считает хоть 100500 повторений.procedure TForm1.Button1Click(Sender: TObject);
const
last= SizeOf(integer)*8-1;
var
a: array[0..last] of set of AnsiChar;
i, k, n: integer;
s: AnsiString;
ch: AnsiChar;
begin;
ListBox1.Items.Clear;
n:=StrToIntDef(Edit1.Text,-1);
if n<0 then ListBox1.Items.Add("задайте число повторений")
else begin;
s:=Edit2.Text;
for i:=0 to last-1 do a[i]:=[];
for k:=1 to Length(s) do begin;
ch:=s[k];
i:=0;
while ch in a[i] do begin;
exclude(a[i],ch);
inc(i);
end;
include(a[i],ch);
end;
k:=n;
a[last]:=["A".."Z","a".."z"];
for i:=0 to last-1 do begin;
if k and 1=0 then a[last]:=a[last]-a[i] else a[last]:=a[last]*a[i];
k:=k shr 1;
end;
for ch:=#0 to #255 do if ch in a[last] then ListBox1.Items.Add(ch);
end;
end;
← →
брат Птибурдукова (2013-08-20 13:20) [20]
> array[0..last] of set of AnsiChar;
А ч0 так жестоко? Не придёт ли стеку карачун? Тут, по-моему, динамический массив был бы куда более уместен (если оставить за рамками целесообразность решения задачи через множества).
Ну и справедливости ради, в исходной задаче должен быть не set of ansichar, а set of ("A".."Z", "a".."z") :-)
← →
Sha © (2013-08-20 13:27) [21]> брат Птибурдукова (20.08.13 13:20) [20]
> Не придёт ли стеку карачун?
Какой такой карачун? 32 элемента всего.
> в исходной задаче должен быть не set of ansichar, а set of ("A".."Z", "a".."z") :-)
Задача решена в общем виде, чтобы легко было исправить и задавать диапазон снаружи.
← →
брат Птибурдукова (2013-08-20 13:43) [22]
> Какой такой карачун? 32 элемента всего
Мда… "Я такой же осёл, как и вы, сэр!" (с) Остров Сокровищ
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2014.06.08;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.002 c