GK Explozive Skrevet 6. februar 2013 Del Skrevet 6. februar 2013 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
quantum Skrevet 6. februar 2013 Del Skrevet 6. februar 2013 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
Martinns Skrevet 9. februar 2013 Del Skrevet 9. februar 2013 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
GK Explozive Skrevet 12. februar 2013 Forfatter Del Skrevet 12. februar 2013 har fått oppgaven til no JEg gjorde som quantom sa, lagde to nye punkt, men beregningen min er litt rotete, men den er riktig //Beregn lengde omkrets = omkrets + Math.sqrt(Math.pow(nyttPunktx - punktx,2) + Math.pow(nyttPunkty - punkty,2)); Takk for svar til deg og Martinns 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
Martinns Skrevet 12. februar 2013 Del Skrevet 12. februar 2013 (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 12. februar 2013 av Martinns Lenke til kommentar
torbjørn marø Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 Fullt mulig å gjøre det slik og ja! Han kunne også sagt while(true) { // .... if(punktx == 0 && punkty == 0) break; } Jeg synes dette er renere enn å innføre en ekstra variabel. Lenke til kommentar
GeirGrusom Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 Går an å skrive do { ... } while(punkktx != 0 || punkty != 0); også. Lenke til kommentar
torbjørn marø Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 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. Lenke til kommentar
Gjest Slettet+9871234 Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 (endret) Hvorfor? Er ikke while løkker raskest? Kjenner ikke Java. Endret 13. februar 2013 av Slettet+9871234 Lenke til kommentar
GeirGrusom Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 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
Gjest Slettet+9871234 Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 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? Lenke til kommentar
medlem-230551 Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 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
medlem-230551 Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 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 Lenke til kommentar
Gjest Slettet+9871234 Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 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 Lenke til kommentar
quantum Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 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. Lenke til kommentar
Gjest Slettet+9871234 Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 Man kan jo på store datamengder ha doble, triple, ... , m løkker Lenke til kommentar
Persn Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 Hvordan i all verden gikk denne tråden fra omkretsregning til å handle om kompleksitetsanalyse og valg av programmeringsspråk Lenke til kommentar
Suppen Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 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
GeirGrusom Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 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
quantum Skrevet 13. februar 2013 Del Skrevet 13. februar 2013 Man kan jo på store datamengder ha doble, triple, ... , m løkker Ja sannelig kan man det, akkurat som på små datamengder. 1 Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå