Kleinste Differentz zweier Zahlen herausfinden



  • Hey Community,
    ich zweifel zurzeit schon seit längerm an einem Programmier-Beispiel.
    Nämlich geht es darum von X-Beliebigen Random Zahlen die kleinste Differentz zweier Werte herauszufinden.

    Nun den mein Programm funktioniert in irgendeiner Weise, aber bei manchen Fällen, kommt das falsche Ergebnis herbei. Ich habe schon mehrere Lösungswege probiert, hab es aber nicht hinbekommen.
    Das ist meine derzeitige Funktion die ich erarbeitet habe:

    int kleDifferent(int number[], int anz) {
      int sum[anz];
    
      for(int i = 0; i <= anz - 1; i++) {
        if(number[i] < number[i+1]) {
          sum[i] = number[i+1] - number[i];
          } else {
          sum[i] = number[i] - number[i+1];
        }
        printf("Test %d: %d\n", i+1, sum[i]); // Fuer den Debug/Testung
      }
      int kDiff = minimum(sum, anz); 
      return kDiff;
    }
    

    Ich bedanke mich für jede Antwort!
    PS: Es reicht nur wenn mir gesagt wird, was an der Funktion fehlt. ; )



  • Du musst alle Paarungen der Werte durchgehen, d.h. zwei Schleifen über die Werte müssen schon sein, da Du so nur alle Kombinationen erreichst. Dazu brauchst Du kein Array für die Ergebnisse (das sollte man nicht gerade sum nennen, least_diff wäre das passender), sondern nur eine Variable mit dem kleinsten Wert.



  • Stimmt, die Sum Array ist in gewisser Weise unnötig und das mit der zweiten Schleife werde ich probieren. Danke für die Antwort, dir einen schönen Nachmittag. Lg : )



  • @john-0 Ich habe es jetzt mal so gelöst. Ich weiß net ob das die schönste Variante ist, aber hauptsache es geht 😃

    int kleDifferent(int number[], int anz) {
      int kDiff = number[0];
      int sum = 0;
      for(int j = 0; j <= anz - 1; j++) {
        for(int i = 0; i <= anz - 1; i++) {
          if(number[i] < number[i+1]) {
          sum = number[i+1] - number[i];
          } else {
          sum = number[i] - number[i+1];
        }
        if(kDiff > sum) {
            kDiff = sum;
          }
        }
      }
      return kDiff;
    }
    

    Ich bedanke mich nochmal für deine Hilfe ; )
    Lg



  • Du probierst noch immer nicht alle Kombination durch. Du musst schon in den beiden Schleifen die Differenz number[i] - number[j] berechnen, und natürlich den Fall i == j ausschließen. Sinnvoll ist es auch noch den Absolutbetrag zu nehmen, d.h. abs (number[i] - number[j]).



  • @MrBrutDev sagte in Kleinste Differentz zweier Zahlen herausfinden:

    j <= anz - 1;

    Da schreibt man in C j < anz



  • So ich habe mal Deine Funktion genommen und das getestet, ob das Gewünschte dabei heraus kommt. Die Ausgabe ist -13 bei meiner Version kommt die Ausgabe 1, denn der Differenzbetrag zwischen -14 und -13 ist 1.

    #include <stdlib.h>
    #include <limits.h>
    #include <stdio.h>
    
    int kleDifferent(const int number[], int anz) {
      int kDiff = number[0];
      int sum = 0;
      for(int j = 0; j <= anz - 1; j++) {
        for(int i = 0; i <= anz - 1; i++) {
          if(number[i] < number[i+1]) {
          sum = number[i+1] - number[i];
          } else {
          sum = number[i] - number[i+1];
        }
        if(kDiff > sum) {
            kDiff = sum;
          }
        }
      }
      return kDiff;
    }
    
    int main () {
        const int n[] = {-13, 15, 17, 29, 115, -14, 200};
        const size_t s = sizeof(n) / sizeof(int);
    
        int ld = kleDifferent(n, s);
    
        printf("Kleinste Differenz ist %i\n", ld);
    
        return EXIT_SUCCESS;
    }
    

Log in to reply