Gå til innhold

Hjelp til å finne gjennomsnitt i array.


Anbefalte innlegg

Hei! :)

Har en oblig i programmering (java) som lyder:

"Du skal lage et program som trekker tilfeldige tall og lagrer dem i en array. Hvor mange tall som skal trekkes er avhengig av arrayens lengde, som er parameter i klassens konstruktør. (Hele arrayen skal fylles!) Programmet skal imidlertid bare lagre de tall som ikke er trukket allerede. (Dvs. arrayen skal inneholde KUN ÈN forekomst av hvert tall.) Alle tall som trekkes skal være i intervallet 100 til 1000, begge grenser inkludert. Disse grensene skal defineres som navngitte konstanter.
Når alle tallene er generert og lagret i arrayen, skal programmet finne den største, minste og gjennomsnittlige verdien av tallene i arrayen. I tillegg skal det finne den verdien som er nærmest gjennomnstittetsverdien.
Til slutt skal programmet skrive ut, i et tekstområde, tallene i arrayen, samt resultatet av beregningene som er beskrevet over:"

 

Noen som kan hjelpe meg med hvordan man finner gjennomsnitt og tallet som er nærmest gjennomsnitt?

 

Står fast!!! :omg:

Lenke til kommentar
Videoannonse
Annonse

Gjennomsnitt regnes ut ved at man legger sammen alle elementene og deler på antall elementer.

 

Gjennomsnitt av [1, 4, 6, 8] er (1+4+6+8)/4 = 4,75.

 

Du må bruke en form for loop til å gjøre dette.

 

Når du vil ha hjelp med programmering så bør du legge ut det programmet du har allerede i code-tags. Det blir det samme som å levere inne en bil på verksted: du må levere inn bilen for å få hjelp med den.

Lenke til kommentar
  • 6 måneder senere...

0. For å sikre unike verdier må du iterere gjennom arrayen og finne ut om denne verdien befinner seg i noen av skuffene

1.sorter arrayen ->

2. da vil du finne at den største og minste verdien befinner seg i hver sin ende av arrayen

3. For gjennomsnitt: må du regne sum av alle elemenne og dele på antall elementer

4. For å finne det elementet som er nærmest gjennomsnitt verdien, kan du benytte deg av: 

int currentLowest = array[0];
for(int i = 1; i < array.length; i++)
    if(abs(gjennomsnittVerdi, array[i]) < currentLowest)
       currentLowest = abs(gjennomsnittVerdi, array[i]);
Lenke til kommentar

Jeg ville ikke sortert array'en, det er unødvendig.

 

1. Deklarer 3 variabler for å holde på minimumsverdi, maksimumsverdi og summen av alle array-elementer (sett alle lik første element i array'en)

2. Gå gjennom hele array'en (unntatt første element, du har jo allerede satt variablene til denne verdien), og oppdater minimumsverdien hvis verdien i array'en er mindre enn denne, maksimumsverdien hvis verdien i array'en er større enn denne, og oppdater variabelen med summen av alle array-elementer ved å legge til verdien i array'en

3. Når du har gått gjennom hele array'en inneholder de 3 variablene nettopp det jeg sa de skulle brukes til i punkt 1, gjennomsnittet finner du ved å dele summen på antall elementer i array'en

4. Deklarer en ny variabel for å holde på indeksen til elementet som er nærmest gjennomsnittsverdien, sett denne til 0

5. Gå gjennom array'en på nytt (unntatt første element, som i punkt 2), hvis forskjellen mellom verdien i array'en og gjennomsnittsverdien er mindre enn forskjellen mellom array-verdien med indeks lik variabelen du opprettet i punkt 4 og gjennomsnittsverdien, oppdaterer du variabelen med indeksen

6. Nå inneholder variabelen i punkt 4 indeksen til verdien som er nærmest gjennomsnittet, da er det bare å skrive ut resultater

 

Her er et forslag til hvordan koden kan se ut (den er ikke testet):

class ArrayStats {

  public final int    min;
  public final int    max;
  public final int    sum;
  public final double avg;
  public final int    avgIndex;

  public ArrayStats(int[] values) {
    int min = values[0];
    int max = values[0];
    int sum = values[0];
    int avgIndex = 0;

    // find minimum, maximum and sum of all elements
    for (int i = 1; i < values.length; i++) {
      if (values[i] < min) min = values[i];
      else if (values[i] > max) max = values[i];
      sum += values[i];
    }
    this.min = min;
    this.max = max;
    this.sum = sum;
    // calculate average value
    this.avg = (double)sum / values.length;
    // find index of value closest to average value
    for (int i = 1; i < values.length; i++) {
      if (Math.abs(values[i] - this.avg) <
          Math.abs(values[avgIndex] - this.avg))
        avgIndex = i;
    }
    this.avgIndex = avgIndex;
  }

}
Endret av jonny
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...