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:

Addition

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



Anmeldungsdatum: 28.07.2014
Beiträge: 59

BeitragVerfasst am: 24.05.2015, 20:11    Titel: Addition Antworten mit Zitat

Hallo liebes Forum. lächeln
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. zwinkern

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
Benutzer-Profile anzeigen Private Nachricht senden
nemored



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

BeitragVerfasst am: 24.05.2015, 20:50    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Input



Anmeldungsdatum: 28.07.2014
Beiträge: 59

BeitragVerfasst am: 24.05.2015, 21:10    Titel: Antworten mit Zitat

Vielen Dank; damit werd ich sicher weiterkommen. lächeln

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
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 FreeBASIC. 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