Помощь - Поиск - Пользователи - Календарь
Полная версия: Множества
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
Anches
Работа идет со множеством строчных латинских букв.Требуется реализовать всевозможные операции над множествами.Формировать САМО множество необходимо посредством СтрингГрида.
Но здесь возникает проблема!!!
допустим, Litera=set of 'a'..'z';
a:Litera; Почему не удается выполнить действие a:=a+[cells[Col,Row]]? В cells[Col,Row] Col=25, Row=0.
cells[0,0]=a
cell[1,0]=b и т.д. dry.gif
volvo
Цитата
Почему не удается выполнить действие

Потому, что Cells[i, j] - это строка, а не символ... Бери один символ (через Copy) - не будет никаких проблем...

Кроме этого используй Include для работы с множествами:
Include(a, Copy(cells[Col,Row], 1, 1));
должно сработать.

Переношу в раздел "Дельфи" ...

P.S. Извиняюсь, не так... Вот так:
Include(a, (StringGrid1.cells[0, 0])[1]);
Anches
Цитата(volvo @ 12.01.2007 21:46) *

Потому, что Cells[i, j] - это строка, а не символ... Бери один символ (через Copy) - не будет никаких проблем...

Кроме этого используй Include для работы с множествами:
Include(a, Copy(cells[Col,Row], 1, 1));
должно сработать.

Переношу в раздел "Дельфи" ...

P.S. Извиняюсь, не так... Вот так:
Include(a, (StringGrid1.cells[0, 0])[1]);



Еще кое-что...Где-то ошибка..не отображается МНОЖЕСТВО,переведенное функцией SetToStr в строку, в StaticText1.Caption

function SetToStr(s:Litera):String;
var i:integer;
begin
Result:='';
for i:=0 to 25 do
if Chr(i) in s then Result:=Result+''+Chr(i+97);
end;
procedure TForm1.StringGrid1DblClick(Sender: TObject);
begin
with StringGrid1 do begin
if RadioButton1.Checked then begin include(a,(StringGrid1.cells[0,0])[1]);
StaticText1.Caption:=SetToStr(a) end;
if RadioButton2.Checked then begin include(b,Chr(StrToInt(Cells[Col,Row])));
StaticText2.Caption:=SetToStr(b) end;
end;
end;]);


volvo
if RadioButton1.Checked then begin include(a,(StringGrid1.cells[0,0])[1]);
Ну я же просто для примера проставил такие индексы... Ты должна заменить их на нужные тебе...

И потом, ты уверена, что второй способ добавления символа во множество (через Chr, как ты добавляешь в B) работает? Тогда почему в двух местах - два разных способа? Пользуйся одинаковым...
Anches
Я просто маленько напутала..Запускаю я вот это:

procedure TForm1.StringGrid1DblClick(Sender: TObject);
begin
with StringGrid1 do begin
if RadioButton1.Checked then begin include(a,(StringGrid1.cells[Col,Row])[1]);
StaticText1.Caption:=SetToStr(a); end;
if RadioButton2.Checked then begin include(b,(StringGrid1.cells[Col,Row])[1]);
StaticText2.Caption:=SetToStr(b) end;
end;
end;

Выбранный элемент множества в СтринГриде заносится в множество,собственно так оно и формируется, а отображение этого множества должно произойти в СтатикТексте, но этот самый СтатикТекст остается пустым
volvo
for i:=0 to 25 do ...
А что, собственно, ты хотела? Ни один печатный символ не имеет кодов меньше 26, может быть, там должно быть 255?
Anches
Цитата(volvo @ 13.01.2007 0:08) *

for i:=0 to 25 do ...
А что, собственно, ты хотела? Ни один печатный символ не имеет кодов меньше 26, может быть, там должно быть 255?

Конечно же! Только
if Chr(i+97) in s then Result:=Result+''+Chr(i+97);


Спасибо огромное!!!!Сделала последнюю лабу!!!! smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.