login  Naam:   Wachtwoord: 
Registreer je!
 Forum

sterretjes steeds verhogen met twee in een array. Hoe?

Offline verhaba - 02/11/2008 21:40 (laatste wijziging 02/11/2008 22:15)
Avatar van verhabaLid Hallo

Hoe kan je in via een loop een reeks characters plaatsen? Wat ik wil zeggen. Op de eerste lijn schrijf ik één ster. Op de tweede lijn drie. Op de derde lijn schrijf ik vijf sterren , op de vierde lijn schrijf ik zeven sterren, op de vijfde negen sterren enzo. Er komen dus steeds twee sterren bij.
Graag had ik dit via een array willen oplossen ,maar weet niet goed hoe ik steeds het aantal sterren met twee verhoog.
Wie kan me helpen?

12 antwoorden

Gesponsorde links
Offline Abbas - 03/11/2008 01:04
Avatar van Abbas Gouden medaille

Crew .NET
Dit moet je helemaal niet met een array oplossen. Je kan gewoon met twee For-Loops door elkaar werken. Ik heb snel even een Form gemaakt met een Label met als Name "Label2", in het Form_Load event heb ik deze code:

  1. Label2.Text = ""
  2. Dim i, j As Integer
  3. For i = 1 To 20 Step 2
  4. For j = 1 To i Step 1
  5. Label2.Text &= "*"
  6. Next
  7. Label2.Text &= Environment.NewLine
  8. Next
Offline verhaba - 03/11/2008 21:43 (laatste wijziging 03/11/2008 21:44)
Avatar van verhaba Lid kan het ook zonder form eventueel? en zo ja hoezo?
Offline rredspike1 - 03/11/2008 22:20
Avatar van rredspike1 Lid zonder form? hoe wou je dan sterretjes weergeven?
Offline verhaba - 03/11/2008 22:24 (laatste wijziging 03/11/2008 22:28)
Avatar van verhaba Lid euh... Ik weet het ook niet goed... Kan je gewoon geen array opvullen met een bepaald aantal sterretjes? In een loop verhoog je iedere keer met twee sterretjes.
Het moet eigenlijk een kerstboom vormen. Dit het moet eigenlijk ook nog symmetrisch of gecentreerd zijn. dit is een voorbeeld. Maar klaarblijkelijk wordt ie op het forum links uitgelijnd... Damn..
Programma-verloop :
Count ?
<input> 3
---------------------------------------
*
***
*****
*
---------------------------------------
Offline Stijn - 03/11/2008 22:58
Avatar van Stijn PHP expert Je moet de lege plaatsen opvullen met spaties.
Offline Abbas - 03/11/2008 23:32 (laatste wijziging 03/11/2008 23:32)
Avatar van Abbas Gouden medaille

Crew .NET
Ik heb even een Console Application gemaakt zodat je dan niet met een Label werkt maar gewoon in de CommandLine het resultaat ziet:

  1. 'variabelen declareren
  2. Dim output As String = "", spaties As String = ""
  3. Dim i, j, k, x As Integer
  4. 'x bepaalt de grootte van de boom, mag je zelf veranderen
  5. 'mag GEEN even getal zijn, anders is de boom f*cked up, probeer maar :D
  6. x = 45
  7. 'lege string aanmaken met spaties, nodig voor de lege ruimte
  8. For k = 1 To x Step 1
  9. spaties &= " "
  10. Next
  11. 'hoofd-loop beginnen
  12. For i = 1 To x Step 2
  13. 'berekenen hoeveel spaties er langs elke kant moeten komen
  14. 'en een substring nemen om het juiste aantal spaties te zetten
  15. output &= spaties.Substring(0, Convert.ToInt32(((x - i) / 2)))
  16. 'binnen-loop om de sterretjes te plaatsen
  17. For j = 1 To i Step 1
  18. output &= "*"
  19. Next
  20. 'zelfde als hierboven
  21. output &= spaties.Substring(0, Convert.ToInt32(((x - i) / 2)))
  22. 'nieuwe regel toevoegen
  23. output &= Environment.NewLine
  24. Next
  25. 'resultaat weergeven in console
  26. Console.Write(output)


Succes! 
Console.ReadKey()
Offline verhaba - 04/11/2008 00:58
Avatar van verhaba Lid hey titjes... man man man... goe bezig hoor... Alvast bedankt!
Maar ik heb eigenlijk wel een probleempje met je code. Ondanks je goed gemotiveerde komentaar tussen de code zijn er een aantal elementen die ik niet vat. Jammer maar helaas.
dit is eigenlijk de opgave
thx.
Offline Abbas - 04/11/2008 01:42
Avatar van Abbas Gouden medaille

Crew .NET
Zo, code aangepast. Nu blijft hij voor correcte invoer vragen zolang deze niet numeriek is of geen oneven getal is.

  1. Dim flag As Boolean = False
  2. 'Variabelen
  3. Dim output As String = "", spaties As String = "", input As String = ""
  4. Dim i, j, k, x As Integer
  5.  
  6. 'Do-Loop
  7. Do While flag = False
  8. Console.Write("Count? ")
  9. input = Console.ReadLine()
  10. 'Als de invoer niet numeriek is
  11. If (Not IsNumeric(input)) Then
  12. Console.WriteLine("ERROR: only numeric input allowed!")
  13. Else
  14. 'Normaal gebruik je Modulus maar ik vond hem niet
  15. 'Dit controleert of de invoer even/oneven is
  16. flag = (CInt(input) / 2).ToString.Contains(",")
  17. 'Bij even getal: foutmelding
  18. If flag = False Then
  19. Console.WriteLine("ERROR: only odd numbers allowed!")
  20. Else
  21. 'Bij juiste invoer: flag op True zodat uit de Loop gesprongen wordt
  22. flag = True
  23. 'Invoer in var x opslaan
  24. x = Convert.ToInt32(input)
  25. End If
  26. End If
  27. Loop
  28.  
  29. 'Ongeveer hetzelfde als de vorige code om de spaties te berekenen
  30. For k = 1 To ((x * 2) - 1) Step 1
  31. spaties &= " "
  32. Next
  33.  
  34. 'Hier ook, alleen in de berekeningen een beetje anders
  35. For i = 1 To x Step 1
  36. output &= spaties.Substring(0, (x - i))
  37. For j = 1 To ((i * 2) - 1) Step 1
  38. output &= "*"
  39. Next
  40. output &= spaties.Substring(0, (x - i)) & Environment.NewLine
  41. Next
  42. 'Extra sterretje als stam onderaan
  43. output &= spaties.Substring(0, (x - 1)) & "*" & spaties.Substring(0, (x - 1))
  44. 'Wegschrijven
  45. Console.Write(output)
  46. Console.ReadKey()


Hopelijk is het nu goed en versta je het ook! :D
Offline verhaba - 09/11/2008 19:01 (laatste wijziging 09/11/2008 19:16)
Avatar van verhaba Lid hey titjes. Sorry voor mijn late reply. kan het ook via ingebedde for next lusjes? Dit is wat ik al gevonden heb. Maar ik krijg ze nie gecentreerd... damned...
  1. Sub Main()
  2. Dim count As Integer = 16
  3.  
  4. For i As Integer = 1 To count
  5. For j As Integer = 1 To 2 * i - 1
  6. Console.Write("*")
  7. Next
  8. Console.WriteLine()
  9. Next
  10.  
  11. Console.ReadKey()
  12. End Sub


en de formule om het aantal spaties te berekenen is: count\2 maar hoe schrijf ik die dan weg?...
Offline Abbas - 09/11/2008 19:28 (laatste wijziging 09/11/2008 23:09)
Avatar van Abbas Gouden medaille

Crew .NET
1. Bij mij zijn er ook 2 Loops in elkaar.
2. Mijn code centreert.
3. Spaties: kijk naar mijn code.

Citaat:
zonder form? hoe wou je dan sterretjes weergeven?

Console!
Offline verhaba - 09/11/2008 23:24
Avatar van verhaba Lid hm... maar ik zie niet hoe je het aantal spaties (* count \ 2) wegschrijft...
Offline Abbas - 10/11/2008 01:42
Avatar van Abbas Gouden medaille

Crew .NET
Uw code is zoizo al een beetje "verkeerd", je moet een oneven getal nemen voor de kerstboom! En als je m'n code bekijkt zie je dat:

1.
Eerst de lege String met alleen maar spaties wordt gemaakt. Dit door een simpele formule: het ingevoerde getal doe je maal 2 (omdat er per regel elke keer 2 sterretjes bijkomen) en dan min één omdat dit er eentje teveel is gewoon. Deze lege String heb je nodig voor je lege plaatsen op te vullen rond de boom om hem gecentreerd te krijgen.

2.
In de Loop daarna ga je elke keer als je aan het begin bent van die spatie-String een stukje nemen (Substring()) om weg te schrijven rond de sterretjes.

Stel, ons ingevoerde getal is 5, dan is de lengte van de spatie-String 9. De eerste regel wordt dan, door de code:
  1. output &= spaties.Substring(0, (x - i))


dit:

  1. 'ingevoerde getal is 5
  2. 'en 1 omdat we hiermee beginnen
  3. output &= spaties.Substring(0, (5 - 1))


Dat zorgt dus dat we van de spatie-String een stuk nemen van 5-1 (4) tekens lang. Die schrijven we weg, daarna een sterretje en dan terug 4 spaties. De volgende keer dat we in de Loop zijn zal dit 5-2 (3) worden, enz... De laatste keer geen spaties meer, enkel sterretjes.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.232s