|
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 |
Input
Anmeldungsdatum: 28.07.2014 Beiträge: 59
|
Verfasst am: 24.05.2015, 20:11 Titel: Addition |
|
|
Hallo liebes Forum.
Ich möchte gerne im Dualsystem addieren, krieg das aber einfach nicht hin (ja, die Übertragung...). Wäre froh, wenn mir da jemand helfen könnte. Vielen Dank.
Mein Code sieht etwa so aus:
Code: |
input "Zahl 1: ",x
input "Zahl 2: ",y
text1=str(x+y)
for n=0 to len(text1)
if mid(text1,n,1)="0" then print "0";
if mid(text1,n,1)="1" then print "1";
if mid(text1,n,1)="2" then
print "01"
text1=left(text1,n-1)
end if
next
|
|
|
Nach oben |
|
|
nemored
Anmeldungsdatum: 22.02.2007 Beiträge: 4597 Wohnort: ~/
|
Verfasst am: 24.05.2015, 20:50 Titel: |
|
|
Hmm, ich hätte das ein klein wenig komplett anders gemacht ...
Code: | dim as string x, y
input "Zahl 1 (binaer): ",x
input "Zahl 2 (binaer): ",y
print "Die Summe ist " & bin(val("&b" & x) + val("&b" & x))
sleep |
Oder du parst beide Strings von hinten nach vorn (hätte auch den Vorteil eines Abbruchs bei fehlerhafter Eingabe). Ist alles andere als ein optimierter Algorithmus (das Zusammenstückeln des Ausgabestrings ist keineswegs optimal); und ich hoffe, es haben sich keine Fehler eingeschlichen.
Code: | dim as string x, y, summe
dim as integer wert, gemerkt
input "Zahl 1 (binaer): ",x
input "Zahl 2 (binaer): ",y
' vorn mit 0 auffüllen
if len(x) > len(y) then
y = string(len(x) - len(y), "0") & y
else
x = string(len(y) - len(x), "0") & y
end if
' summieren
for i as integer = len(x)-1 to 0 step -1
wert = x[i] + y[i] + gemerkt - 96 ' ergibt sich aus asc("0") = 48
select case wert
case 0
gemerkt = 0
summe = "0" & summe
case 1
gemerkt = 0
summe = "1" & summe
case 2
gemerkt = 1
summe = "0" & summe
case 3
gemerkt = 1
summe = "1" & summe
case else
print "FEHLER: falsche Eingabe!" : end
end select
next
if gemerkt then summe = "1" & summe
print "Die Summe ist " & summe
sleep |
_________________ Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1. |
|
Nach oben |
|
|
Input
Anmeldungsdatum: 28.07.2014 Beiträge: 59
|
Verfasst am: 24.05.2015, 21:10 Titel: |
|
|
Vielen Dank; damit werd ich sicher weiterkommen.
Edit: So, hab da mal etwas gebastelt. Sicher nicht optimal, aber es läuft.
Code: |
dim as long n,x,x2,x3,y
dim as string modus,text1,text2
do
print ""
print "1 Dezi>Dual 2 Dual>Dezi"
print "3 Addition 4 Subtrak."
print "5 Multipl. 6 Division"
print ""
sleep
modus=inkey
if modus=chr(27) then end
if modus="1" then
input "Zahl: ",x
print ""
text1=""
text2=""
y=x
do
text1=text1 & y mod 2
y/=2
loop until y=0
for n=len(text1) to 1 step -1
text2=text2 & mid(text1,n,1)
next
print "Dual: ";text2
end if
if modus="2" then
input "Zahl: ",x
print ""
text1=str(x)
text2=""
y=0
for n=0 to len(text1)
y+=(val(mid(text1,n,1)))*2^(len(text1)-n)
next
print "Dezi:";y
end if
if modus="3" then
input "Zahl 1: ",x
input "Zahl 2: ",y
print ""
print "Dual: ";bin(val("&b"&x)+val("&b"&y))
end if
if modus="4" then
input "Zahl 1: ",x
input "Zahl 2: ",y
print ""
text1=str(y)
text2=""
for n=1 to len(text1)
if mid(text1,n,1)="1" then text2=text2 & "0"
if mid(text1,n,1)="0" then text2=text2 & "1"
next
text1=bin(val("&b"&text2)+val("&b"&1))
text2=bin(val("&b"&text1)+val("&b"&x))
print right(text2,len(text2)-1)
end if
if modus="5" then
input "Zahl: ",x
print ""
text1=str(x)
text2=""
y=0
for n=0 to len(text1)
y+=(val(mid(text1,n,1)))*2^(len(text1)-n)
next
x2=y
input "Zahl: ",x
print ""
text1=str(x)
text2=""
y=0
for n=0 to len(text1)
y+=(val(mid(text1,n,1)))*2^(len(text1)-n)
next
x3=y
x=x2*x3
text1=""
text2=""
y=x
do
text1=text1 & y mod 2
y/=2
loop until y=0
for n=len(text1) to 1 step -1
text2=text2 & mid(text1,n,1)
next
print "Prod: ";text2
end if
if modus="6" then
input "Zahl: ",x
print ""
text1=str(x)
text2=""
y=0
for n=0 to len(text1)
y+=(val(mid(text1,n,1)))*2^(len(text1)-n)
next
x2=y
input "Zahl: ",x
print ""
text1=str(x)
text2=""
y=0
for n=0 to len(text1)
y+=(val(mid(text1,n,1)))*2^(len(text1)-n)
next
x3=y
x=x2/x3
text1=""
text2=""
y=x
do
text1=text1 & y mod 2
y/=2
loop until y=0
for n=len(text1) to 1 step -1
text2=text2 & mid(text1,n,1)
next
print "Quot: ";text2
end if
loop
|
|
|
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.
|
|