Toon posts:

[Delphi] Hagelsteen bepalen , wat doe ik verkeerD?

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik moet voor school een herkansings opdracht maken, en dat moek morgen afhebben. Dis pas de eerste applicatie, kmoet er nog een maken dus maybe vandaag nog een post, maar het zit zo:

Je moet bepalen of de invoer even is of oneven. Als hij even is, / 2 is hij oneven dan *3 + 1 En hij moet stoppen als het getal 1 is.

Ik heb het volgende maar het wil niet werken, weet iemand wat ik verkeerd doe en kan mij helpen, want ik ben nu al 3 uur bezig en niets lukt :'(:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
procedure TForm1.btngenereerClick(Sender: TObject);
Var
iPositie,
ihagel,
istartgetal: Integer;
begin
// Lees in
istartgetal := strtoint (edtstartgetal.Text);
// Voeg toe startgetal
lstbxhagel.Items.add (inttostr (istartgetal));
// Bepaal hagelshit
ihagel := istartgetal;
while ihagel > 1
do begin
   if Odd(ihagel)
   then
   //doe je oneven dingen
   ihagel := (ihagel*3) + 1
   else
   //doe je even dingen
   ihagel := ihagel / 2
   lstbxhagel.Items.add (strtoint (ihagel));
   end;
end;


/edit code aangepast

  • LegacyCode
  • Registratie: Maart 2002
  • Laatst online: 23-08 14:55

LegacyCode

De crack van de division

else if istartgetal[eindgetal] = [1,3,5,7,9]
Moet dit niet ihagel[eindgetal] zijn, zoals bij je eerste if in de lus ?

legacycode.net


  • Relix
  • Registratie: Augustus 2001
  • Laatst online: 19-11-2005

Relix

Aerith Gainsborough - Cetra

probeer eens in die while-loop:

code:
1
2
3
4
5
6
7
while ihagel > 1 do
begin
  if Odd(ihagel[eindgetal]) then
  //doe je oneven dingen
  else
  //doe je even dingen
end;

If you come here... you'll find me... I promise


  • Steven
  • Registratie: December 2000
  • Laatst online: 25-08 14:01
En als je geen Odd mag gebruiken moet je even met de modulo gaan spelen. (dat zit vast ook in Delphi)
Dus if ihagel[eindgetal]%2 = 1 then....

  • mr_fragle
  • Registratie: Oktober 2000
  • Laatst online: 18:47

mr_fragle

Don't forget the guide

Topic starter zit volgens mij op de ICA in arnhem :)
En nee, ben niet je docent :)
En ja, ik moet ook de herkansing doen :)
En nee, ik ben nog niet begonnen :P

Maar leuk topic dit, ik zal er vanmiddag ff naar kijken en dan hier posten :)

And now the most interresting part of deze grot


Verwijderd

Topicstarter
hehe :P jah, ik zal er maar ff aan beginnen want ik begin al bijna te huilen :P

Verwijderd

Topicstarter
Relix schreef op 03 november 2002 @ 12:27:
probeer eens in die while-loop:

code:
1
2
3
4
5
6
7
while ihagel > 1 do
begin
  if Odd(ihagel[eindgetal]) then
  //doe je oneven dingen
  else
  //doe je even dingen
end;
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
while ihagel > 1 do
begin
  if Odd(ihagel[eindgetal])
  then
  //doe je oneven dingen
  ihagel := ihagel / 2
  else
  //doe je even dingen
  ihagel := (ihagel*3) + 1;
  lstbxhagel.Items.add (ihagel);
   end;
end;

end.


Da heb ik nu, maar hij geeft aan, not enough actual paraz.

Wat houdt odd precies in ik ken het nl nie :)

  • Speed24
  • Registratie: Augustus 1999
  • Niet online
code:
1
if ihagel[eindgetal] mod2 = 1 then

Steven had wel gelijk, alleen dat '%' en '/' --> mod en div bij Delphi is.
Wat houdt odd precies in ik ken het nl nie
Daar heb je nou de help voor uitgevonden... odd kijkt gewoon of het getal oneven ( Eng odd = NL oneven ... ) is.

Verwijderd

Topicstarter
speed24 schreef op 03 november 2002 @ 12:40:
code:
1
if ihagel[eindgetal] mod2 = 1 then

Steven had wel gelijk, alleen dat '%' en '/' --> mod en div bij Delphi is.


[...]

Daar heb je nou de help voor uitgevonden... odd kijkt gewoon of het getal oneven ( Eng odd = NL oneven ... ) is.
sorry |:(

Verwijderd

Volgens mij heet dit het vermoeden van Collatz, maar dat terzijde..

Verwijderd

Topicstarter
Maar ik heb die functie wel goed gedefineerd?

  • Relix
  • Registratie: Augustus 2001
  • Laatst online: 19-11-2005

Relix

Aerith Gainsborough - Cetra

ik begrijp het: hij vraagt een parameter voor de functie "eindgetal" (die je gebruikt als index), maar je wil natuurlijk niet de functie, maar wel ieindgetal gebruiken... denk ik?

If you come here... you'll find me... I promise


Verwijderd

ik zou het heel anders hebben gedaan:

(in ongeveer c/c++ code)
while ( ihagel != 1 )
{
if( (ihagel % 2) == 0 ) // ihagel is een even getal
{
ihagel /= 2; // ihagel wordt door 2 gedeeld
}
else // ihagel is oneven
{
ihagel = 3 * ihagel + 1;
}

// voeg ihagel toe aan de listbox
}

Verwijderd

Topicstarter
Als het goed lukt om de functie op te roepen, dan kan die "ieindgetal" weg bij de variabele want dan heb ik die nie eg meer nodig.

Is het maybe voor mensen makkelijk als ik mijn *.pas file ergens host?

  • Relix
  • Registratie: Augustus 2001
  • Laatst online: 19-11-2005

Relix

Aerith Gainsborough - Cetra

het probleem is dat eindgetal een parameter nodig heeft, nl een string. dat is die error die je krijgt bij het compilen.

If you come here... you'll find me... I promise


  • sds
  • Registratie: Juni 2002
  • Laatst online: 28-08 19:06

sds

het probleem is dat eindgetal een parameter nodig heeft, nl een string. dat is die error die je krijgt bij het compilen.
Inderdaad maar die eindgetal functie is helemaal overbodig omdat hij gewoon Odd(iHagel) kan aanroepen...

Verwijderd

Topicstarter
hmmz ik probeer hem opnieuw te schrijven.

Verwijderd

Topicstarter
lstbxhagel.Items.add (strtoint (ihagel));

Daar geeft hij nu de fout, de recente code staat in mijn opening.

Hij geeft aan:

incompatible types Integer & extended
incompatible types string & integer

  • Relix
  • Registratie: Augustus 2001
  • Laatst online: 19-11-2005

Relix

Aerith Gainsborough - Cetra

verander strtoint naar inttostr

If you come here... you'll find me... I promise


Verwijderd

Topicstarter
ok, dom van me, maaaaar nu heb ik nog wel: incompatible types Integer & extended

  • Speed24
  • Registratie: Augustus 1999
  • Niet online
Verwijderd schreef op 03 november 2002 @ 13:31:
ok, dom van me, maaaaar nu heb ik nog wel: incompatible types Integer & extended
Bij welke regel hoort dat ? Dezelfde ?

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je doet strtoint, dus daar komt een integer uit. terwijl je andersom bedoelt neem ik aan.

Uit / komt een floating point getal. Probeer het eens met div

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
speed24 schreef op 03 november 2002 @ 13:34:
[...]

Bij welke regel hoort dat ? Dezelfde ?
Ja

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

is iHagel geen Integer meer? Dan FloatToStr gebruiken of Round/Trunc om je floating point getal om te zetten naar een int. Maar dit wordt echt te basic hoor. Lees je lesboek nog maar even lekker door :|

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Aangezien er geen komma getallen voorkomen bij hagelstenen, ziek ook nie in dat ik bijv floar moet gebruiken. En ik vraag toch gewoon om hulp omdat ik het niet snap of omdat het bijv, niet in mijn lesboek staat. Als jij het zo goed snapte had je maybe al het goeie antwoord kunnen geven, maarjah je neemt iig de moeite om het te bekijken, dat vink wel weer aardig :)

  • sds
  • Registratie: Juni 2002
  • Laatst online: 28-08 19:06

sds

Aangezien er geen komma getallen voorkomen bij hagelstenen
Bij hagelstenen misschien niet maar omdat je "/" gebruikt komt er automatisch een float(extended) uit en die kan niet aan de integer iHagel worden toegekend. "div" ipv "/" of Round(iHagel /2) geven wel een integer terug.

Verwijderd

Topicstarter
sds schreef op 03 november 2002 @ 13:50:
[...]

Bij hagelstenen misschien niet maar omdat je "/" gebruikt komt er automatisch een float(extended) uit en die kan niet aan de integer iHagel worden toegekend. "div" ipv "/" of Round(iHagel /2) geven wel een integer terug.
:D dat is me helemaal ontgaan bedankt!!! hij werkt :D

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Dankje.

Ik heb al 3 mogelijke antwoorden gegeven inmiddels voor de ene melding...

We adore chaos because we like to restore order - M.C. Escher


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Verwijderd schreef op 03 november 2002 @ 13:54:
[...]


:D dat is me helemaal ontgaan bedankt!!! hij werkt :D
Dat zei ik dus ook al in mn eerdere posts.... :?

We adore chaos because we like to restore order - M.C. Escher


  • Steven
  • Registratie: December 2000
  • Laatst online: 25-08 14:01
speed24 schreef op 03 november 2002 @ 12:40:
code:
1
if ihagel[eindgetal] mod2 = 1 then

Steven had wel gelijk, alleen dat '%' en '/' --> mod en div bij Delphi is.
Ehh, oh ok. Mijn Delphi kennis is behoorlijk NULL. Ben eigenlijk PHP'er en ik ben nu bezig om Java te tackelen :)

Bedankt voor de verbetering.

  • MaxxRide
  • Registratie: April 2000
  • Laatst online: 09-01 10:13

MaxxRide

Surf's up

Ehh, oh ok. Mijn Delphi kennis is behoorlijk NULL. Ben eigenlijk PHP'er en ik ben nu bezig om Java te tackelen
dat is te zien want in delphi kennen we geen NULL maar NIL :)

[ Voor 0% gewijzigd door MaxxRide op 03-11-2002 15:06 . Reden: foutje in quote tags. ]

If you are not wiping out you are nog pushing enough...


Verwijderd

Topicstarter
LordLarry schreef op 03 november 2002 @ 13:57:
[...]


Dat zei ik dus ook al in mn eerdere posts.... :?
Sorry je hebt helemaal gelijk, alleen ik snapte nie helemaal wat je bedoelde, nu ik weet wat je bedoelde wel, sorry.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 05:00
(jarig!)
Als je geen zin hebt om 't te programmeren, kun je ook het wiskundige bewijs leveren dat 'ie altijd op 1 uitkomt. Dat vind je docent vast ook wel goed.

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Dit heb ik nog een keer op m'n GR 'geprogrammeerd' Een getal invoeren, en dan liet hij alle stappen zien. Duurt soms best lang.

Verwijderd

Topicstarter
ik wil het programmeren omdat ik het ook gewoon wil leren :)

Nog een vraag over deze opdr8,

Hoe kan ik het grootste getal bepalen uit een listbx ? Hier staat nix over in mijn lesboek, maar ik d8 zoiets van:

code:
1
   edtmaximum.text := lstbxhagel.Items.maximum.Value;


Maar dat werkt nie, maximum bestaat nie :S en Max ook nie. en nergens op inet kan ik wat vinden dat me kan helpen, can you guys?

  • Just_a_Gamer
  • Registratie: November 2001
  • Laatst online: 29-08 19:25
waarom schrijf je geen eigen functie die alle items in je listbox langsloopt ==> Een for loop die alle items door heen loopt en result is de hoogste getal?

Overigens bestaat er wel een functie Max alleen niet bij een TItem. Het is gewoon een functie die vergelijkt tussen 2 getallen en retourneert het hoogste getal van die twee.

Verwijderd

Topicstarter
i'll try, maar ik weet nie hoe ik een item kan aanspreken uit een listbox :S??

Verwijderd

Topicstarter
Hoe kun je eigelijk values aanspreken uit de listbox, die worden pas later gemaakt, het moet toch dmv een local variabele ik heb dit kunnen vinden uit mijn boek:

code:
1
2
3
4
5
6
function Maximum (fa, fb: integer): integer;
begin
if fa > fb
then result := fa
else result := fb
end;


Hoe moek dit aanpassen zodat het gaat werken? of weet iemand anders een oplossing?

  • mr_fragle
  • Registratie: Oktober 2000
  • Laatst online: 18:47

mr_fragle

Don't forget the guide

best nog verrot dit :(
heb hele topic drie keer gelezen, maar ben de draad kwijt.
ik heb nu dit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TForm1.btngenereerClick(Sender: TObject);
var
  fpositie,
  fhagel,
  fstartgetal: single;
begin
  fstartgetal := strtofloat (edtstartgetal.text);
  lstbxresultaten.Items.add (floattostr (fstartgetal));

  fhagel := fstartgetal;
while fhagel > 1
do begin
  if odd (fhagel)
  then
  fhagel := (fhagel*3) + 1
  else
  fhagel := fhagel / 2;
  lstbxresultaten.Items.add (floattostr(fhagel));
 end

end;

end.

Maar hij loopt te zeuren over die odd: incompatible types :?
Hmmz, zal we dom foutje zijn, maarja.
Topicstarter: ik heb je toegevoegd op ICQ, misschien handig als je ff online komt, kan je me misschien helpen, en vallen we de rest niet lastig :)

And now the most interresting part of deze grot


  • Steven
  • Registratie: December 2000
  • Laatst online: 25-08 14:01
mr_fragle schreef op 04 november 2002 @ 13:44:
best nog verrot dit :(
heb hele topic drie keer gelezen, maar ben de draad kwijt.
ik heb nu dit:
code:
1
2
[...]  if odd (fhagel)
[..]

Maar hij loopt te zeuren over die odd: incompatible types :?
[..]
Ik snap geen Delphi, maar ik snap wel dat je niet een odd kan nemen van een double. Maw, is fhagel wel een Integer?

  • mr_fragle
  • Registratie: Oktober 2000
  • Laatst online: 18:47

mr_fragle

Don't forget the guide

Ik snap dat je geen odd kan nemen van een double. Maar met een integer werken werd hierboven afgeraden. Ik heb het echter nu met integers gedaan, en het werkt. Ik ben alleen benieuwd hoe de topicstarter het nu uiteindelijk gedaan heeft :?
Ik heb nu dit (en het werkt):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TForm1.btngenereerClick(Sender: TObject);
var
  ihagel,
  istartgetal: integer;
begin
  istartgetal := strtoint(edtstartgetal.text);
  lstbxresultaten.Items.add (inttostr (istartgetal));

  ihagel := istartgetal;
while ihagel > 1
do begin
  if odd (ihagel)
  then
    ihagel := (ihagel*3) + 1
  else
    ihagel := ihagel Div 2 ;
    lstbxresultaten.Items.add (inttostr(ihagel));

  end

end;

end.

And now the most interresting part of deze grot

Pagina: 1