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

Вниз

Интересный алгоритм в обычном калькуляторе.   Найти похожие ветки 

 
KilkennyCat ©   (2011-02-25 22:24) [40]


>  тут будет ошибка в своевременности прсвоения переменной
> А и Б если А=0 или нет.

да, возможно.
это решается малюсенькой доработкой, как я уже сказал, двойной обработкой "равно" (чтобы не лепить громадье условий и не вводить лишнии переменные)
а проверять это мне лень было, это ж надо делфи запускать... столько баттнов кидать...


 
Inovet ©   (2011-02-25 22:25) [41]

> [27] Leon-Z ©   (25.02.11 22:00)
> "польскую запись" - специальный
> алгоритм для вычисления выражений

Оно не вредно, но для двух операндов лишнее, имхо.


 
KilkennyCat ©   (2011-02-25 22:25) [42]


> Inovet ©   (25.02.11 22:23) [38]

я все никак не соберусь найти виденный когда калькулятор с историей и с вмешательством в любой момент истории. он еще красиво так был сделан, типа как крутые с принтером.


 
Inovet ©   (2011-02-25 22:29) [43]

> [42] KilkennyCat ©   (25.02.11 22:25)
> типа как крутые с принтером.

Что-то помню такое. Лента лезла из него. Старый вроде бы он.


 
KilkennyCat ©   (2011-02-25 22:31) [44]

ага.


 
Fergo ©   (2011-02-25 22:32) [45]

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


 
Inovet ©   (2011-02-25 22:49) [46]

> [42] KilkennyCat ©   (25.02.11 22:25)
> с вмешательством в любой момент истории

Посмотрел в Win7 - тоже можно в истории править, только пересчитывается правленая строка, а она может быть 123+456/789*159. Вот это выражение прямо в калькулятор скопировал.


 
Inovet ©   (2011-02-25 23:02) [47]

Делал как-то символьный вычислитель одному студенту. Залил экзешник, проверил на всякий случай http://www.virustotal.com

Название: CompareExpr.rar
Размер: 242.09 кб
Доступен до: 2011-03-27 23:58:13
Ссылка для скачивания файла: http://webfiles.ru/22111831


 
xmen   (2011-02-25 23:29) [48]


> Fergo ©   (25.02.11 22:10) [29]
>
> нашел ток "обратную польскую запись":

это совсем для других целей ...


 
Fergo ©   (2011-02-26 01:30) [49]

Так народ, все. догнал сам. спс всем и отдельное спс KilkennyCat за то что напомнил про таги).
Если кому надо вот код...

var
 Form1: TForm1;
 x,y,z: Extended;
 oper: Integer;
 Check1, Check2: boolean;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 case (sender as TComponent).tag of
   0..9    : Begin
               if Check2=true then
                 Begin
                   x:=StrToFloat(Edit1.Text);
                   Check2:=false;
                 End;
               if Check1=true then Edit1.Text:="0";
               if Edit1.text ="0" then Edit1.Text:=IntToStr((sender as TComponent).tag) else Edit1.text:= Edit1.text + IntToStr((sender as TComponent).tag);
               Check1:=false;
               if oper<>0 then y:=StrToFloat(Edit1.Text) else x:=StrToFloat(Edit1.Text);
             End;
     10    : if  pos(".",Edit1.text) < 1 then Edit1.text := Edit1.text + ".";
 11..14    : Begin
               oper:=(sender as TComponent).tag - 10;
               Check1:=true;
               if Check2=true then y:=StrToFloat(Edit1.Text);
             End;
     15    : Begin
               if oper<>0 then
               if Check2=false then
                 Begin
                   case oper of
                     1 : Edit1.Text:=FloatToStr(x*y);
                     2 : Edit1.Text:=FloatToStr(x/y);
                     3 : Edit1.Text:=FloatToStr(x+y);
                     4 : Edit1.Text:=FloatToStr(x-y);
                   End;
                   Check2:=true;
                 End
                 Else
                 Begin
                   case oper of
                     1 : Edit1.Text:=FloatToStr(StrToFloat(Edit1.Text)*y);
                     2 : Edit1.Text:=FloatToStr(StrToFloat(Edit1.Text)/y);
                     3 : Edit1.Text:=FloatToStr(StrToFloat(Edit1.Text)+y);
                     4 : Edit1.Text:=FloatToStr(StrToFloat(Edit1.Text)-y);
                   End;
                 End;
             End;
 end;
end;


 
KilkennyCat ©   (2011-02-26 01:34) [50]

нахрена из опера десятку вычитаешь? я ее вставлял лишь для совместимости с предыдущим постом.
и проверку его на ноль странно делать. если и будет равен нулю, то только при первом запуске.


 
KilkennyCat ©   (2011-02-26 01:35) [51]

и целых два флага... ужасть. они избыточны.
давай доделывай.
мы против сырых калькуляторов! :)


 
KilkennyCat ©   (2011-02-26 01:36) [52]

и вот это:
FloatToStr(StrToFloat( - за это расстрел на месте.


 
Fergo ©   (2011-02-26 01:40) [53]

сорь доделаю завтра эт мелочи ща лабал как мог на скорость пока жена царапала) кстати а про флаги я хз че там придумать.. если есть варианты подкинь идей... я спать) а то загрызет)


 
KilkennyCat ©   (2011-02-26 01:44) [54]


>  про флаги

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


 
Rouse_ ©   (2011-02-26 01:48) [55]

Фига у людей проблемы.
Блин, я даж немного в задумчивости...
Казалось бы сложить два числа. Мдя... Пошел таки принципиально искать форумы для начинающих врачей. Хз, мошт их реально так-же учат?


 
Inovet ©   (2011-02-26 01:53) [56]

Я что-то не доглядел. Зачем флаги? Состояние регистров для такой логики, как в [0] сдвигаем привычислении из аккумулятора во второй регистр

шаг действие  x  y op
1.    с       0  0 n
2.    3       3  0 n
3.    +       3  3 +
4.    4       4  3 +
5.    =       7  4 +
6.    =      11  4 +
7.    +      11 11 +
8.    =      22 11 +
9.    с       0  0 n


 
Inovet ©   (2011-02-26 01:54) [57]

> [56] Inovet ©   (26.02.11 01:53)

шаг действие  x  y op
1.    с       0  0 n
2.    3       3  0 n
3.    +       3  3 +
4.    4       4  3 +
5.    =       7  4 +
6.    =      11  4 +
7.    +      11 11 +
8.    =      22 11 +
9.    с       0  0 n


 
KilkennyCat ©   (2011-02-26 02:07) [58]


> Inovet ©  

да, верно. наглядная табличка.


 
KilkennyCat ©   (2011-02-26 02:09) [59]


> Rouse_ ©   (26.02.11 01:48) [55]

я бы не утверждал, что именно у людей проблемы. фиг его знает, кто там за компом. может, инопланетяне.


 
Inovet ©   (2011-02-26 02:33) [60]

Нет. Последнее действие надо отмечать, если оно было "=", то не сдвигать при "=". Это режим с константой называется т.е. признак режима нужен.
А вот по другой логике после "=" сбрасывать op. Это без константы.


 
Fergo ©   (2011-02-26 12:00) [61]

Удалено модератором


 
Fergo ©   (2011-02-26 12:07) [62]

Удалено модератором


 
Inovet ©   (2011-02-26 12:20) [63]

> [61] Fergo ©   (26.02.11 12:00)
> (ща вы скажете что я совсем тютю..) а вы дальше по табле
> посмотрите и поймете что без флагов тут никуда

Не скажу. Ты посмотри следующие посты, про режим с константой, в некоторых калькуляторах он даже специально включается и на индикаторе отображается, так что надо поднять флаг если действие "=", если текущее "=" и флаг
поднят не сдвигать.

if (действие <> "=") or not f then сдвигаем;
f := действие = "=";

Ешё из этого режима попробуй

1+2=
4=
10=


 
Inovet ©   (2011-02-26 12:23) [64]

Удалено модератором


 
Tag   (2011-02-26 12:31) [65]

> спс всем и отдельное спс KilkennyCat за то что напомнил про таги

Использование Tag сродни использованию Goto.
Биойогурт, создающий благоприятную микрофлору в кишечнике, способствующую более <strikeout>легкой дефекации</strikeout> эффективному говнокодированию.


 
Fergo ©   (2011-02-26 12:31) [66]

я мож чго не понимаю в том что ты мне пытаешься обьяснить.. но мне кажется что Check2 в моем коде как раз это и делает...


 
Fergo ©   (2011-02-26 12:36) [67]

я как то помню пытался алгоритм составить где надо было вводить цифры в массив а потом они длжны были выборочно рандомно выбраться и ниразу не повториться. как песни в винампе типа проигрываются и чтоб рандомно и не повторялись.. все оказалось оч просто но всеж часа 3 я потупить умудрился над этой задачкой)


 
Tag   (2011-02-26 12:38) [68]

Удалено модератором


 
Fergo ©   (2011-02-26 12:40) [69]

Inovet ты приведи код рабочего калька с таким алгоритмом..) я пока своим доволен но хотелось бы по рационльнее.. а то 3 флага и правда много.. но хз мож в мелкософтовском кальке тож как нибудь так... в электронных то там вообще одни триггеры и логические AND XOR OR NOT  итд.. но  и в них этот алгоритм есть...


 
Fergo ©   (2011-02-26 12:41) [70]


> Tag

код в студию!)


 
Tag   (2011-02-26 12:46) [71]

> Fergo ©   (26.02.11 12:41) [70] код в студию!)

См. Fergo ©   (26.02.11 01:30) [49]


 
Inovet ©   (2011-02-26 12:52) [72]

> [69] Fergo ©   (26.02.11 12:40)
> Inovet ты приведи код рабочего калька с таким алгоритмом..)

Так не интересно тебе же самому.


 
Fergo ©   (2011-02-26 12:57) [73]


> Inovet ©   (26.02.11 12:52) [72]


> Так не интересно тебе же самому.

Интересно или нет эт я сам решу... Просто это не первый форум где я этот вопрос задавал. и пока никто толком не сделал этот алгоритм. только теории... а в реале 0


 
Fergo ©   (2011-02-26 13:01) [74]

фиг знает мне вот наоборот нравится решать подобные задачки если этого еще кто нибудь просит, но над этой я оч давно бьюсь(


 
Tag   (2011-02-26 13:12) [75]

> Fergo ©   (26.02.11 12:57) [73] и пока никто толком не сделал этот алгоритм

Анекдот про неуловимого Джо знаешь?

> Fergo ©   (26.02.11 13:01) [74] фиг знает мне вот наоборот нравится решать подобные задачки если этого еще кто нибудь просит, но над этой я оч давно бьюсь(

Судя по обилию постов, ты просто флудишь на форуме.

P.S. Никто не безгрешен...


 
Inovet ©   (2011-02-26 13:34) [76]

> [75] Tag   (26.02.11 13:12)
> Судя по обилию постов, ты просто флудишь на форуме.

Код клянчит готовый и на слабо разводит.


 
Inovet ©   (2011-02-26 13:36) [77]

> [73] Fergo ©   (26.02.11 12:57)
> пока никто толком не сделал этот алгоритм

Тебе весь алгоритм разъяснили, да какой там алгоритм и теории - пшик один.

Спрашивай, что не ясно в двух строчках кода.


 
KilkennyCat ©   (2011-02-26 14:22) [78]


> Tag   (26.02.11 12:31) [65]
>
> > спс всем и отдельное спс KilkennyCat за то что напомнил
> про таги
>
> Использование Tag сродни использованию Goto.


А пояснить? (не про биойогурт)


 
Fergo ©   (2011-02-26 14:25) [79]

Удалено модератором


 
KilkennyCat ©   (2011-02-26 14:56) [80]


> Fergo ©   (26.02.11 14:25) [79]
>
>  пока только я код привел более
> менее рабочий

да. он правда очень сильно напоминает мой, но это, наверное, совпадение?



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

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

Наверх




Память: 0.64 MB
Время: 0.012 c
15-1298669393
Юрий
2011-02-26 00:29
2011.06.19
С днем рождения ! 26 февраля 2011 суббота


15-1298928603
Юрий
2011-03-01 00:30
2011.06.19
С днем рождения ! 1 марта 2011 вторник


15-1299060395
Scott Storch
2011-03-02 13:06
2011.06.19
Цифровая подпись


2-1299760300
Cobalt
2011-03-10 15:31
2011.06.19
Передача массива в процедуру


15-1298707427
RWolf
2011-02-26 11:03
2011.06.19
Подскажите подходящий grid