Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2014.06.08;
Скачать: CL | DM;

Вниз

Множество. ЯП делфи 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]]);// внимательно разберись, что означает каздая функция

Ну а затем вывод в ListBox
for 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.006 c
15-1385152203
Юрий
2013-11-23 00:30
2014.06.08
С днем рождения ! 23 ноября 2013 суббота


15-1385361541
Igor_
2013-11-25 10:39
2014.06.08
"Обучалка" работы с программой. Какие есть готовые решения?


15-1385569498
ProgRAMmer Dimonych
2013-11-27 20:24
2014.06.08
jQuery UI и jQuery


15-1385483811
Абориген
2013-11-26 20:36
2014.06.08
Найти вкладку в FireFox.


1-1325530715
S-C-L
2012-01-02 22:58
2014.06.08
XML Parser