BPS #19: Summe der Eingabe - Auswertung

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Xeres

Moderator

Betreff: BPS #19: Summe der Eingabe - Auswertung

BeitragSo, Apr 29, 2012 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Mathematik! Was könnte man daran nicht mögen?

Das war die Aufgabe

Postet hier eure Ergebnisse, Codes, Gedanken. Lernt von den anderen, seht euch deren Quelltext an und versucht euren eigenen zu verbessern.

Diskussion
Postet zu euren Codes stets eine kurze Erklärung mit euren Gedanken in denen ihr simpel gesagt die Frage "Wieso habe ich XY auf diese Art gelöst?" beantwortet. Beiträge, die nur den Code enthalten werden wir aus dem Thread entfernen.

Nächste Aufgabe
In einer Woche wird die Musterlösung nach editiert und in 2 die nächste Aufgabe eingestellt.

Viel Spaß & viel Erfolg!

Musterlösung:
BlitzBasic: [AUSKLAPPEN]
; BPS: Holzchopf - Summe der Eingabe

Local sum ; zwischengespeicherte Summe
; einfache Hauptschleife
While Not KeyHit(1)
; Eingabe speichern
Local in$ = Input("Eingabe:")
; eingegebenen Text als Zahl speichern
Local inVal = in
; leere Eingabe?
If in=""
; Summe ausgeben
Print "Summe: "+sum
; ... und zurücksetzen
sum = 0
; gültige Zahl eingegeben (positiv oder negativ)
ElseIf inVal<>0
; summieren
sum = sum +inVal
EndIf
Wend
End
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)
  • Zuletzt bearbeitet von Xeres am So, Mai 13, 2012 11:42, insgesamt einmal bearbeitet

SpionAtom

Betreff: Supergeile Lösung!

BeitragSo, Apr 29, 2012 17:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann will ich mal:

Code: [AUSKLAPPEN]
;BPS #19
;Erstelle ein Programm, dass vom Benutzer Zahlen entgegen nimmt (beispielsweise via Input)
;und deren summe ausgibt, sobald der Benutzer eine leere eingabe tätigt.
;
;29.4.2o12 SpionAtom


Local summe# = 0
Local eingabe$

   ;Das Programm läuft in einer Schleife, da sich Eingabe und
   ;Verarbeitung (Prüfen der Eingabe und Aufsummieren) ständig wiederholen.
   ;Die Schleife wird verlassen, sobald eine leere Eingabe erfolgt
   Print "Leere Eingabe um fortzufahren"
   Repeat
      ;Eingabe entgegennehmen mittels Input
      Print "Bitte Zahl eingaben"
      eingabe$ = Input$()
      If eingabe$ = "" Then
      End If
      ;Prüfen, ob die Eingabe eine Zahl ist mittels der selbstgeschriebenen Funktion istZahl
      If istZahl(eingabe$) Then
         ;Summe um den Eingabewert erhöhen
         summe# = summe# + Float(eingabe$)
      Else
         ;Benutzer auf falsche Eingabe hinweisen
         Print "Keine gültige Zahl!"
      End If
   Until eingabe$ = ""
   ;Summe ausgeben und Programm beenden
   Print "Die Summe der eingegebenen Zahlen lautet:"
   Print summe#
   WaitKey
   End

WaitKey
End



;Prüft, ob der übergebene String eine Zahl ist
;( in den meisten Fällen würde es auch ausreichen, txt$ in einen Int oder Float zu casten,    )
;( und dann zu schauen, ob der Wert ungleich 0 ist. Die 0 würde dadurch aber nicht abgedeckt. )
Function istZahl(txt$)

   ;ist der String leer, wird gleich falsch zurückgegeben.
   ;Besteht der String nur aus einem Minuszeichen oder einem Punkt,
   ;so wird auch falsch zurückgegeben
   If txt$ = "" Or txt$ = "-" Or txt$ = "." Then
      Return False
   End If

   ;Gehe jedes Zeichen durch, und prüfe, ob es eine Ziffer ist
   ;Es gibt zwei Ausnahmen, die auch jeweils nur einmal vorkommen dürfen:
   ;   Ein Minuszeichen am Anfang
   ;   Ein Punkt
   Local position, zeichen$
   For position = 1 To Len(txt$)
      ;Hole das nächste Zeichen aus txt$
      zeichen$ = Mid(txt$, position, 1)
      
      ;Prüfe zunächst, ob das Zeichen keine Ziffer ist.
      ;Dies geht ganz gut mit Ascii Vergleichen, da die
      ;Ziffern 0-9 nacheinander in der Ascii-Tabelle vorkommen
      If Asc(zeichen$) < Asc("0") Or Asc(zeichen$) > Asc("9") Then

         ;ungültiges Zeichen in txt$ gefunden
         If zeichen$ <> "-" And zeichen <> "." Then
            Print "m"
            Return False
         End If

         ;Prüfe, ob Zeichen ein Minuszeichen ist nicht am Anfang steht
         If zeichen$ = "-" And position > 1 Then
            Return False
         End If

         ;Prüfe, ob Zeichen ein Punkt ist, und ob noch ein Punkt vorkommt
         If zeichen$ = "." And Instr(txt$, ".", position + 1) > 0 Then
            Return False
         End If

      End If
   Next

   ;ist die Schleife komplett durchgelaufen, so ist txt$ eine gültige Zahl
   Return True

End Function
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080
  • Zuletzt bearbeitet von SpionAtom am So, Apr 29, 2012 23:08, insgesamt einmal bearbeitet

Eingeproggt

Betreff: Superminimale Lösung

BeitragSo, Apr 29, 2012 18:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hab mir folgendes zu Herzen genommen:
Zitat:
versuche trotzdem, nur das Nötigste einzubauen


BlitzBasic: [AUSKLAPPEN]
Repeat
in$=Input("")
summe%=summe%+Int(in$)
Until in$=""
Print summe%
WaitKey()
End


Tja, äh... brauch ich ned viel sagen oder? War aber n bissi langweilig es so zu machen Razz
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Addi

BeitragSo, Apr 29, 2012 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Mein Beitrag:

BlitzBasic: [AUSKLAPPEN]

AppTitle "Rechner"

Global InputValue$
Global TotalValue

;(Endlose-)Hauptschleife
Repeat

;Wert wird vom Nutzer als String eingegeben
InputValue$ = Input("Belibige Zahl: ")

;Wenn InputValue eine Zahl besitzt, dann TotalValue um diesen erhöhen
;sonst wird das Ergebnis ausgegeben.
If InputValue$ > "" Then
TotalValue = TotalValue+Int(InputValue$)
Else
Color 0,0,$00FF00
Print "--------------------------"
Color 0,0,$FF0000
Print "Ergebnis: " + TotalValue
Print ""
Print "Taste zum Beenden"
WaitKey:End
End If

Forever
BP/B3D/BMax : Lerne Java : Früher mal Lite-C : Gewinner BCC 62
 

bjh

BeitragSo, Apr 29, 2012 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
meine version in einer zeile:

BlitzBasic: [AUSKLAPPEN]
Repeat:a$=Input(""):b=b+Int(a):Until a="":Print b:WaitKey:End


noch kürzer also bei Eingeproggt Wink

SpionAtom

BeitragSo, Apr 29, 2012 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Bytetechnisch magst du da Recht haben. Im Grunde sind eure Programme aber identisch. Du Verwendest lediglich andere Bezeichner und andere Formatierungen. Die Befehle sind genau dieselben und in derselben Reihenfolge.

Es ist aber lustig zu sehen, dass das Programm in eine Zeile passt.
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

aMul

Sieger des Minimalist Compo 01/13

BeitragMo, Apr 30, 2012 3:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Nunja, ansich geht jedes Programm in einer Zeile.
In den meisten Sprachen sowieso, und in Blitz ja mit ':' auch.
Übrigens:
BlitzBasic: [AUSKLAPPEN]
Repeat:a$=Input():b=b+Int(a):Until a="":RuntimeError b

Ich behaupte, weniger Zeichen gehen nicht. Mr. Green
(es sei denn die Ausgabe muss nicht gesehen werden, oder "Print b:Stop" ist auch gültig)

Erinnert mich daran, als wir neulich in der Uni ein Program schreiben und abgeben sollten, das auf eine Zahl eins dazu addiert und sie wieder ausgibt(praktisch um sicherzustellen, dass alle mit dem automatischen Korrektur-System umgehen können).
Da ein einfaches ++ zu langweilig gewesen wäre, habe ich eine Lösung geschrieben die rekursiv und nur mit Bit-Operationen arbeitet.

Mal schauen, vielleicht mach ich bei zukünftigen BPS' mal mit, und schaue ob ich ähnlich kreativ sein kann.
Panic Pong - ultimate action mashup of Pong and Breakout <= aktives Spiele-Projekt, Downloads mit vielen bunten Farben!
advASCIIdraw - the advanced ASCII art program <= aktives nicht-Spiele-Projekt, must-have für ASCII/roguelike/dungeon-crawler fans!
Alter BB-Kram: ThroughTheAsteroidBelt - mit Quelltext! | RGB-Palette in 32²-Textur / Farbige Beleuchtung mit Dot3 | Stereoskopie in Blitz3D | Teleport-Animation Screensaver

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group