 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Matze001
Anmeldungsdatum: 03.05.2006 Beiträge: 28
|
Verfasst am: 05.05.2006, 17:05 Titel: |
|
|
Habe es versucht anders zu lösen, aber.... es hört in der Mitte auf...kp warum...denke s is zu lang...
Ich habe es so gemacht, das ich drei Subs erstellen will, eine Für "Normale Zahlen (1=1 usw), eine für Tausender Zahlen (1=1000) und eine für Millionen ( 1 = 1.000.000) .... nun is es so das ich die Sachen zu "groß" geproggt habe... hier mal der Bereich, wenn jmd. kann den bitte einmal so schreiben, das er so klein wie Möglich is
Code: |
LOCATE 2, 10
PRINT "B?rgerwehr"
LOCATE 3, 10
PRINT "Soldaten"
LOCATE 4, 10
PRINT "Grenadiere"
LOCATE 5, 10
PRINT "Fallschirmspringer"
LOCATE 6, 10
PRINT "Naviseals" ' Ausgabe der Namen
LOCATE 2, 30
INPUT "", bw
LOCATE 3, 30
INPUT "", so
LOCATE 4, 30
INPUT "", gr
LOCATE 5, 30
INPUT "", fa
LOCATE 6, 30
INPUT "", ns ' Eingabe in der zweiten Spalte
LOCATE 2, 40
PRINT bw * 1
LOCATE 2, 50
PRINT bw * 1' Bürgerwehr
LOCATE 3, 40
PRINT so * 2
LOCATE 3, 50
PRINT so * 2' Soldaten
LOCATE 4, 40
PRINT gr * 5
LOCATE 4, 50
PRINT gr * 3' Grenadier
LOCATE 5, 40
PRINT fa * 6
LOCATE 5, 50
PRINT fa * 5' Fallschirmspringer
LOCATE 6, 40
PRINT ns * 8
LOCATE 6, 50
PRINT ns * 10' Naviseals
|
schlimm was? Also das muss doch kleiner gehn ich weis nur net wie... ich finde die Locate Befehle sind überflüssig, weis aber net wie ich es ohne hinbekomme.....
Hoffe auf Hilfe _________________ <xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link? |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 05.05.2006, 17:09 Titel: |
|
|
Warum sollte dieser Code zu lang sein? Poste doch mal dein genaues Problem!
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 05.05.2006, 17:18 Titel: |
|
|
zu Locate:
Kennst du denn Width Befehl?
Mit dem sollte es besser gehen. |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 05.05.2006, 17:24 Titel: |
|
|
Mit WIDTH sollte es nicht klappen, da meines Wissens variable Werte nicht möglich sind...
Eine andere Möglichkeit wäre eine eigene PRINT-SUB:
Code: |
DECLARE SUB SpecialPrint (Zeile AS INTEGER, Spalte AS INTEGER, Text AS STRING)
SCREEN 0
CLS
SpecialPrint 10, 10, "Das ist eine Beispieltext."
END
SUB SpecialPrint (Zeile AS INTEGER, Spalte AS INTEGER, Text AS STRING)
LOCATE Zeile, Spalte: Print Text
END SUb
|
jb _________________ Elektronik und Programmieren |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 05.05.2006, 17:40 Titel: |
|
|
Sorry, ich ab die Befehle verwechselt .
Ich meinte VIEW PRINT [ZeileOben% TO ZeileUnten%].
Ein Tipp:
So wie ich das sehe, wären die Daten in einem Feld besser aufgehoben:
MonsterFAQ
Mit Feldern kann man dann ganz Systematisch mit einer For-Schlaufe die Ausgabe machen. |
|
Nach oben |
|
 |
Matze001
Anmeldungsdatum: 03.05.2006 Beiträge: 28
|
Verfasst am: 05.05.2006, 18:07 Titel: |
|
|
Also mal das ganze, nicht funktionierende, Prog.
Code: |
DEFLNG A-Z
WIDTH 80, 50
DECLARE SUB br1.bas ()
CLS
PRINT "=====Spionageberichtauswerter====="
PRINT
PRINT "Mit welcher GrӇe willst du den Bericht auswerten?"
PRINT "(Normal(1) , Millionen(2) oder Milliarden(3))"
INPUT "", ausgabe$
IF ausgabe$ = "1" THEN br1.bas
SUB br1.bas
CLS
LOCATE 2, 10
PRINT "B?rgerwehr"
LOCATE 3, 10
PRINT "Soldaten"
LOCATE 4, 10
PRINT "Grenadiere"
LOCATE 5, 10
PRINT "Fallschirmspringer"
LOCATE 6, 10
PRINT "Naviseals" ' Ausgabe der Namen
LOCATE 2, 30
INPUT "", bw
LOCATE 3, 30
INPUT "", so
LOCATE 4, 30
INPUT "", gr
LOCATE 5, 30
INPUT "", fa
LOCATE 6, 30
INPUT "", ns ' Eingabe in der zweiten Spalte
LOCATE 2, 40
PRINT bw * 1
LOCATE 2, 50
PRINT bw * 1' Bürgerwehr
LOCATE 3, 40
PRINT so * 2
LOCATE 3, 50
PRINT so * 2' Soldaten
LOCATE 4, 40
PRINT gr * 5
LOCATE 4, 50
PRINT gr * 3' Grenadier
LOCATE 5, 40
PRINT fa * 6
LOCATE 5, 50
PRINT fa * 5' Fallschirmspringer
LOCATE 6, 40
PRINT ns * 8
LOCATE 6, 50
PRINT ns * 10' Naviseals
LOCATE 8, 10
PRINT "Luchs"
LOCATE 9, 10
PRINT "Gepard"
LOCATE 10, 10
PRINT "Keiler"
LOCATE 11, 10
PRINT "Leo-2"
LOCATE 12, 10
PRINT "Abrams" ' Ausgabe der Namen
LOCATE 8, 30
INPUT "", lu
LOCATE 9, 30
INPUT "", ge
LOCATE 10, 30
INPUT "", ke
LOCATE 11, 30
INPUT "", le
LOCATE 12, 30
INPUT "", ab ' Eingabe in der zweiten Spalte
LOCATE 8, 40
PRINT lu * 25
LOCATE 8, 50
PRINT lu * 20'Luchs
LOCATE 9, 40
PRINT ge * 120
LOCATE 9, 50
PRINT ge * 150'Gepard
LOCATE 10, 40
PRINT ke * 40
LOCATE 10, 50
PRINT ke * 50' Keiler
LOCATE 11, 40
PRINT le * 100
LOCATE 11, 50
PRINT le * 120'Leo
LOCATE 12, 40
PRINT ab * 150
LOCATE 12, 50
PRINT ab * 200'Abrams
LOCATE 14, 10
PRINT "Jagt-U-Boot"
LOCATE 15, 10
PRINT "Ballistische U-Boote"
LOCATE 16, 10
PRINT "Kreuzer"
LOCATE 17, 10
PRINT "Schlachtschiffe"
LOCATE 18, 10
PRINT "Flugzeugträger" ' Ausgabe der Namen
LOCATE 14, 30
INPUT "", ja
LOCATE 15, 30
INPUT "", ba
LOCATE 16, 30
INPUT "", kr
LOCATE 17, 30
INPUT "", sc
LOCATE 18, 30
INPUT "", ft ' Eingabe in der zweiten Spalte
LOCATE 14, 40
PRINT ja*400
LOCATE 14, 50
PRINT ja*500' LA´s
LOCATE 15, 40
PRINT ba*300
LOCATE 15, 50
PRINT ba*200' Ballis
LOCATE 16, 40
PRINT kr * 200
LOCATE 16, 50
PRINT kr * 250' Kreuzer
LOCATE 17, 40
PRINT sc * 800
LOCATE 17, 50
PRINT sc * 1000' Schlachtschiffe
LOCATE 18, 40
PRINT ft * 1250
LOCATE 18, 50
PRINT ft * 600' Flugzeugträger
LOCATE 20, 10
PRINT "MI-24"
LOCATE 21, 10
PRINT "Apachees"
LOCATE 22, 10
PRINT "F14"
LOCATE 23, 10
PRINT "F22"
LOCATE 24, 10
PRINT "B2-Spirit" ' Ausgabe der Namen
LOCATE 20, 30
INPUT "", mi
LOCATE 21, 30
INPUT "", ap
LOCATE 22, 30
INPUT "", f1
LOCATE 23, 30
INPUT "", f2
LOCATE 24, 30
INPUT "", b2 ' Eingabe in der zweiten Spalte
LOCATE 20, 40
PRINT mi * 180
LOCATE 20, 50
PRINT mi * 150' Hind
LOCATE 21, 40
PRINT ap * 220
LOCATE 21, 50
PRINT ap * 200' Apachees
LOCATE 22, 40
PRINT f1 * 200
LOCATE 22, 50
PRINT f1 * 100' F14
LOCATE 23, 40
PRINT f2 * 400
LOCATE 23, 50
PRINT f2 * 200' F22
LOCATE 24, 40
PRINT b2 * 1500
LOCATE 24, 50
PRINT b2 * 800' B2-Spirit
print
LOCATE 26, 10
PRINT "Bunker"
LOCATE 27, 10
PRINT "Minenfelder"
LOCATE 28, 10
PRINT "Wasserminen"
LOCATE 29, 10
PRINT "K?stenbatterien"
LOCATE 30, 10
PRINT "Flak" ' Ausgabe der Namen
LOCATE 26, 30
INPUT "", bu
LOCATE 27, 30
INPUT "", mf
LOCATE 28, 30
INPUT "", wm
LOCATE 29, 30
INPUT "", kb
LOCATE 30, 30
INPUT "", fl ' Eingabe in der zweiten Spalte
LOCATE 26, 40
PRINT bu * 30
LOCATE 26, 50
PRINT bu * 50' Bunker
LOCATE 27, 40
PRINT mf * 50
LOCATE 27, 50
PRINT mf * 40' Minenfelder
LOCATE 28, 40
PRINT wm * 60
LOCATE 28, 50
PRINT wm * 80' Wasserminen
LOCATE 29, 40
PRINT kb * 100
LOCATE 29, 50
PRINT kb * 150' K?stenbatterien
LOCATE 30, 40
PRINT fl * 150
LOCATE 30, 50
PRINT fl * 200' Flak
END SUB
|
€dit: Habe das Prob vergessen Also wenn ich das Prog laufen lasse kommt es nur bis zu einer Bestimmten stelle...kann man ja selber testen...dann bleibt es an einem Locate-befehl hängen....
Der kann aber net schuld sein, weil er viermal vorher ( STrg c + Strg V ) auch funktionierte _________________ <xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link?
Zuletzt bearbeitet von Matze001 am 05.05.2006, 18:54, insgesamt 4-mal bearbeitet |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 05.05.2006, 18:13 Titel: |
|
|
Code: | ...
END SUB
x=1
if x= 1 then brd.bas
SUB brd.bas
... |
Was soll dieser Auszug bewirken?
if x= 1 then brd.bas ist wegen x=1 immer war.
Die Subroutine SUB brd.bas hast du nicht deklariert.
(Declare Sub ...)
Zwischen Zwei Subroutinen schreibt man keinen Code.
Ich seh's mir gleich genauer an. |
|
Nach oben |
|
 |
Matze001
Anmeldungsdatum: 03.05.2006 Beiträge: 28
|
Verfasst am: 05.05.2006, 18:15 Titel: |
|
|
Michael Frey hat Folgendes geschrieben: | Code: | ...
END SUB
x=1
if x= 1 then brd.bas
SUB brd.bas
... |
Was soll dieser Auszug bewirken?
if x= 1 then brd.bas ist wegen x=1 immer war.
Die Subroutine SUB brd.bas hast du nicht deklariert.
(Declare Sub ...)
Zwischen Zwei Subroutinen schreibt man keinen Code.
Ich seh's mir gleich genauer an. |
löl wo isn das her?? kp wie das da hin kommt...is raus...toal überflüssig .... das Prog is auch net so wie ich es hatte...mom ich änder ma...da hat wer dran rumgespielt
Edit: Ist Editiert...hoffe habe allen Müll raus  _________________ <xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link? |
|
Nach oben |
|
 |
Matze001
Anmeldungsdatum: 03.05.2006 Beiträge: 28
|
Verfasst am: 05.05.2006, 18:22 Titel: |
|
|
Ich habe mir den Text mit den Arrey durchgelesen.. , es klingt gut Ich weis nur nicht wie ich die Variablen die ich ablegen will durch nen Inputbefehl da rein bekomme und wie ich die dann verarbeite... kann mir jmd. (wie immer wenn ich was nicht verstehe) Ein kleinen Bsp. schreiben was ähnlich wie mein kleines, verbuggtes Prog. arbeitet? _________________ <xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link? |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 05.05.2006, 18:25 Titel: |
|
|
Ich Bahnhof verstehen
Okey, wir sind im QBasic Forum.
Zum Optimieren:
Statt
Code: | LOCATE 26, 10
PRINT "Bunker"
LOCATE 27, 10
PRINT "Minenfelder"
LOCATE 28, 10
PRINT "Wasserminen"
LOCATE 29, 10
PRINT "K?stenbatterien"
LOCATE 30, 10 |
geht auch
Code: | LOCATE 26,10
PRINT "Bunker"
LOCATE , 10
PRINT "Minenfelder"
LOCATE , 10
PRINT "Wasserminen"
LOCATE , 10
PRINT "K?stenbatterien"
LOCATE , 10 |
Die Zeile must du nur beim ersten Print angeben.
Mehr fällt mir gerade nicht auf.
[Edit:/]
Ein Submit War .
Ich schreib gleich ein Beispiel. |
|
Nach oben |
|
 |
Matze001
Anmeldungsdatum: 03.05.2006 Beiträge: 28
|
Verfasst am: 05.05.2006, 18:27 Titel: |
|
|
Michael Frey hat Folgendes geschrieben: | Ich Bahnhof verstehen
Okey, wir sind im QBasic Forum.
Zum Optimieren:
Statt
Code: | LOCATE 26, 10 <--[b]Genau da Motz er[/b]
PRINT "Bunker"
LOCATE 27, 10
PRINT "Minenfelder"
LOCATE 28, 10
PRINT "Wasserminen"
LOCATE 29, 10
PRINT "K?stenbatterien"
LOCATE 30, 10 |
geht auch
Code: | LOCATE 26,10
PRINT "Bunker"
LOCATE , 10
PRINT "Minenfelder"
LOCATE , 10
PRINT "Wasserminen"
LOCATE , 10
PRINT "K?stenbatterien"
LOCATE , 10 |
Die Zeile must du nur beim ersten Print angeben.
Mehr fällt mir gerade nicht auf. |
Achso ok... mit dem Verstehn is schwer, was? Also bricht er bei dir auch ab bei ... etwa den Luft-Einheiten? ( pack den text ma inne Editor und speicher als .bas, was macht das Prog?)[/b]
edit: Ich denke er "ärgert" sich über die vielen Locates^^ weil wenn ich den einen durch Print tab(10) "blubb" ersetze Nörgelt er den nächsten an... _________________ <xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link? |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 05.05.2006, 18:41 Titel: |
|
|
Beim Verstehn ist das Problem, das hier viele Posting kurz hintereinander kommen.
Hier zum Beispiel mit Arrays:
Code: | DIM nam$(0 TO 20)
DIM anzahl(0 TO 20)
nam$(0) = "Läufer"
nam$(1) = "Sprinter"
nam$(2) = "Panzer"
FOR i = 0 TO 20
LOCATE , 2
PRINT nam$(i);
LOCATE , 20
INPUT anzahl(i)
NEXT i |
Zum Absturz:
Der absturz ist bei mir genau bei
Code: | LOCATE 26, 10
PRINT "Bunker" |
Meine Konsole (dort wo der Text ausgegeben wird) ist halt nicht höher als 25 Zeilen. (janach System mehr oder weniger)
Du musst wieder bei Zeile 1 Beginnen, dann stehen einfach nicht mehr alle Infos auf dem Bildschirm.
Übrings:
Mit meiner Optimierung (LOCATE , 10 ) erledigt sich das von selbst, QBasic scrollt dann einfach bei der Ausgabe.
(Dann darf aber nur das erste Locate die Zeile angeben, alle anderen müssen dann das Parameter mit der Zeile auslassen.) |
|
Nach oben |
|
 |
Matze001
Anmeldungsdatum: 03.05.2006 Beiträge: 28
|
Verfasst am: 05.05.2006, 18:49 Titel: |
|
|
Michael Frey hat Folgendes geschrieben: | Beim Verstehn ist das Problem, das hier viele Posting kurz hintereinander kommen.
Hier zum Beispiel mit Arrays:
Code: | DIM nam$(0 TO 20)
DIM anzahl(0 TO 20)
nam$(0) = "Läufer"
nam$(1) = "Sprinter"
nam$(2) = "Panzer"
FOR i = 0 TO 20
LOCATE , 2
PRINT nam$(i);
LOCATE , 20
INPUT anzahl(i)
NEXT i |
Zum Absturz:
Der absturz ist bei mir genau bei
Code: | LOCATE 26, 10
PRINT "Bunker" |
Meine Konsole (dort wo der Text ausgegeben wird) ist halt nicht höher als 25 Zeilen. (janach System mehr oder weniger)
Du musst wieder bei Zeile 1 Beginnen, dann stehen einfach nicht mehr alle Infos auf dem Bildschirm.
Übrings:
Mit meiner Optimierung (LOCATE , 10 ) erledigt sich das von selbst, QBasic scrollt dann einfach bei der Ausgabe.
(Dann darf aber nur das erste Locate die Zeile angeben, alle anderen müssen dann das Parameter mit der Zeile auslassen.) |
Achso danke...ich werde mal n paar mehr Zeilen reinbringen ... es fehlen ja nur 5 ....
Edit: Ich habe es ein wenig verändert...werde jetzt noch n bissle was überflüssiges killen und ma schaun...wenn es auch so läuft will ich überflüssiges Proggen vermeiden.... _________________ <xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link? |
|
Nach oben |
|
 |
Matze001
Anmeldungsdatum: 03.05.2006 Beiträge: 28
|
Verfasst am: 05.05.2006, 20:57 Titel: |
|
|
Ich will nicht immer doof fragen, ich habe mich aber schon mit Monster FAQ und der Suche abgemüht...leider nix gefunden... also wenn ich Kommazahlen eingebe (hier ja nicht 2,345 sondern 354.5647) dann wird der ausgegebene Wert auf eine ganze Zahl gerundet...hat wer einen Befehl mit dem ich Kommastellen ( am besten Drei) zulassen kann...danke schonma  _________________ <xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link? |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 06.05.2006, 08:53 Titel: |
|
|
Zum Runden auf Ganzzahlen:
Das liegt am DEFLNG A-Z, wenn du das entfernst, kannst du ganz Normal mit Kommazahlen arbeiten.
Alternativ kannst du jede Variabel mit DIM ... AS ... einzeln als Ganzahl oder Kommazahl definieren.
Zum Gezielten Runden:
Code: | Input a
PRINT CINT(a * 1000) / 1000 |
|
|
Nach oben |
|
 |
Matze001
Anmeldungsdatum: 03.05.2006 Beiträge: 28
|
Verfasst am: 06.05.2006, 12:28 Titel: |
|
|
Aha...aber wenn ich dann das rausnehme zeigt es Kommastellen an.. das Prog, stell aber große Zahlen nicht dar... Toll... gibt es eine Möglichkeit beides zu bekommen? Wenn net muss ich mir was anderes ausdenken  _________________ <xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link? |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 06.05.2006, 12:44 Titel: |
|
|
Entweder Kommazahlen oder grosse Ganzzahlen, eine Variabel kann nicht beide eigenschaften Erfüllen ...
Wenn du aber willst, das die eine Zahl gross und die andere Kommastellen hat, gibt's die Lösung:
Code: | DEFLNG A-Z
DIM a AS SINGLE
INPUT a
PRINT CINT(a * 1000) / 1000
INPUT c
PRINT c |
Alle Variabeln sind Standardmässig Long, also ohne Komma können dafür aber mit grossen Zahlen umgehen.
Weil a mit DIM a AS SINGLE als Single definiert wurde, hat a Kommastellen, hat dafür aber das problem mit grossen Zahlen.
Jede Variabel die Komma Stellen haben soll, kannst du dann so deklarieren:
DIM NameDerVariabel AS SINGLE
Was keine Kommastellen haben muss, aber gross sein Soll, must du dann nicht Deklarieren. |
|
Nach oben |
|
 |
Matze001
Anmeldungsdatum: 03.05.2006 Beiträge: 28
|
Verfasst am: 06.05.2006, 12:52 Titel: |
|
|
EDIT: Kommando zurück
Ich habe eine Idee...eigndlich müssen nur die letzten beiden Ziffern lang angezeigt werden...werde ma schaun ob es funzt... mit diesem AS LONG oder wie das war (Monster FAQ auskramen) ... _________________ <xyz> Es gibt ein Leben außerhalb des Internet!!
<yxz> wtf?
<yxz> link? |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|