Compensazione valori

di il
6 risposte

Compensazione valori

Salve ragazzi, ho un problema e non so dove partire. Facciamo finta di avere 5 valori che possono essere negativi o positivi di cui la somma totale è zero. Ora vorrei che questi valori positivi andassero a compensare i valori negativi in maniera "ordinata". Per cui ho ragionato con un punto di partenza, trovandomi massimo e la sua posizione e successivamente devo dire al programma di compensare gli altri valori negativi portandoli a zero. Per cui per esempio se, trovato il massimo, ho un valore negativo o entrambi i suoi adiacenti lo sono, io vado a sommare quel valore massimo al valore negativo adiacente più grande e così via, premettendo appunto che posso solo effettuare compensazioni tra valori adiacenti. Ecco come ho iniziato trovando massimo e posizione.
public static int posizioneMassimo(double[] number) {
//Variabili

number[0] = - 17019.5 * 10;
number[1] = -64 * 10;
number[2] = 258.6 * 10;
number[3] = 13632.2 * 10;
number[4] = 3192.7 * 10;

int i; //indice dell'array
double max; //valore massimo dell'array
double posmax; //indice del valore massimo
max = number[0];
posmax = number[0];
for (i = 0; i < number.length; i++) {
if (number > max) {
max = number;
posmax = i;
} else if (number[0] > 0) {
posmax = 0;
}
}
return (int) posmax;
}

public static void main(String[] args) {
System.out.println(ArrayMaxPos.posizioneMassimo(new double[5]));
}
}
ora devo scrivere un ciclo che mi compensi e sommi appunto quei valori positivi coi valori negativi facendoli diventare tutti 0, operando tra gli array in maniera adiacente.
chiaramente il system.out serve solo per farmi vedere la posizione.

6 Risposte

  • Re: Compensazione valori

    Manu151515 ha scritto:


    Facciamo finta di avere 5 valori che possono essere negativi o positivi di cui la somma totale è zero. Ora vorrei che questi valori positivi andassero a compensare i valori negativi in maniera "ordinata".
    Puoi chiarire cosa intendi per "ordinata"?
    Diciamo che hai appunto l'array { -170195, -640, 2586, 136322, 31927 } (la cui sommatoria fa appunto 0). Come vuoi farlo diventare?
  • Re: Compensazione valori

    andbin ha scritto:


    Manu151515 ha scritto:


    Facciamo finta di avere 5 valori che possono essere negativi o positivi di cui la somma totale è zero. Ora vorrei che questi valori positivi andassero a compensare i valori negativi in maniera "ordinata".
    Puoi chiarire cosa intendi per "ordinata"?
    Diciamo che hai appunto l'array { -170195, -640, 2586, 136322, 31927 } (la cui sommatoria fa appunto 0). Come vuoi farlo diventare?
    Nel senso che per esempio in questo caso: 136322 è il massimo, ma di fianco a sé non ha numeri negativi da compensare. Ecco allora che nemmeno 31927 ha nulla di fianco da compensare. Ce l'ha il mio 2586 che va a compensare il -640 portandolo a zero. quindi in posizione [1] ho 0 ora e in posizione [2] ho 2856 - 640 = 2216. ora quello da compensare diventa quello in [0], ma di fianco ora ho in posizione [1] lo zero compensato di prima. ecco allora che il 2216 andrà a cercare di compensare il primo numero per provare a portarlo a zero, e non facendocela completamente richiamerà quello che c'è in posizione [3] e poi in posizione [4].
    nel caso avessi per esempio { 2586, -640, 136322,-170195, 31927 }, a quel punto riconosco che il massimo è nella posizione [2] e che deve scegliere di compensare prima -170195 (perchè il neg piu grande) . quindi in [3] avrò -170195 + 136322 = -33.873 che poi verrà compensato dal 31927 in [4]. non facendocela completamente il 2856 che viene riconosciuto come massimo a questo punto prima compensa -640 e poi porta a 0 quello che c'è rimasto in [3]
  • Re: Compensazione valori

    Continua a non esser chiaro.
    Che faresti con {-1,0,2,0,-1}?
  • Re: Compensazione valori

    Weierstrass ha scritto:


    Continua a non esser chiaro.
    Che faresti con {-1,0,2,0,-1}?
    A quel punto quel due andrebbe a dividersi semplicemente e a compensare le posizioni "estreme" (teoricamente passando per gli zeri prima)
  • Re: Compensazione valori

    Manu151515 ha scritto:


    Weierstrass ha scritto:


    Continua a non esser chiaro.
    Che faresti con {-1,0,2,0,-1}?
    A quel punto quel due andrebbe a dividersi semplicemente e a compensare le posizioni "estreme" (teoricamente passando per gli zeri prima)
    Semplice mica tanto, visto che hai appena aggiunto una regola che non avevi menzionato prima e a cui probabilmente non avevi pensato. Che faresti con {4,0,-8,0,4}? Con {-3,0,4,0,-3,0,4,0,-3,0,4,0,-3}? Con un array da un milione di elementi come si procede senza uno schema definito?

    Viste le premesse solo tu puoi scrivere quello che ti serve.
  • Re: Compensazione valori

    Weierstrass ha scritto:


    Manu151515 ha scritto:


    Weierstrass ha scritto:


    Continua a non esser chiaro.
    Che faresti con {-1,0,2,0,-1}?
    A quel punto quel due andrebbe a dividersi semplicemente e a compensare le posizioni "estreme" (teoricamente passando per gli zeri prima)
    Semplice mica tanto, visto che hai appena aggiunto una regola che non avevi menzionato prima e a cui probabilmente non avevi pensato. Che faresti con {4,0,-8,0,4}? Con {-3,0,4,0,-3,0,4,0,-3,0,4,0,-3}? Con un array da un milione di elementi come si procede senza uno schema definito?

    Viste le premesse solo tu puoi scrivere quello che ti serve.
    Capisco cosa mi stai dicendo. Di base diciamo che vorrei compensasse tramite array successivi o precedenti. E per partire ho deciso di riconoscere prima il valore massimo per avere un punto di partenza.
    Poi come dici tu ci sono degli altri casi, ma visto che lavorerei con un massimo di 5 array la cosa sarebbe "ridotta".
Devi accedere o registrarti per scrivere nel forum
6 risposte