Algorithmus – die besten Beiträge

Java wo liegt der Fehler?

Hallo gutefrage-Community,

ich habe unten gezeigten Quellcode verfasst und dabei keinerlei Fehlermeldungen oder Exceptions erhalten. Am Ende kommt aber irgendwie trotzdem nicht heraus, was herauskommen soll.

Was ich erwarte:

Aus einem JTextField erhält man einen String "input" wie z.B. 2x+5=10x-3. Dieser wird zuerst beim "=" gesplittet. Daraus erhält man ein Array mit zwei Strings: 2x+5 und 10x-3. Diese beiden Arrays sollen nun an allen "+" und "-" gesplittet werden. Deshalb wird eine Schleife zweimal durchlaufen und dabei im ersten Durchlauf der erste und im zweiten Durchlauf der zweite String verarbeitet. Danach wird bei jeder Zahl mit "x" das "x" entfernt und ein boolean auf true gesetzt. Was am Ende herauskommen soll:

Drei Arrays (int num[], boolean isFactorOfVar[] und boolean isOnRightSide[]), die immer dem gleichen Index entsprechen, also: num[0] gehört zu isFactorOfVar[0] und zu isOnRightSide[0], num[1] gehört zu isFactorOfVar[1] und zu isOnRightSide[1] usw. Dabei soll num[] der Zahl entsprechen, isFactorOfVar, ob ein x am Ende entfernt wurde und isOnRightSide[], ob sich diese Zahl auf der rechten Seite des "=" befindet. Hier ist das am Anfangsbeispiel 2x+5=10x-3 gezeigt:

  • num[0] = 2; isFactorOfVar[0] = true; isOnRightSide[0] = true
  • num[1] = 5; isFactorOfVar[1] = false; isOnRightSide[1] = true
  • num[2] = 10; isFactorOfVar[2] = true; isOnRightSide[2] = false
  • num[3] = 3; isFactorOfVar[3] = false; isOnRightSide[3] = false

Was herauskommt:

  • num[0] = 2; isFactorOfVar[0] = true; isOnRightSide[0] = nicht angezeigt
  • Fehlermeldung

Mein Code:

Fehlermeldung:

Bild zum Beitrag
Computer, Technik, programmieren, Java, Informatik, Programmiersprache, Algorithmus

Korrektheitsbeweis Algorithmus?

Hallo liebe Community,

ich habe eine Aufgabe bekommen in welcher ich Pseudocode entwickeln soll. Meinem Algorithmus wird ein Array an Zahlen gegeben A[1, n] mit n Einträgen. Ich soll in diesem Array die Senken zählen. Eine Senke ist dabei eine Position i [2, n - 1] für die folgendes gilt: A[i - 1] > A[i] < A[i + 1].

Meiner Auffasung nach bedeutet das nun, dass z.B. das Array [1, 3, 2, 4, 3, 5] zwei Senken hat. Nämlich einmal der dritte Eintrag und der fünfte Eintrag.

Mein Pseudocode sieht folgendermaßen aus:

Input: A[1, n] mit n Einträgen
Output: Anzahl der Senken

counter := 0
for j := 2 to n - 1 do
  val := A[j]
  if val < A[j - 1] and val > A[j + 1] do
    counter := counter + 1

Mein Java Code dazu sieht folgendermaßen aus:

public static int countSenken(int[] arr) {
  int counter = 0;
  for (int i = 1; i < arr.length - 1; i++) {
    int val = arr[i];
    if (val < arr[i - 1] && val < arr[i + 1]) {
      counter++;
    }
  }
}

Nun soll ich die Korrektheit meines Algorithmus' beweisen. Wir haben das schonmal an dem Beispiel des Insertionsort Algorithmus' gemacht. Die herangehensweise ist ja eigentlich, dass man eine Schleifeninvariante aufstellt und diese dann mittels Induktion beweist. Mein Problem ist jetzt aber, dass ich diese Schleifeninvariante nicht aufstellen kann. Beim Insertionsort, da beweist man ja die Sortiertheit und da verändert sich ja das Array. Aber bei diesem Algorithmus jetzt da verändert sich das Array ja gar nicht.

Ich weiß halt, dass n >= 3 sein muss damit der Algorithmus überhaupt funktioniert. Kann mir vielleicht jemand einen Ansatz geben wie ich die Korrektheit beweise?

Ich wäre euch allen sehr dankbar :)

Computer, Schule, Mathematik, programmieren, Informatik, Algorithmus, Algorithmen und Datenstrukturen

Meistgelesene Beiträge zum Thema Algorithmus