Forum: PC-Programmierung Schieberegister programmieren (Java)


von Karsten (Gast)


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%BCckgekoppeltes_Schieberegister

besten dank

Karsten

von Timo (Gast)


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?

von Karsten (Gast)


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

von Florian (Gast)


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.
1
int shift( int &value )
2
{
3
    int feedback;
4
    int ret;
5
    
6
    feedback = ( value >> 15 ) ^ ( value >> 13 );
7
    feedback ^= ( value >> 12 );
8
    feedback ^= ( value >> 10 );
9
    feedback &= 1;
10
    
11
    ret = ( value >> 15 );
12
    value = ( value << 1 ) | feedback;
13
14
    return ret;
15
}

von Karsten (Gast)


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

von Florian (Gast)


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.

von Karsten (Gast)


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

von Florian (Gast)


Lesenswert?

OK, hier mal in Java. BTW: Ich mag Java überhaupt nicht, daher kann es 
sein, dass dies hier javatechnisch nicht sehr gelungen ist.
1
public class shift
2
{
3
        private static int shift_state=1;
4
5
        private static int feedback()
6
        {
7
                // calculate feedback value
8
                // some of the parentheses are not necessary and are only for clarity
9
                return 1 &
10
                        (
11
                                (
12
                                        (
13
                                                ( shift_state >> 15 ) ^ ( shift_state >> 13 )
14
                                        ) ^ ( shift_state >> 12 )
15
                                ) ^ ( shift_state >> 10 )
16
                        );
17
        }
18
19
        private static String to_bin( int value )
20
        {
21
                // format output as binary
22
                String s = "";
23
                int i = 0;
24
25
                for ( i = 15; i >= 0; i-- ) {
26
                        s += ( ( value & ( 1 << i ) ) != 0 ) ? "1" : "0";
27
                }
28
29
                return s;
30
        }
31
32
        private static int shift_reg()
33
        {
34
                int result;
35
                // shift register, apply feedback and return highest bit
36
37
                result = ( shift_state >> 15 ) & 1;
38
                shift_state = ( ( shift_state << 1 ) | feedback() ) & 0xFFFF;
39
                System.out.print( to_bin( shift_state ) );
40
                return result;
41
        }
42
43
        public static void main ( String argv[] )
44
        {
45
                int i, j;
46
47
                System.out.println( to_bin( shift_state ) );
48
49
                for ( i = 0; i < 64 ; i++ ) {
50
                        j = shift_reg();
51
                        System.out.print( " --- " );
52
                        System.out.println( j );
53
                }
54
        }
55
}

von Karsten (Gast)


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

von Florian (Gast)


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.

von Timo (Gast)


Lesenswert?

Welchen Teil deiner Hausaufgabe willst du eigentlich selbst machen?

von Karsten (Gast)


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

von anmerker (Gast)


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ß

von Florian (Gast)


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.

von Karl H. (kbuchegg)


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?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.