Hallo iedereen.
Voor een applicatie die ik tracht te ontwikkelen heb ik een Array waarin een bewerking word opgeslagen. Het is een Array van strings, op de volgende manier opgebouwd:
Deze array wordt in het programma zelf weergegeven in een Listbox, waarin men door het selecteren van een element en enkele knoppen de inhoud kan wijzigen. Elke knop beheert het beveiligen van de invoer van de Array door ervoor te zorgen dat enkel de waarden in de array met een even index een numerieke waarde kan bevatten. Door middel van een backspace knop kan men elementen verwijderen, maar op die manier kan er een leeg element in de Array komen te staan, wat niet praktisch is voor de berekening. Ook kan het lastig zijn indien iemand de hele berekening opnieuw moet typen. Hiervoor had ik een functie gemaakt die de array opkuist, dat wil zeggen dat hij alle lege plaatsen verwijderd (dmv indien een lege plek wordt ontdekt, alle elementen achter deze plek een plaats naar links op te schuiven), en nadat de elementen weer mooi op 1 rijtje staan, wordt er nagekeken of er geen 2 numerieke waarden of operatoren naast elkaar staan, indien dit het geval is wordt het tweede van beide vervangen door een lege plaats en wordt het eerste deel terug aangeroepen. Voor al dit heb ik een zeer niet-elegante oplossing geschreven:
Maar ik kan me bedenken dat dit voor lange berekeningen nogal traag is. Heeft iemand een betere oplossing om te werk te gaan? Een abstract idee is voldoende, het uitschrijven wil ik namelijk graag zelf doen.
(Ik hoop dat het duidelijk is)
Alvast bedankt!
Voor een applicatie die ik tracht te ontwikkelen heb ik een Array waarin een bewerking word opgeslagen. Het is een Array van strings, op de volgende manier opgebouwd:
code:
enzoverder..1
2
3
4
5
| array[0] := '23' array[1] := '+' array[2] := '3.1415' array[3] := '*' array[4] := '35' |
Deze array wordt in het programma zelf weergegeven in een Listbox, waarin men door het selecteren van een element en enkele knoppen de inhoud kan wijzigen. Elke knop beheert het beveiligen van de invoer van de Array door ervoor te zorgen dat enkel de waarden in de array met een even index een numerieke waarde kan bevatten. Door middel van een backspace knop kan men elementen verwijderen, maar op die manier kan er een leeg element in de Array komen te staan, wat niet praktisch is voor de berekening. Ook kan het lastig zijn indien iemand de hele berekening opnieuw moet typen. Hiervoor had ik een functie gemaakt die de array opkuist, dat wil zeggen dat hij alle lege plaatsen verwijderd (dmv indien een lege plek wordt ontdekt, alle elementen achter deze plek een plaats naar links op te schuiven), en nadat de elementen weer mooi op 1 rijtje staan, wordt er nagekeken of er geen 2 numerieke waarden of operatoren naast elkaar staan, indien dit het geval is wordt het tweede van beide vervangen door een lege plaats en wordt het eerste deel terug aangeroepen. Voor al dit heb ik een zeer niet-elegante oplossing geschreven:
Delphi:
(Alvast mijn excuses voor slechte uitlijning)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.realignClick(Sender: TObject); var I, u,O,Y: integer; begin // Clean up Wrong input for Y := 0 to Length(inputArr) - 1 do begin for u := 0 to Length(inputArr) - 1 do begin if inputArr[u] = '' then begin for O := u to Length(inputArr) - 2 do begin inputArr[O]:= inputArr[O + 1]; end; end; if u <= Length(inputArr) - 2 then begin if ((AnsiContainsText('+-*/', inputArr[u])) and (AnsiContainsText('+-*/', inputArr[u+1]))) or ((AnsiContainsText('+-*/', inputArr[u]) = False) and (AnsiContainsText('+-*/', inputArr[u+1]) = False)) then begin inputArr[u+1] := '' end; end; end; end; // End Clean Up. end; |
Maar ik kan me bedenken dat dit voor lange berekeningen nogal traag is. Heeft iemand een betere oplossing om te werk te gaan? Een abstract idee is voldoende, het uitschrijven wil ik namelijk graag zelf doen.
(Ik hoop dat het duidelijk is)
Alvast bedankt!