Übungsaufgabe für alle :: Nr. 1

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

pile

BeitragFr, Nov 12, 2004 15:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Das würde ja heißen das ich das ganze nochmal schreiben muss. Das while nicht erlaubt ist wurde nicht erwähnt.
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%
 

Timo

BeitragFr, Nov 12, 2004 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
naja irgendwie aber verständlich, der sinn des ganzen war ja, das ganze ohne bedingungen zu programmieren...

simi

BeitragFr, Nov 12, 2004 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

ja ich weiss schon das das inifiziennt ist....
Ich habs auch nicht so gemacht, ist mir erst in einer langweiligen Schulstunde in den Sinn gekommen... Very Happy

cu simi

eXceptION

BeitragFr, Nov 12, 2004 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
gerade das... es ist nicht ineffizient...

es wird nur noch EINE machinecode instruction mehr ausgeführt...
Norweger...

Spreche aber verdammt gut 8086

wunderkind

BeitragSa, Nov 13, 2004 9:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Holzchopf bat mich, seinen Beitrag hier zu posten. Das sei hiermit getan.
Code: [AUSKLAPPEN]
;========================
; Holzchopfs ausführliche Variante

; Initialisierung
Graphics 400,300,16,2

Const menge1_max = 450
Const menge2_max = 500
Const menge3_max = 600
Const menge4_max = 750


; Eingabe

menge1 = Input( "Gramm von Zutat 1:" )
menge2 = Input( "Gramm von Zutat 2:" )
menge3 = Input( "Gramm von Zutat 3:" )
menge4 = Input( "Gramm von Zutat 4:" )

Print "Beträgt die Raumptemperatur 30°C oder mehr? [J/N]"
raumtemp = ( Lower( Input$() ) = "j" )
Print "Ist der Arbeitsplatz sauber? [J/N]"
sauber = ( Lower( Input$() ) = "j" )
Print "Wird eine Absaugvorrichtung verwendet? [J/N]"
absaug = ( Lower( Input$() ) = "j" )

; Berechnung nach dem Schema:
;
;            ,--,  ,---,  ,--,
; Zutat 1 ---|>0|--|   |  |  |
;            :--:  |AND|--|  |
; Zutat 4 ---|>0|--|   |  |  |
;            `--`  `---`  |  |
;                         |  |
; Zutat 1 max -,          |  |
;              |          |  |
;            ,--,  ,--,   |  |
; Zutat 1 ---|> |--|  |   |  |
;            `--`  |  |   |  |
; Zutat 2 max -,   |  |   |  |
;              |   |  |   |  |
;            ,--,  |  |   |  |
; Zutat 2 ---|> |--|  |   |  |
;            `--`  |  |   |  |
; Zutat 3 max -,   |  |   |  |
;              |   |OR|---|  |
;            ,--,  |  |   |  |
; Zutat 3 ---|> |--|  |   |  |
;            `--`  |  |   |OR|--- Explodieren
; Zutat 4 max -,   |  |   |  |
;              |   |  |   |  |
;            ,--,  |  |   |  |
; Zutat 4 ---|> |--|  |   |  |
;            `--`  `--`   |  |
;                         |  |
;            ,---,        |  |
; Zutat 2 ---|   | ,----, |  |
;            | + |-|>600|-|  |
; Zutat 3 ---|   | `----` |  |
;            `---`        |  |
;                         |  |
;            ,--,  ,---,  |  |
; Raumtemp --|  |  |   |  |  |
;            |OR|--|   |  |  |
; Sauber ---o|  |  |AND|--|  |
;            `--`  |   |  |  |
; Absaug ---------o|   |  |  |
;                  `---`  `--`

Explosion = menge1 > 0 And menge4 > 0
Explosion = Explosion Or ( menge1 > menge1_max Or menge2 > menge2_max Or menge3 > menge3_max Or menge4 > menge4_max )
Explosion = Explosion Or ( ( menge2 + menge3 ) > 600 )
Explosion = Explosion Or ( ( raumtemp Or ( Not sauber ) ) And ( Not absaug ) )

; Ausgabe
Print
Print "Das gemisch würde " + Mid$( "nicht ", 1, ( Not Explosion ) * 6 ) + "explodieren!"
Print
Print "Die Verbindung ist stabil: " + ( Not Explosion )
WaitKey()

End
 

Timo

BeitragSa, Nov 13, 2004 9:44
Antworten mit Zitat
Benutzer-Profile anzeigen
netter ansatz, da wär ich glaub ich nicht drauf gekommen. Hier mal meine Variante.


Code: [AUSKLAPPEN]

graphics 800,600,32,2
setbuffer frontbuffer()

Const maxGramm1 = 500
Const maxGramm2 = 500
Const maxGramm3 = 500
Const maxGramm4 = 500

local Zutat1,Zutat2,Zutat3,Zutat4
Local Temperatur, Abzug, Dreck
Local Gemisch=0
Local temp,temp2

.start

Zutat1 = Input("Menge 1.Zutat (Gramm): ")
zutat2 = Input("Menge 2.Zutat (Gramm): ")
Zutat3 = Input("Menge 3.Zutat (Gramm): ")
Zutat4 = Input("Menge 4.Zutat (Gramm): ")

Temperatur = Input("Ist die Temperatur über 30°C? (1/0): ")
Abzug = Input("Ist ein Abzug vorhanden? (1/0): ")
Dreck = Input("liegt irgendwo Dreck rum? (1/0): ")
Gemisch = 0

;Abfragen ob man nicht zuviel genommen hat

temp = maxGramm1 - Zutat1
temp = temp Shr 31
Gemisch = Gemisch + temp
;Ausgenutzt wird bei dieser "Abfrage" das Sign-Bit, welches
;Signalisiert, ob eine Zahl negativ oder Positiv ist. Dieses
;bekommt man an die Stelle 1 mit Shr. Wenn es gesetzt war
;ist temp also 1 ansonsten 0

temp = maxGramm2 - Zutat2
temp = temp Shr 31
Gemisch = Gemisch + temp

temp = maxGramm3 - Zutat3
temp = temp Shr 31
Gemisch = Gemisch + temp

temp = maxGramm4 - Zutat4
temp = temp Shr 31
Gemisch = Gemisch + temp

;Abfragen ob die Mischung aus 1 und 4 besteht

temp = - Zutat1
temp = temp Shr 31

temp2 = - Zutat4
temp2 = temp2 Shr 31

temp = temp + temp2
temp = temp shr 1
Gemisch = Gemisch + temp

;Abfragen ob die Summe von 2 und 3 über 600 Gramm ist

temp = 600 - (Zutat2 + Zutat3)
temp = temp shr 31
Gemisch = Gemisch + temp

;Abfragen ob die Temp über 30° ist oder ob es einen Abzug gibt

temp = (Temperatur - Abzug)
temp = temp and 1

Gemisch = Gemisch + temp

;Abfragen ob die Umbegung dreckig ist oder ob es nen Abzug gibt

temp = (Dreck - Abzug)
temp = temp And 1

Gemisch = Gemisch + temp



Print
print Gemisch
Print "1 steht für <<geht in die Luft>>, 0 steht für <<ist stabil>>"
print ".................................."
print
print "nochmal? taste drücken!"
print

waitkey()
goto Start
end

pile

BeitragSa, Nov 13, 2004 10:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Und hier meins, mit dem bösen While-Schleifen Smile .
Code: [AUSKLAPPEN]

Graphics 640,480
Print "Wilkommen beim Laborsimulator"
Delay 2000
Print
Name$=Input$("Wie ist ihr Name? > ")
Cls
Locate 0, 0
Print "Hallo " + Name$
Delay 2000
Print
Print "Heute werden Sie ein pyrotechnisches Experiment durchführen."
Print "Sie bekommen 4 Zutaten die Sie beliebig mischen können. "
Delay 5000
Print
Print "Seien Sie aber vorsichtig mit der Dosierung, sonnst kann es zu einer heftigen"
Print "Reaktion (warscheinlich Explosion) kommen die alle Substanzen zerstören oder"
Print "sehr gesundheitsschädigen für Sie sein kann."
Print
Print "Weiter mit beliebiger Taste."
WaitKey
Cls
Locate 0, 0
Print "Fangen wir an.
Delay 2000
Print
Print "Diese 4 Zutaten stehen ihnen zur Verfügung:"
Print
Print "1. Schwarzpulver, 2. Strontium, 3. Schwefel, 4. Kaliumnitrat"
Print
Print "Weiter mit beliebiger Taste."
WaitKey
Cls
Locate 0, 0
Konstant=400
Print "Nun folgt das Mischen der Zutaten!"
Print "Geben Sie weiter Unten die Menge für die Substanzen in Gramm an! "
Print "Die maximale Grammzahl pro Zutat darf " + Konstant + " nicht ueberschreiten!"
Print "Soll eine Zutat nicht verwendet werden, geben Sie bitte 0 an!"
Print

z1=Input$("1.Zutat: Schwarzpulver > ")
z2=Input$("2.Zutat: Strontium > ")
z3=Input$("3.Zutat: Schwefel > ")
z4=Input$("4.Zutat: Kaliumnitrat > ")
Repeat
Cls
Locate 0, 0
Print "Haben Sie den laborinternen Sicherheitsabzug in Betrieb?"
Print
Abzug$=Input$("(j/n) ")
Delay 500
While  Not Abzug$="j" Or Abzug$="J" Or Abzug$="n" Or Abzug$="N"
Print
Print "Antworten Sie bitte nur mit j oder n."
Delay 2000
Exit
Wend
Until Abzug$="j" Or Abzug$="J" Or Abzug$="n" Or Abzug$="N"

Repeat
Cls
Locate 0, 0
Print "Ist die aktuelle Raumtemperatur ueber 30°?"
Print
Temperatur$=Input$("(j/n) ")
Delay 500
While  Not Temperatur$="j" Or Temperatur$="J" Or Temperatur$="n" Or Temperatur$="N"
Print
Print "Antworten Sie bitte nur mit j oder n."
Delay 2000
Exit
Wend
Until Temperatur$="j" Or Temperatur$="J" Or Temperatur$="n" Or Temperatur$="N"
Repeat
Cls
Locate 0, 0
Print "Ist der Arbeitsbereich gereinigt?"
Print
Sauber$=Input$("(j/n) ")
Delay 500
While  Not Sauber$="j" Or Sauber$="J" Or Sauber$="n" Or Sauber$="N"
Print
Print "Antworten Sie bitte nur mit j oder n."
Delay 2000
Exit
Wend
Until Sauber$="j" Or Sauber$="J" Or Sauber$="n" Or Sauber$="N"

; Hier werden die Bedingungen für das Ergebnis festgelegt
While z1>0 And z4 >0
Gosub Explosion
Print
Print "Grund: Zutat 1 und 4 Dürfen nicht gemischt werden!"
WaitKey
End
Wend
While z1>Konstant Or z2>Konstant Or z3>Konstant Or z4>Konstant
Gosub Explosion
Print
Print "Grund: Die maximale Grammzahl wurde ueberschritten."
WaitKey
End
Wend
While  z2+z3>600
Gosub Explosion
Print
Print "Grund: Zutat 2 und 3 wurden falsch gemischt."
WaitKey
End
Wend
While  Abzug$="n" Or Abzug$="N" And Temperatur$="j"
Gosub Explosion
Print
Print "Grund: Bei zu hoher Temperatur ohne Sicherheitsabzug gearbeitet."
WaitKey
End
Wend
While  Abzug$="n" Or Abzug$="N" And Temperatur$="J"
Gosub Explosion
Print
Print "Grund: Bei zu hoher Temperatur ohne Sicherheitsabzug gearbeitet."
WaitKey
End
Wend
While  Abzug$="n" Or Abzug$="N" And Sauber$="n"
Gosub Explosion
Print
Print "Grund: Auf verschmutzten Arbeitsplatz ohne Sicherheitsabzug gearbeitet."
WaitKey
End
Wend
While  Abzug$="n" Or Abzug$="N" And Sauber$="N"
Gosub Explosion
Print
Print "Grund: Auf verschmutzten Arbeitsplatz ohne Sicherheitsabzug gearbeitet."
WaitKey
End
Wend

Cls
Locate 0, 0
Print "Herzlichen Glückwunsch " + Name$ + ", das Experiment war erfolgreich, da"
Print "es zu keiner Explosion geführt hat. 1 setzen! :) "
Print
Print "Beliebige Taste beendet das Programm."
WaitKey
End

.Explosion
Cls
Locate 0, 0
Print "Leider ist Ihnen beim Mixen ein Fehler unterlaufen und die Mischung"
Print "ist explodiert. Das Experiment ist Gescheitert."
Return


Is n bissel Textadventuremäßig geworden....
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%

simi

BeitragSa, Nov 13, 2004 12:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Const C_G1=500
Const C_G2=500
Const C_G3=500
Const C_G4=500

.anfang

Cls
Locate 0,0

G1 = Input("Zutat1 Menge:")
G2 = Input("Zutat2 Menge:")
G3 = Input("Zutat3 Menge:")
G4 = Input("Zutat4 Menge:")

RT = Input("Temperatur > 30°C:")
AS = Input("Arbeitsbereich sauber:")
SA = Input("Sicherheitsanzug:")

Dim ausgabe$(1)
   ausgabe(0) = "FALSE"
   ausgabe(1) = "TRUE"

explo1 = (G1 > 0) And (G4 > 0)

explo2 = (G1 > C_G1) Or (G2 > C_G2) Or (G3 > C_G3) Or (G4 > C_G4)

explo3 = (G2+G3)>600

explo4 = (Not(SA)) And (RT Or AS)

a = (explo1+explo2+explo3+explo4) > 0

Print ausgabe(Not(a))+" "+explo1+explo2+explo3+explo4

WaitKey()

Goto anfang

Kabelbinder

Sieger des WM-Contest 2006

BeitragSa, Nov 13, 2004 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Öhm, kann man den Select- und If-Abfragenverbot nicht ganz einfach mit Repeat-Until-Schleifen umgehen?
<Wing Avenger Download> ◊◊◊ <Macrophage Download>

Holzchopf

Meisterpacker

BeitragSa, Nov 13, 2004 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke wunderkind für das Posten meines Beitrages Smile
Dachte drum irgendwie, da kämen dann um 22:00Uhr plötzlich 1000e mit ihren Antworten und Lösungen und ich wollte halt dann nicht der letzte sein, der seine Lösung kundtut.

Ehrlich gesagt, ging ich davon aus, dass alle Blitzer wissen wie man die Boolschen Operatoren gut einsetzen kann. Oder liegt es nicht daran, dass hier so wenig Lösungen vorliegen? Rolling Eyes
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

eXceptION

BeitragSa, Nov 13, 2004 19:45
Antworten mit Zitat
Benutzer-Profile anzeigen
ehrlich gesagt fand ich es ein bisschen uninteressant... Rolling Eyes

es war ja schliesslich eine beginner contest... oder? Wink
Norweger...

Spreche aber verdammt gut 8086

pile

BeitragSa, Nov 13, 2004 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun ja, dann war ich wohl der einziege Anfänger der mitgemacht hat oder wie Very Happy
MfG. Pile
Aktuelles Projekt: Irgendwas in den BlitzEditor eintippen und sehen ob was dabei rauskommt. Fortschritt: ca. 3.141592653589793238%

Holzchopf

Meisterpacker

BeitragSa, Nov 13, 2004 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja stimmt, hab ganz vergessen, dass wir uns hier ja im Beginner-Bereich befinden, wo die meisten Profis sowieso nie reingucken. Aber eine Herausforderung wärs bestimmt auch für einige von denen, die sich selbst als Profi schimpfen Rolling Eyes
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

wunderkind

BeitragSa, Nov 13, 2004 23:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Um komplett auf drumherum zu verzichten und sich ausschließlich auf boolsche Operationen zu beschränken, musste man schon ein wenig sein hirn bemühen. Hat schon jemand alle Lösungen kontrolliert und durchprobiert?
 

Timo

BeitragSo, Nov 14, 2004 10:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe keine Boolschen Operationen wie >, < verwendet, wollte gucken ob es auch anders geht --- und es geht Very Happy

Hubsi

BeitragSo, Nov 14, 2004 10:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Korrigiert mich, aber <,> und = sind doch Vergleichoperatoren und keine boolschen Operatoren wie And, Or, Not oder Xor Question
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

Holzchopf

Meisterpacker

BeitragSo, Nov 14, 2004 13:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Naja da hast du recht. Halbwegs. Denn = ist 'eigentlich' ein boolscher Operator, nämlich das Äquivalenzoder (eben gleichheit), KA wieso das ein oder im Namen hat, heisst aber so. Dann gibts ja noch das Xor, welches eigentlich Antivalenzoder heisst (ungleich). Ich weiss jetzt allerdings nicht, ob sich diese Operanden nur auf 1-Bitige Eingänge beziehen oder auch auf solche, die Werte im Millionenbereich annehmen können.

Interessant ist noch die Tatsache, wie Blitz mit den Beiden umgeht:
Code: [AUSKLAPPEN]

Print ( 15 Xor 2 )
Print ( 15 Xor 15 )
Print
Print Not( 15 Xor 2 )
Print Not( 15 Xor 15 )
Print
Print ( 15 = 2 )
Print ( 15 = 15 )

WaitKey()
End


Wie man sieht, sieht Blitz = und Xor in Verbindung mit Not als Wahrheitsoperatoren der ganzen Zahlen, während Xor alleine alle Bits aus dem Integerwert vergleicht.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

eXceptION

BeitragSo, Nov 14, 2004 14:22
Antworten mit Zitat
Benutzer-Profile anzeigen
not 0 -> 1
not 1 -> 0

0 or 0 -> 0
0 or 1 -> 1
1 or 0 -> 1
1 or 1 -> 1

0 and 0 -> 0
0 and 1 -> 0
1 and 0 -> 0
1 and 1 -> 1

0 xor 0 -> 0
0 xor 1 -> 1
1 xor 0 -> 1
1 xor 1 -> 0

0 = 0 -> 1
0 = 1 -> 0
1 = 0 -> 0
1 = 1 -> 1

00 xor 00 -> 00
00 xor 01 -> 01
00 xor 10 -> 10
00 xor 11 -> 11
01 xor 00 -> 01
01 xor 01 -> 00
01 xor 10 -> 11
01 xor 11 -> 10
10 xor 00 -> 10
10 xor 01 -> 11
10 xor 10 -> 00
10 xor 11 -> 01
11 xor 00 -> 11
11 xor 01 -> 10
11 xor 10 -> 01
11 xor 11 -> 00
;--------
das hier:
C = (A = B)

kann man auch so schreiben:
C = not (A xor B)

und:
C = (A <> B)

wird:
C = (A xor B)
;--------
(0 or 0) xor 0 -> 0
(0 or 1) xor 0 -> 1
(1 or 0) xor 0 -> 1
(1 or 1) xor 0 -> 1

(0 or 0) xor 1 -> 1
(0 or 1) xor 1 -> 0
(1 or 0) xor 1 -> 0
(1 or 1) xor 1 -> 0
Norweger...

Spreche aber verdammt gut 8086
 

Sibitiger

BeitragDi, Nov 16, 2004 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab auch eine Lösung ich hab aber nicht abgeschrieben falls das jetzt jemand denkt.
Ich habe zwar nicht die anderen Progs geprüft aber meins funktioniert, das hab ich getestet Very Happy .
Code: [AUSKLAPPEN]

;by Sibitiger

Graphics 400,400,256,2

Const mx1=500
Const mx2=675
Const mx3=753
Const mx4=500

Print "Antworte anstatt mit ja-nein immer mit 1-0"
Z1=Input("1. Zutat in Gramm:")
Z2=Input("2. Zutat in Gramm:")
Z3=Input("3. Zutat in Gramm:")
Z4=Input("4. Zutat in Gramm:")
dreck=Input("Ist die Arbeitsfläche sauber:")
Temp=Input("Wie ist die Raumtemperatur:")
Sicher=Input("Wird ein Sicherheitsabzug verwendet:")

ExploSi=Sicher
Explo23=(Z2+Z3)>600
Explo1=(mx1>Z1) Xor 1
Explo2=(mx2>Z2) Xor 1
Explo3=(mx3>Z3) Xor 1
Explo4=(mx2>Z4) Xor 1
Explodreck=dreck And ExploSi
ExploTemp=(30>Temp Xor 1) And ExploSi
;Explosi=Sicher
Explosi=Sgn(Explodreck+Explotemp)
Explo=Sgn(Explo23+Explo1+Explo2+Explo3+Explo4)
Print "1 steht dafür, dass das Gemisch explodieren würde
Print "und 0 steht dafür, dass es stabil bleibt:"
Print Explo
WaitKey()
End


[EDIT]
sry, das is halb falsch muss so heißen:
Code: [AUSKLAPPEN]

;by Sibitiger

Graphics 400,400,256,2

Const mx1=500
Const mx2=675
Const mx3=753
Const mx4=500

Print "Antworte anstatt mit ja-nein immer mit 1-0"
Z1=Input("1. Zutat in Gramm:")
Z2=Input("2. Zutat in Gramm:")
Z3=Input("3. Zutat in Gramm:")
Z4=Input("4. Zutat in Gramm:")
dreck=Input("Ist die Arbeitsfläche sauber:")
Temp=Input("Wie ist die Raumtemperatur:")
Sicher=Input("Wird ein Sicherheitsabzug verwendet:")

ExploSi=Sicher
Explo23=(Z2+Z3)>600
Explo1=(mx1>=Z1) Xor 1
Explo2=(mx2>=Z2) Xor 1
Explo3=(mx3>=Z3) Xor 1
Explo4=(mx2>=Z4) Xor 1
Explodreck=dreck And ExploSi
ExploTemp=(30>=Temp Xor 1) And ExploSi
;Explosi=Sicher
Explosi=Sgn(Explodreck+Explotemp)
Explo=Sgn(Explo23+Explo1+Explo2+Explo3+Explo4)
Print "1 steht dafür, dass das Gemisch explodieren würde
Print "und 0 steht dafür, dass es stabil bleibt:"
Print Explo
WaitKey()
End

[/EDIT]

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group