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

Вниз

Нужна помощь!!!   Найти похожие ветки 

 
АлексЧерных   (2006-10-05 11:20) [0]

Люди, помогите! На лабах препод задал задачу. Сделать не возможно. Помогите. Вот текст условия: При нажатии на кнопку текст надписи на ней становится наклонным, при повторном нажатии - снова обычным. Можно пользоваться только присвоениемм. Использовать условный опрератор НЕЛЬЗЯ. Помогите.


 
clickmaker ©   (2006-10-05 11:21) [1]


> Использовать условный опрератор НЕЛЬЗЯ

а он тебе нужен там?


 
АлексЧерных   (2006-10-05 11:25) [2]

А как же сделать??? Можно привести пример кода, плиз


 
clickmaker ©   (2006-10-05 11:32) [3]

Ну а как бы ты сделал с условием?


 
TUser ©   (2006-10-05 11:32) [4]

Угол := 0;

При клике

Угол := (Угол + A) mod (A * 2); // наприм, А = 45 градусов
Нарисовать надписть под вычисленным углом


 
Плохиш ©   (2006-10-05 11:32) [5]

font.style + [fsItalic]
font.style - [fsItalic]


 
TUser ©   (2006-10-05 11:33) [6]

> Плохиш ©   (05.10.06 11:32) [5]

Опс, я думал, что текст надо на канве нарисовать по наклонной линии.


 
Плохиш ©   (2006-10-05 11:37) [7]


> TUser ©   (05.10.06 11:33) [6]
> > Плохиш ©   (05.10.06 11:32) [5]
>
> Опс, я думал, что текст надо на канве нарисовать по наклонной
> линии.

С такими знаниями и на лабе, я рыдал... :-)


 
ЮЮ ©   (2006-10-05 11:40) [8]


> Плохиш ©   (05.10.06 11:32) [5]
font.style + [fsItalic]
font.style - [fsItalic]

И что, это решит задачу?


 
clickmaker ©   (2006-10-05 11:42) [9]


> АлексЧерных   (05.10.06 11:20)

и можно только одно присваивание сделать? Или неограниченно?


 
Плохиш ©   (2006-10-05 11:42) [10]


> ЮЮ ©   (05.10.06 11:40) [8]

Всё зависит от того какую кнопку он выберет.


 
clickmaker ©   (2006-10-05 11:44) [11]

На самом деле задача решается с одной кнопкой и в 4 присваивания. Без единого if


 
ЮЮ ©   (2006-10-05 11:46) [12]


> clickmaker ©   (05.10.06 11:44) [11]


Вот решение и найдно. По окрнчании лабов, clickmaker, надеюсь, покажет решение :)


 
sniknik ©   (2006-10-05 11:51) [13]

> На самом деле задача решается с одной кнопкой и в 4 присваивания. Без единого if
в одно


 
sniknik ©   (2006-10-05 11:53) [14]

а когда лабы кончаются? не хочу учителю "воспитательный" процесс портить. ;о))


 
han_malign ©   (2006-10-05 11:53) [15]


> На самом деле задача решается с одной кнопкой и в 4 присваивания.
>  Без единого if

эээ - а операциями можно пользоваться? тогда (:=, -, +, -) - присваивание одно...


 
han_malign ©   (2006-10-05 11:58) [16]


> в одно

- без операций - три(и одно в самом начале - можно не считать, т.к. оговорена только реакция на кнопку)


 
han_malign ©   (2006-10-05 12:01) [17]

а еще можно классическим массивом с булевым индексом - хотя я бы, на месте преподавателя, посчитал это неявным if-ом...


 
clickmaker ©   (2006-10-05 12:09) [18]

Ну да, все зависит от ограничений... Потому как способов несколько


 
Плохиш ©   (2006-10-05 12:09) [19]


> sniknik ©   (05.10.06 11:51) [13]

А мне твой вариант нравится :-)


 
Наиль ©   (2006-10-05 12:12) [20]

Очень часто использую:
procedure TForm1.Button1Click(Sender: TObject);
begin
 Button1.font.style:=Button1.font.style+[fsItalic]-Button1.font.style*[fsItalic];
end;


 
clickmaker ©   (2006-10-05 12:15) [21]


> [20] Наиль ©   (05.10.06 12:12)

блин, всю малину испортил... надо было хоть дать подумать человеку


 
oxffff ©   (2006-10-05 12:18) [22]

font.Style:=[fsItalic]-font.Style;


 
Наиль ©   (2006-10-05 12:18) [23]


> блин, всю малину испортил... надо было хоть дать подумать
> человеку

Возможно ещё придётся подумать.
Писал по памяти. Наверняка, не без ошибки.


 
oxffff ©   (2006-10-05 12:22) [24]

Я тоже подзабыл.
Возможно придется сделать через вентиль вызова(call gate) и бит гранулярности.
А также повысив свой IRQL с PASSIVE до DISPATCH.
Не забыв подкорректировать TSS.

:)


 
sniknik ©   (2006-10-05 12:29) [25]

oxffff ©   (05.10.06 12:18) [22]
все... препод поставит оценку незаслуженно...  ;о(

еще вариант
with TButton(Sender).Font do
 Style:= TFontStyles(Byte(Style) xor 2);


 
clickmaker ©   (2006-10-05 12:34) [26]

Однако здесь везде есть что-то кроме присваивания.
А кто скажет вариант ВООБЩЕ без любых операторов, кроме присвоения?


 
oxffff ©   (2006-10-05 12:41) [27]


> clickmaker ©   (05.10.06 12:34) [26]
> Однако здесь везде есть что-то кроме присваивания.
> А кто скажет вариант ВООБЩЕ без любых операторов, кроме
> присвоения?


Препод.


 
sniknik ©   (2006-10-05 12:42) [28]

> А кто скажет вариант ВООБЩЕ без любых операторов, кроме присвоения?
ты? ;о))


 
han_malign ©   (2006-10-05 12:43) [29]


> font.Style:=[fsItalic]-font.Style;

- а дотошный преподаватель поставит еще и, скажем, fsBold?

> А кто скажет вариант ВООБЩЕ без любых операторов, кроме присвоения?

- тоже классически вариант, при этом альтернативный стиль может быть произвольным, а не только одним флагом отличаться. Но т-с-сс...

Как вариант - вообще стили не трогать, а переключать флажок начинающийся на Parent... :)


 
clickmaker ©   (2006-10-05 12:43) [30]


> [28] sniknik ©   (05.10.06 12:42)

ну после [22], право, как-то неловко...


 
sniknik ©   (2006-10-05 12:49) [31]

с чего?

[22] кстати на 1 асемблерную команду больше чем [25] (их там 2! ;о)) а [25] одна хотя паскалевской писанины больше.


 
oxffff ©   (2006-10-05 12:49) [32]


> han_malign ©   (05.10.06 12:43) [29]
>
> > font.Style:=[fsItalic]-font.Style;
>
> - а дотошный преподаватель поставит еще и, скажем, fsBold?
>


Button1.Font.Style:=(Button1.Font.Style-[fsItalic])+([fsItalic]-Button1.Font.Style);


 
oxffff ©   (2006-10-05 12:55) [33]


> clickmaker ©   (05.10.06 12:34) [26]
> Однако здесь везде есть что-то кроме присваивания.
> А кто скажет вариант ВООБЩЕ без любых операторов, кроме
> присвоения?


Ждем вас Маэстро


 
clickmaker ©   (2006-10-05 12:59) [34]


> [33] oxffff ©   (05.10.06 12:55)

не, не буду позориться. Тем более, что так жестко наверно задача не стояла


 
han_malign ©   (2006-10-05 12:59) [35]


> Ждем вас Маэстро

- забава такая у гусаров была, не связанная с войной, вином и женщинами... :)


 
oxffff ©   (2006-10-05 13:06) [36]

han_malign ©  
> А кто скажет вариант ВООБЩЕ без любых операторов, кроме присвоения?
- тоже классически вариант, при этом альтернативный стиль может быть
произвольным, а не только одним флагом отличаться. Но т-с-сс...

Мне действительно сейчас в голову ничего не приходит.
Но очень интересно узнать как сделать исключительно одним оператором присваивания (без -,+,xor,not,and,or и ASM).

Прошу вас han_malign.


 
clickmaker ©   (2006-10-05 13:09) [37]


> одним оператором присваивания

четырьмя


 
han_malign ©   (2006-10-05 13:11) [38]

помимо гусаров, этим еще сверхзвуковые самолеты меряются... :)


 
oxffff ©   (2006-10-05 13:12) [39]

Ого. Прошу вас код в студию.


 
han_malign ©   (2006-10-05 13:13) [40]


> > одним оператором присваивания
> четырьмя

- конкретно в OnClick - тремя


 
oxffff ©   (2006-10-05 13:14) [41]

Уважаемые. Снизойдите до меня.


 
clickmaker ©   (2006-10-05 13:17) [42]


> конкретно в OnClick - тремя

двумя


 
oxffff ©   (2006-10-05 13:21) [43]

Ого. Прошу вас код в студию.


 
han_malign ©   (2006-10-05 13:22) [44]


> двумя

- не - двумя никак - без промежуточного запоминания значения никому еще обойтись не удавалось...


 
clickmaker ©   (2006-10-05 13:23) [45]


> Ого. Прошу вас код в студию

ну дай померяться )) может кто-то меньше предложит


 
clickmaker ©   (2006-10-05 13:24) [46]


> без промежуточного запоминания значения

это еще зачем?


 
han_malign ©   (2006-10-05 13:30) [47]


> > без промежуточного запоминания значения
> это еще зачем?

- ну тогда мне остается только процитировать - "Ого. Прошу вас код в студию."...


 
clickmaker ©   (2006-10-05 13:40) [48]

может лучше от препода подождем ответа, а?
все равно [22] и [32] не переплюнуть


 
han_malign ©   (2006-10-05 13:50) [49]


> все равно [22] и [32] не переплюнуть

- ну допустим [32] мне переплевывать не надо, я его еще в [15] обозначил... А вот два присваиваивания - переплюнет все...


 
clickmaker ©   (2006-10-05 14:38) [50]

Эх, самое обидное - чел лабу сдаст, а пива никому из присутствующих здесь не поставит...


 
Percent   (2006-10-05 15:14) [51]

procedure TForm1.OnClick1(Sender: TObject);
begin
 Button1.Font.Style := [fsItalic];
 Button1.OnClick := OnClick2;
end;

procedure TForm1.OnClick2(Sender: TObject);
begin
 Button1.Font.Style := [];
 Button1.OnClick := OnClick1;
end;


 
sniknik ©   (2006-10-05 15:17) [52]

[32] жутко невнятная запись, если уж делать то понятно, для добавлений еще параметра, имхо, лучше мой вариант "модернезировать"

procedure TForm1.Button1Click(Sender: TObject);
const
 Bold      = 1;
 Italic     = 2;
 Underline = 4;
 StrikeOut = 8;
begin
 with TButton(Sender).Font do
   Style:= TFontStyles(Byte(Style) xor (Bold+Italic));
end;

все в туже одну асемблерную команду скомпилится...

clickmaker ©   (05.10.06 14:38) [50]
ну раз не удалось получить выгоды, считай из чисто альтруистких соображений помогли. ;о)) а впредь надо быть сдержанней.


 
Плохиш ©   (2006-10-05 15:22) [53]


> Percent   (05.10.06 15:14) [51]

А что жирность, подчёркивание и перечёркивание во внимание не принимаются?


 
han_malign ©   (2006-10-05 15:34) [54]


> Percent   (05.10.06 15:14) [51]

> clickmaker ©
- у тебя такой же ход мыслей? У меня решение попроще, без "неявных ветвлений", но с лишним присваиванием...


 
Clickmaker ©   (2006-10-05 15:53) [55]


> - у тебя такой же ход мыслей?

увы...


 
han_malign ©   (2006-10-05 16:25) [56]


> увы...

- ну почему же увы, я до этого не додумался... У меня тривиальный "Exchange"...


 
han_malign ©   (2006-10-05 16:37) [57]

Если лабораторная в рамках темы "Конечные автоматы", то вариант [51] - самый правильный... Одна из оптимальных реализаций машины состояний...


 
TUser ©   (2006-10-05 18:11) [58]

> С такими знаниями и на лабе, я рыдал... :-)

Это мы не проходили, это нам не задовали. Лаба не моя.


 
Плохиш ©   (2006-10-05 23:14) [59]


> TUser ©   (05.10.06 18:11) [58]

Да я про аФФтара в свете твоего ответа :-)


 
Loginov Dmitry ©   (2006-10-05 23:22) [60]

Препод - садист. Нет, чтобы действительно чем-нить полезным занять, заставляет людей заниматься совершенно бестолковой ерундятиной.


 
oxffff ©   (2006-10-05 23:34) [61]

han_malign ©   (05.10.06 16:25) [56]

> увы...

- ну почему же увы, я до этого не додумался... У меня тривиальный "Exchange"...

Просим вас код в студию.


 
han_malign ©   (2006-10-06 11:31) [62]

tmpStyle:= FAlternativeFontStyle;
FAlternativeFontStyle:= Font.Style;
Font.Style:= tmpStyle;


 
oxffff ©   (2006-10-06 20:32) [63]


> han_malign ©   (06.10.06 11:31) [62]
> tmpStyle:= FAlternativeFontStyle;
> FAlternativeFontStyle:= Font.Style;
> Font.Style:= tmpStyle;


А где здесь 2 присвоения?


 
oxffff ©   (2006-10-06 20:41) [64]


> tmpStyle:= FAlternativeFontStyle;
> FAlternativeFontStyle:= Font.Style;
> Font.Style:= tmpStyle;


FAlternativeFontStyle должна быть еще и глобальной, которую тоже надо инициализировать.

var FAlternativeFontStyle:Tfontstyles=[fsItalic]

Поэтому если считать по честному, то здесь 3 присвоения в  Onclick
+ 1 на инициализацию. Так что даже на честных три присвоения не дотягивает.

[51] вариант интересный. Только в рамках курса "Бесконечные пулеметы".
Хотя заслуживает внимания и уважения.

А где два присвоения? Честных.
Ждемс.


 
Percent   (2006-10-07 09:49) [65]

type
 TNewStyle = (fsNone, fsItalic);

const
 Styles: array[fsNone..fsItalic] of TNewStyle = (fsItalic, fsNone);

procedure TForm1.Button1Click(Sender: TObject);
begin
 Button1.Font.Style := [TFontStyle(Styles[TNewStyle(Button1.Font.Style)])];
end;

P.S. Кхм...


 
oxffff ©   (2006-10-07 10:24) [66]


> type
>  TNewStyle = (fsNone, fsItalic);
>
> const
>  Styles: array[fsNone..fsItalic] of TNewStyle = (fsItalic,
>  fsNone);
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
>  Button1.Font.Style := [TFontStyle(Styles[TNewStyle(Button1.
> Font.Style)])];
> end;
>
> P.S. Кхм...


Достаточно элегантно. Но работать будет только для [fsItalic] [].
А что у вас с другими стилями. Например [fsItalic,fsBold].

P.S. Кхм...


 
sniknik ©   (2006-10-07 10:34) [67]

это было, только что в код не оформлено
han_malign ©   (05.10.06 12:01) [17]
> а еще можно классическим массивом с булевым индексом - хотя я бы, на месте преподавателя, посчитал это неявным if-ом...

и предполагалось видимо так (еще элегантнее...)

procedure TForm1.Button1Click(Sender: TObject);
const
 Stl: array[boolean] of TFontStyles = ([fsItalic], []);
begin
 with TButton(Sender).Font do
   Style:= Stl[fsItalic in Style];
end;


 
sniknik ©   (2006-10-07 10:43) [68]

p.s. fsBold (и все остальное) легко добавляется в этом случае, в значение массива (... TFontStyles = ([fsBold, fsItalic], []);), проверка не меняется ведь нам надо переключать только туда/обратно.


 
oxffff ©   (2006-10-07 10:43) [69]


> это было, только что в код не оформлено
> han_malign ©   (05.10.06 12:01) [17]
> > а еще можно классическим массивом с булевым индексом -
>  хотя я бы, на месте преподавателя, посчитал это неявным
> if-ом...
>
> и предполагалось видимо так (еще элегантнее...)
>
> procedure TForm1.Button1Click(Sender: TObject);
> const
>  Stl: array[boolean] of TFontStyles = ([fsItalic], []);
> begin
>  with TButton(Sender).Font do
>    Style:= Stl[fsItalic in Style];
> end;


А что разве in это оператор присваивания.
Использовать можно только оператор присваивания.


 
oxffff ©   (2006-10-07 10:46) [70]


> sniknik ©   (07.10.06 10:43) [68]
> p.s. fsBold (и все остальное) легко добавляется в этом случае,
>  в значение массива (... TFontStyles = ([fsBold, fsItalic],
>  []);), проверка не меняется ведь нам надо переключать только
> туда/обратно.


А как тогда для произвольных неизвестных стилей?

Ждем двух присваиваний.


 
oxffff ©   (2006-10-07 10:48) [71]

Кстати [] тоже оператор.


 
sniknik ©   (2006-10-07 10:55) [72]

> А что разве in это оператор присваивания.
легко убирается, раз уж он вм так не угодил (но тогда уже так просто не добавиш)

Stl: array[0..2] of TFontStyles = ([fsItalic], [], []);

with TButton(Sender).Font do
  Style:= Stl[Byte(Style)];

привединие типа насколько заметил вами за операцию не считается.


 
sniknik ©   (2006-10-07 10:57) [73]

> (но тогда уже так просто не добавиш)
(но тогда уже fsBold так просто не добавиш)


 
Шутник   (2006-10-07 11:55) [74]

Шутки на тему :)

1.

Инициализация:
Button1.Caption := "Caption";
Button2.Caption := Button1.Caption;
Button2.Font.Style := [fsItalic];
Button1.Font.Style := [];
Button2.Visible := false;

Два присваивания:
Button2.Visible := Button1.Visible;
Button1.Visible := not Button1.Visible;

2.

Инициализация:
m_Style := [];
Button1.Font.Style := [fsItalic];

procedure TForm1.Button1Click(Sender: TObject);
begin
 PostMessage(Handle, WM_NEXTSTYLE, byte(Button1.Font.Style), 0);
 Button1.Font.Style := m_Style;
end;

procedure TForm1.WMNextStyle(var Msg: TMessage);
begin
 m_Style := TFontStyles(byte(Msg.WParam));
end;

3.

Инициализация:
m_bItalic := true;

Два присваивания и not:
Button2.Font.Handle := CreateFont(Button2.Font.Height,
                               0, 0, 0, 400, cardinal(m_bItalic),
                               0, 0, 0, 0, 0, 0, 0, PChar(Button2.Font.Name));
m_bItalic := not m_bItalic;

:)


 
oxffff ©   (2006-10-07 23:08) [75]

Percent   (07.10.06 09:49) [65]
Работает, но работает некорректно.  
Поскольку при style fsItalic выходит за границы Styles.
Работать может не всегда корректно.

sniknik ©   (07.10.06 10:55) [72]
Корректная реализация [65].

Вопрос остается открытым ждем

han_malign © и clickmaker ©

C двумя присваиваниями.


 
sniknik ©   (2006-10-08 00:29) [76]

sniknik ©   (07.10.06 10:55) [72]
> Корректная реализация [65].
не [65] а [17] как сказано в [67]. идея была высказана и ясна еще тогда.

> Вопрос остается открытым ждем
не надоело докапываться? тем более к "букве закона", когда говорилли и считали сначала по другому... и вдруг важны стали послевведенные тобой ограничения...

считай, только тоже по "букве", только присвоения. и отстань уже.

{$J+}
procedure TForm1.Button1Click(Sender: TObject);
type
 PStl = ^TStl;
 TStl = record
   val : TFontStyles;
   next: PStl;
 end;
const
 ArStl: array[0..1] of TStl = ((val:[fsItalic];next:@ArStl[1]), (val:[];next:@ArStl[0]));
 Stl: PStl = (@ArStl[1]);
begin
 Stl:= Stl.next;
 with TButton(Sender).Font do Style:= Stl.val;
end;
{$J-}


 
oxffff ©   (2006-10-08 14:07) [77]


> sniknik ©   (07.10.06 10:55) [72]
> > Корректная реализация [65].
> не [65] а [17] как сказано в [67]. идея была высказана и
> ясна еще тогда


Я написал что [65] реализовано неккоректно.

Циклическая очередь, как элегантный вариант.

Докапываться и в мыслях не было.



Страницы: 1 2 вся ветка

Текущий архив: 2006.10.22;
Скачать: CL | DM;

Наверх




Память: 0.66 MB
Время: 0.039 c
2-1159782195
Steep
2006-10-02 13:43
2006.10.22
Поиск


1-1157808398
так себе
2006-09-09 17:26
2006.10.22
format


15-1159634846
Скрываю ник
2006-09-30 20:47
2006.10.22
Изменить жизнь


6-1148975869
DVM
2006-05-30 11:57
2006.10.22
Программно добавить привязку Binding в TIdUDPServer?


3-1156023966
Lexander
2006-08-20 01:46
2006.10.22
Как правильно сделать копию БД?