matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenJavaJava
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Geschichte • Erdkunde • Sozialwissenschaften • Politik/Wirtschaft
Forum "Java" - Java
Java < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Java"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Java: Bin2int, int2bin, addition
Status: (Frage) beantwortet Status 
Datum: 20:18 Sa 12.01.2008
Autor: Sissi2209

Eingabefehler: "{" und "}" müssen immer paarweise auftreten, es wurde aber ein Teil ohne Entsprechung gefunden (siehe rote Markierung)

Aufgabe
Ich habe versucht ein eigenes Programm zu erstellen. Dieses ist nur eine MÖglichkeit, wie man sein Programm hätte aufbauen können.

package rechnerarchitektur;

public class MyInteger implements Cloneable {
    
    private boolean[] bit = new boolean[32];
    
    /** Creates a new instance of MyInteger */
    public MyInteger() {
    }
    
    public MyInteger(int eingabe) {
        //eingabe in eine Dualzahl umrechnen und im Feld bit[] speichern
        //ein true steht dabei für eine 1 ein false für eine 0
        //Das Bit mit dem kleinsten Index (0) ist das niederwertigste Bit
        //Stellen Sie negative Zahlen hier im Zweierkomplement dar.
        
        //Ergänzen Sie die Implementierung ab hier

    }
    
    public MyInteger clone() {
        MyInteger ergebnis = new MyInteger();
        for (int i=0; i < 32; i++)
            ergebnis.bit[i] = this.bit[i];
        return ergebnis;
    }
    
    public String toString() {
        String ergebnis = new String();
        String bit;
        for (int i=31; i >=0; i--) {
            if (this.bit[i]) {
                bit = "1";
            }
            else {
                bit ="0";
            }
            ergebnis = ergebnis + bit;
        }
        return ergebnis;
        
    }
    
    
    public int toDecimal() {
        int ergebnis = 0;
        //Das Objekt wieder in das Zehnersystem umrechnen
        //.....

    }
    
    
    public void nachZweierkomplement() {
        // Die Zweierkomplement-Operation auf das aktuelle Objekt anwenden
        // Ergänzen Sie die Implementierung ab hier.

    }
    
    public MyInteger addieren(MyInteger zweiteZahl) {
        //Zwei Zahlen (this und zweiteZahl) werden binär addiert
        //das Ergebnis wird in einem neuen Objekt zurückgeliefert.
        // Ergänzen Sie die Implementierung ab hier

    }
    
    public MyInteger subtrahieren(MyInteger zweiteZahl) {
        //Zwei Zahlen (this und zweiteZahl) werden binär subtrahiert.
        //Das Ergebnis wird in einem neuen Objekt zurückgeliefert
        //Ergänzen Sie die Implementierung ab hier.
    }
    
    
}

Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Hallo,
ich habe ein Problem mein Programm funktioniert nicht richtig und ich schaffe es nicht die letzten Teile des Programmes zu programmieren, weil ich die WErte nicht miteinander nicht verarbeiten kann.

Bitte helft mir:



public class MyInteger {

public MyInteger(){
int meineTolleZahl = 91;
int meineanderetolleZahl = 35;
System.out.println(meineTolleZahl + " als Binär: " + getint2bin(meineTolleZahl));
System.out.println(meineanderetolleZahl + " als Binär: " + getint2bin(meineanderetolleZahl));
System.out.println("Als Integer: " + getbin2int(meineTolleZahl));
System.out.println("Als Integer: " + getbin2int(meineanderetolleZahl));
System.out.println(meineTolleZahl + " als 1ser Komplement in Binär: " + getEinerCompl(meineTolleZahl));
System.out.println(meineanderetolleZahl + " als 1ser Komplement in Binär: " + getEinerCompl(meineanderetolleZahl));
System.out.println(meineTolleZahl + " als 2er Komplement in Binär: " + getZweierCompl(meineTolleZahl));
System.out.println(meineanderetolleZahl + " als 2er Komplement in Binär: " + getZweierCompl(meineanderetolleZahl));

}

/**
* Ich habe das Problem, dass getbin2int nicht meine Variablen verarbeitet,
* weil dieser ein String verlangt und keinen int. Wenn ich das in einem string ändere,
* taucht das problem umgekehrt auf.
* Die Binärzahlen stimmen!!!
* Das Einerkomplement macht einen Fehler, wenn es ein Einerkomplement von 35
* umwandeln soll. Es muss nämlcih für 35, dass einerkomplement 11011100
* ausgegeben werden.
* @param zahl
* @return
*/
private static String getEinerCompl(int zahl){
int x = zahl;
    String binary = Integer.toBinaryString(x);
    binary = ("00"+binary).substring(8-binary.length());
    String complement = binary.replaceAll("0","x").replaceAll("1","0").replaceAll("x","1");
    return complement;
}




public static String getint2bin(int value) {
String result = "";
for (int i = 0; i < 32; i++) {
if (((value >>> (31 - i)) & 1) == 0) {
if (result.length() != 0)
result += "0";
} else
result += "1";
}
if (result.length() == 0)
result = "0";
return result;
}



public static int getbin2int(String value) {
int ret=0;
for (int i=0; i<value.length();i++) {
ret<<=1;
if (value.charAt(i)=='1') ret++;
}
return ret;
}


/**
* Das ZweierCompl wird für die Subtraktion der Dualzahlen benötigt.
*
* Problem im Zweierkomplement:
* Ich habe etwas dieses Programm verändert und dabei ist mir irgendwie
* ein Fehler in der Berechnung des Zweierkomplement unterlaufen.
* WEnn das Zweierkomplement für 91 berechnet wird, gibt der nun
* 00100101 aus, obwohl das Zweierkomplement: 10100101 lautet.

*/


public static String getZweierCompl(int zahl){
StringBuffer eingabe = new StringBuffer();
getbin2int(getint2bin(15));

eingabe.append(getEinerCompl(zahl));


String bin = eingabe.reverse().toString();
int i_bin = -1;
int ueberschlag = 1;
StringBuffer ergebnis = new StringBuffer();

for(int i=0;i<bin.length();i++){
i_bin = Integer.parseInt(bin.substring(i, i+1));

if(i_bin == 1 && ueberschlag==1){
ueberschlag = 1;
ergebnis.append(0);
}
if(i_bin == 1 && ueberschlag==0){
ueberschlag = 0;
ergebnis.append(1);
}else if(i_bin == 0 && ueberschlag == 1){
ueberschlag = 0;
ergebnis.append(1);
}else if(i_bin == 0 && ueberschlag == 0){
ueberschlag = 0;
ergebnis.append(0);
ergebnis.reverse().toString();

}

}
return bin;
}



/**


* Ich möchte nämlich die Dualzahlen
* (91+31), also 00100011+01011011 berechnen und dann auch das Ergebnis in
* Dezimal ausgeben.
*
*/

// public static int getAddititionMyInteger (int zahlA, int zahlB){
// StringBuffer eingabe = new StringBuffer();
//StringBuffer eingabe1 = new StringBuffer();
// eingabe.append(getbin2int(meineTolleZahl));
//eingabe.append(getbin2int(meineanderetolleZahl));


//}


/**
public static int getSubtraktionMyInteger(){
Hier möchte ich die Subtraktion der Dualzahlen durchführen.
Zum Beispiel 91-35, dass heißt, dass ich das Zweierkomplement von 35
benötige, um es dann mit 91 zu addieren.
Also das sieht dann folgendermaßen aus:

91: 01011011
+ Zweierkomplement von 35: 11011101
= (1) 00111000 DEr Überlauf 1 wird weg gelassen.

Es könnte auch andersrum gehen
35-91
Dualzahl 35 + Zweierkomplement von 91

Es müsste auch die Berechnung zweier negativen Zahlen möglich sein,
wie z. B. -91-35
also Zweikomplement von 91 + Zweierkomplement von 35



*/
public static void main(String a[]) {
new MyInteger();

}



}




        
Bezug
Java: Antwort
Status: (Antwort) fertig Status 
Datum: 15:09 So 13.01.2008
Autor: rainerS

Hallo!

> ich habe ein Problem mein Programm funktioniert nicht
> richtig und ich schaffe es nicht die letzten Teile des
> Programmes zu programmieren, weil ich die WErte nicht
> miteinander nicht verarbeiten kann.
>
> Bitte helft mir:
>
>
>
> public class MyInteger {
>
> public MyInteger(){
> int meineTolleZahl = 91;
> int meineanderetolleZahl = 35;
> System.out.println(meineTolleZahl + " als Binär: " +
> getint2bin(meineTolleZahl));
> System.out.println(meineanderetolleZahl + " als Binär: "
> + getint2bin(meineanderetolleZahl));
> System.out.println("Als Integer: " +
> getbin2int(meineTolleZahl));
> System.out.println("Als Integer: " +
> getbin2int(meineanderetolleZahl));
> System.out.println(meineTolleZahl + " als 1ser
> Komplement in Binär: " + getEinerCompl(meineTolleZahl));
> System.out.println(meineanderetolleZahl + " als 1ser
> Komplement in Binär: " +
> getEinerCompl(meineanderetolleZahl));
> System.out.println(meineTolleZahl + " als 2er Komplement
> in Binär: " + getZweierCompl(meineTolleZahl));
> System.out.println(meineanderetolleZahl + " als 2er
> Komplement in Binär: " +
> getZweierCompl(meineanderetolleZahl));
>
> }
>
> /**
>   * Ich habe das Problem, dass getbin2int nicht meine
> Variablen verarbeitet,
>   * weil dieser ein String verlangt und keinen int. Wenn
> ich das in einem string ändere,
>   * taucht das problem umgekehrt auf.
>   * Die Binärzahlen stimmen!!!

Du wirfst in deinem Programm die beiden Darstellungen der Zahlen durcheinander. meineTolleZahl ist vom Typ int, und deine Binärzahlen stellst du durch den Typ String dar. Dann musst du aber auch die Binärzahl als String benutzen und abspeichern, zum Beispiel so:

                int meineTolleZahl = 91;
                int meineanderetolleZahl = 35;
        String meineTolleZahlAlsBinär;
           String meineanderetolleZahlAlsBinär;
           meineTolleZahlAlsBinär = getint2bin(meineTolleZahl);
           meineanderetolleZahlAlsBinär = getint2bin(meineanderetolleZahl);
           System.out.println(meineTolleZahl + " als Binär: " + meineTolleZahlAlsBinär);
           System.out.println(meineanderetolleZahl + " als Binär: " + meineanderetolleZahlAlsBinär);
           System.out.println("Als Integer: " + getbin2int(meineTolleZahlAlsBinär));
           System.out.println("Als Integer: " + getbin2int(meineanderetolleZahlAlsBinär));


>   * Das Einerkomplement macht einen Fehler, wenn es ein ]Einerkomplement von 35
>   * umwandeln soll. Es muss nämlcih für 35, dass einerkomplement 11011100
>   * ausgegeben werden.
>   * @param zahl
>   * @return
>   */
> private static String getEinerCompl(int zahl){
> int x = zahl;
> String binary = Integer.toBinaryString(x);
> binary = ("00"+binary).substring(8-binary.length());
> String complement =
> binary.replaceAll("0","x").replaceAll("1","0").replaceAll("x","1");
> return complement;
> }

Mir fallen zwei DInge auf: 1. solltest du deine eigene Funktion getint2bin nehmen und nicht Integer.toBinaryString(), und 2. geht das schief, wenn die zahl weniger als 6 binärstellen hat, denn du fügst mit "00" nur genau 2 Stellen hinzu.


> /**
> * Das ZweierCompl wird für die Subtraktion der Dualzahlen benötigt.
> *
> * Problem im Zweierkomplement:
> * Ich habe etwas dieses Programm verändert und dabei ist mir irgendwie
> * ein Fehler in der Berechnung des Zweierkomplement unterlaufen.
> * WEnn das Zweierkomplement für 91 berechnet wird, gibt der nun
> * 00100101 aus, obwohl das Zweierkomplement: 10100101 lautet.

Das liegt daran, dass deine Schleife nur von 0 bis bin.length()-1 läuft. Sie muss immer bis zur maximalen Stellenzahl (hier: 8) laufen.

Viele Grüße
   Rainer

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Java"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]