INT zu BCD Algorithmus

In der Ausbildung kamen wir an einen Punkt, wo wir einen Zahlenwert in die BCD-Schreibweise überführen mussten. Bevor ich erfahren habe, dass die SPS-Software einen vorgefertigten Baustein hat, habe ich mir selber einen Algorithmus ausgedacht.

Der Algorithmus für Zahlen von 0-99 ist wie folgt aufgebaut:

\text{I} = \text{int}(\frac{x}{10})

\text{II} = x - (\text{I} \cdot 10)

\text{III} = (\text{I} << 4)

\text{IV} = \text{II} + \text{III}

Als Rust-Programm:

fn int_to_bcd(x: i32) -> i32 {
    let tenths: i32;
    tenths = (x / 10) as i32;
    let ones: i32;
    ones = x - (tenths * 10);
    let shifted_tenths: i32;
    shifted_tenths = tenths << 4;
    shifted_tenths + ones
}

Als Funktionsblockdiagramm:

screenshot_20170111_180821

Auffrischung der Programmiersprachenkenntnisse

Ich habe angefangen mich wieder in den Programmiersprachen zu trainieren, die ich mehr oder weniger gut kenne. Und lerne nebenbei eine neue Programmiersprache: Rust.

Da ich sehr viel Zeit in mein Studium investiere, bleibt mir keine Zeit für große und aufwendige Projekte. Aus diesem Grund habe ich begonnen, grundlegende Algorithmen in verschiedenen Programmiersprachen zu implementieren, um die syntaktischen Besonderheiten kennen zu lernen.

Gerade bei Rust muss ich mich an einige Besonderheiten gewöhnen. Begonnen habe ich mit Bubble Sort. Diesen Algorithmus werde ich in den Programmiersprachen Rust, Python, C und JavaScript entwickeln. Sowie auch die anderen Algorithmen, die ich mir aussuche. Möglicherweise werde ich dies auch auf Java und C# erweitern. C# werde ich dann wahrscheinlich mit MonoDevelop/Xamarin Studio entwickeln.

Die Algorithmen werde ich mit möglichst verständlichem Code, einfachen Funktionen, und hoffentlich auch Tests programmieren.
Sofern es mir die Programmiersprache erlaubt, werde ich idiomatischen Code schreiben. Ich werde, soweit ich die Motivation und die Zeit habe, den Code weiter optimieren.