Arrays & Funktionen



  • Also Ich hab folgenden Code, der mir von 10 Zahlen die kleinste ausgeben soll.

    code:
    #include <iostream>
    #include <conio.h>
    using namespace std;

    /--------------------------------------/
    float kleinster(float a[],int n)
    {
    for (int i=0;i<=n; i++)
    {for (int j=0; j<=n; i++)
    {if (a[j]>a[j+1])
    {float temp =a[j];
    a[j] = a[j+1];
    a[j+1] = temp;
    }
    }
    }
    return a[0];
    }

    /-----------------------------------/
    int main()
    {
    float b[10];
    cout <<"Bitte geben sie die Werte an, die sie überprüfen möchten!\n"<<endl;
    for (int s =0 ;s<=9;s++)
    {int f=s+1 ;
    cout <<f<<"te Zahl: "<<endl;
    cin >>b[s];
    }

    cout <<"Der kleinste Wert im Array ist der Wert"<<kleinster(b,s)<<endl;
    getch();
    }

    Und er gibt mir Fehler aus, wo ich keine entdecken kann. Und ich habe schon fast alle möglichkeiten und Veränderungen ausprobiert. Hab ich einen ganz dummen Anfängerfehler gemacht oder einen komplizierten?



  • Hallo
    Probier mal diese Funktion. In der anderen erhöhst du i und nicht
    j, weshalb das Programm nie endet...

    [cpp]float kleinster(float a[],int n)
    {
    for (int i=0;i<=n; i++)
    {
    for (int j=0; j<=n; j++)
    {
    if (a[j]>a[j+1])
    {
    float temp =a[j];
    a[j] = a[j+1];
    a[j+1] = temp;
    }
    }
    }
    return a[0];
    } [/cpp]
    Ach ja, vielleicht könntest du deine Codeformatierung nochmals überdenken 😋 .



  • /*...*/ <<kleinster(b,s)<< /*...*/
    

    s ist nicht mehr vorhanden, da es den scope verlassen hat
    (also die for-schleife)
    static wäre eine lösung



  • BlueShift schrieb:

    Ach ja, vielleicht könntest du deine Codeformatierung nochmals überdenken 😋 .

    Normalerweise formatiere ich den Code auch.
    Das war irgendein Fehler beim Kopieren, weil ich das ganze aus einem Codetextfeld in einem anderen Forum kopiert habe.

    Ac ja, danke euch beiden 😃



  • ChrissiB schrieb:

    static wäre eine lösung

    Nein, mit static hätte s den gleichen textuellen Scope wie ohne. Es würde sich nur die Lebensdauer ändern. Die Lösung besteht darin, das s in einen äußeren Scope zu verlegen, so dass es an der Stelle, an der es benutzt wird, sichtbar ist.

    int s;
    for (s = 0; ...
    ...
    cout << ... kleinster(b, s) ...
    


  • Ich glaube dass das Flogendes ist besser:

    #include <iostream>
    #include <vector>
    #include <string>
    
    using namespace std;
    
    float kleinster(float a[],int n)
    {
        for (int i = n - 1; i >= 0; i--)
            for (int j = 0; j < i; j++) {
                if (a[j] > a[j + 1]) swap (a[j], a[j + 1]);
            }
    
        return a[0];
    }
    

    Ein einfaches Bubble-sort 🙂



  • Aber was ist viel !!! besser : Man soll Array nicht sortieren, etwas:

    if (n <=0) return ...
    float mval = a[0];
    for (int i = 0; i < n; i++)
     mval = min (mval, a[i])
    ...
    return mval;
    

Anmelden zum Antworten