brauche hilfe zum lösen einer aufgabe
-
Hast du ein
assert(n>=0);
in deinem Code?
-
DirkB schrieb:
Hast du ein
assert(n>=0);
in deinem Code?ja hab ich...
-
DirkB schrieb:
Du musst auch bedenken, das bei Ziffer-Werten über 9, Buchstaben genommen werden.
Alsomyprintf(10,16);
ergibt ein 'A' und keinen ':'hmm so wie du es gesagt hast müsste es doch eigentlich direkt funktionieren?
also ";" hat ein anderen wert als "B" in der ascii tabelle aber wie rechne ich das ineinander um? hat c dafür vielleicht eine funktion?
oder wie sollte ich das am besten umsetzen?
-
Ok, war wohl etwas missverständlich. Da fehlte das "sollte"
Wie ezeugst du denn die Zahlen bzw. wie gibst du die Zahlen aus?
-
ich geb die zahlen ganz normal über printf aus und erzeug sie durch den rekursiven aufruf von myprintf
-
Zahlen gibt man normalerweise bei printf() mit %d oder %u aus.
Da du aber ein ';' erhhälst, nimmst du %c. Das ist auch in Ordnung.printf("%c", Wert);
Nur wie erzeugst du den Wert den du ausgeben willst.
-
Ich erzeuge den wert den ich ausgeben möchte in dem ich jedes zeichen des zielwertes einzeln berechne und diese dann aneinander füge
also hier
"11" "9" und das wäre dann ja im hexa
"B" "9"
-
Zeig mal deinen Code. Zumindest die Zeilen wo du die 11 berechnest bis zur Ausgabe.
Nebenbei ist "9" ein String, '9' ein Zeichen und 9 ein Zahlenwert.
-
void myprintf(int n, int b) { assert(n>=0); // stellt sicher das n größer gleich 0 ist if(b==2||b==8||b==10||b==16) { int k; k=(n%b); if(n!=0) { n=(n/b); myprintf(n,b); putchar('0'+k); } }
-
die " waren auch nur da um den wert zu verdeutlichen sorry hät ich vllt schreiben sollen
-
Wie musst du putchar('0'+k); anpassen, wenn du erstmal für die 0 ein 'A' haben möchtest. (und für die 1 ein 'B')
Die endgültige Lösung klappt nicht mit einem Befehl.
-
Hmmm könnteste mir da nen ansatz zu geben? Vielleicht irgendwas in der richtung das ich da ne if verzweigung reinsetze?
-
habe jetzt ein bisschen rumprobiert etwas zu ändern und zu tauschen...
finde aber keine Lösung was soll ich mit assert(n>=0) machen um meine gewünschte ausgabe zu bekommen...
ich steh echt aufm schlauch und könnte hilfe gebrauchen...
-
Ein if ist für dich (als Anfänger) sicher am sinnvollsten*.
Am besten ob k > 9 ist.
Aber aufpassen: 'A' steht für 10. Wenn du dann zu k das 'A' addierst, bekommst du einen anderen Buchstaben.Und für das assert schau mal auf der 1. Seite des Threads nach. Da steht ein bisschen Code.
*Es geht auch ohne if
-
Ok habs jetz über ne "brücke" geschafft
vielen dank für deine hilfe DirkB
-
wie soll mir der code auf der ersten seite weiterhelfen?...so hab ich es ja...
aber dann kommt ja nicht die ausgabe die ich haben möchte...ich hab wirklich keine ahnung was du mir damit sagen willst bitte erklärs mir...
-
ok
Hier noch die Version ohne ifstatic char myprintf_numbers[] = "0123456789ABCDEF"; void myprintf(int n, int b) { assert(n>=0); // stellt sicher das n größer gleich 0 ist if(b==2||b==8||b==10||b==16) { int k; k=(n%b); if(n!=0) { n=(n/b); myprintf(n,b); putchar(myprintf_numbers[k]); } } }
-
das ist natürlich bedeutent effizienter als das was ich mir überlegt hatt
danke nochmals
-
hast du bitte auch noch ein lösung für mein problem?
-
test89 schrieb:
hast du bitte auch noch ein lösung für mein problem?
Dann zeig doch mal deinen Code.