Advertisement
metallaro1980

Ev calc pro 2017

Mar 27th, 2019
469
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 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. c = 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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement