Anzeige:
Ergebnis 1 bis 5 von 5

Thema: [C] Int nach Zeichenkette str in Binaerdarstellung

  1. #1
    brahma
    Gast

    [C] Int nach Zeichenkette str in Binaerdarstellung

    Ich seh den Wald gerade vor lauter Bäumen nicht, deswegen muss ich euch mal mit was vlt. völlig banalem auf den Keks gehen. Es geht um mein Praktikum C, dort soll ein Taschenrechner gebaut werden, der beim Aufruf die Rechenoperation als Argument bekommt. Das soweit OK, klappt alles. Aber mein Prof möchte auch gerne eine Ausgabe in Binaerform haben....

    Aufgabe konkret:
    Nachdem Sie den Rechner so weit entwickelt und getestet haben, implementieren Sie nun die fehlende Ausgabe in Binaerdarstellung. Entwickeln Sie hierzu die Funktion void itob(int x, char str[]), die
    eine Integerzahl x in die Zeichenkette str in Binaerdarstellung schreibt.
    So, vorgegeben ist dann das:
    Code:
    /* Schreibt Binaerdarstellung von x nach str */
    void itob(int x, char str[]);
    Daraus habe ich gemacht:

    Code:
    /* Schreibt Binaerdarstellung von x nach str */
    void itob(int x, char str[]){
    	char strg[]={};
    	int rest=2, i=0;
    	// Berechnung der Binär-Stellen. Achtung: Reichenfolge falsch
    	while(x > 1 ){
    		rest=x%2;
    		x=x/2;
    		strg[i]= (char) rest;
    //		printf("Binär: %i Rest:%i\n", strg[i], x);
    		i++;
    	}
    	i--;
    	// Stringfolge drehen für richtige Darstellung
    	strg[i]= (char) x;
    	while(i>=0){
    		int j=0;
    		str[j]= '0' + strg[i];
    //		printf("String: %i\n",str[j]);
    		i--;
    		j++;
    	}
    }
    Also die einzelnen Binaerstellen kann ich ja mit Modulo und normaler Teilung herausbekommen, dummerweise natuerlich in falscher Reihenfolge, so dass ich diese wieder drehen muss.

    Leider sieht die Ausgabe meine Programms, wenn ich es mit
    ./Praktikum2 123 + 123
    aufrufe, so aus:

    Binär: 1 Rest:61
    Binär: 1 Rest:30
    Binär: 0 Rest:15
    Binär: 1 Rest:7
    Binär: 0 Rest:3
    Binär: 1 Rest:1
    String: 49
    String: 48
    String: 49
    Ich habs momentan nur für die erste Zahl gemacht, damit die Zwischenausgabe nicht zu unübersichtlich wird.

    Hab dazu 2, naja, 3 Fragen:
    1. Hab ich Fehler gemacht bei der Umrechnung Int -> Binaer?
    2. Geht das auch einfacher? Es sollen keine C-Funktionen benutzt werden, stdio.h ist die einzige zu includierende Datei.
    3. wie drehe ich die Reihenfolge von str so dass der Binaerstring richtig rum ist?

    Danke schonmal fürs lesen

  2. #2
    Registrierter Benutzer
    Registriert seit
    22.08.2002
    Ort
    Nürnberg
    Beiträge
    638
    Habt ihr rekursive Funktionen schon gehabt? Sollte es vielleicht mit Hilfe einer rekursiven Funktion gelöst werden?

    Ansonsten: Warum fügst Du das neue Zeichen/die neue Ziffer am Ende an? Füge sie einfach am Anfang ein. Entweder über die Verwendung von zusätzlichen Buffern oder einfach indem alle bestehenden Zeichen um eines nach hinten bewegt werden.
    Homepage: www.pingu.info

  3. #3
    brahma
    Gast
    Och mann, sagte ja Wald und Bäume.....

    Natürlich kann ich die String-Elemente auch rückwärts füllen, da die Zahl ja zuerst als Cha-String eingelesen wird und ich diesen String zur Brechnung in Int umrechne....

    Muss das ganze ja nur rückwärts machen und "nebenbei" das ganze in Binär umrechnen.....

    Danke Dir

  4. #4
    Registrierter Benutzer
    Registriert seit
    05.09.2002
    Ort
    Neuhausen
    Beiträge
    320
    Naja, ich liefere ja nicht gerne fertige Lösungen,

    Code:
    void itob(int x, char *str, size_t size)
    {
        int v = x;
        int i = 0;
        while ((v >>= 1)) i++;
        if (size <= i+1)
            return;
        str[i+1] = '\0';
        while (x) {
            str[i--] = (x & 1) ? '1' : '0';
            x >>= 1;
        }
    }
    Verd**** jetzt habe ich es doch gemacht!

    Gruss, Andy
    Geändert von RapidMax (12-11-2006 um 21:44 Uhr)

  5. #5
    brahma
    Gast
    Vielen Dank, ich habs mangels Lehrneffekt nicht 1:1 übernommen, aber nachgebaut

    Und es klappt *freu*

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •