Ciao ragazzi vi spiego il problema....
io ho questo codice :
codice:function getCombinations(arr, n){ var i,j,k,elem,l = arr.length,childperm,ret=[]; if(n == 1){ for(var i = 0; i < arr.length; i++){ for(var j = 0; j < arr[i].length; j++){ ret.push([arr[i][j]]); } } return ret; } else{ for(i = 0; i < l; i++){ elem = arr.shift(); for(j = 0; j < elem.length; j++){ childperm = getCombinations(arr.slice(), n-1); for(k = 0; k < childperm.length; k++){ ret.push([elem[j]].concat(childperm[k])); } } } return ret; } i=j=k=elem=l=childperm=ret=[]=null; }
che mi crea delle combinazioni senza ripetizione e senza un ordine preciso, e di "n" cifre.
Quindi se noi avessimo questi elementi:
B
C
D
E
con l'aggiunta di quest'altro pezzo di codice:
codice:function combinazione() { var pi18= ("B"); var pi7= ("C"); var pi8= ("D"); var pi9 = ("E"); var arr2 = [[pi18],[pi7],[pi8],[pi9]]; var n2 = 2; var results2 = getCombinations(arr2.slice(),n2); for(var i = 0; i < results2.length; i++) { var cs1 = results2[i].slice(0,1); var cs2 = results2[i].slice(1,2); var cs1s = cs1.toLocaleString(); var cs2s = cs2.toLocaleString(); var cs1ss= cs1s.substr(0); var cs2ss= cs2s.substr(0); var elem1= (cs1ss); var elem2= (cs2ss); document.write( elem1 + elem2 + "<br>"); } }
verrebbero stampate a video le seguente combinazioni:
BC
BD
BE
CD
CE
DE
se invece volessimo combinazioni con 3 cifre, allora dovremmo inserire questo pezzo di codice:
codice:function combinazione() { var pi18= ("B"); var pi7= ("C"); var pi8= ("D"); var pi9 = ("E"); var arr2 = [[pi18],[pi7],[pi8],[pi9]]; var n2 = 3; //qui è avvenuta la modifica ! abbiamo sostituito 2 con 3 var results2 = getCombinations(arr2.slice(),n2); for(var i = 0; i < results2.length; i++) { var cs1 = results2[i].slice(0,1); var cs2 = results2[i].slice(1,2); var cs1s = cs1.toLocaleString(); var cs2s = cs2.toLocaleString(); var cs1ss= cs1s.substr(0); var cs2ss= cs2s.substr(0); var elem1= (cs1ss); var elem2= (cs2ss); document.write( elem1 + elem2 + "<br>"); } }
Ora vi descrivo il problema:
ho questo codice:
codice:function getCombinations(arr, n){ var i,j,k,elem,l = arr.length,childperm,ret=[]; if(n == 1){ for(var i = 0; i < arr.length; i++){ for(var j = 0; j < arr[i].length; j++){ ret.push([arr[i][j]]); } } return ret; } else{ for(i = 0; i < l; i++){ elem = arr.shift(); for(j = 0; j < elem.length; j++){ childperm = getCombinations(arr.slice(), n-1); for(k = 0; k < childperm.length; k++){ ret.push([elem[j]].concat(childperm[k])); } } } return ret; } i=j=k=elem=l=childperm=ret=[]=null; } function combinazione() { var importo = parseFloat(200.56); var importoN = (importo)-180; var pi18= parseFloat(160); var pi7= parseFloat(150); var pi8= parseFloat(32.75); var pi9= parseFloat(11); var pi10= parseFloat(43.34); var pi11= parseFloat(27.54); var pi12= parseFloat(90.40); var arr2 = [[pi18],[pi7],[pi8],[pi9],[pi10],[pi11],[pi12]]; var n2 = 2; var results2 = getCombinations(arr2.slice(),n2); for(var i = 0; i < results2.length; i++) { var cs1 = results2[i].slice(0,1); var cs2 = results2[i].slice(1,2); var cs1s = cs1.toLocaleString(); var cs2s = cs2.toLocaleString(); var cs1ss= cs1s.substr(0); var cs2ss= cs2s.substr(0); var elem1= parseFloat(cs1ss); var elem2= parseFloat(cs2ss); var fine = (elem1+elem2)/2; var datoimp2= (importo-fine); var datoimp2N= (importoN-fine); if (((datoimp2 < 50) && (datoimp2 > 40)) || ((datoimp2 > -50) && (datoimp2 < -40)) || ((datoimp2N > -50) && (datoimp2N < -40)) || ((datoimp2N > 50) && (datoimp2N < 40)) ) { var black2 = datoimp2; } else if ((datoimp2 < 40) || (datoimp2 > 50) || (datoimp2 > -40) || (datoimp2 < -50) ) { var black3 = " "; } } if (black2==null) { var black2 = ' '; } var allerteq= '<span>' + black2 + ' ' + black3 + ' </span><br>'; $(allerteq).appendTo('#modalita'); }
crea tutte le combinazioni (senza ordine e senza ripetizione) dei valori delle variabili.
poi c'è l' IF che praticamente fa si che venga preso solo quel valore della combinazione, compreso tra 40 e 50, o -40 e -50.
Se volessimo fare il document.write di:
codice:var datoimp2= (importo-fine); var datoimp2N= (importoN-fine);
avremmo questi risultati:
ho riportato in grassetto l'unico valore che verrebbe riportato nel div #modalitàcodice:181.33 --- 1.33 121.33 --- -58.66 161.33 --- -18.66 109.33 --- -70.66 213.83 --- 33.83 51.83 --- -128.16 136.33 --- -73.66 176.33 --- -3.66 124.33 --- -55.66 228.83 --- 48.83 66.83 --- -113.16 116.33 --- -63.66 64.33 --- -115.66 168.83 --- -11.16 6.83 --- -173.16 104.33 --- -75.66 208.83 --- 28.83 46.83 --- -133.16 156.83 --- -23.16 -5.16 --- -185.16 99.33 --- -80.66
Fino a qui nessun problema.... ma ora arriva il bello:
ammettiamo che ci sia anche questo pezzo di codice:
codice:function combinazione2() { var importo = parseFloat(24); var importoN = (importo)*(-1); var pi18= parseFloat(16); var pi7= parseFloat(14); var pi8= parseFloat(12); var pi9= parseFloat(10); var pi10= parseFloat(8); var pi11= parseFloat(12); var pi12= parseFloat(4); var arr2 = [[pi18],[pi7],[pi8],[pi9],[pi10],[pi11],[pi12]]; var n2 = 2; var results2 = getCombinations(arr2.slice(),n2); for(var i = 0; i < results2.length; i++) { var cs1 = results2[i].slice(0,1); var cs2 = results2[i].slice(1,2); var cs1s = cs1.toLocaleString(); var cs2s = cs2.toLocaleString(); var cs1ss= cs1s.substr(0); var cs2ss= cs2s.substr(0); var elem1= parseFloat(cs1ss); var elem2= parseFloat(cs2ss); var fine = (elem1+elem2)/2; var datoimp2= (importo-fine); var datoimp2N= (importoN-fine); document.write(datoimp2 + " --- " + datoimp2N +"<br>"); } var allerteq= '<span>' + ??????? + ' </span><br>'; $(allerteq).appendTo('#modalita'); }
c'è il document.write ..... quindi avremmo questi risultati :
9 --- -39
10 --- -38
11 --- -37
12 --- -36
10 --- -38
14 --- -34
11 --- -37
12 --- -36
13 --- -35
11 --- -37
15 --- -33
13 --- -35
14 --- -34
12 --- -36
16 --- -32
15 --- -33
13 --- -35
17 --- -31
14 --- -34
18 --- -30
16 --- -32
io cerco un modo che recuperi (che inserisca li dove ho messo i punti interrogativi) quel valore che ora ho riportato in grassetto.
Perché quel -37 è associato al 48.83 ....
avete qualche idea ???
scusate se mi sono spiegato da cane, e scusate se non ho trovato un titolo adeguato...![]()

Rispondi quotando