Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Huiswerkvragen: Exacte vakken (https://forum.scholieren.com/forumdisplay.php?f=17)
-   -   [IN] Een string vermenigvuldigen (https://forum.scholieren.com/showthread.php?t=1719534)

Lothar1 13-10-2008 10:15

Een string vermenigvuldigen
 
Iemand een idee hoe ik een string een x aantal keer kan laten voorkomen?
de string is geen getal maar een symbool.
code is vb.NET

-Lothar

somebody01 13-10-2008 17:20

Wat bedoel je precies met x aantal keren laten voorkomen...

Op basis van een voorwaarde, op basis van een lus, of gewoon in verschillende labels, textboxen of message boxen...


Voorwaarde de if elsjes, lusjes door lusjes, en in het derde geval de labels, textboxen of message boxen een waarde geven...

Als je exacter bent ivm methode kan je mss geholpen worden.

Vergeet ook je variabel niet te declareren (ik ken de juiste term niet, declareren is voor classes zeker. dus Dim ..... )

ILUsion 13-10-2008 17:32

In VB-pseudocode (roestige kennis van VB):

Code:

s = 'Dit is mijn string'
t = ''
aantalKeer = 5
for x = 1 to aantalKeer do
  t = t & s
end for

Als je het wilt opzoeken in het Engelse: 'concatenate strings' (wat zo veel wilt zeggen als strings aan elkaar hangen). Ik weet dat VB indertijd het gewoon met string1 & string 2 kon doen, maar misschien ziet er ook een method concatenate, concat, cat, ... in die hetzelfde doet (of misschien werkt het wel door ze gewoon op te tellen, dat is wat sommige andere talen gebruiken).

lothar1 13-10-2008 17:51

een teller beslist het aantal keer

dus ik typte dan intTeller * strWoord

maar hij wil gaan rekenen dan met de string maar ik wil gewoon Teller aantal keer strWoord tonen

Lothar01 13-10-2008 17:59

als de teller gelijk is aan 4 moet ik dus strWoord strWoord strWoord strWoord krijgen bijvoorbeeld.

Lothar1 14-10-2008 16:08

dit is de opgave voor de duidelijkheid:

http://img207.imageshack.us/img207/7730/schoolhk4.jpg

en dit is mn code tot nu toe:

Dim strSymbool As String
Dim intStartwaarde As Integer
Dim intEindwaarde As Integer
Dim intTeller As Integer
Dim strConclusie As String

strSymbool = txtSymbool.ToString
intStartwaarde = CInt(txtstartwaarde.text)
intEindwaarde = CInt(txtEindwaarde.Text)

For intTeller = intStartwaarde To intEindwaarde

strConclusie = intTeller * strSymbool & vbCrLf
lblResultaat.Text = strConclusie

Next


en Hij geeft een fout bij het intTeller * strSymbool omdat hij dat wiskundig bekijkt en niet weet dat hij de string evenveel keer moet tonen als de teller zegt.

Lothar1 14-10-2008 16:10

correctie code:

Dim strSymbool As String
Dim intStartwaarde As Integer
Dim intEindwaarde As Integer
Dim intTeller As Integer
Dim strConclusie As String

strSymbool = txtSymbool.ToString
intStartwaarde = CInt(txtstartwaarde.text)
intEindwaarde = CInt(txtEindwaarde.Text)

For intTeller = intStartwaarde To intEindwaarde

strConclusie = strConclusie & intTeller * strSymbool & vbCrLf
lblResultaat.Text = strConclusie

Next

ILUsion 14-10-2008 19:04

Lees misschien ook eens gewoon mijn reply, want daarmee zou je het moeten kunnen vinden. Programmeren is niet anderen je werk laten doen, maar zelf eens proberen nadenken...

Lothar1 14-10-2008 20:34

Citaat:

ILUsion schreef: (Bericht 28320474)
Lees misschien ook eens gewoon mijn reply, want daarmee zou je het moeten kunnen vinden. Programmeren is niet anderen je werk laten doen, maar zelf eens proberen nadenken...

nee die code werkt niet. Ik keer er wel naar..

Dit is wat ik dan krijg:

http://img523.imageshack.us/img523/7839/school1if3.jpg

ILUsion 14-10-2008 21:45

Citaat:

Lothar1 schreef: (Bericht 28321092)
nee die code werkt niet. Ik keer er wel naar..

Dit is wat ik dan krijg:

[afbeelding]

Zoals je zelf al aantoont, doet die code exact wat je hem vraagt: je krijgt een bepaalde string N aantal keer. Dat je uitkomst niet is wat je zou willen hebben, dat ligt er maar aan dat je iets verkeerds in de oorspronkelijke string gestoken hebt. Herlees die code die je daar post nog eens door, en denk eens na wat er mis zou kunnen gegaan zijn.

De fout zit namelijk in 'strSymbool = txtSymbool.ToString'. Maar ik laat aan jou over om te zien wat er daar niet aan klopt. Aan je andere code valt te zien dat je wel weet hoe het moet, maar hier gewoon wat verward zal geweest zijn.

Ik hoop dat je er zo uitgeraakt, werk dus verder van de code die je daar post, er zit nog 1 fout in je code (in 1 regel). Eens die eruit is, heb je perfect werkende code.

lothar1 21-10-2008 19:56

ik was een week op reis met school. Ben nu terug.

ik heb strsymbool verander door chrSymbool (char) en nu zet hij het juist maar de 'piramide' klopt nog niet :(

ik heb geen idee hoe ik nu verder moet.

ILUsion 21-10-2008 20:12

Dat was de fout niet, het lijkt me dus raar als je daar goedlijkende output uit krijgt. Bovendien, voor zover ik weet, forceert Basic niet dat een string/char moeten beginnen met str/chr (dat was in mijn Basic-dagen, toch niet zo, voor zover ik me dat kan herinneren). Anyhow: je lost een probleem niet op door iets een andere naam te geven (al denkt men daar in de bedrijfswereld en in de politiek soms anders over).

Oribeer anders eens te verwoorden wat hij doet op de lijn die ik aangegeven heb. Om je wat sneller vooruit te laten gaan, in de spoiler staat wat hij werkelijk doet.

Spoiler


Geraak je er met die vage uitleg nog niet uit:

Spoiler

lothar1 22-10-2008 11:04

code nu;

Dim intTeller As Integer
Dim chrSymbool As Char
Dim intBeginwaarde, intEindwaarde As Integer
Dim strResultaat, strConclusie As String

intBeginwaarde = CInt(txtBeginwaarde.Text)
intEindwaarde = CInt(txtEindwaarde.Text)
chrSymbool = CChar(txtSymbool.Text)
lblResultaat.Text = ""

For intTeller = intBeginwaarde To intEindwaarde
strResultaat = strResultaat & chrSymbool
strConclusie = strConclusie & strResultaat & vbCrLf
Next
lblResultaat.Text = strConclusie

dit werkt maar als mijn beginwaarde bijvoorbeeld 5 is begint het niet met 5 keer het symbool.. :(

ILUsion 22-10-2008 17:41

Dat komt omdat de lus ook niet genoeg doorlopen wordt daarvoor. Weeral: bedenk eens goed wat je code nu doet. Wat hij momenteel doet is:
je begint met een lege string, je komt in die lus en je stelt intTeller = intBeginWaarde bij de eerste iteratie (een iteratie is een keer die lus doorlopen). Wat je doet, is bij je strResultaat (die tot dan toe leeg is), je symbool bijtellen. En hem aan je conclusie vastmaken.

Je moet eerst beginnen met die (bv. 5), en die string klaarmaken. Hoe ik dat zou doen, in dit geval toch, is gewoon van 1 tot eindwaarde laten lopen, maar dan wel kijken of de strResultaat die je gemaakt hebt, wel toegevoegd moet worden (bedenkt voor jezelf met wat voor commando je dat doet en welke voorwaarde je nodig hebt).

Daarnaast, heb ik nog een kleine verbetering voor je code, die een beetje op de details ingaat. Het is niet dat jouw code verkeerd is, maar het lijkt me iets mooier. In plaats van
Code:

strConclusie = strConclusie & strResultaat & vbCrLf
zou ik het volgende gebruiken:
Code:

strConclusie = strConclusie & vbCrLf & strResultaat
Dat zorgt er namelijk voor dat je na je laatste lijn met sterretjes niet met een nieuwe (lege) lijn begint, maar ook echt aan die sterretjes stopt. Afhankelijk van wat je er verder mee gaat doen, is dat lichtjes properder (maar, zeker niet de essentie van jouw opdracht).

Lothar1 23-10-2008 08:38

nu werkt het perfect =)

ik heb een tweede teller gebruikt voor de eerste waarde :)

Dim intTeller, intTeller2 As Integer
Dim chrSymbool As Char
Dim intBeginwaarde, intEindwaarde As Integer
Dim strResultaat, strConclusie As String

intBeginwaarde = CInt(txtBeginwaarde.Text)
intEindwaarde = CInt(txtEindwaarde.Text)
chrSymbool = CChar(txtSymbool.Text)
lblResultaat.Text = ""

For intTeller2 = 2 To intBeginwaarde
strResultaat = strResultaat & chrSymbool
Next

For intTeller = intBeginwaarde To intEindwaarde
strResultaat = strResultaat & chrSymbool
strConclusie = strConclusie & vbCrLf & chrSymbool
Next
lblResultaat.Text = strConclusie

bedankt voor al je hulp!

-Lothar

lothar1 23-10-2008 08:39

Citaat:

Lothar1 schreef: (Bericht 28367684)
nu werkt het perfect =)

ik heb een tweede teller gebruikt voor de eerste waarde :)

Dim intTeller, intTeller2 As Integer
Dim chrSymbool As Char
Dim intBeginwaarde, intEindwaarde As Integer
Dim strResultaat, strConclusie As String

intBeginwaarde = CInt(txtBeginwaarde.Text)
intEindwaarde = CInt(txtEindwaarde.Text)
chrSymbool = CChar(txtSymbool.Text)
lblResultaat.Text = ""

For intTeller2 = 2 To intBeginwaarde
strResultaat = strResultaat & chrSymbool
Next

For intTeller = intBeginwaarde To intEindwaarde
strResultaat = strResultaat & chrSymbool
strConclusie = strConclusie & vbCrLf & chrSymbool
Next
lblResultaat.Text = strConclusie

bedankt voor al je hulp!

-Lothar

Dim intTeller, intTeller2 As Integer
Dim chrSymbool As Char
Dim intBeginwaarde, intEindwaarde As Integer
Dim strResultaat, strConclusie As String

intBeginwaarde = CInt(txtBeginwaarde.Text)
intEindwaarde = CInt(txtEindwaarde.Text)
chrSymbool = CChar(txtSymbool.Text)
lblResultaat.Text = ""

For intTeller2 = 2 To intBeginwaarde
strResultaat = strResultaat & chrSymbool
Next

For intTeller = intBeginwaarde To intEindwaarde
strResultaat = strResultaat & chrSymbool
strConclusie = strConclusie & strResultaat & vbCrLf
Next
lblResultaat.Text = strConclusie

(foutje)

ILUsion 23-10-2008 17:51

Ik ben blij dat je eruit geraakt bent :-) Stiekem is programmeren eigenlijk voor 80% debuggen, zoals je hier al wel gemerkt zal hebben :)

lothar1 26-10-2008 10:07

ja inderdaad.
Eerst ergerde ik me aan je vage tips maar uiteindelijk heb ik er nu wel iets mee geleerd. Mocht je gewoon verteld hebben wat fout was zou ik er niks aan gehad hebben.

bedankt :)

-Lothar


Alle tijden zijn GMT +1. Het is nu 07:57.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.