Totaler Anfänger, Rene Meyers Buch, Aufgabenstellung Kap.3

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Vracas

Betreff: Totaler Anfänger, Rene Meyers Buch, Aufgabenstellung Kap.3

BeitragMo, Mai 11, 2009 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo zusammen,

Ich bin der neue hier Very Happy!
Heiße Christian, komme aus der schönen Pfalz und bin so um die 20ig Wink.

Ich interresiere mich schon länger für Spiele Programmierung und
habe mir jetzt endlich das Buch "Spiele programmieren mit Blitz Basic" von Rene Meyer geholt.
Soweit läuft alles ganz super und die Aufgabenstellung aus Kapitel 2 war auch ruckzuck gelöst.
So, nun zu Kapitel 3 und der Aufgabe:

" Schreiben sie ein Programm, das die Zahl 1 bis 100 auf den Bildschirm ausgibt.
Dabei sollen jeweisl zehn Zahlen in einer Zeile stehen."

Ich hab mir dann mal so meine Gedanken gemacht und bin zu diesem Code gekomme:

Code: [AUSKLAPPEN]

For I = 1 To 100
Write I
   If I = 10 Then
   Print ""
ElseIf I = 20 Then
   Print ""
ElseIf I = 30 Then
   Print ""
ElseIf I = 40 Then
   Print ""
ElseIf I = 50 Then
   Print ""
ElseIf I = 60 Then
   Print ""
ElseIf I = 70 Then
   Print ""
ElseIf I = 80 Then
   Print ""
ElseIf I = 90 Then
   Print ""
EndIf
Next
WaitKey


Funktioniert auch wunderbar, nur denke ich dass man das ganze auch weitaus einfacher
und besser programmieren kann?!

Und meine Ausgabe der Zahlen ist auch nicht schön, da ich niemals ein Freizeichen zwischen
den einzelnen Zahlen habe.

Leider komm ich ums verrecken nicht drauf was ich anders bzw. wie ich es besser coden kann.


Ich danke euch schonmal für eure Hilfe!

Vracas

Xeres

Moderator

BeitragMo, Mai 11, 2009 22:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal sehen wie hier der Mini-Code-Kontest darüber ausbricht...

Code: [AUSKLAPPEN]
Local i, n
For i=1 To 100
   n=n+1
   Write(i+" ")
   If n=10 Then n=0 :Print()
Next
WaitKey()
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

WüstLing

BeitragMo, Mai 11, 2009 22:58
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
Local i
For i = 1 To 100
Write(i + " ")
If i Mod 10 = 0 Then Print()
Next
WaitKey()


P.S.: Mod(ulo) berechnet den Rest einer Division!

Vracas

BeitragMo, Mai 11, 2009 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wow das ging ja echt super schnell.
Sieht um längen besser aus und ist auch viiiiel kürzer Smile.
Ich danke Euch!

Werd mir wohl nochmal die Schleifen anschauen müssen, ist wohl nicht alles hängen geblieben...

Nur das mit dem Mod befehl, davon hab ich noch nichts gehört lol.
Naja wird auch noch kommen, ich habe ja erst angefangen.


Vracas

Xeres

Moderator

BeitragMo, Mai 11, 2009 23:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Na wenigstens einer!

BlitzBasic: [AUSKLAPPEN]
Local i
For i = 1 To 100
Write(ToRight$(i,3) + " ")
If i Mod 10 = 0 Then Print()
Next
WaitKey()

Function ToRight$(txt$, Stellen%)
Repeat
If Len(txt) < Stellen Then txt=" "+txt
Until Len(txt) => Stellen
Return txt
End Function


Oh, und willkommen im Portal Vracas Wink
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

WüstLing

BeitragMo, Mai 11, 2009 23:37
Antworten mit Zitat
Benutzer-Profile anzeigen
.. was ich wiederum so lösen würde Wink

BlitzBasic: [AUSKLAPPEN]
Local i
For i = 1 To 100
If i < 10 Then Write(" " + i + " ")
If i >= 10 And i < 100 Then Write(" " + i + " ") ElseIf i >= 100 Write(i + " ")
If i Mod 10 = 0 Then Print()
Next
WaitKey()


Edit: Moment - is noch nicht ganz das selbe :p

Edit2: Allerdings wäre deine Lösung somit doch etwas übersichtlicher Xeres

Herzlich Willkommen Vracas!
  • Zuletzt bearbeitet von WüstLing am Mo, Mai 11, 2009 23:49, insgesamt 2-mal bearbeitet

BladeRunner

Moderator

BeitragMo, Mai 11, 2009 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
BlitzBasic: [AUSKLAPPEN]
For x = 0 To 90 Step 10
For y = 0 To 9
Write (y+x+1)+" "
If (y+x+1)<10 Then Write " "
Next
Print
Next

Der Möglichkeiten gibt es ja bekanntermaßen viele...
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Vracas

BeitragDi, Mai 12, 2009 6:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Xeres hat Folgendes geschrieben:

Code: [AUSKLAPPEN]
Local i, n
For i=1 To 100
   n=n+1
   Write(i+" ")
   If n=10 Then n=0 :Print()
Next
WaitKey()


Danke, Danke für die nette Aufnahme hier Very Happy!

Alles was hiernach kommt ist noch totales neuland für mich lol.
Sieht allerdings dann aber auch noch schöner aus.


Nochmal ne kurze Verständnissfrage zur For-Schleife:

Die Variable N wird also bei jedem Schleifen durchlauf um 1 erhöht,
um dann immer wenn N = 10 erreicht, nen Print befehl zu setzten der mir in dem Fall einen Zeilenumbruch bringt.

Hab ich das richtig verstaden?


Vracas

Nova

BeitragDi, Mai 12, 2009 6:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Meiner Meinung nach ist diese Version viel einfacher, kommt sogar ohne if aus:

BlitzBasic: [AUSKLAPPEN]
For i = 0 To 9 
For j = 1 To 10
Write i *10+ j + " "
Next
Print
Next
WaitKey
End
  • Zuletzt bearbeitet von Nova am Di, Mai 12, 2009 6:34, insgesamt 2-mal bearbeitet
 

mDave

BeitragDi, Mai 12, 2009 6:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Herzlich Willkommen im Forum Vracas!


Ja das hast du richtig verstanden:

Bei jedem Schleifendurchgang wird n um eins erhöht. Da dies 100mal (i=1 to 100) passiert und wenn n=10 ist wird n zurück auf 0 gesetzt. Damit bekommst du auch 10 Zeilen (100/10=10) und da i ständig in der Schleife gedruckt ist dein Problem gelöst Razz

Viel Spaß mit der unbändigen Energie der Community Very Happy

Mfg mDave

Xeres

Moderator

BeitragDi, Mai 12, 2009 13:07
Antworten mit Zitat
Benutzer-Profile anzeigen
WüstLings Version mit mod ist noch etwas geschickter, hier noch ein Beispiel dazu:
Code: [AUSKLAPPEN]
Local i
For i = 1 To 100
   Print("Teilt man "+i+" durch 10, bleibt der Rest "+(i Mod 10))
   If i Mod 10 = 0 Then Print("(Taste)") : WaitKey()
Next
WaitKey()
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Vracas

BeitragDi, Mai 12, 2009 15:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh ok, also es gibt ja echt eine Menge Lösungswege Shocked.

Da ich aber noch nicht viele Befehle kenne, wie Mod und andere,
ist für mich momentan noch die Version von Xeres am einfachsten nachzuvollziehen.

Aber hey, ich hab ja gestern erst angefangen und bin fest davon überzeugt dass das noch wird.
Ihr seid ja echt eine sehr hilfsbereite Community Very Happy.

Werd erstmal die ganzen neuen Befehle genauer unter die Lupe nehmen.
Von daher mach ich mich jetzt mal wieder frisch ans Werk, mein Buch hat ja auch noch ein paar Seiten.

Ich danke euch allen vielmals!


Vracas

Silver_Knee

BeitragDi, Mai 12, 2009 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
die vielen Versionen kommen weil jede Version ihre vor und nachteile hat:

Code: [AUSKLAPPEN]
Local i, n
For i=1 To 100
   n=n+1
   Write(i+" ")
   If n=10 Then n=0 :Print()
Next
WaitKey()

zählt zb mit n die Zahlen an einer hand ab bis zum nächsten print. Ist evtl wichtig zu wissen wie lange man noch bis zum nächsten Print noch brauch.

Code: [AUSKLAPPEN]
Local i
For i = 1 To 100
Write(i + " ")
If i Mod 10 = 0 Then Print()
Next
WaitKey()

Spart dagegen eine variable. Schont also den speicher, was bei einer varable nicht wirklich hilft, aber dennoch gut zu wissen ist.

Code: [AUSKLAPPEN]
For x = 0 To 90 Step 10
For y = 0 To 9
Write (y+x+1)+" "
If (y+x+1)<10 Then Write " "
Next
Print
Next

Nutzt einerseits 2 Schleifen, was die sache (auch wieder minimal) verlangsamt, auf der anderen Seite ist hier die Trennung von 10er schrittzähler und 1er schrittzähler gut erkennbar.

Du siehst also: Wenn du irgendwann mal etwas geschrieben hast was so nicht klappen will. Es gibt führen immer Wege nach Rom.

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group