Hilfe bei einem Prgrammcode

Hallo ihr Forumnutzer!

Ich brauche eure Hilfe. Ich möchte ein Programm schreiben, das sich mit einem Mathematischen Problem behandelt. Ich möchte eine Zahl (auch zweistellig) in den serial monitor eingeben. Anschließend soll geprüft werden ob es eine gerade oder eine ungerade Zahl ist. Ist die Zahl gerade, so teilt man sie durch 2. Ist sie ungerade, so nimmt man sie mal 3 und zieht 1 davon ab. Dieser Vorgang soll mit der resultierenden Zahl wiederholt werden. Sobald die Zahlen 4 dann 2 dann 1 vorkommen soll das Programm stoppen. Mit einer if-Bedingung gelang es mir bereits diese Rechnung einmal durchzuführen, alledings scheitere ich daran es mit der resultierenden Zahl weiter zu machen. Ebenfalls möchte ich mir die größte Nummer in der Zahlenreihe und deren Stelle anzeigen lassen.
Hätte einer von euch eine Idee wie man so ein Programm lösen könnte und mir vielleicht ein Beispiel dafür geben?
Das wäre mir eine riesen Hilfe! Da ich noch nicht wirklich geübt im Programmieren bin und ich das Programm verstehen will bitte ich es möglichst leicht zu halten, also lieber den leichteren aber auch längeren Weg nehmen.

Vielen Dank an jeden der antwortet!
Valerie

Valerie_Bgrd:
Hallo ihr Forumnutzer!

Ich brauche eure Hilfe. Ich möchte ein Programm schreiben, das sich mit einem Mathematischen Problem behandelt. Ich möchte eine Zahl (auch zweistellig) in den serial monitor eingeben. Anschließend soll geprüft werden ob es eine gerade oder eine ungerade Zahl ist. Ist die Zahl gerade, so teilt man sie durch 2. Ist sie ungerade, so nimmt man sie mal 3 und zieht 1 davon ab. Dieser Vorgang soll mit der resultierenden Zahl wiederholt werden. Sobald die Zahlen 4 dann 2 dann 1 vorkommen soll das Programm stoppen. Mit einer if-Bedingung gelang es mir bereits diese Rechnung einmal durchzuführen, alledings scheitere ich daran es mit der resultierenden Zahl weiter zu machen. Ebenfalls möchte ich mir die größte Nummer in der Zahlenreihe und deren Stelle anzeigen lassen.
Hätte einer von euch eine Idee wie man so ein Programm lösen könnte und mir vielleicht ein Beispiel dafür geben?
Das wäre mir eine riesen Hilfe! Da ich noch nicht wirklich geübt im Programmieren bin und ich das Programm verstehen will bitte ich es möglichst leicht zu halten, also lieber den leichteren aber auch längeren Weg nehmen.

Vielen Dank an jeden der antwortet!
Valerie

Und warum siehst du dir nicht einfach die Beispiele für serielle Eingaben in der IDE an ?
Einfacher geht es nun wirklich nicht.
Und den Rest findest du über Google.

Wenn du aber schon etwas funktionsfähiges aufgebaut hast, solltest du dies hier posten, dann besteht durchaus die Chance das wir dir helfen können.
Den Sketch in Code-Tags posten. Schaltfläche </> oben links im Editorfenster.

Hallo erstmal Danke für die Antwort.
Ich habe mir diese Beispiel auch schon einmal angesehen, allerdings trat bei mir das Problem auf, dass ich es nicht geschafft habe hier zweistellige Zahlen ab 10 einzugeben. Diese wurden immer als einzelne angezeigt. Wie gesagt ich bin nicht wirklich erfahren weshalb mich selbst das schon überfordert.
Valerie

Valerie_Bgrd:
Hallo erstmal Danke für die Antwort.
Ich habe mir diese Beispiel auch schon einmal angesehen, allerdings trat bei mir das Problem auf, dass ich es nicht geschafft habe hier zweistellige Zahlen ab 10 einzugeben. Diese wurden immer als einzelne angezeigt. Wie gesagt ich bin nicht wirklich erfahren weshalb mich selbst das schon überfordert.
Valerie

Da musst du dann einen Zähler mitlaufen lassen, der die Stellen zählt und die einzelnen Werte dann hintereinander in ein Variable schreibt.

Und mit Sicherheit gibt es da zahlreiche Beispiele im Netz.

Leider finde ich Internet keine mir einleuchtenden Beispiele, wehalb ich gehofft hatte, dass mir hier jemand eine geben könnte.
Valerie

Sobald die Zahlen 4 dann 2 dann 1 vorkommen soll das Programm stoppen.

Diese Abbruchbedingung wird nicht immer erreicht.

Hier ein Anfang:

String buffer;

void setup() 
{
  buffer.reserve(20);
  Serial.begin(9600);
  Serial.println("Start");
}

void bearbeiteZahl(int zahl)
{
  Serial.print("Aufruf mit Zahl: "); Serial.println(zahl);

  while(zahl > 1) 
  {
    if(1 & zahl) // ungerade?
    {
      zahl *= 3;
      zahl -= 1;
    }else
    {
      zahl /= 2;
    }
    Serial.print("Berechnete Zahl: "); Serial.println(zahl);
  }
}

void serialEvent()
{
  char zeichen = Serial.read();
  int zahl = 0;
  switch(zeichen)
  {
    case '\r':
    case '\n':
          zahl = buffer.toInt();
          buffer = "";
          if(zahl) bearbeiteZahl(zahl);
          break;
          
    case '0' ... '9':           
          buffer += zeichen;
          break;
  }
}

void loop() 
{
}

Aber, ob dir das hilft....

Valerie_Bgrd:
Leider finde ich Internet keine mir einleuchtenden Beispiele, wehalb ich gehofft hatte, dass mir hier jemand eine geben könnte.
Valerie

Und selbst hast du auch nichts programmiert, oder warum zeigst du uns das nicht ?

Diese Abbruchbedingung wird nicht immer erreicht.

Das könnte man abfangen, indem im "ungerade" Fall geprüft wird, ob die Multiplikation mit 3 noch erlaubt ist, oder ob man schon 100.000 Schritte in der Schleife gemacht hat.

Ich möchte ein Programm schreiben, ...

Na dann, viel Spass. Einen guten Anfang hast du ja von combie gekriegt.

Danke für die Antworten ich werde mal schauen ob ich daraus was machen kann :slight_smile:
Valerie

von Robin2 gibt es ein ausgezeichnetes Tutorial zum Einlesen der Seriellen Schnittstelle:
http://forum.arduino.cc/index.php?topic=396450.0