Gå til innhold

Anbefalte innlegg

hei! Jeg har en oppgave som er følgende :

 

I denne oppgaven skal du skrive et program som regner ut omkretsen av

et polygon. Brukeren skal kunne skrive inn koordinatene til hjørnene av

polygonet og få beregnet omkretsen. Vi kommer til å anta at det første

punktet og siste punktet som blir gitt er origo (0; 0), og at rekkefølgen på

punktene følger ytterkanten av polygonet. Eksempelet under viser kjøring

av programmet når det brukes til å regne ut omkretsen av kvadratet med

hjørner (1; 0);(1; 1);(0; 1) og (0; 0). Omkretsen av et polygon er kun lengden av dets kanter. Vi kan regne utavstanden mellom to punkter (x1; y1) og (x2; y2) med formelen: Kvadratroten((x1 - x2)^2+(y1-y2)^2)

 

Det jeg har så langt er:

 

import java.util.Scanner;

public class OmkretsAvPolygon{

public static void main(String[] args){

Scanner tastatur = new Scanner(System.in);

// Start i origo:

double punktx = 0.0;

double punkty = 0.0;

double omkrets = 0.0;

boolean fortsett = true;

while(fortsett){

System.out.println(" Skriv inn neste punkt, avslutt med (0.0 , 0.0 ): ");

// Les inn nytt punkt

punktx = tastatur.nextDouble();

punkty = tastatur.nextDouble();

// Beregn lengde og oppdater omkretsen

// Oppdater forrige punkt

// Sett fortsett flagg

 

}

System.out.printf("Omkretsen av polygonet er %.2f%n", omkrets);

}

}

 

Det jeg trenger hjelp til å fylle inn while løkken ... Jeg sitter bomm fast :/

Lenke til kommentar
Videoannonse
Annonse

du må ihvertfall ha to punkter til

 

forrigePunktX = 0.0

forrigePunktY = 0.0

 

"Oppdater forrige punkt" og "Sett fortsett flagg" antar jeg du forstår selv?

 

Da er det beregning av avstanden som er problemet? Her må du bruke Pytagoras formel; a^2 = b^2 + c^2 hvor da b = abs(punktX - forrigePunktX) og b = abs(punktY - forrigePunktY) (forutsatt at alle punkt-koordinatene bare kan ha positiv verdi)

Lenke til kommentar

while(fortsett){
System.out.println(" Skriv inn neste punkt, avslutt med (0.0 , 0.0 ): ");
// Les inn nytt punkt
double nytt_punktx = tastatur.nextDouble();
double nytt_punkty = tastatur.nextDouble();
// Beregn lengde og oppdater omkretsen
double dx = punktx - nytt_punktx;
double dy = punkty - nytt_punkty;
omkrets += Math.sqrt(dx*dx + dy*dy);
// Oppdater forrige punkt
punktx = nytt_punktx;
punkty = nytt_punkty;
// Sett fortsett flagg
fortsett = !(punktx == 0.0 && punkty == 0.0);
}

 

Ikke bare kopier koden, studer den nøye :)

Lenke til kommentar

har fått oppgaven til no :D

JEg gjorde som quantom sa, lagde to nye punkt, men beregningen min er litt rotete, men den er riktig :p

 

//Beregn lengde

omkrets = omkrets + Math.sqrt(Math.pow(nyttPunktx - punktx,2) + Math.pow(nyttPunkty - punkty,2));

 

Takk for svar til deg og Martinns :D

Jeg har løst det på samme måte som deg, bortsett fra litt mer rotete, bare lurte på en ting.

på "Sett ffortsett flagg" skrev jeg

 

if(punktx == 0 && punkty 0){

fortsett = false;

}

 

er dette en riktig måte å gjøre det på ?

Lenke til kommentar

Hvorfor? Er ikke while løkker raskest? Kjenner ikke Java.

Forskjellen er når løkken skal avsluttes. while(expr) { } vil sjekke om den skal avslutte før den gjør noe som helst annet. do { } while(expr) vil hoppe ut etter en gjennomføring dersom uttrykket blir false.

if(expr) break; vil være det samme som do { } while(expr) i praksis, men man slipper å ta punktx og punkty i ytre scope som man må med do { } while(expr).

Lenke til kommentar

Sorry, orket ikke å sette meg inn i oppgaven din, du får sikkert hjelp av noen andre, men jeg ville bare tipse deg litt.

Jeg programmerte i Java i tre år før jeg kom borti C#. Det er ett språk Microsoft har laget, det er veldig likt Java bortsett fra at biblioteket av klasser er mye større og det er ofte klassene er veldig gode.

Jeg ville anbefalt deg å prøve dette for å se hva du syns. Det beste programmet for å programmere i C# er Microsoft Visual studio 2012. Det finne en express versjon som er gratis.

Lenke til kommentar

Sorry, orket ikke å sette meg inn i oppgaven din, du får sikkert hjelp av noen andre, men jeg ville bare tipse deg litt.

Jeg programmerte i Java i tre år før jeg kom borti C#. Det er ett språk Vetlemjuk har laget, det er veldig likt Java bortsett fra at biblioteket av klasser er mye større og det er ofte klassene er veldig gode.

Jeg ville anbefalt deg å prøve dette for å se hva du syns. Det beste programmet for å programmere i C# er Vetlemjuk Visual studio 2012. Det finne en express versjon som er gratis.

 

Hvor mye har Microsoft betalt deg for å si dette?

Lenke til kommentar

Jeg kjenner til, men har aldri brukt do while løkker. Jeg bruker kun for eller while løkker. Jeg har aldri kommet opp i en situasjon der ikke det er godt nok.

 

Er du 100 % sikker på hva som er rakest og gjelder det bare Java?

 

Har noen testet det på store datamengder?

 

Jeg er 100% sikker, og det gjelder alle programmeringsspråk. Logikken er: ikke gjør en sjekk som alltid vil føre til samme utfall.

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å
×
×
  • Opprett ny...