Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.10.22;
Скачать: [xml.tar.bz2];

Вниз

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

 
АлексЧерных   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.64 MB
Время: 0.047 c
11-1136052803
Boguslaw
2005-12-31 21:13
2006.10.22
AncestorOfObject


3-1156857379
return
2006-08-29 17:16
2006.10.22
Как пользоваться тригеррами ....


15-1159800150
vidiv
2006-10-02 18:42
2006.10.22
Шашки


15-1159867013
Multy
2006-10-03 13:16
2006.10.22
Табличные функции


3-1156746777
pic509
2006-08-28 10:32
2006.10.22
Динамически изменяемый запрос из Хранимой процедуры





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский