Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Zahlen formatieren.

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Geladin



Anmeldungsdatum: 23.05.2019
Beiträge: 12

BeitragVerfasst am: 17.04.2022, 18:14    Titel: Zahlen formatieren. Antworten mit Zitat

Ich habe eine Frage zum Formatieren von Zahlen.
Ich möchte folgendes, vielleicht gehe ich die Sache auch völlig falsch an...

Ich habe die große Lust, extrem große Zahlen zu schreiben. Also wirklich groß.

Meine Idee war es, mehrere Integer zu nutzen und diese hintereinander zu schreiben.

Beispiel:

Code:
IF zahl1 > 0 THEN
   IF zahl1 > 0 AND zahl1 < 10 THEN
      LOCATE 1, 78
   ELSEIF zahl1 > 9 AND zahl1 < 100 THEN
      LOCATE 1, 77
   ELSEIF zahl1 > 99 AND zahl1 < 1000 THEN
      LOCATE 1, 76
   END IF
   PRINT zahl1
END IF
IF zahl2 > 0 THEN
   IF zahl2 > 0 AND zahl2 < 10 THEN
      LOCATE 1, 74
   ELSEIF zahl2 > 9 AND zahl2 < 100 THEN
      LOCATE 1, 73
   ELSEIF zahl2 > 99 AND zahl2 < 1000 THEN
      LOCATE 1, 72
   END IF
   PRINT zahl2
   LOCATE 1, 76
   PRINT "."
END IF

und folgend

Das funktioniert soweit super. Wenn zahl1 = oder > 1000, dann zahl2 + 1 und zahl1 - 1000
Jetzt habe ich das Problem, wenn die Gesamtzahl 1.050 sein soll...
Denn wenn zahl1 50 ist, wird sie nur 2-stellig angezeigt. Dann steht da 1._50 (_ = Leerschritt)...

Wie kann ich eine führende 0 zur 50 schreiben. Oder gibt es eine "elegante Lösung"?

Bin halt Anfänger...[/code]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 17.04.2022, 19:59    Titel: Antworten mit Zitat

Mein Vorschlag:
Code:
zahl1 = 1
zahl2 = 50

Print Right$("0000" + Str$(zahl1), 4) + "." + Right$("0000" + Str$(zahl2), 4)

ansonsten gibt es zum Formatieren von Ausgaben noch PRINT USING.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Geladin



Anmeldungsdatum: 23.05.2019
Beiträge: 12

BeitragVerfasst am: 17.04.2022, 21:02    Titel: Antworten mit Zitat

Danke, werde ich morgen direkt mal ausprobieren...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Geladin



Anmeldungsdatum: 23.05.2019
Beiträge: 12

BeitragVerfasst am: 18.04.2022, 07:09    Titel: Antworten mit Zitat

grindstone hat Folgendes geschrieben:
Mein Vorschlag:
Code:
zahl1 = 1
zahl2 = 50

Print Right$("0000" + Str$(zahl1), 4) + "." + Right$("0000" + Str$(zahl2), 4)

ansonsten gibt es zum Formatieren von Ausgaben noch PRINT USING.

Gruß
grindstone


Wenn ich den 1. Code nutze (wobei ich 0000 / 4 nicht ganz verstehe)
dann bekomme ich als Ausgabe
00_1.0_50 (_ = Leerzeichen)

Benutze ich den Code und ersetze 0000 mit 000 und 4 durch 3 (will ja nur 3 Stellen pro Zahl) dann erhalte ich "0_1._50"

Ich denke, der Grund liegt darin, dass man den Wert 1 und 50 in den String schreibt und dabei ein führendes Leerzeichen eingesetzt wird.

String 000 + "50" = _50
String 000 + "1" = 0_1

Ich versuche es mal mit PRINT USING

Trotzdem Danke für deine Mühen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 18.04.2022, 11:22    Titel: Antworten mit Zitat

STR$(zahl) hängt in QBasic vorne das Vorzeichen der Zahl an, bzw. bei positiven Zahlen ein Leerzeichen. Du könntest mal LTRIM$(STR$(zahl)) probieren, um das Leerzeichen wieder abzuschneiden.
Einfacher ist da sicherlich PRINT USING.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 18.04.2022, 15:23    Titel: Antworten mit Zitat

Stimmt, ich hatte den Programmschnippsel mit FB getestet und dann zum Posten nur die Suffixe drangehängt. Mein Fehler, Entschuldigung.

Geladin hat Folgendes geschrieben:
Benutze ich den Code und ersetze 0000 mit 000 und 4 durch 3 (will ja nur 3 Stellen pro Zahl)...
Stimmt zum Teil. "000" reicht, weil die Zahl ja mindestens eine Stelle hat, aber die 4 muß bleiben.

So funktioniert es (diesmal mit original QB getestest, und ich habe noch eine Vornullenunterdrückung dazugebastelt):
Code:
zahl1 = 1
zahl2 = 50

z$ = Right$("000" + LTrim$(Str$(zahl1)), 4) + "." + Right$("000" + LTrim$(Str$(zahl2)), 4)

x% = 1
Do While Mid$(z$, x%, 1) = "0"
   Mid$(z$, x%, 1) = " "
   x% = x% + 1
Loop

Print z$


Gruß
grindstone

EDIT:
Ich habe mal aus Neugierde versucht, das Ganze mit PRINT USING zu realisieren, es funktioniert nicht. Überlange Zahlen können nicht dargestellt werden, und als führende Füllzeichen stehen nur Leerzeichen oder Sternchen zur Verfügung.
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4594
Wohnort: ~/

BeitragVerfasst am: 18.04.2022, 18:08    Titel: Antworten mit Zitat

Da dachte ich gerade, dass diese Aufgabe auch ein guter Anwendungsbereich für den ziemlich seltsamen Befehl RSET wäre, aber nein - auch der füllt ausschließlich mit Leerzeichen auf. Zumindest in FreeBASIC. Oder lässt es sich in QBasic flexibler einsetzen?
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 19.04.2022, 15:40    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
Oder lässt es sich in QBasic flexibler einsetzen?
Nein, es ist die gleiche Funktion.

Hier noch eine verbesserte Version der Vornullenunterdrückung, die sich auch von einem Wert von 0 nicht aus dem Konzept bringen lässt. Sie wandelt von links nach rechts alle Zeichen in Leerzeichen (oder jedes andere gewünschte Zeichen) um, bis sie auf eine Ziffer <> 0 trifft.
Code:
For x% = 1 To Len(z$) - 1
   If InStr("123456789", Mid$(z$, x%, 1)) Then
      Exit For
   Else
      Mid$(z$, x%, 1) = " "
   EndIf
Next

_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Geladin



Anmeldungsdatum: 23.05.2019
Beiträge: 12

BeitragVerfasst am: 21.04.2022, 06:46    Titel: Antworten mit Zitat

Vielen lieben Dank für eure Tipps
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz