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:
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
ho riportato in grassetto l'unico valore che verrebbe riportato nel div #modalità
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...