Помогите написать калькулятор

Предыдущая тема Следующая тема Перейти вниз

Помогите написать калькулятор

Сообщение  500rublei в Сб Апр 09, 2011 11:57 am

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

500rublei

Сообщения : 8
Дата регистрации : 2011-04-09

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помогите написать калькулятор

Сообщение  trew в Сб Апр 09, 2011 12:21 pm

500rublei пишет:никак не пойму как написать кнопочный калькулятор...
кнопки получается создавать, а чтобы делался вывод числа в нужном месте не получается, пожалуйста покажите пример такого калькулятора=) за ранее спасибо!=)

На самом деле все несложно, просто разбей свою задачу на несколько маленьких:

1) Создать окно
2) Создать дочерние окна на основе классов Button и Edit
3) В обработчике события WM_COMMAND при нажатии кнопок получай из нее текст при помощи GetWindowText и вводи его в EDIT при помощи SetWindowText и\или SendMessage c сообщением EM_REPLACESEL. Так же имей хотя бы две переменные для математических действий, с ними будешь проводить операции после нажатия кнопки равно

Конечно написал суховато и образно, но для начала попробуй это реализовать.
Если же нужно готовый пример,то на http://www.freebasic.net/forum/ где-то видел даже не один пример.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помогите написать калькулятор

Сообщение  500rublei в Сб Апр 09, 2011 12:33 pm

хорошо, спасибо, попробую!=)

500rublei

Сообщения : 8
Дата регистрации : 2011-04-09

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помогите написать калькулятор

Сообщение  500rublei в Сб Апр 09, 2011 1:28 pm

Блин, ничего не получается, можешь прислать хоть какой-нибудь исходничек?

500rublei

Сообщения : 8
Дата регистрации : 2011-04-09

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помогите написать калькулятор

Сообщение  workman в Сб Апр 09, 2011 2:28 pm

500rublei пишет:Блин, ничего не получается, можешь прислать хоть какой-нибудь исходничек?
Если не получается написать программу по умному, то можно сделать на конструкции типа "If Then".
Я бы примерно так и сделал Smile

workman

Сообщения : 25
Дата регистрации : 2010-12-03

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помогите написать калькулятор

Сообщение  500rublei в Сб Апр 09, 2011 3:31 pm

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



Код:



 screen 17,32
 
DIM garray(921604) AS BYTE
BLOAD "img/1.bmp", @garray(1)
PUT (0,150),garray(1)

BLOAD "img/2.bmp", @garray(0)
PUT (30,150),garray(0)

BLOAD "img/3.bmp", @garray(3)
PUT (60,150),garray(3)


BLOAD "img/4.bmp", @garray(4)
PUT (0,180),garray(4)

BLOAD "img/5.bmp", @garray(5)
PUT (30,180),garray(5)

BLOAD "img/6.bmp", @garray(6)
PUT (60,180),garray(6)


BLOAD "img/7.bmp", @garray(7)
PUT (0,210),garray(7)

BLOAD "img/8.bmp", @garray(8)
PUT (30,210),garray(8)

BLOAD "img/9.bmp", @garray(9)
PUT (60,210),garray(9)


BLOAD "img/0.bmp", @garray(0)
PUT (30,240),garray(0)





BLOAD "img/delenie.bmp", @garray(10)
PUT (90,150),garray(10)

BLOAD "img/umnog.bmp", @garray(11)
PUT (90,180),garray(11)

BLOAD "img/minus.bmp", @garray(12)
PUT (90,210),garray(12)

BLOAD "img/plus.bmp", @garray(13)
PUT (90,240),garray(13)


BLOAD "img/p.bmp", @garray(13)
PUT (0,240),garray(13)

BLOAD "img/p.bmp", @garray(13)
PUT (60,240),garray(13)




DIM x AS INTEGER, y AS INTEGER, buttons AS Integer, a AS Integer, q AS Integer, s AS Integer



Do

GETMOUSE x, y,, buttons

If y<180 And y>150 and x>0 and x<30 And buttons=1 Then
         
         BLOAD "img/vir/1.bmp", @garray(13)
                  PUT (0,0),garray(13)
                 
                  a=1
                 
                 
Else
   
   If x<60 And x>30 and y>150 and y<180 And buttons=1 Then
   
                  BLOAD "img/2.bmp", @garray(13)
                  PUT (120,0),garray(13)
                 
                  a=2
                 
                        Else
         
         If x<90 And x>60 and y>150 and y<180 And buttons=1 Then
         
                        BLOAD "img/3.bmp", @garray(13)
                        PUT (120,0),garray(13)
                       
                        a=3
                       
                        Else
   
                        If x<30 And x>0 and y>180 and y<210 And buttons=1 Then
            
                           BLOAD "img/4.bmp", @garray(13)
                           PUT (120,0),garray(13)
                          
                          
                           a=4
                          
                           Else
   
                        If x<60 And x>30 and y>180 and y<210 And buttons=1 Then
            
                           BLOAD "img/5.bmp", @garray(13)
                           PUT (120,0),garray(13)
                          
                           a=5
                          
                          
                                 Else
      
                           If x<90 And x>60 and y>180 and y<210 And buttons=1 Then
               
                              BLOAD "img/6.bmp", @garray(13)
                              PUT (120,0),garray(13)
                             
                             
                              a=6
                             
                             
                                    Else
         
                              If x<120 And x>90 and y>180 and y<210 And buttons=1 Then
                  
                                 BLOAD "img/umnog.bmp", @garray(13)
                                 PUT (120,0),garray(13)
                                
                                
                                    Else
            
                                 If x<30 And x>0 and y>210 and y<240 And buttons=1 Then
                     
                                    BLOAD "img/7.bmp", @garray(13)
                                    PUT (120,0),garray(13)
                                   
                                    a=7
                                   
                                   
                                       Else
               
                                    If x<60 And x>30 and y>210 and y<240 And buttons=1 Then
                        
                                       BLOAD "img/8.bmp", @garray(13)
                                       PUT (120,0),garray(13)
                                      
                                       a=8
                                      
                                         
                                            Else
                  
                                       If x<90 And x>60 and y>210 and y<240 And buttons=1 Then
                           
                                          BLOAD "img/9.bmp", @garray(13)
                                          PUT (120,0),garray(13)
                                         
                                         
                                          a=9
                                         
                                                                    Else
                     
                                          If x<120 And x>90 and y>210 and y<240 And buttons=1 Then
                              
                                             BLOAD "img/minus.bmp", @garray(13)
                                             PUT (120,0),garray(13)
                                            
                                            
                                                Else
                        
                                             If x<60 And x>30 and y>240 and y<270 And buttons=1 Then
                                 
                                                BLOAD "img/0.bmp", @garray(13)
                                                PUT (120,0),garray(13)
                                               
                                                a=0
                                               
                                               
                                                Else
                        
                                             If x<120 And x>90 and y>240 and y<270 And buttons=1 Then
                                 
                                                BLOAD "img/plus.bmp", @garray(13)
                                                PUT (120,0),garray(13)
                                               
                                               
                                               
                                                   Else
                           
                                                If x<120 And x>90 and y>150 and y<180 And buttons=1 Then
                                    
                                                   BLOAD "img/delenie.bmp", @garray(13)
                                                   PUT (120,0),garray(13)
                                                  
                                                  
End if
End if 
End if 
End if                          
End if 
End if                          
End if 
End if
End if                            
End if 
End if   
End if   
End if         
End If

Loop  WHILE INKEY$ = ""

End


500rublei

Сообщения : 8
Дата регистрации : 2011-04-09

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помогите написать калькулятор

Сообщение  trew в Сб Апр 09, 2011 4:26 pm

500rublei пишет:я вот пробовал так сделать, у меня кнопочками были картинки, которые находятся в определённых координатах, и когда я подвожу мышку в эти координаты и нажимаю левую кнопку мыши, он должен выводить мне, тоже нарисованное, число и записывать в переменную ту цыфру, которую нажал... но у меня не получается вот эти выводные картинки выводить по очереди, каждый раз через 30 пикселей.... ну вот я сейчас скину код, который получился...



Код:



 screen 17,32
 
DIM garray(921604) AS BYTE
BLOAD "img/1.bmp", @garray(1)
PUT (0,150),garray(1)

BLOAD "img/2.bmp", @garray(0)
PUT (30,150),garray(0)

BLOAD "img/3.bmp", @garray(3)
PUT (60,150),garray(3)


BLOAD "img/4.bmp", @garray(4)
PUT (0,180),garray(4)

BLOAD "img/5.bmp", @garray(5)
PUT (30,180),garray(5)

BLOAD "img/6.bmp", @garray(6)
PUT (60,180),garray(6)


BLOAD "img/7.bmp", @garray(7)
PUT (0,210),garray(7)

BLOAD "img/8.bmp", @garray(8)
PUT (30,210),garray(8)

BLOAD "img/9.bmp", @garray(9)
PUT (60,210),garray(9)


BLOAD "img/0.bmp", @garray(0)
PUT (30,240),garray(0)





BLOAD "img/delenie.bmp", @garray(10)
PUT (90,150),garray(10)

BLOAD "img/umnog.bmp", @garray(11)
PUT (90,180),garray(11)

BLOAD "img/minus.bmp", @garray(12)
PUT (90,210),garray(12)

BLOAD "img/plus.bmp", @garray(13)
PUT (90,240),garray(13)


BLOAD "img/p.bmp", @garray(13)
PUT (0,240),garray(13)

BLOAD "img/p.bmp", @garray(13)
PUT (60,240),garray(13)




DIM x AS INTEGER, y AS INTEGER, buttons AS Integer, a AS Integer, q AS Integer, s AS Integer



Do

GETMOUSE x, y,, buttons

If y<180 And y>150 and x>0 and x<30 And buttons=1 Then
         
         BLOAD "img/vir/1.bmp", @garray(13)
                  PUT (0,0),garray(13)
                 
                  a=1
                 
                 
Else
   
   If x<60 And x>30 and y>150 and y<180 And buttons=1 Then
   
                  BLOAD "img/2.bmp", @garray(13)
                  PUT (120,0),garray(13)
                 
                  a=2
                 
                        Else
         
         If x<90 And x>60 and y>150 and y<180 And buttons=1 Then
         
                        BLOAD "img/3.bmp", @garray(13)
                        PUT (120,0),garray(13)
                       
                        a=3
                       
                        Else
   
                        If x<30 And x>0 and y>180 and y<210 And buttons=1 Then
            
                           BLOAD "img/4.bmp", @garray(13)
                           PUT (120,0),garray(13)
                          
                          
                           a=4
                          
                           Else
   
                        If x<60 And x>30 and y>180 and y<210 And buttons=1 Then
            
                           BLOAD "img/5.bmp", @garray(13)
                           PUT (120,0),garray(13)
                          
                           a=5
                          
                          
                                 Else
      
                           If x<90 And x>60 and y>180 and y<210 And buttons=1 Then
               
                              BLOAD "img/6.bmp", @garray(13)
                              PUT (120,0),garray(13)
                             
                             
                              a=6
                             
                             
                                    Else
         
                              If x<120 And x>90 and y>180 and y<210 And buttons=1 Then
                  
                                 BLOAD "img/umnog.bmp", @garray(13)
                                 PUT (120,0),garray(13)
                                
                                
                                    Else
            
                                 If x<30 And x>0 and y>210 and y<240 And buttons=1 Then
                     
                                    BLOAD "img/7.bmp", @garray(13)
                                    PUT (120,0),garray(13)
                                   
                                    a=7
                                   
                                   
                                       Else
               
                                    If x<60 And x>30 and y>210 and y<240 And buttons=1 Then
                        
                                       BLOAD "img/8.bmp", @garray(13)
                                       PUT (120,0),garray(13)
                                      
                                       a=8
                                      
                                         
                                            Else
                  
                                       If x<90 And x>60 and y>210 and y<240 And buttons=1 Then
                           
                                          BLOAD "img/9.bmp", @garray(13)
                                          PUT (120,0),garray(13)
                                         
                                         
                                          a=9
                                         
                                                                    Else
                     
                                          If x<120 And x>90 and y>210 and y<240 And buttons=1 Then
                              
                                             BLOAD "img/minus.bmp", @garray(13)
                                             PUT (120,0),garray(13)
                                            
                                            
                                                Else
                        
                                             If x<60 And x>30 and y>240 and y<270 And buttons=1 Then
                                 
                                                BLOAD "img/0.bmp", @garray(13)
                                                PUT (120,0),garray(13)
                                               
                                                a=0
                                               
                                               
                                                Else
                        
                                             If x<120 And x>90 and y>240 and y<270 And buttons=1 Then
                                 
                                                BLOAD "img/plus.bmp", @garray(13)
                                                PUT (120,0),garray(13)
                                               
                                               
                                               
                                                   Else
                           
                                                If x<120 And x>90 and y>150 and y<180 And buttons=1 Then
                                    
                                                   BLOAD "img/delenie.bmp", @garray(13)
                                                   PUT (120,0),garray(13)
                                                  
                                                  
End if
End if 
End if 
End if                          
End if 
End if                          
End if 
End if
End if                            
End if 
End if   
End if   
End if         
End If

Loop  WHILE INKEY$ = ""

End



Во блин, я думал тебе нужно создать Gui приложение: типа стандартного Windows калькулятора, а ты все в графике решил сделать
Shocked Тут я тебе помочь не могу,графические команды Freebasic я не разбирал.
P.S. Все таки небольшой совет: когда даешь код для рассмотрения, нужны и включаемые файлы(картинки), тем более, что у тебя их немало.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помогите написать калькулятор

Сообщение  500rublei в Сб Апр 09, 2011 4:30 pm

Спасибо за совет, в следующий раз буду делать всё в архиве и закидывать сюда!=)
Мне не обязательно графическим его сделать, просто так получается, а с кнопками никак не получается=(
лучше бы хотелось с кнопками, но никак =(

500rublei

Сообщения : 8
Дата регистрации : 2011-04-09

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помогите написать калькулятор

Сообщение  trew в Сб Апр 09, 2011 4:35 pm

500rublei пишет:Спасибо за совет, в следующий раз буду делать всё в архиве и закидывать сюда!=)
Мне не обязательно графическим его сделать, просто так получается, а с кнопками никак не получается=(
лучше бы хотелось с кнопками, но никак =(

Почему же никак? Не хватает пока знаний API ? Возьми мою библиотеку и делай что вздумается:

http://freebasic.justforum.net/t374-topic

Справка вся на русском, да и я часто здесь околачиваюсь Very Happy

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помогите написать калькулятор

Сообщение  500rublei в Сб Апр 09, 2011 4:39 pm

Хорошо, спасибо!=)
Сейчас посмотрю на плоды твоего труда!=)
Может и разберусь!=)
ещё раз спасибо!

500rublei

Сообщения : 8
Дата регистрации : 2011-04-09

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помогите написать калькулятор

Сообщение  500rublei в Сб Апр 09, 2011 4:42 pm

а в Windows разве есть такая "window9.bi" библиотека? или её скачать надо с твоего сайта?

500rublei

Сообщения : 8
Дата регистрации : 2011-04-09

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помогите написать калькулятор

Сообщение  trew в Сб Апр 09, 2011 5:02 pm

500rublei пишет:а в Windows разве есть такая "window9.bi" библиотека? или её скачать надо с твоего сайта?

Конечно в windows нет такой библиотеки, а иначе что я тогда писал? Very Happy

Скачиваешь по этой ссылке: http://www.mneniya.ucoz.ru/FREEBASIC/Public/LIBFB.zip закидываешь в папки \FreeBASIC\inc и \FreeBASIC\lib и пользуешься.

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помогите написать калькулятор

Сообщение  500rublei в Сб Апр 09, 2011 5:16 pm

а не подскажешь ещё как там кнопочки с выводом сделать, а то не могу найти никак=(
ну хоть какие функции в справке смотреть...

500rublei

Сообщения : 8
Дата регистрации : 2011-04-09

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помогите написать калькулятор

Сообщение  trew в Сб Апр 09, 2011 5:28 pm

500rublei пишет:а не подскажешь ещё как там кнопочки с выводом сделать, а то не могу найти никак=(
ну хоть какие функции в справке смотреть...

Вкладка Gadget:

ButtonGadget - кнопка
TextGadget - текстовое поле
и т д

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

Код:

#Include "window9.bi"
Enum
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
End Enum

Dim Shared As double rez3


Sub Pros0() ';процедура убирает лишние нули
 Var sdf= Str(rez3)
  For n As Integer=1 To  Len(Str(rez3))
  Var df = Left(sdf, n)
  Var fff= Right(df, 1)
  If fff  <> "0" Then
    SetGadgetText(String_, df)
  EndIf
  Next
End Sub


';{------------------Окно--------------------------------
Var hwnd=OpenWindow ("Калькулятор",  0,  0,  275,  280)
WindowColor(hwnd,&hffffff): CenterWindow(hwnd)
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+")
';}------------------------------------------------------
Dim As Double rez1
 Dim As String rez0,znak = "0"
';{----------------- Главный цикл -------------------------
Do
Var Event =  WaitEvent()
  Select Case Event
        Case EventGadget
          Select Case EventNumber
           
            Case But_0,But_1,But_2,But_3,But_4,But_5,But_6,But_7,But_8,But_9,drob
              If znak = "+" Or znak = "-" Or znak = "*" Or znak = "/" Or znak = "0" Then
              rez0 = GetGadgetText(String_) 
              SetGadgetText(String_, rez0+GetGadgetText(EventNumber))
              ElseIf znak = "="  Then
              SetGadgetText(String_, "")
              rez0= GetGadgetText(String_)
              SetGadgetText(String_, rez0+GetGadgetText(EventNumber))
              znak = "0"             
              EndIf
                       
            Case C
            SetGadgetText(String_, "")
            rez1 =0
           
           
           
            Case plus, minus, umnoj, delen
              rez1= Val(GetGadgetText(String_))
              SetGadgetText(String_, GetGadgetText(EventNumber))
              znak = GetGadgetText(EventNumber)
           
           
            Case rezul
              If znak = "+" Or znak = "-" Then
              rez3 = rez1 + Val(GetGadgetText(String_))
              Pros0()
              ';SetGadgetText(String_, StrD(rez3))
              ElseIf znak = "*" Then
              rez3 = rez1* Val(Mid(GetGadgetText(String_),2))
              Pros0()
              ';SetGadgetText(String_, StrD(rez3))
              ElseIf znak = "/" then
              rez3 = rez1/ Val(Mid(GetGadgetText(String_),2))
              Pros0()
              ';SetGadgetText(String_, StrD(rez4))
              EndIf
            znak = "="
          End Select
  End Select
If Event = EventClose Then End
Loop

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Помогите написать калькулятор

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения