Gå til innhold

Anbefalte innlegg

Skrevet

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 :/

Videoannonse
Annonse
Skrevet

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)

Skrevet

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 :)

Skrevet

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å ?

Skrevet (endret)
if(punktx == 0 && punkty == 0){
fortsett = false;
}

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

 

Fullt mulig å gjøre det slik og ja!

Endret av Martinns
Skrevet

Går an å skrive do { ... } while(punkktx != 0 || punkty != 0); også.

Mange, mange år siden jeg rotet med Java, så jeg våget ikke å komme med den (ikke alle språk som har denne konstruksjonen). Men gitt at den altså finnes i Java så er do-while selvsagt den mest "riktige" løsningen her.

Gjest Slettet+9871234
Skrevet (endret)

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

Endret av Slettet+9871234
Skrevet

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

Gjest Slettet+9871234
Skrevet

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?

Skrevet

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.

Skrevet

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?

foreach løkke er jo veldig kjekt ofte. Hvis ditt språk har det ville jeg lært meg det ;)

Gjest Slettet+9871234
Skrevet

Med ett er religionskrigen i gang igjen. Til å utviklet Web steder bruker jeg kun HTML, CSS, JavaScript og PHP samt plattformen DreamWeaver CS6. Dersom jeg trenger en plattform til å utvikle desktop applikasjoner foretrekker jeg Embarcadero RAD Studio XE

Skrevet

 

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

 

Har noen testet det på store datamengder?

Om det er raskere med N iterasjoner enn N+1? Øh, ja, men forskjellen avtar selvfølgelig som N øker, hvis det er det du mener med "store datamengder". Om det er signifikant i det heletatt kommer an på hva løkka inneholder, selvfølgelig.

Gjest Slettet+9871234
Skrevet

Man kan jo på store datamengder ha doble, triple, ... , m løkker

Skrevet

Hvordan i all verden gikk denne tråden fra omkretsregning til å handle om kompleksitetsanalyse og valg av programmeringsspråk :huh:

Skrevet

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?

Skrevet

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.

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