metallaro1980

EV CALC PRO 2017

Jul 2nd, 2014
593
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
QBasic 9.75 KB | None | 0 0
  1. FN.DEF Converti$(tempo)
  2.  
  3. IF tempo > 3600
  4.     ore = INT(tempo / 3600)
  5.     temporest = tempo - (ore * 3600)
  6.     min = INT(temporest / 60)
  7.     sec = tempo - ((ore * 3600) + (min * 60))
  8.     IF round(sec) = 60
  9.         min = min + 1
  10.         sec = 0
  11.     endif
  12.  
  13.     IF round(min) = 60
  14.         ore = ore + 1
  15.         min = 0
  16.     endif
  17.  
  18.     result$ = format$("##########",ore) + "h" +format$("##",min) + "m" + format$("##",sec) +"s"
  19.     result$ = replace$(result$," ","")
  20.     FN.rtn result$
  21. endif
  22.  
  23.  
  24.  
  25. IF tempo < 3600
  26.     min = INT(tempo / 60)
  27.     sec = tempo - (min * 60)
  28.     IF round(sec) = 60
  29.         min = min + 1
  30.         sec = 0
  31.     endif
  32.  
  33.     IF round(min) = 60
  34.         ore = ore + 1
  35.         min = 0
  36.     endif
  37.  
  38.     IF min = 0
  39.         sec = round(sec)
  40.         result$ = format$("##", sec) + "s"
  41.         result$ = replace$(result$," ","")
  42.     ELSE
  43.         sec = round(sec)
  44.         min = round(min)
  45.         result$ = format$("##",min) + "m" +format$("##", sec) + "s"
  46.         result$ = replace$(result$," ","")
  47.     endif
  48.     FN.rtn result$
  49. endif
  50. FN.END
  51.  
  52.  
  53. FN.DEF FIX(tempo, min, max, ev1, av2)
  54.     evmin = (pow(av2,2)) / min
  55.     evmin = log2(evmin)
  56.     evmax = (pow(av2,2)) / max
  57.     evmax = log2(evmax)
  58.     result1 = ABS(ev1 - evmin)
  59.     result2 = ABS(ev1 - evmax)
  60.     IF result2 > result1
  61.         FN.rtn min
  62.     endif
  63.     IF result1 > result2
  64.         FN.rtn max
  65.     endif
  66.     IF result1 = result2
  67.         FN.rtn min
  68.     endif
  69. FN.END
  70.  
  71.  
  72. FN.DEF Abx(tempo)
  73.  
  74.  LIST.create N, tempi
  75.  LIST.add tempi,8000,6400,5000,4000,3200,2500,2000,1600,1250,1000,800,640,500,400,320,250,200,160,125,100,80,60,50,40,30,25,20,15,13,10,8,6,5,4
  76.  
  77.  IF tempo <= 3.33
  78.   LIST.CLEAR tempi
  79.   FN.rtn tempo
  80.  endif
  81.  IF tempo >= 8300
  82.   LIST.CLEAR tempi
  83.   FN.rtn tempo
  84.  endif
  85.  
  86.  IF (tempo > 3.33) & (tempo < 4)
  87.   result1 = 4 - tempo
  88.   result2 = tempo - 3.33
  89.   IF result1 < result2
  90.    LIST.CLEAR tempi
  91.    FN.rtn 4
  92.   ELSEIF result1 > result2
  93.    LIST.CLEAR tempi
  94.    FN.rtn 3
  95.   ELSEIF result1 = result2
  96.     LIST.CLEAR tempi
  97.     FN.rtn 3
  98.   endif
  99.  endif
  100.  
  101.  IF (tempo < 8300) & (tempo > 8000)
  102.   LIST.CLEAR tempi
  103.   FN.rtn 8000
  104.  endif
  105.  
  106.  LIST.SIZE tempi, ln
  107.  ln = ln - 1  
  108.  FOR i = 1 TO ln
  109.  min = i
  110.  j = i + 1
  111.  WHILE j < ln
  112.  LIST.GET tempi, j, rslt1
  113.  LIST.GET tempi, min, rslt2  
  114.  IF rslt1  > rslt2
  115.   min = j
  116.  endif
  117.  j = j + 1
  118.  repeat
  119.  LIST.GET tempi, min, t
  120.  LIST.GET tempi, i, backup
  121.  LIST.REPLACE tempi, min, backup
  122.  LIST.REPLACE tempi, i, t
  123.  NEXT
  124.  
  125.  tempo = tempo
  126.  LIST.size tempi, ln
  127.  intervalli = ln - 1
  128.  trovato = 0
  129.  k=1
  130.  WHILE trovato = 0
  131.   LIST.GET tempi, k, max
  132.   LIST.GET tempi, k+1, min
  133.   IF (tempo >= min) & (tempo <= max) & (trovato = 0)
  134.    LIST.GET tempi, k, max
  135.    LIST.GET tempi, k+1, min
  136.    trovato = 1
  137.   endif
  138.   k= k +1
  139.  repeat
  140.  
  141.  result1 = (1/max) - (1/tempo)
  142.  result2 = (1/tempo) - (1/min)
  143.  result1 = ABS(result1)
  144.  result2 = ABS(result2)
  145.  IF result1 > result2
  146.    LIST.CLEAR tempi
  147.    FN.rtn min
  148.  ELSEIF result2 > result1
  149.   LIST.CLEAR tempi
  150.   FN.rtn max
  151.  ELSEIF result2 = result1
  152.   LIST.CLEAR tempi
  153.   FN.rtn min
  154.  endif  
  155.    
  156. FN.END
  157.  
  158.  
  159.  
  160. FN.DEF Abx2(tempo, ev1, av2)
  161.  
  162.  IF tempo >= 0.3 & tempo < 0.4
  163.   FN.rtn FIX(tempo, 0.3, 0.4, ev1, av2)
  164.  endif
  165.  
  166.  IF tempo >= 0.4 & tempo < 0.5
  167.   FN.rtn FIX(tempo, 0.4, 0.5, ev1, av2)
  168.  endif
  169.  
  170.  IF tempo >= 0.5 & tempo < 0.6
  171.   FN.rtn FIX(tempo, 0.5, 0.6, ev1, av2)
  172.  endif
  173.  
  174.  IF tempo >= 0.6 & tempo < 0.8
  175.   FN.rtn FIX(tempo, 0.6, 0.8, ev1, av2)
  176.  endif
  177.  
  178.  IF tempo >= 0.8 & tempo < 1
  179.   FN.rtn FIX(tempo, 0.8, 1, ev1, av2)
  180.  endif
  181.  
  182.  IF tempo >= 1 & tempo < 1.3
  183.   FN.rtn FIX(tempo, 1, 1.3, ev1, av2)
  184.  endif
  185.  
  186.  IF tempo >= 1.3 & tempo < 1.6
  187.   FN.rtn FIX(tempo, 1.3, 1.6, ev1, av2)
  188.  endif
  189.  
  190.  IF tempo >= 1.6 & tempo < 2
  191.   FN.rtn FIX(tempo, 1.6, 2, ev1, av2)
  192.  endif
  193.  
  194.  IF tempo >= 2 & tempo < 2.5
  195.   FN.rtn FIX(tempo, 2, 2.5, ev1, av2)
  196.  endif
  197.  
  198.  IF tempo >= 2.5 & tempo < 3.2
  199.   FN.rtn FIX(tempo, 2.5, 3.2, ev1, av2)
  200.  endif
  201.  
  202.  IF tempo >= 3.2 & tempo < 4
  203.   FN.rtn FIX(tempo, 3.2, 4, ev1, av2)
  204.  endif
  205.  
  206.  IF tempo >= 4
  207.   FN.rtn round(tempo)
  208.  endif
  209. FN.END
  210.  
  211.  
  212.  
  213. FN.DEF log2 (valore)
  214.   result = LOG(valore) / LOG(2)
  215.   FN.rtn result
  216. FN.END
  217.  
  218.  
  219.  
  220. FN.DEF calculate(ev1, av2)
  221.     pt = pow(av2,2)
  222.     ev2 = log2(pt)
  223.     rst = ev1- ev2
  224.     IF rst < 0
  225.       rst = ABS(rst)
  226.     endif
  227.     result = pow(2,rst)
  228.     FN.rtn result
  229. FN.END
  230.  
  231.  
  232.  
  233. FN.DEF check(strnumber$)
  234.  
  235. = 0
  236. FOR i = 1 TO LEN(strnumber$)
  237.     car$ = MID$(strnumber$, i, 1)
  238.     IF car$ = "0"
  239.         c = c + 1
  240.     endif
  241.  
  242.     IF car$ = "1"
  243.         c = c + 1
  244.     endif
  245.  
  246.     IF car$ = "2"
  247.         c = c + 1
  248.     endif
  249.  
  250.     IF car$ = "3"
  251.         c = c + 1
  252.     endif
  253.  
  254.     IF car$ = "4"
  255.         c = c + 1
  256.     endif
  257.  
  258.     IF car$ = "5"
  259.         c = c + 1
  260.     endif
  261.  
  262.     IF car$ = "6"
  263.         c = c + 1
  264.     endif
  265.  
  266.     IF car$ = "7"
  267.         c = c + 1
  268.     endif
  269.  
  270.     IF car$ = "8"
  271.         c = c + 1
  272.     endif
  273.  
  274.     IF car$ = "9"
  275.         c = c + 1
  276.     endif
  277.  
  278.     IF car$ = "."
  279.         c = c + 1
  280.     endif
  281.  
  282. NEXT
  283.  
  284. IF c = LEN(strnumber$)
  285.     FN.rtn 1
  286. endif
  287.  
  288. IF c <> LEN(strnumber$)
  289.     FN.rtn 0
  290. endif
  291.  
  292. FN.END
  293.  
  294.  
  295.  
  296. start:
  297.  
  298. array.load diaframmi[],1,1.2,1.4,1.7,1.8,2,2.4,2.8,3.3,3.4,4,4.8,5.6,6.7,8,9.5,11,13.0,16,19,22
  299.  
  300. inizio:
  301.  
  302. CLS
  303.  
  304. switch = 0
  305.  
  306.  
  307.  
  308. INPUT "Diaframma a tutta apertura: ", av1
  309. ripeti:
  310. INPUT "Tempo a tutta apertura: ", temp1$
  311. IF LEN(temp1$) < 1
  312.     GOTO ripeti
  313. endif
  314.  
  315. temp1$=replace$(temp1$,"//", "/")
  316. IF RIGHT$(temp1$, 1) = "/"
  317.     temp1$ = LEFT$(temp1$, LEN(temp1$) - 1)
  318. endif
  319.  
  320. IF RIGHT$(temp1$, 1) = "."
  321.     temp1$ = LEFT$(temp1$, LEN(temp1$) - 1)
  322. endif
  323.  
  324. IF LEFT$(temp1$, 1) = "/"
  325.     temp1$ = RIGHT$(temp1$, LEN(temp1$) - 1)
  326. endif
  327.  
  328. FOR i = 1 TO LEN(temp1$)
  329.  
  330. IF MID$(temp1$, i, 1) = "/"
  331.  
  332.     switch = 1
  333.     strnum$ = MID$(temp1$, 1, i-1)
  334.     strden$ = MID$(temp1$, i + 1, LEN(temp1$) - i)
  335.  
  336. IF RIGHT$(strnum$, 1) = "."
  337.     strnum$ = LEFT$(strnum$, LEN(strnum$) - 1)
  338. endif
  339.  
  340. IF RIGHT$(strden$, 1) = "."
  341.     strden$ = LEFT$(strden$, LEN(strden$) - 1)
  342. endif
  343.  
  344. IF check(strnum$) = 0
  345.     GOTO ripeti
  346. endif
  347.  
  348. IF check(strden$) = 0
  349.     GOTO ripeti
  350. endif
  351.  
  352. num = VAL(strnum$)
  353. den = VAL(strden$)
  354. numint = INT(num)
  355. denint = INT(den)
  356. tempo1 = numint / denint
  357. Endif
  358.  
  359. NEXT
  360.  
  361. PRINT "EV CALCULATOR PRO 2017"
  362. PRINT "Diaframma a TA: " + STR$(av1)
  363. PRINT "Tempo a TA: " + temp1$
  364.  
  365. IF switch = 1
  366.     ev1 = (pow(av1,2)) / tempo1
  367.     ev1 = log2(ev1)
  368.     ev1ai = round(ev1,2)
  369.     array.length lngth, diaframmi[]
  370.         PRINT "EV Rif: " + STR$(ev1)
  371.         PRINT "-----------Output-----------"
  372.  i = 1
  373.  WHILE i <= lngth
  374.         av2 = diaframmi[i]
  375.         IF av2 <> av1
  376.  
  377.             tempo2 = calculate(ev1,av2)
  378.             ev2a = (Pow(av2,2)) / tempo2
  379.             ev2a = Log2(ev2a)
  380.             ev2ai = round(ev2a,2)
  381.             ev2b = (Pow(av2,2)) / (1/tempo2)
  382.             ev2b = Log2(ev2b)
  383.             ev2bi = round(ev2b,2)
  384.  
  385.             IF round(ev2a,2) = round(ev1,2)
  386.               IF tempo2 < 60
  387.                tempo2 = Abx2(tempo2, ev1, av2)
  388.                PRINT STR$(tempo2) + " sec @" + STR$(av2)
  389.               ELSE
  390.                PRINT converti$(tempo2) +  " @" + STR$(av2)
  391.               endif 
  392.             ELSE
  393.               IF tempo2 < 2 
  394.                 tempo2 = 1 / tempo2
  395.                 tempo2 = Abx2(tempo2, ev1, av2)
  396.                 PRINT STR$(tempo2) + " sec @" + STR$(av2)      
  397.               ELSE
  398.                 tempo2 = Abx(tempo2)    
  399.                 IF round(tempo2) = 3
  400.                  tempo2 = 1/tempo2
  401.                  tempo2 = Abx2(tempo2, ev1, av2)
  402.                  PRINT STR$(tempo2) + " sec @" + STR$(av2)
  403.                 ELSE
  404.                          st$ = format$("########", round(tempo2))
  405.                  st$ = replace$(st$, " ","")
  406.                  PRINT "1/" + st$ + " sec @" +STR$(av2)
  407.                 endif
  408.                ENDIF
  409.             endif 
  410.         endif
  411.  i = i + 1
  412.  repeat
  413.  
  414.  GOTO mia
  415.  
  416. ELSEIF switch = 0
  417.  
  418.     IF check(temp1$) = 0 THEN
  419.         GOTO ripeti
  420.     endif 
  421.  
  422.     tempo1 = VAL(temp1$)
  423.  
  424.     ev1 = (av1 ^ 2) / tempo1
  425.     ev1 = log2(ev1)
  426.     ev1ai = round(ev1,2)
  427.     array.length lngth, diaframmi[]
  428.  PRINT "EV Rif: " + STR$(ev1)
  429.  PRINT "-----------Output-----------"
  430.  
  431.  i = 1
  432.  WHILE i <= lngth
  433.  
  434.         av2 = diaframmi[i]
  435.  
  436.         IF av2 <> av1
  437.  
  438.                 tempo2 = calculate(ev1, av2)
  439.                 ev2a = (av2 ^ 2) / tempo2
  440.                 ev2a = log2(ev2a)
  441.                 ev2ai = round(ev2a,2)
  442.                 ev2b = (av2 ^ 2) / (1/tempo2)
  443.                 ev2b = log2(ev2b)
  444.                 ev2bi = round(ev2b,2)
  445.                 ev2ai = round(ev2a,2)
  446.            
  447.            
  448.  
  449.                 IF ev2ai = ev1ai
  450.  
  451.                     IF tempo2 < 60
  452.                         tempo2 = Abx2(tempo2, ev1, av2)
  453.                         PRINT STR$(tempo2) + " sec @" +STR$(av2) 
  454.    
  455.                     ELSE    
  456.                         PRINT Converti$(tempo2) + " @" +STR$(av2)               
  457.                     endif
  458.    
  459.                ELSE
  460.  
  461.                     IF (ev2bi = ev1ai)(ev2bi = ev1ai)
  462.                         IF tempo2 < 2
  463.                             tempo2 = 1/tempo2
  464.                             tempo2 = Abx2(tempo2, ev1, av2)
  465.                             PRINT STR$(tempo2) + " sec @" +STR$(av2) 
  466.                         ELSE
  467.                             tempo2 = Abx(tempo2)
  468.                             IF round(tempo2) = 3
  469.                               tempo2 = 1/tempo2
  470.                               tempo2 = Abx2(tempo2, ev1, av2)
  471.                               PRINT STR$(tempo2) + " sec @" + STR$(av2)
  472.                             ELSE
  473.                               st$ = format$("########", round(tempo2))
  474.                               st$ = replace$(st$, " ","")
  475.                               PRINT "1/" + st$ + " sec @" +STR$(av2)                   
  476.                             endif
  477.                         endif
  478.                     endif
  479.                 endif
  480.         endif
  481.  
  482. endif
  483. i = i +1
  484. repeat
  485.  
  486. GOTO mia
  487.  
  488. mia:
  489.  
  490. pause 20000
  491.  
  492. INPUT "Exit? y/n", k$
  493.  
  494. IF k$ = "y"
  495.     END
  496. endif
  497.  
  498. IF k$ = "Y"
  499.     END
  500. endif
  501.  
  502. GOTO inizio
Add Comment
Please, Sign In to add comment