Toon posts:

Delphi vraag over array

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben net bezig met leren van delphi. Ik probeer wat te programmeren met een array maar op de een of andere manier werkt het niet. Ik heb zo het gevoel dat het aan de syntax lig.... maar in het help bestand kan ik dat niet vinden.

code:
1
2
3
4
5
for tellen := 1 to 5 do begin
if invoerwaarden[tellen] = hoogsteworp then counthoogsteworp := counthoogsteworp + 1
end

;


ik heb dus een array gedeclareerd 'invoerwaarden' met 5 elementen. Er zitten nu 5 ingevulde getallen in en in hoogsteworp staat het hoogste getal. Nu wil ik tellen hoe vaak dit getal voorkomt maar dit werkt niet. Ziet iemand wat ik fout doe...

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Je code klopt.

"counthoogsteworp := counthoogsteworp + 1" kan je misschien beter "inc(counthoogsteworp)" van maken.

Wat is dan de inhoud van je array? Wat staat er in "hoogsteworp"

Heb je de debugger en de watches al ontdekt?

Siditamentis astuentis pactum.


  • MerijnB
  • Registratie: Oktober 2000
  • Laatst online: 18:38
if invoerwaarden[tellen] = hoogsteworp then counthoogsteworp := counthoogsteworp + 1

daar mag een ; achter misschien ? :)

Merijn

A software developer is someone who looks both left and right when crossing a one-way street.

Dé antenne-innovatie voor de korte golf


Verwijderd

Topicstarter
mijn array bevat bijvoorbeeld {12,12,12,1,1} en hoogsteworp= 12
Ik wil dus dat er uiteindelijk in counthoogsteworp 3 uitkomt.
Maar hij gaat er wel overheen maar ook als het bij 1 in de array is dan ziet ie niet dat 12 = 12 en wordt er niet geteld. Ook niet met de ; erbij.

Btw is het normaal dat delphi telt van 5 tot 1 ??

  • MerijnB
  • Registratie: Oktober 2000
  • Laatst online: 18:38
wat werkt er niet dan ?
compileerd het niet of werkt het niet ?

zet het ff in een zipje en zet het ergens neer zodat we kunnen kijken

ow, en delphi KAN wel van 5 naar 1 tellen, maar niet in de lus die jij daar heb staan... dan moet je

code:
1
2
3
for Counter := 5 downto 1 do 
begin 
end;



doen

A software developer is someone who looks both left and right when crossing a one-way street.

Dé antenne-innovatie voor de korte golf


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Yep, de compiler wil weleens een loopje andersom maken, als hij denkt dat 't daar sneller van gaat.

Siditamentis astuentis pactum.


Verwijderd

Topicstarter
Ik zal even een zipje maken... maar het rare is ik heb inderdaad een loop gemaakt van 1 to 5 maar als ik het volg met F7 dan zie ik dat ie telt van 5 naar 1 .. heel raar

Verwijderd

Topicstarter
http://www.cafetariaspierings.nl/~webmaster/progje.zip

Let even niet op het host adres :D ooit een site voor gemaakt dus

Verwijderd

Topicstarter
voor als het bestand niet werkt ofzo ..

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
25
26
27
28
Program Dobbelronde;

var
invoerwaarden: array [1..5] of Integer;
inlezen: Integer;
hoogstebepalen: Integer;
hoogsteworp : Integer;
tellen : Integer;
counthoogsteworp : Integer;

begin 
for inlezen := 1 to 5 do begin
read (invoerwaarden[inlezen])
end

; hoogsteworp :=1;

for hoogstebepalen := 1 to 5 do begin
if invoerwaarden[hoogstebepalen] > hoogsteworp then hoogsteworp:= invoerwaarden [hoogstebepalen]
end

;

for tellen := 1 to 5 do begin
if invoerwaarden[tellen] = hoogsteworp then counthoogsteworp := counthoogsteworp + 1;
end;

end.

  • VonAalscht
  • Registratie: November 2001
  • Laatst online: 27-08 16:18

VonAalscht

Raaaar

Ik heb het idee dat die twee loops verkeerd om staan, niet :S ?

Verwijderd

Normaal gesproken loopt een array vanaf element "0" en niet "1". Het zou (volgens mij) dus het volgende moeten zijn:

for tellen := 0 to 4 do begin

Verwijderd

Topicstarter
welke twee ?

Verwijderd

Topicstarter
ok ik zal eens met 0 proberen tnx

  • CyeZ
  • Registratie: September 2001
  • Laatst online: 14:35

CyeZ

Vroem vroem!!!

Geen idee wat er bij jou aan de hand is CptEO, maar hier werkt het gewoon.
Als ik die zut run en een beetje erdoorheen step dan kan ik de variabele 'counthoogsteworp' in eerste instantie niet uitlezen (vanwege optimalisatie).

Maar ik kan in dat loopje gewoon een paar keer writeln aanroepen om te zien wat er in de variabele staat.

Als ik als invoer dan bv {12,12,10,3,1} neem dan komt er ook netjes 2 als resultaat uit.

[18:54] <Prammenhanger> |HunterPro|eet
[18:55] <Prammenhanger> lijkt best op
[18:55] <Prammenhanger> |HunterProFeet


  • VonAalscht
  • Registratie: November 2001
  • Laatst online: 27-08 16:18

VonAalscht

Raaaar

Het is mij niet helemaal duidelijk wat die tweede loop nou moet doen ? Waarom doe je niet zoiets:
code:
1
2
3
for hoogstebepalen := 1 to 5 do begin 
 doe iets
end;


Bij het doe iets voor je de hele meuk uit ? Dan heb je toch gewoon de hoogste ?

  • CyeZ
  • Registratie: September 2001
  • Laatst online: 14:35

CyeZ

Vroem vroem!!!

Verwijderd schreef op 18 September 2002 @ 08:22:
Normaal gesproken loopt een array vanaf element "0" en niet "1". Het zou (volgens mij) dus het volgende moeten zijn:

for tellen := 0 to 4 do begin
Tellen van 0 is een C aanwensel. In pascal varianten is het gebruikelijker om vanaf 1 te beginnen te tellen.

[18:54] <Prammenhanger> |HunterPro|eet
[18:55] <Prammenhanger> lijkt best op
[18:55] <Prammenhanger> |HunterProFeet


Verwijderd

Topicstarter
echt waar ??? Hoe kan dat nou gvd.... Ik snap er echt niets van... Ik gebruik gewoon Borland Delphi.... is daar soms iets mis mee ofzo ?

  • CyeZ
  • Registratie: September 2001
  • Laatst online: 14:35

CyeZ

Vroem vroem!!!

Huurmoordenaars schreef op 18 september 2002 @ 08:25:
Het is mij niet helemaal duidelijk wat die tweede loop nou moet doen ? Waarom doe je niet zoiets:
code:
1
2
3
for hoogstebepalen := 1 to 5 do begin 
 doe iets
end;


Bij het doe iets voor je de hele meuk uit ? Dan heb je toch gewoon de hoogste ?
Hij wil kijken hoe vaak het hoogste getal voorkomt.
Dus als het hoogst gegooide getal meerdere keren is gegooit dan wil hij weten hoe vaak dat hoogstegetal is gegooid.

[18:54] <Prammenhanger> |HunterPro|eet
[18:55] <Prammenhanger> lijkt best op
[18:55] <Prammenhanger> |HunterProFeet


  • baggah
  • Registratie: December 2000
  • Laatst online: 28-08 22:47
probeer die loopjes gewoon in 1 te doen dus
code:
1
2
3
4
5
6
7
begin 
hoogstewaarde := 0;
for inlezen := 1 to 5 do begin
read (invoerwaarden[inlezen])
if invoerwaarden[inlezen] > hoogsteworp then hoogsteworp:= invoerwaarden [inlezen]
if invoerwaarden[inlezen] = hoogsteworp then counthoogsteworp := counthoogsteworp + 1;
end


Verder snap ik niet echt wat counthoogsteworp voor nut heeft.. .want je telt aan het eind (dus na alles) wat de hoogste waarde is dus is in jouw proggie het altijd +1.
In mijn versie wordt hij iedere keer bij een hogere worp opgehoogt.

foutje bovenstaande is dus dat is niet waar... ochtend foutje :)

[ Voor 0% gewijzigd door baggah op 18-09-2002 08:29 . Reden: foutje ]


  • Coltrui
  • Registratie: Maart 2001
  • Niet online

Coltrui

iddqd

Zet eens haakjes rond je condities - wil soms wel eens helpen.
Initialiseer CountHoogsteWorp - soms zit er brol in je variabale en als je dan + 1 gaat doen kan dat rare resultaten opleveren.
Initialiseer hoogste worp als 0 - als alle waarden in je array de waarde nul hebben, krijg je foutief resultaat.

  • MerijnB
  • Registratie: Oktober 2000
  • Laatst online: 18:38
CptEO, hier werkt ie ook gewoon,

twee tipjes:
- zet tijdens het programmeren je optimalisatie uit (ctrl-alt-F11, table compiler, vinkje optimization) dat voorkomt en hoop vraagtekens
- probeer zo snel mogelijk beginnen met het goed uitlijnen van je code als je begint met programmeren, dat maakt alles een stuk duidelijker

A software developer is someone who looks both left and right when crossing a one-way street.

Dé antenne-innovatie voor de korte golf


  • CyeZ
  • Registratie: September 2001
  • Laatst online: 14:35

CyeZ

Vroem vroem!!!

Verwijderd schreef op 18 september 2002 @ 08:27:
echt waar ??? Hoe kan dat nou gvd.... Ik snap er echt niets van... Ik gebruik gewoon Borland Delphi.... is daar soms iets mis mee ofzo ?
Delphi is niets mis mee lijkt me. Gebruik ik hier ook. :)

code:
1
2
3
4
5
6
7
counthoogsteworp := 0;
for tellen := 1 to 5 do begin
if invoerwaarden[tellen] = hoogsteworp then counthoogsteworp := counthoogsteworp + 1;
writeln('chw ',counthoogsteworp);
end;

writeln('bla');


Deze code heb ik van het onderste loopje gemaakt.
En dan werkt het gewoon prima.

Op regel 1: counthoogsteworp := 0;
Deze regel heb ik toegevoegt zodat de counthoogsteworp niet meer weggeoptimaliseert wordt als ik de loop probeer te debuggen.

Op regel 4: writeln('chw ',counthoogsteworp);
Deze regel output de waarde van counthoogsteworp voor elke keer dat ik door de loop ga.
Bij input {12,12,10,3,1} bv komt er hier op volgorde {1,2,2,2,2} uit. Wat dus overeenkomt met wat het moet zijn.

De laatste regel: writeln('bla');
If toegevoegd om even makkelijk een breakpoint daar neer te kunnen pleuren. :)

[18:54] <Prammenhanger> |HunterPro|eet
[18:55] <Prammenhanger> lijkt best op
[18:55] <Prammenhanger> |HunterProFeet


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

MerijnB schreef op 18 september 2002 @ 08:00:
if invoerwaarden[tellen] = hoogsteworp then counthoogsteworp := counthoogsteworp + 1

daar mag een ; achter misschien ? :)

Merijn
Nee, dat hoeft niet op de laatste regel voor een end. Gebruikelijk is het wel.

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 18 september 2002 @ 08:22:
Normaal gesproken loopt een array vanaf element "0" en niet "1". Het zou (volgens mij) dus het volgende moeten zijn:

for tellen := 0 to 4 do begin
Als je geen begin aangeeft bij een array loopt ie inderdaad vanaf 0, maar aangezien er invoerwaarden: array [1..5] of Integer; staat loopt het hier gewoon van 1 tot 5

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


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Je probleem is dat je de variablen geen initiele waarde meegeeft. Veel programmeertalen en zo ook pascal (Delphi) initieeren de variablen niet dus ze kunnen elke willekeurige waarde bevatten na de declaratie. hoogsteworp en counthoogsteworp zal je een beginwaarde mee moeten geven. hoogsteworp moet lager zijn dan de zo laag mogelijkste hoogste worp (wat een zin :)) of zet m meteen op het eerste getal. counthoogsteworp moet gewoon op 0 gezet worden.

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


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

CyeZ schreef op 18 september 2002 @ 08:26:
[...]


Tellen van 0 is een C aanwensel. In pascal varianten is het gebruikelijker om vanaf 1 te beginnen te tellen.
Nee, bijna ik elke, ook in pascal, is het gebruikelijk vanaf 0 te tellen.

Strings (shortstrings) tellen toevallig vanaf 1, maar dat heeft als oorzaak omdat plaats 0 de lengte van de string bevat.

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

Pagina: 1