Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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]]);// внимательно разберись, что означает каздая функция

Ну а затем вывод в 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.002 c
15-1385394712
Абориген
2013-11-25 19:51
2014.06.08
Где взять карты из Windows?


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


15-1385370166
Empleado
2013-11-25 13:02
2014.06.08
Немного о вирусах


8-1233235956
Кошкин
2009-01-29 16:32
2014.06.08
оцените модель головы


2-1376933051
lancomm
2013-08-19 21:24
2014.06.08
поиск по базе





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский