Gebruikersavatar
Ruben01
Artikelen: 0
Berichten: 2.902
Lid geworden op: wo 02 mei 2007, 18:10

Re: [java] lussen

Ohja idd, het was 8128. De reden dat een milard berekenen zo lang duurt is omdat je telkes meer en meer getallen moet gaan bekijken of ze wel een deler zijn (bij een 100.000 bv moet je al 50000 keer door de while lus).
Hij is er gewoon met gestopt :D

Voor wie intresse heeft kan altijd kijken op de volgende webpagina: http://amicable.homepage.dk/perfect.htm
Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

Re: [java] lussen

Hij is er gewoon met gestopt :D [/url]


Waarschijnlijk omdat je int te klein is :D Probeer het ff met een long ofzo, dan zal die wel rustig verder doen :D
EvilBro
Artikelen: 0
Berichten: 7.081
Lid geworden op: vr 30 dec 2005, 09:45

Re: [java] lussen

Waarschijnlijk omdat je int te klein is
Dat denk ik niet. Een int in java is 32 bit.
Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

Re: [java] lussen

Dat denk ik niet. Een int in java is 32 bit.


Das wel waar, maar je spreekt hier wel over een signed int, dus schieten er maar 31 bits meer over. Je kan dus gaan tot 2 147 483 647, dus 1 miljard zou in principe moeten lukken, maar waarschijnlijk heeft ruben toch zijn nulletjes niet goed getelt? :D
Gebruikersavatar
Ruben01
Artikelen: 0
Berichten: 2.902
Lid geworden op: wo 02 mei 2007, 18:10

Re: [java] lussen

Das wel waar, maar je spreekt hier wel over een signed int, dus schieten er maar 31 bits meer over. Je kan dus gaan tot 2 147 483 647, dus 1 miljard zou in principe moeten lukken, maar waarschijnlijk heeft ruben toch zijn nulletjes niet goed getelt? :D
Ik heb ze wel goed getelt maar ik denk dat hij gestopt was doordat ondertussen een ander programma aan het schrijven dat ik wou testen.

Ik heb hem dan nog eens opnieuw gestart deze middag (voor alle zekerheid met 'long') maar na een uur heeft hij precies nog niks, ik ga dus maar stoppen met zoeken :D
Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

Re: [java] lussen

Oh, zie hier de reden waarom die gestopt is met een int:

5de perfecte getal: 33550336 (en dit is natuurlijk de overflow waar je for lus gaat stoppen).
EvilBro
Artikelen: 0
Berichten: 7.081
Lid geworden op: vr 30 dec 2005, 09:45

Re: [java] lussen

Cycloon schreef:Oh, zie hier de reden waarom die gestopt is met een int:

5de perfecte getal: 33550336 (en dit is natuurlijk de overflow waar je for lus gaat stoppen).
Leg eens uit...
Gebruikersavatar
Cycloon
Artikelen: 0
Berichten: 4.810
Lid geworden op: ma 24 jan 2005, 20:56

Re: [java] lussen

Leg eens uit...


Ik ben fout (ik zie het nu pas :D ), je for lus gaat gewoon door natuurlijk (al zal je while lus niet meer doorlopen worden zolang je in de negatieve waarden blijft hangen). Dan kan ik niet zo direct een reden bedenken waarom het plots is gestopt :D Het enige wat nog kan dan is dat het andere programma die Ruben draaide de VM van Java heeft afgesloten.
Lathander
Artikelen: 0
Berichten: 2.504
Lid geworden op: do 26 jan 2006, 15:49

Re: [java] lussen

Het stoppen van een lus ligt aan het feit dat de geheugenopslagplaats beperkt is.

En dan bedoel ik niet het feit dat een int 32-bits is...

als je een lus doet, gaan al je voorgaande stappen onthouden en dus opgeslagen worden...

We hebben er eens een demonstratie van gehad in een theorie les... Gewoon een for lus die moest door gaan met i++ te printen in de prompt to Integer.MAX_VALUE

na 36.000 ofzo liep ie vast...

zo kan je dus aantonen dat het een sechte manier van programeren is om methoden op te roepen op het einde van een andere methode en zo een nooit-eindigende lus te maken
"Invisible Pink Unicorns are beings of great spiritual power. We know this because they are capable of being invisible and pink at the same time. Like all religions, the Faith of the Invisible Pink Unicorns is based upon both logic and faith. We have faith that they are pink; we logically know that they are invisible because we can't see them."
Lathander
Artikelen: 0
Berichten: 2.504
Lid geworden op: do 26 jan 2006, 15:49

Re: [java] lussen

Mag m'n eigen bericht niet meer editen... grmbl...

Zelfde programma, maar dan met een dubbele for-lus. Ook een mogelijkheid

Let er natuurlijk op dat je het bestand waar je dit in plakt de juiste naam heeft...

Code: Selecteer alles

public class Perfect

{

public static void main(String[] args)

{

Input inp = new Input();

System.out.println("Geef een grenswaarde in.");

int grens = inp.readInt();

int som = 0;

for(int i = 2; i<=grens;i++)

{

som = 0;

for(int j = 1; j<i;j++)

{

if(i%j==0)

{

som +=j;

}

}

if(som==i)

{

System.out.print(som + " ");

}

}

}

}
"Invisible Pink Unicorns are beings of great spiritual power. We know this because they are capable of being invisible and pink at the same time. Like all religions, the Faith of the Invisible Pink Unicorns is based upon both logic and faith. We have faith that they are pink; we logically know that they are invisible because we can't see them."
EvilBro
Artikelen: 0
Berichten: 7.081
Lid geworden op: vr 30 dec 2005, 09:45

Re: [java] lussen

als je een lus doet, gaan al je voorgaande stappen onthouden en dus opgeslagen worden...
Nee. Kijk maar eens naar het geheugengebruik terwijl je het volgende progamma runt:

Code: Selecteer alles

for (int i = 0; i < Integer.MAX_VALUE; i++) {

   System.out.println(i);

}
Dit programma stop ook niet bij 36.000 of zo.
zo kan je dus aantonen dat het een sechte manier van programeren is om methoden op te roepen op het einde van een andere methode en zo een nooit-eindigende lus te maken
Die situatie heeft echter helemaal niks te maken met de situatie hier. Er wordt geen methode opgeroepen aan het einde van een andere methode en er is geen oneindige lus.
Lathander
Artikelen: 0
Berichten: 2.504
Lid geworden op: do 26 jan 2006, 15:49

Re: [java] lussen

EvilBro schreef:Nee. Kijk maar eens naar het geheugengebruik terwijl je het volgende progamma runt:

Code: Selecteer alles

for (int i = 0; i < Integer.MAX_VALUE; i++) {

   System.out.println(i);

}
Dit programma stop ook niet bij 36.000 of zo.

Die situatie heeft echter helemaal niks te maken met de situatie hier. Er wordt geen methode opgeroepen aan het einde van een andere methode en er is geen oneindige lus.
Toch opmerkelijk, ik heriner me duidelijk een programma te zien gekregen hebben waarin gedemonstreerd werd hoe alles vastliep omdat er teveel geheugen gebruikt werd
"Invisible Pink Unicorns are beings of great spiritual power. We know this because they are capable of being invisible and pink at the same time. Like all religions, the Faith of the Invisible Pink Unicorns is based upon both logic and faith. We have faith that they are pink; we logically know that they are invisible because we can't see them."
EvilBro
Artikelen: 0
Berichten: 7.081
Lid geworden op: vr 30 dec 2005, 09:45

Re: [java] lussen

Dat was dan gewoon een ander programma. Misschien iets in deze trant:

Code: Selecteer alles

 

public void print(int i) {

   System.out.println(i);

   if (i < Integer.MAX_VALUE) {

	  print(i+1);

   }

}
Gebruikersavatar
Ruben01
Artikelen: 0
Berichten: 2.902
Lid geworden op: wo 02 mei 2007, 18:10

Re: [java] lussen

Ik heb opnieuw een probleem, het programma waarvoor ik deze topic starte was als volgt:

Lees een getal karaktergewijs. Met de methode readChar() dient karakter per karakter gelezen te worden in een herhalingslus. Bouw uitgaande van de karaktertekens de gehele waarde op. Schrijf deze waarde tenslotte als integer op het scherm.

Voorbeeld: de karaktertekens '1''2''3' worden afzonderlijk ingelezen en het gehele getal 123 wordt daaruit gevormd en getoond op het scherm nu zou ik graag willen proberen om die 123 omgekeerd weer te geven als 321.

Code: Selecteer alles

public class Oef3_4

{

public static void main (String [] args)

{

Input inp = new Input();

System.out.print("Invoer: ");

char ch; int getal=0;

/*

 *ch = inp.readchar();

 *while(ch != '\n')

 *{

 		getal= getal*10+ (int) ch - 48;

 		ch=inp.readChar();

  }

  */

  while((ch=inp.readChar()) != '\n')

   	getal = getal*10 + (int) ch -48;

  

  System.out.println("Getal: "+getal);

  

}

}
MIJN IDEE:

ik zou gebruik maken van een getal i

in mijn luse zou ik die i telken laten optellen en daarna 10^1 doen

Code: Selecteer alles

int i=-1;

i++;

i=10^i
Nu zou ik het laatste karakter dat omgezet wordt in een getal willen vermenigvuldigen met 10, 100, 1000, ... + het voorgaande getal.

Die i=-1 in hierboven zou ik zo nemen omdat de eerste keer wanneer je een getal ingeeft i gelijk moet zijn aan 0 dus -1++=0

Ik denk dat mijn idee correct is maar het omzetten in code lukt mij niet, kan er mij iemand helpen
EvilBro
Artikelen: 0
Berichten: 7.081
Lid geworden op: vr 30 dec 2005, 09:45

Re: [java] lussen

Ik snap niet precies hoe je idee zou moeten werken. Ik kan echter wel twee andere ideeen verzinnen (twee mogelijke paden om te bewandelen). Hints die in de richting vandie ideeen zitten.

idee 1: Een String omdraaien is makkelijker dan een int omdraaien.

idee 2: 123 `mod` 10 = 3; 123 `div`10 = 12; 12 `mod` 10 = 2; 12 `div` 10 = 1; 1 `mod` 10 = 1... kijk eens naar de resultaten van de modulo's...

Terug naar “Informatica en programmeren”