Форум: "Прочее";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];
ВнизИнтересный алгоритм в обычном калькуляторе. Найти похожие ветки
← →
Fergo © (2011-02-25 20:45) [0]Товарищи помогите реализовать вот такой вот алгоритм: откройте обычный кальклятор Windows или любой электронный и далее жмем в нем "3" , "+" , "4", теперь когда нажимаем на "=" получаем ответ 7. Далее жмем еще раз сразу на "=" - прибавляется еще раз "4". Теперь жмем сразу на "+" и далее на "=". и видим что при дальнейших нажатиях на "=" прибавляется уже последний результат. Я перерыл всё что токо можно в интернете. все "калькуляторы" которые попадались такого алгоритма не имеют. Пытался реализовать сам, но получается очень много кода и слишком сложно все. может у вас чего нибудь получится. Есть вариант через дебаггер пропустить ВинКальк но эт на потом =)
← →
Smile (2011-02-25 20:51) [1]Я не модератор, но предлагаю подобные посты в ...
← →
oldman © (2011-02-25 20:58) [2]
> Пытался реализовать сам, но получается очень много кода
> и слишком сложно все.
все очень просто при наличии мозгов
← →
KilkennyCat © (2011-02-25 20:59) [3]Легко:
Создаем три глобальных хрени:
var
x, y, z : integer;
procedure TForm1.Create(..);
begin
x := 3;
y := 4;
z := x + y;
end;
proceduer TForm1.ButtonRavnoClick(..);
begin
inc(z, y);
label1.caption := "rezultat: " + inttostrdef(z, "fig znaet");
end;
← →
Pavia © (2011-02-25 21:01) [4]Всё просто значение считывается из текстового поля.
← →
Smile (2011-02-25 21:02) [5]Не пойму кому отдать предпочтение?
oldman © или
KilkennyCat ©
проблема однако
:)
← →
И. Павел © (2011-02-25 21:04) [6]Запоминайте предыдущую операцию и второй аргумент, и если кнопка "=" нажата, а первый аргумент еще не введен, то считайте, что требуется повтор операции.
А если первый аргумент введен, потом указана операция но не указан второй аргумент (но операция его требует) и сразу нажата "=", то просто считаете, что второй аргумент равен первому.
> Пытался реализовать сам, но получается очень много кода
> и слишком сложно все. может у вас чего нибудь получится.
попытка хорошая. Но курсач все равно придется делать самостоятельно :)
← →
Smile (2011-02-25 21:07) [7]> И. Павел © (25.02.11 21:04) [6]
Последняя фраза коронная
:)
← →
Inovet © (2011-02-25 21:08) [8]Конечно, в дебагер этот ВинКалк, и разобрать по винтикам.
В WinXP, кстати, у калькулятора 2 режима, в Win7 ещё бльше, и вот эти штуки работают по-разному в каждом.
← →
Игорь Шевченко © (2011-02-25 21:16) [9]
> inttostrdef
это сильно
← →
Fergo © (2011-02-25 21:21) [10]KilkennyCat я наверное в вопросе забыл указать что мне не буквально эта операция нужна=). ты вот открой делфи кинь 4 кнопки( "3","4","+" и "=" ) и Edit или Panel или еще чего не важно и попробуй сделать так чтоб то что я выше описал работало. лично у меня не получается.
← →
Fergo © (2011-02-25 21:25) [11]
> Запоминайте предыдущую операцию и второй аргумент, и если
> кнопка "=" нажата, а первый аргумент еще не введен, то считайте,
> что требуется повтор операции.
>
> А если первый аргумент введен, потом указана операция но
> не указан второй аргумент (но операция его требует) и сразу
> нажата "=", то просто считаете, что второй аргумент равен
> первому.
эт я и сам несколько раз прорабатывал в мозгах и наизусть уже знаю как там и что) а вот состряпать не могу. путаюсь потому что много что то переменных получается у меня.
← →
Inovet © (2011-02-25 21:27) [12]У такого калькулятора есть два регистра А и Б. Содержимое А отображается на дисплее, при вводе операции, содержимое копируется вместе с операцией в Б при нажатии на "=" А и Б обрабатывеются, согласно операции из Б.
← →
Fergo © (2011-02-25 21:28) [13]да кстати KilkennyCat ты учти еще что там еще есть и "/", "*", и "-" и они так же работают. но эт уже проще потом будет сделать.
← →
Inovet © (2011-02-25 21:29) [14]> [12] Inovet © (25.02.11 21:27)
> согласно операции из Б.
и результат помещается в А, в Б остаётся, что и было
← →
Leon-Z © (2011-02-25 21:31) [15]Удалено модератором
Примечание: п. 11 правил
← →
KilkennyCat © (2011-02-25 21:33) [16]
> Игорь Шевченко © (25.02.11 21:16) [9]
э... а что нет такого? :) я думал, есть...
> Fergo © (25.02.11 21:28) [13]
>
> да кстати KilkennyCat ты учти еще что там еще есть и "/",
> "*", и "-" и они так же работают. но эт уже проще потом
> будет сделать.
я обязательно учту, но я сейчас занят реализацией:
> открой делфи кинь 4 кнопки( "3","4","+" и "=" ) и Edit или
> Panel или еще чего не важно и попробуй сделать так чтоб
> то что я выше описал работало
← →
Fergo © (2011-02-25 21:34) [17]
> У такого калькулятора есть два регистра А и Б. Содержимое
> А отображается на дисплее, при вводе операции, содержимое
> копируется вместе с операцией в Б при нажатии на "=" А и
> Б обрабатывеются, согласно операции из Б.
> и результат помещается в А, в Б остаётся, что и было
Да, но хотелось бы увидеть это все в виде: var
...
...
proceduer TForm1.Button"3"Click(..);
begin
...
end;
proceduer TForm1.Button"+"Click(..);
begin
...
end;
и т.д.
← →
KilkennyCat © (2011-02-25 21:36) [18]
> Да, но хотелось бы увидеть это все в виде: var
> ...
> ...
var
A, Б : extended;
← →
Fergo © (2011-02-25 21:38) [19]KilkennyCat не придирайся, я ж ничего не сказал про proceduer и inttostrdef=)
← →
KilkennyCat © (2011-02-25 21:42) [20]я думаю, что полезно разбить действия на функции.
function plus(a : extended; б : extended; var z : extended) : boolean;
begin
try
z := a + б;
result := (z > a) and (z > б); //проверяем, произошло ли сложение и сообщаем
except
result := false;//сложение однозначно навернулось.
end;
end;
← →
Leon-Z © (2011-02-25 21:45) [21]Ну все таки Мелко-Мягкие всех обманули с калькулятором.
Я думаю что это просто ГЛЮК в программе, а не специально запрограммированная возможность данного приложения.
← →
KilkennyCat © (2011-02-25 21:49) [22]
> KilkennyCat не придирайся
хорошо.
даю половину кода, может даже больше.
var
a, b : extended;
flag : boolean;
oper : byte;
.....................
вычислитель
begin
case oper of
1 : a := a + b;
2 : a := a - b;
3 : a := a * b;
4 : a := a / b;
end;
end;
помня oper можно бесконечно вызывать вычислитель
← →
Fergo © (2011-02-25 21:49) [23]I>
> Ну все таки Мелко-Мягкие всех обманули с калькулятором.
> Я думаю что это просто ГЛЮК в программе, а не специально
> запрограммированная возможность данного приложения.
)))))) я тож так думал пока не попробовл на обычном электронном Citezen"е))
← →
KilkennyCat © (2011-02-25 21:54) [24]
> Inovet © (25.02.11 21:08) [8]
калькулятор в вин 7 в режиме для программиста не позволяет вводить вещественные числа. это меня прикольнуло.
← →
Fergo © (2011-02-25 21:58) [25]Удалено модератором
Примечание: Offtopic
← →
Германн © (2011-02-25 21:59) [26]
> KilkennyCat © (25.02.11 21:54) [24]
>
>
> > Inovet © (25.02.11 21:08) [8]
>
> калькулятор в вин 7 в режиме для программиста не позволяет
> вводить вещественные числа. это меня прикольнуло.
Знать уже поставили на учет.
← →
Leon-Z © (2011-02-25 22:00) [27]
> Fergo © (25.02.11 21:49) [23]
> я тож так думал пока не попробовл на обычном электронном
> Citezen"е))
И Citezen глючный!!!
А вообще я думаю надо прочитать про "польскую запись" - специальный
алгоритм для вычисления выражений.
Может там ответ ???
← →
KilkennyCat © (2011-02-25 22:10) [28]предлагаю плюнуть на алгоритм и заняться интерфейсом.
кидаем на форму один едит, и 16 кнопок.
кнопкам с цифрами присваиваем тэг соответсвенно цифре.
кнопка равно тэг 10
умнож - 13
делен - 14
сложение - 11
вычитание - 12
сброс - 20
десятичная точка - 18
и все вешаем на один обработчик клика.
procedure TForm.btnClick(Sender: TObject);
begin
case (sender as TComponent).tag of
1..9 : edit1.text := edit1.text + inttostr( (sender as TComponent).tag);
18 : if pos("." edit1.text) < 1 then edit1.text := edit1.text + "."
12..14 begin
oper := (sender as TComponent).tag - 10;
if a = 0 then a := strtofloat(edit1.text) else begin
b := strtofloat(edit1.text);
вычислитель(oper);
edit1.text := floattostr(a);
end;
end;
15 : if a = 0 then a := strtofloat(edit1.text) else begin
b := strtofloat(edit1.text);
вычислитель(oper);
edit1.text := floattostr(a);
end;
20 : begin
a := 0;
b := 0;
oper := 0;
end;
end;
end;
вроде бы все.
← →
Fergo © (2011-02-25 22:10) [29]нашел ток "обратную польскую запись":
program calc;
{$APPTYPE console}
type
Real = double;
const
prs = "+-*/(";
pri: array [1 .. 5] of byte = (1, 1, 2, 2, 0);
var
s1, s2: String;
q: array [0 .. 500] of Real;
w: array [0 .. 500] of Char;
n, len, len2: Cardinal;
t: Real;
ch: Char;
procedure Push(x: Real);
begin
Inc(len);
q[len] := x;
end;
function Pop: Real;
begin
Pop := q[len];
q[len] := 0;
Dec(len);
end;
procedure PushC(x: Char);
begin
Inc(len2);
w[len2] := x;
end;
function Popc: Char;
begin
Popc := w[len2];
w[len2] := #0;
Dec(len2);
end;
function Oper(s1, s2: Real; s3: Char): Real;
var
x, y, z: Real;
begin
x := s1;
y := s2;
case s3 of
"+": z := x + y;
"-": z := x - y;
"*": z := x * y;
"/": z := x / y;
end;
Oper := z;
end;
procedure PreChange(var s: String);
var
i: Cardinal;
begin
if s[1] = "-" then
s := "0" + s;
i := 1;
while i <= n do
if (s[i] = "(") and (s[i + 1] = "-") then
insert("0", s, i + 1)
else
Inc(i);
end;
function Change(s: String): String;
var
i: Cardinal;
rezs: String;
c: Boolean;
begin
c := false;
for i := 1 to n do
begin
if not(s[i] in ["+", "-", "*", "/", "(", ")"]) then
begin
if c then
rezs := rezs + " ";
rezs := rezs + s[i];
c := false;
end
else
begin
c := true;
if s[i] = "(" then
PushC(s[i])
else
if s[i] = ")" then
begin
while w[len2] <> "(" do
begin
rezs := rezs + " " + Popc;
end;
Popc;
end
else
if s[i] in ["+", "-", "*", "/"] then
begin
while pri[Pos(w[len2], prs)] >= pri[Pos(s[i], prs)] do
rezs := rezs + " " + Popc;
PushC(s[i]);
end;
end;
end;
while len2 <> 0 do
rezs := rezs + " " + Popc;
Change := rezs;
end;
function Count(s: String): Real;
var
ss: String;
x, s1, s2: Real;
chh, s3: Char;
p, i, j: Cardinal;
tmp: Integer;
begin
i := 0;
repeat
j := i + 1;
repeat
Inc(i)
until s[i] = " ";
ss := copy(s, j, i - j);
chh := ss[1];
if not(chh in ["+", "-", "*", "/"]) then
begin
Val(ss, p, tmp);
Push(p);
end
else
begin
s2 := Pop;
s1 := Pop;
s3 := chh;
Push(Oper(s1, s2, s3));
end;
until i >= n;
x := Pop;
Count := x;
end;
procedure WriteL(x: Real);
var
y, a, b: Cardinal;
q: Real;
begin
y := Trunc(x);
b := 0;
if Abs(x - y) < (1E-12) then
Writeln(y)
else
begin
if y > 0 then
a := round(ln(y) / ln(10)) + 1
else
a := 1;
q := x;
repeat
q := q * 10;
Inc(b);
until Abs(q - Trunc(q)) < (1E-12);
Writeln(x:a + b:b);
end;
end;
begin
repeat
Writeln("Enter expression");
Readln(s1);
n := Length(s1);
PreChange(s1);
n := Length(s1);
s2 := Change(s1);
if s2[1] = " " then
delete(s2, 1, 1);
s2 := s2 + " ";
n := Length(s2);
t := Count(s2);
WriteL(t);
Writeln("One more expression?(Y/N)");
Readln(ch);
until UpCase(ch) = "N";
end.
← →
KilkennyCat © (2011-02-25 22:12) [30]упс, я нулик забыл. ну и хрен с ним, и виндов только целые числа, а у моего калькулятора безнолевые.
← →
Inovet © (2011-02-25 22:12) [31]А что там видеть x, y doublе для аргументов, yo integr для операции
← →
KilkennyCat © (2011-02-25 22:13) [32]
> Fergo © (25.02.11 22:10) [29]
ты меня пугаешь.
← →
Inovet © (2011-02-25 22:17) [33]> [24] KilkennyCat © (25.02.11 21:54)
> калькулятор в вин 7 в режиме для программиста не позволяет
> вводить вещественные числа. это меня прикольнуло.
Ага, тоже.
← →
Palladin © (2011-02-25 22:17) [34]найти мало, нужно понять
← →
KilkennyCat © (2011-02-25 22:20) [35]
> KilkennyCat © (25.02.11 22:10) [28]
> 15 : if a = 0 then a := strtofloat(edit1.text) else
> begin
> b := strtofloat(edit1.text);
> вычислитель(oper);
> edit1.text := floattostr(a);
> end;
ошибся.
надо так:
15 : begin
if b := 0 then b := strtofloat(edit1.text);
вычислитель(oper);
edit1.text := floattostr(a);
end;
но лучше ввести еще один флаг.
← →
Fergo © (2011-02-25 22:21) [36]
> procedure TForm.btnClick(Sender: TObject);
> begin
> case (sender as TComponent).tag of
> 1..9 : edit1.text := edit1.text + inttostr( (sender
> as TComponent).tag);
> 18 : if pos("." edit1.text) < 1 then edit1.text :
> = edit1.text + "."
> 12..14 begin
> oper := (sender as TComponent).tag - 10;
>
> if a = 0 then a := strtofloat(edit1.text)
> else begin
> b := strtofloat(edit1.text);
> вычислитель(oper);
> edit1.text := floattostr(a);
> end;
> end;
> 15 : if a = 0 then a := strtofloat(edit1.text) else
> begin
> b := strtofloat(edit1.text);
> вычислитель(oper);
> edit1.text := floattostr(a);
> end;
> 20 : begin
> a := 0;
> b := 0;
> oper := 0;
> end;
> end;
> end;
а ты сам это проверял? просто мне кажется что тут будет ошибка в своевременности прсвоения переменной А и Б если А=0 или нет. а если мы А задали как "0"? но за вариант с тагами спс. что то о них не думал как то даж)
← →
KilkennyCat © (2011-02-25 22:22) [37]точнее, лучше сделать два обработчика кнопки равно и менять у нее тэг.
собственно, фигня задача.
← →
Inovet © (2011-02-25 22:23) [38]> [24] KilkennyCat © (25.02.11 21:54)
> в вин 7
Меня порадовало ведение всей истории с возможностью выбора из неё в удобоваримом виде, по умолчанию отключена, и даже сохранить в файл можно, наверно тоже полезная возможность.
← →
Fergo © (2011-02-25 22:23) [39]
> точнее, лучше сделать два обработчика кнопки равно и менять
> у нее тэг.
> собственно, фигня задача.
а вот это реальная мысль..)
← →
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]
>
> пока только я код привел более
> менее рабочий
да. он правда очень сильно напоминает мой, но это, наверное, совпадение?
← →
boriskb © (2011-02-26 14:56) [81]
> Fergo ©
Скажи пожалуйста, как ты сам оцениваешь:
1) Ты типичный представитель программистов такого возраста;
2) Ты Выше среднего уровня;
3) Ты чуть ниже среднего уровня.
← →
KilkennyCat © (2011-02-26 14:58) [82]
> boriskb © (26.02.11 14:56) [81]
там нет графы для него.
4) выше высшего уровня туповатый плагиатор.
← →
Fergo © (2011-02-26 15:14) [83]Удалено модератором
← →
Fergo © (2011-02-26 15:16) [84]Удалено модератором
← →
Inovet © (2011-02-26 15:18) [85]> [82] KilkennyCat © (26.02.11 14:58)
> там нет графы для него.
Я думал автору интересно самому сделать, а всё как всегда: "Дайте! Не даёте? Да вы ничё не можете, только теории задвигать можете, я сам так можу, у-а-а, у-а-а."
← →
boriskb © (2011-02-26 15:32) [86]
> KilkennyCat © (26.02.11 14:58) [82]
> Inovet © (26.02.11 15:18) [85]
Меня собственно насторожила фраза:
> ваши эти теории я и сам знаю. ты сделай а потом говори
.
.
.
> теории я и сам могу выводить кучами а когда делать начинаешь
> ( для тех кто в танке - ставить компоненты на форму и код
> писать) вот там то и ваши теории н катят на 100%.
То есть абсолютно с ног на голову всё ставит и гордится.
Вот и хотелось узнать - это типично?
← →
KilkennyCat © (2011-02-26 15:49) [87]
> boriskb © (26.02.11 15:32) [86]
наверняка типично. Возможно, у социологов даже есть категория.
← →
Fergo © (2011-02-26 16:12) [88]фиг знает народ вот если меня когда просят я не парю мозги теориями я беру и сам делаю а потом обьясняю что и как с РЕАЛЬНО РАБОЧИМ ПРИМЕРОМ.
← →
Fergo © (2011-02-26 16:14) [89]ладно бы если бы я ниче не сделав просил бы ответ тупо. я ваши все варианты перепробовал да и до этого еще много раз пытался по своему сделать... ну не получается у меня тупо в логике тут...
← →
KilkennyCat © (2011-02-26 16:25) [90]
> Fergo © (26.02.11 16:12) [88]
это личное дело каждого, как тратить время и каким принципам следовать.
> Fergo © (26.02.11 16:14) [89]
Inovet привел прекрасную табличку, не увидеть и не переложить алгоритм по которой...
← →
Sha © (2011-02-26 20:55) [91]Как-то так получается
type
TOper= (opEq, opAdd, opSub, opMul, opDiv);
type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Button9: TButton;
Button10: TButton;
Button11: TButton;
Button12: TButton;
Button13: TButton;
Button14: TButton;
Button15: TButton;
Edit1: TEdit;
Button16: TButton;
Button17: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Button9Click(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
procedure Button13Click(Sender: TObject);
procedure Button14Click(Sender: TObject);
procedure Button15Click(Sender: TObject);
procedure Button16Click(Sender: TObject);
procedure Button17Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
Value1: double;
Value2: double;
Oper: TOper;
HasData: boolean;
Fractional: boolean;
EqPressed: boolean;
procedure Reset;
procedure Cipher(ch: char);
procedure Calculate(NextOper: TOper);
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Reset;
begin;
HasData:=false;
Fractional:=false;
EqPressed:=false;
Value1:=0;
Value2:=0;
Oper:=opAdd;
Edit1.Text:="0"+DecimalSeparator;
end;
procedure TForm1.Cipher(ch: char);
var
s : string;
begin;
s:=Edit1.Text;
if (not HasData) or (s="0"+DecimalSeparator) then begin;
s:=ch+DecimalSeparator;
Fractional:=false;
end
else if Fractional then s:=s+ch
else Insert(ch,s,pos(DecimalSeparator,s));
Edit1.Text:=s;
HasData:=true;
end;
procedure TForm1.Calculate(NextOper: TOper);
label
SkipOperation;
begin;
if EqPressed
then if NextOper<>opEq
then goto SkipOperation
else // Value2 OK
else Value2:=StrToFloat(Edit1.Text);
case Oper of
opAdd: Value1:=Value1 + Value2;
opSub: Value1:=Value1 - Value2;
opMul: Value1:=Value1 * Value2;
opDiv: Value1:=Value1 / Value2;
else Value1:=0;
end;
SkipOperation:
EqPressed:=true;
if NextOper<>opEq then begin;
EqPressed:=false;
Value2:=Value1;
Oper:=NextOper;
end;
Edit1.Text:=FloatToStr(Value1);
HasData:=false;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin;
Reset;
end;
procedure TForm1.Button10Click(Sender: TObject);
begin;
Cipher("0");
end;
procedure TForm1.Button1Click(Sender: TObject);
begin;
Cipher("1");
end;
procedure TForm1.Button2Click(Sender: TObject);
begin;
Cipher("2");
end;
procedure TForm1.Button3Click(Sender: TObject);
begin;
Cipher("3");
end;
procedure TForm1.Button4Click(Sender: TObject);
begin;
Cipher("4");
end;
procedure TForm1.Button5Click(Sender: TObject);
begin;
Cipher("5");
end;
procedure TForm1.Button6Click(Sender: TObject);
begin;
Cipher("6");
end;
procedure TForm1.Button7Click(Sender: TObject);
begin;
Cipher("7");
end;
procedure TForm1.Button8Click(Sender: TObject);
begin;
Cipher("8");
end;
procedure TForm1.Button9Click(Sender: TObject);
begin;
Cipher("9");
end;
procedure TForm1.Button11Click(Sender: TObject);
begin;
Calculate(opDiv);
end;
procedure TForm1.Button12Click(Sender: TObject);
begin;
Calculate(opMul);
end;
procedure TForm1.Button13Click(Sender: TObject);
begin;
Calculate(opSub);
end;
procedure TForm1.Button14Click(Sender: TObject);
begin;
Calculate(opAdd);
end;
procedure TForm1.Button15Click(Sender: TObject);
begin;
Reset;
end;
procedure TForm1.Button16Click(Sender: TObject);
begin;
Calculate(opEq);
end;
procedure TForm1.Button17Click(Sender: TObject);
begin;
Fractional:=true;
end;
← →
Fergo © (2011-02-26 21:53) [92]я тож решил наконец. проверил по всякому всё работает. ща опять начнете говорить что что то тут не рационально паршивцы)))
var
Form1: TForm1;
x,y: Extended;
oper: Byte;
Check1, Check2, Check3: boolean;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
case (sender as TComponent).tag of
0..9 : Begin
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 (Check2=false) and (Check3=false)then x:=StrToFloat(Edit1.Text);
if (Check2=true) and (Check3=false)then y:=StrToFloat(Edit1.Text);
if (Check2=true) and (Check3=true)then y:=StrToFloat(Edit1.Text);
End;
10 : if pos(".",Edit1.text) < 1 then Edit1.text := Edit1.text + ".";
11..14 : Begin
oper:=(sender as TComponent).tag;
Check1:=true;
Check2:=true;
if Check3=true then y:=StrToFloat(Edit1.Text);
End;
15 : Begin
if oper<>0 then
Begin
case oper of
11 : x:=x*y;
12 : x:=x/y;
13 : x:=x+y;
14 : x:=x-y;
End;
Edit1.Text:=FloatToStr(x);
Check1:=true;
Check2:=false;
Check3:=true;
End;
End;
end;
end;
← →
Fergo © (2011-02-26 21:55) [93]
> Sha ©
спс за кодец наконец то) ща проверю мож тож нормик будет...
← →
Игорь Шевченко © (2011-02-26 22:10) [94]http://www.delphimaster.ru/forums.shtml#rule
изучай
Страницы: 1 2 3 вся ветка
Форум: "Прочее";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];
Память: 0.75 MB
Время: 0.005 c