Gå til innhold

Trenger litt matematisk ekspertise for en oppgave


Anbefalte innlegg

Skrevet (endret)

Dette er en av de mange hjemmeøvelsene jeg arbeider med, og den eneste hvor jeg nå står bom fast. Dersom noen med gode matematiske kunnskaper kan gi meg et friskt perspektiv på dette vil jeg være veldig takknemlig, ettersom jeg ikke får fred før jeg finner ut hvor feilen ligger. Jeg er overbevist om at programmeringen skal fungere korrekt, men at det ligger en feil i utregningen et sted.

 

Programmet skal ta utgangspunkt i en Romersk hær, trekke fra tapene den har tatt etter et angrep og legge til nye forsterkninger for neste angrep (mens den hele tiden deler opp i korrekte legioner, kohorter, osv).

 

200 soldiers = 1 centuria

3 centuria = 1 cohort

10 cohorts = 1 legion

 

Jeg har prøvd å løse dette ved å gi hver type hærstyrke en verdi, og via dem utregnet hærens totale verdi etter angrepet, og deretter delt verdien inn i hærstyrkene som er igjen etter angrepet. Dette kan sammenlignes med å gjøre om dager, timer og minutter til sekunder, og deretter dele sekundene opp i dager, timer og minutter igjen.

 

Problemet er altså at den siste utregningen kommer opp helt feil.

 

import java.util.Scanner;

public class RomanLegions

{

    public static void main(String args[])

    {

        Scanner input = new Scanner(System.in);

       

        System.out.printf("FORCES AVAILABLE FOR FIRST ASSAULT\n");

        final int initialLegions = 4;

        System.out.printf("Number of initial legions: \t%d\n", initialLegions);

        final int initialCohorts = 7;

        System.out.printf("Number of initial cohorts: \t%d\n", initialCohorts);

        final int initialCenturia = 23;

        System.out.printf("Number of initial centuria: \t%d\n", initialCenturia);

        final int initialSoldiers = 158;

        System.out.printf("Number of initial soldiers: \t%d\n", initialSoldiers);

       

        final int firstArmyValue = initialSoldiers + (initialCenturia*6000) + (initialCohorts*30*6000) + (initialLegions*10*30*6000);

       

    //  System.out.println(firstArmyValue);

       

        System.out.println();

        System.out.println("CASUALTIES AFTER FIRST ASSAULT");

        System.out.printf("Number of defeated legions: \t");

        int initialLegionsDefeated = input.nextInt();

       

        System.out.printf("Number of defeated cohorts: \t");

        int initialCohortsDefeated = input.nextInt();

       

        System.out.printf("Number of defeated centuria: \t");

        int initialCenturiaDefeated = input.nextInt();

 

        System.out.printf("Number of defeated soldiers: \t");

        int initialSoldiersDefeated = input.nextInt();

        System.out.println();

       

        final int firstDefeatedArmyValue = initialSoldiersDefeated + (initialCenturiaDefeated*6000) + (initialCohortsDefeated*30*6000) + (initialLegionsDefeated*10*30*6000);

       

        System.out.print("Amount of reinforcements (soldiers) that have arrived from Rome: ");

        int firstReinforcements = input.nextInt();

        System.out.println();

 

    //  System.out.println(firstDefeatedArmyValue);

       

        final int secondaryArmyValue = firstArmyValue - firstDefeatedArmyValue + firstReinforcements;

       

        final int solPerCen = 200;

        final int cenPerCoh = 3;

        final int cohPerLeg = 10;

        int secondarySoldiers = secondaryArmyValue;

        int secondaryCenturia = secondarySoldiers/solPerCen;

        int secondaryCohorts = secondaryCenturia/cenPerCoh;

        int secondaryLegions = initialCohorts/cohPerLeg;

       

        System.out.printf("FORCES AVAILABLE FOR SECOND ASSAULT\n");

        System.out.printf("Number of regrouped legions: \t%d\n", secondaryLegions);

        System.out.printf("Number of regrouped cohorts: \t%d\n", secondaryCohorts%10);

        System.out.printf("Number of regrouped centuria: \t%d\n", secondaryCenturia%3);

        System.out.printf("Number of regrouped soldiers: \t%d\n", secondarySoldiers%200);

      }

}

Endret av jemartinsen81
Videoannonse
Annonse
Skrevet

System.out.printf("FORCES AVAILABLE FOR SECOND ASSAULT\n");

 

 

hmm, jeg tenker høyt:

maxAntallSoldater = secondaryArmyValue

legioner = maxAntallSoldater % (200*3*10)

maxAntallSoldater = maxAntallSoldater / (200*3*10)

cohorter = maxAntallSoldater % (200*3)

maxAntallSoldater = maxAntallSodater / (200*3)

centuria = maxAntallSoldater % 200

maxAntallSoldater = maxAntallSoldater /200

soldater = maxAntallSoldater

Skrevet

Nå er det tidlig på en søndagsmorgen, men jeg er temmelig sikker på at bruken av % blir litt feil her.

 

maxAntallSoldater --> Dette er vel det totale antall soldater man har?

antallCenturia = maxAntallSoldater / 200;

antallCohort = antallCenturia / 3;

antallLegion = antallCohort / 10;

 

rest = maxAntallSoldater - (antallLegion *10*3*200);

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...