Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  11 1061
Jeg har begynt og jobbe på javabok.no boka og er på oppgave 3 side 113.

Oppgaven går ut på
Et år er skuddår dersom det er delelig med 4. Unntaket er århundrene, de må være delelig med 400.
Tegn aktivitetsdiagram som viser algoritmen for å finne ut av et år er skuddår.
Årstallet skal leses inn fra brukeren. Sett opp testdata. Lag og prøv ut programmet.
Vis hele sitatet...
1. skrive inn år
2. skal sjekker om det er ett århundre. hvis det er TRUE så deles på 400
3. ellers deles på 4
4. bruke Double og om det er noe etter xxx.12 så FALSE er det xxx.00 så TRUE

tips taes imot med hjelp til utforming av kode.
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Blås i double i dette tilfellet - bruk modulo (x % y) som gir resten av en heltallsdivisjon.
eks. 5 % 2 = 1 fordi heltallsdivisjon 5/2 gir 4 og rest 1
80 % 60 = 20, osv.
Sist endret av robhol; 27. mai 2011 kl. 23:49.
Trådstarter
har funnet ut av litt nå.
må finne ut av, 200, 300, 400 osv.
århundrene må jo deles med 400.

Kode

/**
* Oppgave 3, javabok.no
*
* Version 2 av skuddår regning
*
*
*
*/


import static javax.swing.JOptionPane.*;
class SkuddÅr {
	public static void main(String[] args) {
		String årLest = showInputDialog("Skriv inn hvilket år du lurer på som er skuddår");
		int år = Integer.parseInt(årLest);

		int skuddAAr = 0;
		skuddAAr = år % 4;

		if (skuddAAr > 1 ) {
		showMessageDialog(null, "Året: "+år+ " er ikke skuddår. " +skuddAAr);
		}
		else {
		showMessageDialog(null,"Året: "+år+ " er skuddår.  " +skuddAAr);
		}
	}
}



/**

2000 = 1
2002 = 0
2004 = 1
2006 = 0
2008 = 1
2010 = 0
2012 = 1

*/
Sist endret av Ejii; 28. mai 2011 kl. 00:34.
Skriv opp alt som skal være skuddår, og alt som ikke skal være det...

Alle år som er delelig på 4, skal i utgangspunktet være skuddår. I tillegg må de som er delelig på 100 også være delelig på 400.

Hvis du ser på det slik:

A = delelig på 4
B = delelig på 100
C = delelig på 400

alt som er delelig på 400 er også delelig på 100 og 4, siden de er faktorer.
Enten må året være delelig på 400, eller så må det være delelig på 4, men ikke 100.

så: C || (A && !B)

altså, alle C er skuddår, men bare A som også ikke er B er skuddår.

i kode:

int y = 1932; // år
bool erSkuddAar = (y % 400 == 0 || (Y % 4 == 0 && !(Y % 100 == 0)));

Lurt å lære seg å oversette slikt til boolsk algebra så fort som mulig

Edit: husker ikke hva bool heter i Java, og ! er "NOT", && er "AND" og || er "OR". I tillegg har du ^ som er "XOR" som kan være nyttig etter hvert...
Sist endret av phish; 28. mai 2011 kl. 01:50.
z0p
uʍop ǝpısdn
z0p's Avatar

Kode

import java.io.* ;
class Leap {
    public static void main(String[] args) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Enter a year: ");
        try { int year = Integer.parseInt( br.readLine() );
              System.out.println( String.format("Leap year %1$b",
              ((year%400==0)||(year%4==0&&!(year%100==0))) ));
        } catch (IOException err) { System.out.println("Input error"); }
    }
}
Nå var phish ute litt før meg, og reddet meg fra en liten blemme også uansett..
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Det er mulig jeg tar feil, men vil ikke feil input resultere i en NumberFormatException, ikke en IOException?
Sist endret av robhol; 28. mai 2011 kl. 14:13.
Sitat av robhol Vis innlegg
Det er mulig jeg tar feil, men vil ikke feil input resultere i en NumberFormatException, ikke en IOException?
Vis hele sitatet...
Jovisst...
z0p
uʍop ǝpısdn
z0p's Avatar
Sitat av robhol Vis innlegg
Det er mulig jeg tar feil, men vil ikke feil input resultere i en NumberFormatException, ikke en IOException?
Vis hele sitatet...
Du tar nok ikke feil. IOException var myntet på br. Du vil nok gjerne ha en catch-clause til for NumberFormatException
Trådstarter
all raight!

beklager for tregt svar, jobb og en tur på byen

jeg skal jobbe med dette i morgen men noen liter red bull

litt "avansert" koding for jeg som er på kapittel2 i boka mi. skader ikke og gleder meg til og utforske dette.

igjen, tusen takk for svar og kodesnutter!!!


mvh
-E

yess, tror at jeg endelig har klart det.


Kode

import static javax.swing.JOptionPane.*;
class SkuddÅr {
	public static void main(String[] args) {

		String årLest = showInputDialog("Skriv inn hvilket år du lurer på som er skuddår");

		int år = Integer.parseInt(årLest);

		int buffer1 = år % 4;
		int buffer2 = år % 400;
		int erSkuddÅr = buffer1 + buffer2;

		if (erSkuddÅr <= 0) {
		showMessageDialog(null, "Året: "+år+ " er skuddår.");
		}
		else {
		showMessageDialog(null,"Året: "+år+ " er ikke skuddår.");
		}
	}
}
Etter mine tester så fungerer det dær meget bre. Tusen takk for all hjelp og tips!
Sitat av Ejii Vis innlegg
all raight!

beklager for tregt svar, jobb og en tur på byen

jeg skal jobbe med dette i morgen men noen liter red bull

litt "avansert" koding for jeg som er på kapittel2 i boka mi. skader ikke og gleder meg til og utforske dette.

igjen, tusen takk for svar og kodesnutter!!!


mvh
-E

yess, tror at jeg endelig har klart det.


Kode

import static javax.swing.JOptionPane.*;
class SkuddÅr {
	public static void main(String[] args) {

		String årLest = showInputDialog("Skriv inn hvilket år du lurer på som er skuddår");

		int år = Integer.parseInt(årLest);

		int buffer1 = år % 4;
		int buffer2 = år % 400;
		int erSkuddÅr = buffer1 + buffer2;

		if (erSkuddÅr <= 0) {
		showMessageDialog(null, "Året: "+år+ " er skuddår.");
		}
		else {
		showMessageDialog(null,"Året: "+år+ " er ikke skuddår.");
		}
	}
}
Etter mine tester så fungerer det dær meget bre. Tusen takk for all hjelp og tips!
Vis hele sitatet...
Kan virkelig ikke skjønne at det der fungerer.

1984 er et skuddår. 1984 % 400 = 384.

384 er større enn 0...ergo, ikke skuddår?

Vil virkelig anbefale deg å se på posten min en gang til, om du vil forstå hvordan du skal gjøre det skikkelig
Trådstarter
helt vanvittig, prøvde i flere timer med boolsk algebra igår men fikk ingenting til. kom hjem ifra jobb og fikk til på første forsøk.

her er version nummer3, og bool = boolean i java. har litt kjennskap med logiske operatører ifra gk elektro og noen asm kommandoer.

Kode

import static javax.swing.JOptionPane.*;
class SkuddÅr {
	public static void main(String[] args) {

		String årLest = showInputDialog("Skriv inn hvilket år du lurer på som er skuddår");

		int år = Integer.parseInt(årLest);

		boolean erSkuddÅr = (år%4==0 || år%400==0);

		if (erSkuddÅr == true) {
		showMessageDialog(null, "Året: "+år+ " er skuddår.");
		}
		else {
		showMessageDialog(null,"Året: "+år+ " er ikke skuddår.");
		}
	}
}
men jeg skjønner ikke hvorfor det måtte deles på 100 ?

skuddår er jo delelig på 4, og århundrene skal deles på 400.

edit: sjekket litt på wiki, ikke verdens beste i allefall.
http://no.wikipedia.org/wiki/Skuddår
jeg er ikke verdens smarteste da heller. mulighet for feil =)
Sist endret av Ejii; 30. mai 2011 kl. 16:52.
Du har den nesten, men problemet er at alle århundrer er delelig på 4 (25 * 4 = 100), if-testen din vil dermed være sann for århundrene. Århundrene er bare skuddår dersom de er delelig på 400.

Hvis du setter opp følgende påstander blir det lettere å se:
p = Året er delelig på 4
q = Året er delelig på 100 (Et århundre)
r = Året er delelig på 400

"Formelen" for skuddår blir dermed hvis (p og ikke q) eller r
Oversatt til java blir dette: if((year%4==0&&!(year%100==0))||year%400) som z0p skrev tidligere