1

Тема: Допоможіть терміново

Терміново!!!
Допоможіть, ніяк не можу вирішити завдання!!!

Завдання: На будь-якому калькуляторі виконати: 2 додати 3

Ось, що я намагався зробити

Тиснемо "2";
Тиснемо "+"
Тиснемо "3"

та на дисплеї калькулятора залишається горіти 3, викладач каже, що це не правильний результат =(

Шукав у гуглі та яндексі, по форуму теж шукав, але нічого не знайшов!!!
Сьогодні останній день сдачі!

Прихований текст

п.с. Програміст! Налітай! Допомагай! Вай-Вай!

Подякували: koala, bunyk, leofun014

Re: Допоможіть терміново

Chemist-i написав:

Терміново!!!
Допоможіть, ніяк не можу вирішити завдання!!!

Завдання: На будь-якому калькуляторі виконати: 2 додати 3

Ось, що я намагався зробити

Тиснемо "2";
Тиснемо "+"
Тиснемо "3"

та на дисплеї калькулятора залишається горіти 3, викладач каже, що це не правильний результат =(

Шукав у гуглі та яндексі, по форуму теж шукав, але нічого не знайшов!!!
Сьогодні останній день сдачі!

Прихований текст

п.с. Програміст! Налітай! Допомагай! Вай-Вай!

:D
http://s018.сайт-злодій/i504/1305/4e/128b3beefcef.jpg

Подякували: koala, Cyan, miroslav.chandler, Chemist-i4

3

Re: Допоможіть терміново

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

Подякували: Chemist-i1

4 Востаннє редагувалося Replace (30.09.2013 16:32:33)

Re: Допоможіть терміново

Прихований текст

тут щось було раніше...

5

Re: Допоможіть терміново

Прихований текст

та він нас тупо тролить!
тема ж у гуморі

Подякували: Replace1

6

Re: Допоможіть терміново

Replace, Cyan, а ну хутенько приберіть спойлери...

7 Востаннє редагувалося HetmanNet (30.09.2013 20:15:10)

Re: Допоможіть терміново

Chemist-i написав:

Терміново!!!
Допоможіть, ніяк не можу вирішити завдання!!!

Завдання: На будь-якому калькуляторі виконати: 2 додати 3

Ось, що я намагався зробити

Тиснемо "2";
Тиснемо "+"
Тиснемо "3"

та на дисплеї калькулятора залишається горіти 3, викладач каже, що це не правильний результат =(

Шукав у гуглі та яндексі, по форуму теж шукав, але нічого не знайшов!!!
Сьогодні останній день сдачі!

Прихований текст

п.с. Програміст! Налітай! Допомагай! Вай-Вай!

Не пробував у кінці натиснути "=", кажуть допоможе.

Тиснемо "2"
Тиснемо "+"
Тиснемо "3"
Тиснемо "="

P.S. Що за програмісти пішли, вже калькулятором не вміють користуватися. Ганьба, а не програмісти.

Подякували: Chemist-i1

8 Востаннє редагувалося Chemist-i (30.09.2013 23:39:43)

Re: Допоможіть терміново

koala написав:

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

Калькулятор: Калькутрон р9000, на базі процесора Intel Xeon e5645

Документація (OCR)

[code=basic]
Enumeration
#Window_0
EndEnumeration

Enumeration
#String 
#Backs     
#CE
#C
#But_7
#But_8
#But_9
#But_4
#But_5
#But_6
#But_1
#But_2
#But_3
#But_0
#znak
#drob
#delen
#umnoj
#minus
#plus
#sqrt
#pros
#fff
#rezul
#MC
#MR
#MS
#M_plus
EndEnumeration

Global rez3.d


Procedure.s DelNull(String.s)   ;delete zero
Protected Result.s
Result=String

Pos=FindString(String, ".", 1)
If Pos>0
  Len=Len(String)
  For i=Len To Pos Step -1
    Char.s=Mid(String, i, 1)
    If Char="."
      i-1
      Break
    ElseIf Char<>"0"
      Break
    EndIf
  Next i
 
  If i<Len
    Result=Left(String, i)
  EndIf
 
EndIf

ProcedureReturn Result
EndProcedure


;{------------------window--------------------------------
OpenWindow (#Window_0,  0,  0,  265,  240,  "CalcX", #PB_Window_MinimizeGadget |#PB_Window_MaximizeGadget|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
SetWindowColor(#Window_0,RGB(255, 255, 255))
StringGadget(#String, 10, 15, 245, 25, "")

ButtonGadget(#Backs, 55, 50, 70, 30, "Backspace")
ButtonGadget(#CE, 130, 50, 60, 30, "CE")
ButtonGadget(#C,  195, 50, 60, 30, "C")

ButtonGadget(#But_7, 55,  90,  35, 30, "7")
ButtonGadget(#But_8, 95,  90,  35, 30, "8")
ButtonGadget(#But_9, 135, 90,  35, 30, "9")

ButtonGadget(#But_4, 55,  125, 35, 30, "4")
ButtonGadget(#But_5, 95,  125, 35, 30, "5")
ButtonGadget(#But_6, 135, 125, 35, 30, "6")

ButtonGadget(#But_1, 55,  160, 35, 30, "1")
ButtonGadget(#But_2, 95,  160, 35, 30, "2")
ButtonGadget(#But_3, 135, 160, 35, 30, "3")

ButtonGadget(#But_0, 55,  195, 35, 30, "0")
ButtonGadget(#znak,  95,  195, 35, 30, "+/-")
ButtonGadget(#drob,  135, 195, 35, 30, ".")

ButtonGadget(#delen, 180, 90,  35, 30, "/")
ButtonGadget(#umnoj, 180, 125, 35, 30, "*")
ButtonGadget(#minus, 180, 160, 35, 30, "-")
ButtonGadget(#plus,  180, 195, 35, 30, "+")

ButtonGadget(#sqrt, 220, 90,  35, 30, "sqrt")
ButtonGadget(#pros, 220, 125, 35, 30, "%")
ButtonGadget(#fff,  220, 160, 35, 30, "1/x")
ButtonGadget(#rezul,220, 195, 35, 30, "=")

ButtonGadget(#MC,    10, 90,  35, 30, "MC")
ButtonGadget(#MR,    10, 125, 35, 30, "MR")
ButtonGadget(#MS,    10, 160, 35, 30, "MS")
ButtonGadget(#M_plus,10, 195, 35, 30, "M+")


DisableGadget(#Backs, 1): DisableGadget(#sqrt, 1): DisableGadget(#pros, 1): DisableGadget(#fff, 1)
DisableGadget(#MC, 1): DisableGadget(#MR, 1): DisableGadget(#MS, 1): DisableGadget(#M_plus, 1)




;}------------------------------------------------------
rez1.d =  0
znak.s = "0"
umn1.d =  1
um.d   =  1
oper.s ="0"
fff.s = "0"
;{----------------- main loop -------------------------
Repeat
Event =  WaitWindowEvent()
Window = EventWindow()
Gadget = EventGadget()
   Select Event
        Case #PB_Event_Gadget
          Select EventGadget()
             
             Case #But_0,#But_1,#But_2,#But_3,#But_4,#But_5,#But_6,#But_7,#But_8,#But_9,#drob
             
              If  znak = "0"                       
               rez0.s = GetGadgetText(#String) 
               SetGadgetText(#String, rez0+GetGadgetText(Gadget))
              ElseIf znak = "+"                                 
               SetGadgetText(#String, "")
               rez0.s = GetGadgetText(#String)
               SetGadgetText(#String, rez0+GetGadgetText(Gadget))
               znak = "0"
              ElseIf znak = "-"               
               SetGadgetText(#String, "")
               rez0.s = GetGadgetText(#String)
               SetGadgetText(#String, "-"+rez0+GetGadgetText(Gadget))
               znak = "0"               
              ElseIf znak = "*" And oper = "0"   
               SetGadgetText(#String, "")
               rez0.s = GetGadgetText(#String)
               SetGadgetText(#String, rez0+GetGadgetText(Gadget))
               znak = "0"
               oper = "*"
              ElseIf znak = "/" And oper = "0"
             
               SetGadgetText(#String, "")
               rez0.s = GetGadgetText(#String)
               SetGadgetText(#String, rez0+GetGadgetText(Gadget))
               znak = "0"
               oper = "/"               
              EndIf
             
                         
             Case #C , #CE
             SetGadgetText(#String, "")
             rez1  = 0
             znak  ="0"
             POSL  = 0
             rez3  = 0
             rav_r = 0
             umn1  = 1
             um.d  = 1
             oper  ="0"
             fff = "0"   
               
             Case #plus, #minus
             
               If  znak = "0" And oper = "0"     
                SetGadgetText(#String, DelNull(StrD(rez1 + ValD(GetGadgetText(#String)))))
                rez1 =  ValD(GetGadgetText(#String))
                znak = GetGadgetText(Gadget)
                oper = "0"
                um =4
                fff = "1"
               ElseIf znak = "="               
                SetGadgetText(#String, "")
                SetGadgetText(#String, DelNull(StrD(rez3)))
                rez1 =  ValD(GetGadgetText(#String))
                znak = GetGadgetText(Gadget)
                oper = "0"
                rav_r=0
                fff = "1"
               ElseIf znak = "0" And oper = "*" 
                SetGadgetText(#String, DelNull(StrD(rez1 * ValD(GetGadgetText(#String)))))
                rez1 =  ValD(GetGadgetText(#String))
                znak = GetGadgetText(Gadget)
                oper = "0"
                fff = "1"
               ElseIf znak = "0" And oper = "/"
                SetGadgetText(#String, DelNull(StrD(rez1 / ValD(GetGadgetText(#String)))))
                rez1 =  ValD(GetGadgetText(#String))
                znak = GetGadgetText(Gadget)
                oper = "0"
                fff = "1"                 
               EndIf
               
             Case #umnoj   
               If  um =1   
                SetGadgetText(#String, DelNull(StrD(1 * ValD(GetGadgetText(#String)))))
                rez1 =  ValD(GetGadgetText(#String))
                znak = "*"
                oper = "0"
                 um = 0
               ElseIf um = 0 Or znak = "*"   
                SetGadgetText(#String, DelNull(StrD(rez1 * ValD(GetGadgetText(#String)))))
                rez1 =  ValD(GetGadgetText(#String))
                znak = "*"
                oper = "0"               
               ElseIf  znak = "0" And oper = "0"   
                SetGadgetText(#String, DelNull(StrD(rez1 + ValD(GetGadgetText(#String)))))
                rez1 =  ValD(GetGadgetText(#String))
                znak = "*"
                oper = "0"
                um = 0
               ElseIf znak = "0" And oper = "/" 
                SetGadgetText(#String, DelNull(StrD(rez1 / ValD(GetGadgetText(#String)))))
                rez1 =  ValD(GetGadgetText(#String))
                znak = "*"
                oper = "0"
                um = 0
               ElseIf znak = "=" 
                SetGadgetText(#String, "")
                SetGadgetText(#String, DelNull(StrD(rez3)))
                rez1 =  ValD(GetGadgetText(#String))
                znak = "*"
                oper = "0"
                um = 0
               EndIf
               
             Case #delen
             
               If znak = "0" And oper = "0" And fff = "0"
                rez1 =  ValD(GetGadgetText(#String))
                SetGadgetText(#String, DelNull(StrD(rez1 )))
                znak = "/"
                oper = "0"
                um = 4
               ElseIf  znak = "0" And oper = "/"
                SetGadgetText(#String, DelNull(StrD(rez1 / ValD(GetGadgetText(#String)))))
                rez1 =  ValD(GetGadgetText(#String))
                znak = "/"
                oper = "0"
                um = 4
               ElseIf  znak = "="
                SetGadgetText(#String, "")
                SetGadgetText(#String, DelNull(StrD(rez3)))
                rez1 =  ValD(GetGadgetText(#String))
                znak = "/"
                oper = "0"
               ElseIf znak = "0" And oper = "0" And fff = "1"
                SetGadgetText(#String, DelNull(StrD(rez1 + ValD(GetGadgetText(#String)))))
                rez1 =  ValD(GetGadgetText(#String))
                znak = "/"
                oper = "0" 
               ElseIf znak = "0" And oper = "*"   
                SetGadgetText(#String, DelNull(StrD(rez1 * ValD(GetGadgetText(#String)))))
                rez1 =  ValD(GetGadgetText(#String))
                znak = "/"
                oper = "0"
               EndIf
               
             Case #rezul
             
                If znak = "0" And oper = "0"
                 rez3 = rez1+ValD(GetGadgetText(#String))
                 POSL=ValD(GetGadgetText(#String))
                 rav_r=1
                 SetGadgetText(#String, DelNull(StrD(rez3)))
                 znak = "="
                 oper = "0"
                 um = 4
                ElseIf  rav_r=1 And oper = "0"
                 rez3=rez3+POSL
                 SetGadgetText(#String, DelNull(StrD(rez3)))
                 um = 4
                ElseIf znak = "0" And oper = "*"
                 rez3 = rez1*ValD(GetGadgetText(#String))
                 POSL=ValD(GetGadgetText(#String))
                 SetGadgetText(#String, DelNull(StrD(rez3)))
                 znak = "="
                 um = 4
                 rav_r=2
                ElseIf  rav_r=2 And oper = "*"
                 rez3=rez3*POSL
                 SetGadgetText(#String, DelNull(StrD(rez3)))
                 um = 4
                 
                ElseIf znak = "0" And oper = "/"
                 rez3 = rez1/ValD(GetGadgetText(#String))
                 POSL=ValD(GetGadgetText(#String))
                 SetGadgetText(#String, DelNull(StrD(rez3)))               
                 znak = "="
                 oper = "/"
                 rav_r=3
                ElseIf  rav_r=3 And oper = "/"
                 rez3=rez3/POSL
                 SetGadgetText(#String, DelNull(StrD(rez3)))
                 um = 4
             EndIf 
               
          EndSelect
   EndSelect
If Event = #PB_Event_CloseWindow
Break   
EndIf
ForEver
[/code]

Дякую всім, завдяки самовідважним зусиллям HetmanNet задача була вирішена

AutoIt3
;Run("calcX")

WinActivate("CalcX")
WinWait("CalcX")

Local $winPos = WinGetPos("CalcX")

Local $x = 116 + $winPos[0]
Local $y = 203 + $winPos[1]
MouseMove($x,$y)
sleep(200)
MouseClick("Left")

$x = 204 + $winPos[0]
$y = 240 + $winPos[1]
MouseMove($x,$y)
sleep(200)
MouseClick("Left")
sleep(200)
$x = 157 + $winPos[0]
$y = 203 + $winPos[1]
MouseMove($x,$y)
sleep(200)
MouseClick("Left")
sleep(200)
$x = 240 + $winPos[0]
$y = 240 + $winPos[1]
MouseMove($x,$y)
sleep(200)
MouseClick("Left")

9

Re: Допоможіть терміново

Прихований текст

http://cdn.trinixy.ru/pics2/20070323/cats_05.gif

10 Востаннє редагувалося funivan (02.10.2013 08:31:53)

Re: Допоможіть терміново

Дякую всім, завдяки самовідважним зусиллям HetmanNet задача була вирішена

А все ж таки я б порадив поміняти калькулятор, думаю у майбутньому у вас буде чимало проблем з ним. Краще завести бухгалтера  =)

До речі можна перевірити справність вашого калькулятора. Потрібно створити декілька тестів що б більше не потрапляти у халепу.
Спробуйте написати тест у вигляді зворотньої операції:

    Тиснемо "3"
    Тиснемо "+"
    Тиснемо "2"
    Тиснемо "="

Як тільки буде результат пишіть, нам всім тут цікаво ;))


П.С. Модератори, тема є дуже важливою, думаю пригодиться багатьом. Перенесіть і закріпіть її у розділі "Алгоритми та структури даних, технології" ;) :D

Подякували: koala1

11 Востаннє редагувалося ping (02.10.2013 13:11:25)

Re: Допоможіть терміново

от вам смішно, а скільки буде:

#!/bin/python
a = 0.1
b = 0.1
c = 0.1
s1 = a + b + c - 0.3
s2 = a + b + (c - 0.3)
if s1==s2:
   print "FACE"
else:
   print "DUPA"

що отримаємо на виході?
p.s.
і, попрошу, для отримання відповіді не запускати інтерпретатор :)

12 Востаннє редагувалося cuhedg (02.10.2013 18:29:26)

Re: Допоможіть терміново

Звичайно ж (s1 == s2) == false

13

Re: Допоможіть терміново

@ping, у питання колір підвоху.:)

"DUPA" десь на 0.00..00999, нє?)

14

Re: Допоможіть терміново

там буде щось типу e-16 чи e-17, наступав вже на такі граблі

15

Re: Допоможіть терміново

you are right

>>> print s1
5.55111512313e-17
>>> print s2
2.77555756156e-17
>>> 

as for human - result should be "FACE", but computer must say truth - "DUPA"

16

Re: Допоможіть терміново

Я просто залишу це тут