-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11

Thema: Subtrahieren unter Null

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318

    Subtrahieren unter Null

    Anzeige

    Hallo,

    ich habe eine Kette mit 580 Kettengliedern. An dieser Kette ist ein Sensor befestigt, der mir pro Kettenglied ein Signal gibt. Jetzt möchte ich gerne berechnen, welches Kettenglied ( Nummer ) 125 Takte vor dem Sensor ist.

    Also wenn am Sensor Kettenglied 150 ankommt, dann ist das klar:

    150 - 125 = 25

    Wenn aber jetzt am Sensor das Kettenglied 25 ankommt, dann müsste das Ergebnis 480 sein, da ich ja nur 580 Kettenglieder insgesamt habe. Ich steh gerade voll auf dem Schlauch und habe keine Ahnung wie ich das in Bascom umsetzen kann. Kann mir jemand bitte einen Tip geben, wie ich die Rechnung am besten angehen kann ?

    Danke und Gruß
    BlaueLed

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Hallo BlaueLED,
    deine Rechnung wäre ja

    Kettenglied > 125 dann
    Kettenglied - 125
    Kettenglied <= 125 dann
    580 + Kettenglied - 125 = 455 + Kettenglied

    Also machst du

    If Kettenglied > 125 Then
    Gesuchtes_Kettenglied= Kettenglied - 125
    Else
    Gesuchtes Kettenglied = 455 + Kettenglied
    End If

    Wichtig ist noch, ob du mit 0 oder mit 1 anfangst.
    Wenn dein erstes Kettenglied die Nr. 0 hat, musst du auf > 124 vergleichen und 456 + Kettenglied rechnen.

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    31
    Beiträge
    4.255
    Du rechnest ja implizit modulo 580. Ich würde also erst mal ganz normal subtrahieren (vorzeichenbehaftete Datentypen verwenden), und dann eine entsprechende Korrekturfunktion aufrufen:
    -> solange der Wert negativ ist, wird 580 addiert
    -> solange der Wert größer als 580 ist, wird 580 subtrahiert.

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Geht auch noch einfacher, einfach die Rechnung in den positiven Bereich verschieben, quasi eine gleiche Kette dazulegen:

    Code:
    Erg = Kettenglied + 580
    Erg = Erg - 125
    If Erg > 580 Then Erg = Erg - 580

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zitat Zitat von MagicWSmoke
    Erg = Kettenglied + 580
    Erg = Erg - 125
    Viele Wege führen nach Rom, auch Umwege.
    Wenn du die beiden Schritte in einen zusammenfasst, wirst du merken, dass dein Erg = Kettenglied + 455 ist. Siehe oben.

  6. #6
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318
    Hi,

    danke an alle für die Antworten.

    Gruß BlaueLed

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.10.2009
    Beiträge
    437
    Ja, da hast Du recht, das ist noch einfacher. Ich denke aber meine 3 Schritte sind für jemand, der sich bezüglich der richtigen Rechenweise unsicher ist, einfacher nachzuvollziehen als die gekürzte Version.

    Die Kurzversion ist dagegen, wenn's Prinzip einmal verstanden wurde, am einfachsten.

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318
    Hi ich nochmal,

    ich hätte da schon die nächste Frage ( möchte deswegen, aber nicht gleich einen neuen Thread aufmachen ).

    Ich habe ja 580 Kettenglieder. Jetzt will ich jedem Kettenglied einen Status geben. Ich dachte ich mache das mit einem array. Also:

    DIM Kettenglied(580) as byteDas funktioniert soweit.

    Jetzt haben ich aber auch eine Kette mit 3500 Kettengliedern. Wenn ich jetzt ein Array mit 3500 angebe, dann meckert Bascom wegen dem nicht ausreichendem SRAM meines Mega644p. Gibt es einen Möglichkeit außer dem Array, jedem Kettenglied einen Status zu geben und diesen zu einem späteren Zeitpunkt wieder auszulesen ?

    Gruß BlaueLed

  9. #9
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Brauchst du denn überhaupt ein ganzes Byte als Status, oder kommst du evtl. mit 0 und 1 aus. Dann könntest du dir ein Byte Array machen mit 3500/8=437,5 Elementen, wovon jedes den Status von 8 Kettengliedern hält.

  10. #10
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.112
    Zitat Zitat von MagicWSmoke
    Ja, da hast Du recht, das ist noch einfacher. Ich denke aber meine 3 Schritte sind für jemand, der sich bezüglich der richtigen Rechenweise unsicher ist, einfacher nachzuvollziehen als die gekürzte Version.

    Die Kurzversion ist dagegen, wenn's Prinzip einmal verstanden wurde, am einfachsten.
    Sowohl die Erklärung als auch der Kurzweg stehen oben.

    Ich finde es halt überflüssig, wenn Leute schon gesagtes wiederholen, nur weil sie sich nicht durchlesen, was andere geschrieben haben. Ohne etwas Neues dazu beizutragen. Das müllt doch nur den Thread zu.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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