SayIT
Software => Programare => Topic started by: kman on 02 November 2006, 16:38
Pentru ca nu avem (inca ?) sectiune de WTF, postez aici ultima mea creatie pe ziua de azi.
... deci, datele problemei, limbaj de programare proprietar (50% asemanator cu TCL), suport inexistent pentru numere rationare/reale/negative, functii matematice inexistente.
Se cere, pentru un sistem care nu suporta decat fix 2 zecimale dupa virgula sa se implemnteze o functie de round care sa impace si capra si varza.
Demonstratie .... :fk: .... si dupa 9 luni (minute de gandire) aparu' monstru:
proc round { pm_val pm_prec } {
local lv_point_pos [strfindsub $pm_val "."]
if { [null $lv_point_pos] } {
# if number is integer return number
return $pm_val
}
local lv_supra [strsub $pm_val 0 $lv_point_pos]
local lv_subu [strsub $pm_val [expr $lv_point_pos + 1] $pm_prec]
local lv_nextn [strsub $pm_val [expr $lv_point_pos + 1 + $pm_prec] 1]
if { [null $lv_nextn] } {
# if no values after rounding position return initial number
return $pm_val
}
if { $lv_nextn >= 5 } {
# do we need rounding ?
local lv_subu [expr $lv_subu + 1]
if { [strlen $lv_subu] > $pm_prec } {
local lv_subu [strsub $lv_subu 1 $pm_prec]
local lv_supra [expr $lv_supra + 1]
}
}
# reconstruct the number
local lv_nr [strcat $lv_supra "." $lv_subu]
return $lv_nr
}
Q.E.D. :fum: