mikrocontroller.net

Forum: PC-Programmierung Schieberegister programmieren (Java)


Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich bräuchte ein rückgekoppeltes Schieberegister in java (auch andere 
sprachen möglich)

weiss jemand woher ich den quelltext bekommen könnte ?

kann das jemand programmieren ?

http://de.wikipedia.org/wiki/Linear_r%C3%BCckgekop...

besten dank

Karsten

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>weiss jemand woher ich den quelltext bekommen könnte ?>kann das jemand programmieren ?

Ja, ist ja auch nicht so schwer.

..........


Hast du eine konkrete Frage zu deiner Hausaufgabe? Dann stelle diese. 
Oder willst du nur eine fertige Lösung haben?

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ja wäre cool, wenn ich den quelltext bekommen könnte.

ich bekomms halt nicht hin.

wäre nett, wenn du mir helfen würdest

mfg

Karsten

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier mal das Wiki-Beispiel in C++ (sollte sich mit ein paar Änderungen 
in Java übertragen lassen). Den Code habe ich jetzt einfach 'trocken' 
hingeschrieben, d.h. nicht getestet, aber er sollte eigentlich 
funktionieren.
int shift( int &value )
{
    int feedback;
    int ret;
    
    feedback = ( value >> 15 ) ^ ( value >> 13 );
    feedback ^= ( value >> 12 );
    feedback ^= ( value >> 10 );
    feedback &= 1;
    
    ret = ( value >> 15 );
    value = ( value << 1 ) | feedback;

    return ret;
}

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
schon mal besten dank.

kannste mir das auch noch erklären.

bin nicht C++ - konform.



wenn ihr noch mehrere lösungsansätze habt, immer her damit.

mfg

Karsten

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erklären kann ich das:

Im Wiki-Beispiel werden die Bits 15 und 13 mit XOR behandelt (roter 
Kreis mit einer Art Pluszeichen), dazu dann noch Bit 12 (zweiter Kreis 
von rechts) und anschließend noch Bit 10.

Das passiert mit der Zuweisung von feedback in meinem Beispiel.

Dann passiert noch ein AND mit 1, damit das Ergebnis auf ein Bit 
begrenzt wird (die Shift-Operationen >> liefern als Ergebnis jeweils 
mehrere Bits, es ist aber nur das unterste Bit von Interesse).

Der Rückgabewert der Funktion ist das höchste Bit (in dem Fall ret --- 
Ich sehe gerade, dass dort auch noch ein & 1 fehlt).

Danach wird value, das als Referenz übergeben wird (geht so in Java 
nicht), um ein Bit nach links geschoben und feedback als unterstes Bit 
gesetzt. Das ist das eigentliche Schieberegister.

Ich versuche jetzt mal, ob ich das auch in Java basteln kann.

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, florian

du wärst mir ne riesen hilfe.

ich probier mir hier die finger wund...

wär super, wenn du was für mich hättest.

danke

Karsten

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, hier mal in Java. BTW: Ich mag Java überhaupt nicht, daher kann es 
sein, dass dies hier javatechnisch nicht sehr gelungen ist.
public class shift
{
        private static int shift_state=1;

        private static int feedback()
        {
                // calculate feedback value
                // some of the parentheses are not necessary and are only for clarity
                return 1 &
                        (
                                (
                                        (
                                                ( shift_state >> 15 ) ^ ( shift_state >> 13 )
                                        ) ^ ( shift_state >> 12 )
                                ) ^ ( shift_state >> 10 )
                        );
        }

        private static String to_bin( int value )
        {
                // format output as binary
                String s = "";
                int i = 0;

                for ( i = 15; i >= 0; i-- ) {
                        s += ( ( value & ( 1 << i ) ) != 0 ) ? "1" : "0";
                }

                return s;
        }

        private static int shift_reg()
        {
                int result;
                // shift register, apply feedback and return highest bit

                result = ( shift_state >> 15 ) & 1;
                shift_state = ( ( shift_state << 1 ) | feedback() ) & 0xFFFF;
                System.out.print( to_bin( shift_state ) );
                return result;
        }

        public static void main ( String argv[] )
        {
                int i, j;

                System.out.println( to_bin( shift_state ) );

                for ( i = 0; i < 64 ; i++ ) {
                        j = shift_reg();
                        System.out.print( " --- " );
                        System.out.println( j );
                }
        }
}

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, florian

besten dank

respekt.

kannste mir auch nochmal bitte ein paar erklärungen dazu aufschreiben.

nur zum besseren verständnis.

danke

gruß

Karsten

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo müsste ich denn anfangen, d.h. was sind Deine Vorkenntnisse? Wenn ich 
bei Adam und Eva anfangen müsste, würde sich vermutlich ein Buch besser 
eignen.

Autor: Timo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Teil deiner Hausaufgabe willst du eigentlich selbst machen?

Autor: Karsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, florian

so, wie du's bei der c-programmierung auch gemacht hast.

nur ne kurze erklärung. von oben nach unten :-)

gruß

Karsten

Autor: anmerker (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in main bitte noch folgende Zeile einfügen:

System.out.println("Diese Hausaufgabe wurde von Florian 
(www.mikrocontroller.net) abgearbeitet.");

Nur dann arbeitet das Programm auch richtig ;-)

Und dann wundern sich die Azubis, dass es nur Absagen hagelt...

Gruß

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also mal langsam. Ich muss den anderen Recht geben. In meiner Welt wird 
weder Faulheit noch Dummheit belohnt. Aus privatem Interesse scheinst Du 
Dich ja nicht damit auseinanderzusetzen. Wenn es hier um eine Aufgabe im 
Studium / Schule (wohl eher nicht) / Ausbildung geht, ist es vermutlich 
effektiver, wenn Du Dir das Wissen selbst aneignest. Wenn Du noch nicht 
einmal in der Lage bist, den Kommentar analog auf diesen Java-Krempel zu 
übertragen, obwohl die Syntax nahezu identisch ist, was Operatoren 
angeht, dann hast Du vermutlich den falschen Studiengang / Ausbildung 
erwischt. Was man nicht alles macht, nur um ein Papier in der Tasche zu 
haben. Wenn ich teilweise die Fragen hier im Forum sehe, kann ich 
manchmal nur die Hände über dem Kopf zusammenschlagen, da die 
(angehenden) Herren Ingenieure zum Teil noch nicht einmal ihre eigene 
Sprache beherrschen.

Also, selbst nachdenken.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Florian

machs doch nicht so kompliziert.
Gib ihr einfach deine Telefonnummer, dann kann dich ihr
Auftraggeber/Professor/Lehrer direkt anrufen wenn es
noch Fragen zum Code gibt.

Was erwartet ihr eigentlich, wenn eine nichtfunktionierende
Schaltung mit einer 2 bewertet wird, nur weil das Gehäuse
schön geworden ist?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.