Gå til innhold

Skjekke om et tall er partall eller oddetall


Anbefalte innlegg

Jeg driver og lager et lite program i java og jeg lurte på hvordan man skjekker om et tall er partall eller oddetall.

 

Greia går ut på at en bruker taster inn et tall og så skal programmet altså sjekke om det er partall eller oddetall.

 

Har prøvd dette:

System.out.print("Trykk inn et random heltall for å skjekke om algoritmen terminerer: ");

tall = heltall.inInt();

while (tall != 1) {

if (tall % 2) {

tall = tall / 2;

} else {

tall = (3 * tall) + 1;

 

men får en feilmelding av kompilatoren som sier Found: int required: boolean.

 

Hadde vært kult om noen kunne hjelpe meg med dette :)

Lenke til kommentar
Videoannonse
Annonse

		System.out.print("Trykk inn et random heltall for å skjekke om algoritmen terminerer: ");
	tall = heltall.inInt();
	while (tall != 1) {
		if (tall % 2 == 0) {
		tall = tall / 2;
		} else {
		tall = (3 * tall) + 1;

 

Tror det skulle fungere nå. Jeg la til == 0 i if-testen, så du får et boolsk uttrykk der.

Endret av Mr.Garibaldi
Lenke til kommentar
Gjest Slettet+1374861

hva skulle den utføre egentlig?

*stusset litt på:

if (tall % 2) {

tall = tall / 2;

} else {

tall = (3 * tall) + 1;

*

 

public boolean erPartall(int tall)
{
if(tall % 2 == 0)
	return true;
else
	return false;
}

Lenke til kommentar

Skulle ikke utføre noe spesielt egentlig, men det er en algoritme som ikke er motbevist. Alle tall skal til slutt gå opp i en ved bruk av algoritmen, men dette er som sagt ikke bevist fordi det ikke finnes nok PC kraft i verden til å teste alle mulige tall.

 

Lagde et lite program for morroskyld som testet alle tall opp til 200 millioner.

Lenke til kommentar
Gjest Slettet+1374861
Skulle ikke utføre noe spesielt egentlig, men det er en algoritme som ikke er motbevist. Alle tall skal til slutt gå opp i en ved bruk av algoritmen, men dette er som sagt ikke bevist fordi det ikke finnes nok PC kraft i verden til å teste alle mulige tall.

 

Lagde et lite program for morroskyld som testet alle tall opp til 200 millioner.

 

Alle tall skal til slutt gå opp i en?? Hvordan da mener du?

Og "alle"? Det er vel i utgangspunktet likegyldig hvor sterk maskin du har, antall tall som finnes er jo uendelig.

Lenke til kommentar

Man kan vel bevise ved induksjon at alle partall er delelig med 2, dersom man utfører heltallsdivisjon med 2 og ikke får noen rest, så er tallet et partall. (har ikke tenkt å prøve)

 

9 / 2 = 4 (9 % 2 = 1)

8 / 2 = 4 (8 % 2 = 0)

7 / 2 = 3 (7 % 2 = 1)

6 / 2 = 3 (6 % 2 = 0)

5 / 2 = 2 (5 % 2 = 1)

4 / 2 = 2 (4 % 2 = 0)

3 / 2 = 1 (3 % 2 = 1)

2 / 2 = 1 (2 % 2 = 0)

1 / 2 = 0 (1 % 2 = 1)

0 / 2 = 0 (0 % 2 = 0) (er ikke helt sikker på om 0 er et heltall, spørs vel hvordan man definerer hva et heltall er)

 

Dersom et tall ikke er et heltall, så er det et oddetall :D

 

viCtim's kode er en litt mer elegant metode for å sjekke om tallet er et partall eller ikke, tror du roter deg bort å gjør det litt vanskeligere en hva det trenger å være. Skjønner ikke helt hvordan trådstarters kode var tenkt å fungere.

public boolean erPartall(int tall)
{
if(tall % 2 == 0)
	return true;
else
	return false;
}

Lenke til kommentar

Til de som ikke gidder å lese wiki artikkelen så er tingen den at man tror(men ikke bevist) at hvis man utfører disse operasjonene på hvilket som helst tall, så vil man til slutt ende opp med å få tallet 1.

Hvis tallet er et partall: Tall = tall / 2

Hvis tallet er et oddetall: Tall = tall*3 + 1

Lenke til kommentar

Kan ikke si jeg skjønner så mye av wiki artikkelen, men denne tråden hadler om "Skjekke om et tall er partall eller oddetall"? Selv om trådstarters orginale kode kan minne om det som står i wiki artikkelen, så er fortsatt spørsmålet her:

 

"Jeg driver og lager et lite program i java og jeg lurte på hvordan man skjekker om et tall er partall eller oddetall.

Greia går ut på at en bruker taster inn et tall og så skal programmet altså sjekke om det er partall eller oddetall..."

 

Mulig jeg har misforstått da :D

Lenke til kommentar
Nei :) Driver bare på for moro, men går INF1010 på UIO.

 

Takk for hjelpen forresten garibaldi :)

 

Bare hyggelig :)

 

LostOblivion, hvorfor skille det ut i en egen metode? Det vil jo bare gi mer overhead, og siden den løkken kommer til å kjøre mange ganger (forutsatt stort tall) er jo ikke det ønskelig...

Lenke til kommentar
Gjest Slettet+1374861
LostOblivion, hvorfor skille det ut i en egen metode? Det vil jo bare gi mer overhead, og siden den løkken kommer til å kjøre mange ganger (forutsatt stort tall) er jo ikke det ønskelig...

 

Gitt at dette er det ENESTE han skal foreta seg med "isOdd" så vil det bli overhead ja, men i god objektorientert stil så vil man helst slippe å gjenta kode så er vel det han har tatt høyde for her, at man skal slippe å måtte bruke den samme kodesnutten i en annen del av koden.

 

Men som sagt, nødvendig i denne sammenhengen er det vel neppe....

Og vil du egentlig få overhead for hvert kall her da? Ser for meg at det kun blir overhead ved første kall, eller tar jeg feil? (Har ikke noe god kunnskap om dette så er vel egentlig bare gjetting)

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å
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...