! Расчет шестерен гитары станка dbname$ = "grades.db" SQL.OPEN DB_Ptr, dbname$ tbname$ = "gears" c1$ = "A" c2$ = "B" c3$ = "C" c4$ = "D" c5$ = "m" c6$ = "delta" LIST.CREATE N, num LIST.CREATE N, numgn !Шаг ведущего винта l = 1.5 !Шаг резьбы m = 0.5 mi = 1 li = 1 flagi = 0 fmi$ = "" cls ! Шаг резьбы !fm$ = "1.25" fm$ = format$("%.##", m) ! Шаг ведущего винта fl$ = format$("%.##", l)+" мм" ! Отклонение fn$ = "0.05" n= 0.05 ARRAY.LOAD menusgg[], 20, 30, 35, 40, 42, 45, 50, 55, 57, 60, 65, 80 ARRAY.LOAD menusgn[], 2, 1, 1, 2, 1, 1, 2, 1, 1, 2, 1, 2 array.length gi,menusgg[] dim menusg$[gi+1] for i=1 to gi menusg$[i] = format$("%%", menusgg[i]) + " - " + format$("%", menusgn[i]) next i GOSUB subroutine menusg$[gi+1] = "Выход" ARRAY.LOAD menusm$[], "0.5 мм", "0.7 мм", "0.75 мм", "0.8 мм", "1 мм", "1.25 мм", "1.5 мм", "20 TPI", "16 TPI", "Выход" ARRAY.LOAD menusl$[], "1.5 мм", "16 TPI", "Выход" ARRAY.LOAD menus$[], "Схема", "Шаг ведущего винта - "~ "Выбрать шаг резьбы", "Изменить шаг (мм) - "~ "Изменить шаг (TPI) - ", "Шестерни - выбрать", "Точность (%) - ", "Вычислить", "Выход" ARRAY.LOAD months$[], menus$[1], menus$[2] + fl$ ~ menus$[3], menus$[4] + fm$, menus$[5] + fmi$, menus$[6] ~ menus$[7] + fn$, menus$[8], menus$[9] ! Set the Popup Message msg$ ="" msg2$ ="Для возврата нажать Меню" msg1$ ="Без выбора нажать Назад" Menu: months$[6]=menus$[6]+":" For i=1 to ii months$[6]=months$[6]+format$("%%", a[i]) + "(" + format$("%", agn[i])+ ")" Next i fm$ = format$("%.###", m) IF flagi = 1 months$[4] = menus$[4] fmi$ = format$("%%", mi) months$[5] = menus$[5] + fmi$ ELSE months$[4] = menus$[4] + fm$ months$[5] = menus$[5] + fmi$ ENDIF months$[2] = menus$[2] + fl$ ! Shows the list and waits for the user ! to make the selection. SELECT month, months$[], msg$ IF month = 1 sss$ = "@" goto ris ELSEIF month = 2 !input menus$[2], l !fl$ = format$("%.##", l) months$[2] = menus$[2] + fl$ goto Menul ELSEIF month = 3 goto Menum ELSEIF month = 4 input menus$[4], m fm$ = format$("%.##", m) months$[4] = menus$[4] + fm$ mi = 1 fmi$ ="" goto Menu ELSEIF month = 5 input menus$[5], mii fmi$ = format$("%%", mii) months$[5] = menus$[5] + fmi$ IF flagi = 1 m = 1 mi =mii ELSE m = 25.4 / mii mi = 1 ENDIF goto Menu ELSEIF month = 6 goto Menug ELSEIF month = 7 input menus$[7], n fn$ = format$("%.##", n) months$[7] = menus$[7] + fn$ goto Menu ELSEIF month = 8 Popup msg2$,0,0,1 flagjk = 0 SQL.DROP_TABLE DB_Ptr, tbname$ SQL.NEW_TABLE DB_Ptr, tbname$, c1$, c2$, c3$, c4$, c5$, c6$ sss$ = "@" cls print m print " A B C D" for i=1 to ii for k=1 to ii IF i = k & agn[i] = 1 THEN ELSE for j=1 to ii IF i <> j THEN for t=1 to ii IF i = t | k = t THEN ELSEIF j = k & agn[j] = 1 THEN ELSEIF ABS((l*a[i]*a[k]/li) / (m*a[j]*a[t]/mi) -1) < n/100 + 0.0000001 THEN mn=(l*a[i]*a[k]/li)/(a[j]*a[t]/mi) dmn = ABS(mn - m) IF j<> k THEN SQL.INSERT DB_Ptr, tbname$, c1$,FORMAT$("##", a[i]), c2$,FORMAT$("##", a[j]), c3$,FORMAT$("##", a[k]), c4$,FORMAT$("##", a[t]), c5$,FORMAT$("%.####", mn), c6$,FORMAT$("%.####", dmn) ELSEIF flagjk = 1 THEN ELSE flagjk = 1 xj$ = " XX" xk$ = " " SQL.INSERT DB_Ptr, tbname$, c1$,FORMAT$("##", a[i]), c2$,xj$, c3$,xk$, c4$,FORMAT$("##", a[t]), c5$,FORMAT$("%.####", mn), c6$,FORMAT$("%.####", dmn) ENDIF ENDIF next t ENDIF next j ENDIF next k next i GOSUB show_all do !inkey$ sss$ until sss$ <> "@" goto Menu ELSE PRINT "Выход"; ENDIF SQL.CLOSE DB_Ptr END onmenukey : cls sss$="45" menukey.resume Menul: SELECT menul, menusl$[], msg1$ IF menul = 1 l = 1.5 li = 1 fl$ = "1.5 мм" flagi = 0 fmi$ = "" goto Menu ELSEIF menul = 2 li = 16 l=1 fl$ = "16 TPI" flagi = 1 goto Menu ELSE goto Menu ENDIF goto Menu Menum: fmi$ ="" SELECT menum, menusm$[], msg1$ IF menum = 1 m = 0.5 mi = 1 goto Menu ELSEIF menum = 2 m = 0.7 mi = 1 goto Menu ELSEIF menum = 3 m = 0.75 mi = 1 goto Menu ELSEIF menum = 4 m = 0.8 mi = 1 goto Menu ELSEIF menum = 5 m = 1 mi = 1 goto Menu ELSEIF menum = 6 m = 1.25 mi = 1 goto Menu ELSEIF menum = 7 m = 1.5 mi = 1 goto Menu ELSEIF menum = 8 IF flagi = 1 m = 1 mi =20 ELSE m = 25.4 / 20 mi = 1 fmi$ ="20" ENDIF goto Menu ELSEIF menum = 9 IF flagi = 1 m = 1 mi =16 ELSE m = 25.4 / 16 mi = 1 fmi$ ="16" ENDIF goto Menu ELSE PRINT "Выход"; goto Menu ENDIF goto Menu Menug: GOSUB subroutine SELECT menug, menusg$[], msg1$ IF menug = 1 input "Количество шестерен", menusgn[1] menusg$[1] = format$("%%",menusgg[1]) + " - " + format$("%", menusgn[1]) goto Menug ELSEIF menug = 2 input "Количество шестерен", menusgn[2] menusg$[2] = format$("%%",menusgg[2]) + " - " + format$("%", menusgn[2]) goto Menug ELSEIF menug = 3 input "Количество шестерен", menusgn[3] menusg$[3] = format$("%%",menusgg[3]) + " - " + format$("%", menusgn[3]) goto Menug ELSEIF menug = 4 input "Количество шестерен", menusgn[4] menusg$[4] = format$("%%",menusgg[4]) + " - " + format$("%", menusgn[4]) goto Menug ELSEIF menug = 5 input "Количество шестерен", menusgn[5] menusg$[5] = format$("%%",menusgg[5]) + " - " + format$("%", menusgn[5]) goto Menug ELSEIF menug = 6 input "Количество шестерен", menusgn[6] menusg$[6] = format$("%%",menusgg[6]) + " - " + format$("%", menusgn[6]) goto Menug ELSEIF menug = 7 input "Количество шестерен", menusgn[7] menusg$[7] = format$("%%",menusgg[7]) + " - " + format$("%", menusgn[7]) goto Menug ELSEIF menug = 8 input "Количество шестерен", menusgn[8] menusg$[8] = format$("%%",menusgg[8]) + " - " + format$("%", menusgn[8]) goto Menug ELSEIF menug = 9 input "Количество шестерен", menusgn[9] menusg$[9] = format$("%%",menusgg[9]) + " - " + format$("%", menusgn[9]) goto Menug ELSEIF menug = 10 input "Количество шестерен", menusgn[10] menusg$[10] = format$("%%",menusgg[10]) + " - " + format$("%", menusgn[10]) goto Menug ELSEIF menug = 11 input "Количество шестерен", menusgn[11] menusg$[11] = format$("%%",menusgg[11]) + " - " + format$("%", menusgn[11]) goto Menug ELSEIF menug = 12 input "Количество шестерен", menusgn[12] menusg$[12] = format$("%%",menusgg[12]) + " - " + format$("%", menusgn[12]) goto Menug ELSE goto Menu ENDIF goto Menu subroutine: LIST.CLEAR num LIST.CLEAR numgn array.delete a[],agn[] For i = 1 To 11 IF menusgn[i] > 0 LIST.ADD num, menusgg[i] LIST.ADD numgn, menusgn[i] ENDIF NEXT i LIST.TOARRAY num, a[] array.length ii,a[] LIST.TOARRAY numgn, agn[] RETURN show_all: Columns$ = "A,B,C,D,m,delta" Where$ = "" Order$ = "delta ASC" SQL.QUERY Cursor, DB_Ptr, tbname$, Columns$, Where$, Order$ show_query_results: xdone = 0 DO SQL.NEXT xdone,cursor,v1$,v2$,v3$,v4$,v5$,v6$ IF !xdone THEN IF dmn = 0 THEN PRINT v1$,v2$,v3$,v4$ ELSE PRINT v1$,v2$,v3$,v4$,v5$,v6$ ENDIF ENDIF UNTIL xdone PRINT " " RETURN ris: GR.OPEN 255, 255, 255, 255 GR.ORIENTATION 1 PAUSE 800 GR.SCREEN w, h ! Draw divider lines !Set the draw color to black a = 255 r = 0 g = 0 b = 0 fill = 0 GR.COLOR a,r,g,b,fill x1 = 90 y1 = h/4 x2 = w - 60 y2 = h/4 GR.LINE n1, x1, y1, x2, y2 x1 = 90 y1 = 2*h/4 x2 = w - 60 y2 = 2*h/4 GR.LINE n2, x1, y1, x2, y2 x1 = 90 y1 = 3*h/4 x2 = w - 60 y2 = 3*h/4 GR.LINE n3, x1, y1, x2, y2 x1 = 90 y1 = h/4 + 40 x2 = w - 60 y2 = h/4 + 40 GR.LINE n4, x1, y1, x2, y2 ! Draw a blue filled rectangle fill = 0 Gr.set.stroke 4 r = 0 b = 255 g = 0 GR.COLOR a,r,g,b,fill left = 5*w/8 top = h/8 + 30 right = 6*w/8 bottom = 3*h/8 - 30 GR.RECT nr, left, top, right, bottom ! Label the rectangle Gr.text.size 50 GR.COLOR 255,0,0,0,1 GR.TEXT.DRAW pt, (4*w/8), (2*h/8), "A" ! Draw a blue filled rectangle 2 r = 0 b = 255 g = 0 GR.COLOR a,r,g,b,fill left = 4*w/8 - 10 top = h/8 - 10 + 40 right = 5*w/8 -10 bottom = 3*h/8 + 10 + 40 GR.RECT nra, left, top, right, bottom GR.COLOR 255,0,0,0,1 GR.TEXT.DRAW pta, (3*w/8 -10), (2*h/8 +40), "A" ! Draw a filled rectangle r = 255 b = 255 g = 0 GR.COLOR a,r,g,b,fill left = 5*w/8 top = 3*h/8 - 40 right = 6*w/8 bottom = 5*h/8 + 40 GR.RECT nrb, left, top, right, bottom GR.COLOR 255,0,0,0,1 GR.TEXT.DRAW ptb, (6*w/8 + 10), (4*h/8), "B" ! Draw a filled rectangle r = 0 b = 0 g = 255 GR.COLOR a,r,g,b,fill left = 4*w/8 - 10 top = 3*h/8 + 40 right = 5*w/8 - 10 bottom = 5*h/8 - 40 GR.RECT nrc, left, top, right, bottom GR.COLOR 255,0,0,0,1 GR.TEXT.DRAW ptc, (3*w/8 - 10), (4*h/8), "C" GR.TEXT.DRAW ptcb, (3*w/8 - 10), (4*h/8), "B" ! Draw a filled rectangle r = 255 b = 0 g = 0 GR.COLOR a,r,g,b,fill left = 4*w/8 - 10 top = 5*h/8 - 50 right = 5*w/8 - 10 bottom = 7*h/8 + 50 GR.RECT nrd, left, top, right, bottom GR.COLOR 255,0,0,0,1 GR.TEXT.DRAW ptd, (3*w/8 - 10), (6*h/8), "D" GR.COLOR 255,250,0,0,1 GR.TEXT.DRAW ptm, 10, (h - 10), "Меню" GR.HIDE n4 GR.HIDE nra GR.HIDE pta GR.HIDE ptcb GR.RENDER t = 2000 PAUSE t ris2: GR.HIDE nr GR.HIDE nrb GR.HIDE pt GR.HIDE ptb GR.HIDE ptc GR.HIDE n1 GR.SHOW n4 GR.SHOW nra GR.SHOW pta GR.SHOW ptcb GR.RENDER !PAUSE t do gr.touch touched, x, y until touched IF y > 3*h/4 THEN Gr.close goto Menu ENDIF do gr.touch touched, x, y until !touched GR.HIDE n4 GR.HIDE nra GR.HIDE pta GR.HIDE ptcb GR.SHOW nr GR.SHOW nrb GR.SHOW pt GR.SHOW ptb GR.SHOW ptc GR.SHOW n1 GR.RENDER PAUSE t do gr.touch touched, x, y until touched IF y > 3*h/4 THEN Gr.close goto Menu Else do gr.touch touched, x, y until !touched GOTO ris2 ENDIF