Dreieckstausch geht nicht!



  • Hallo Leute

    wir haben in der Schule vor kurzen etwas behandelt was sich "Dreieckstausch" nennt. Das ganze sollten wir in einem Programm testen, aber es hat nicht funktioniert. Ich bin nicht gerader der beste Programmierer, es gefällt mir auch nicht sehr, aber ich schicke euch mal meinen Code:

    #include "stdafx.h"
    #include <iostream>
    
    using namespace std;
    
    int Array[5], i, hilf;
    
    void Eingabe()
    {
    	for(i=1;i<=5;i++)
    	{
    		cout<<"Bitte geben sie eine Zahl ein: " << endl;
    		cin>>Array[i];
    		system("cls");
    	}
    }
    
    void Ausgabe()
    {
    	for(i=1;i<=5;i++)
    	{
    		cout<<Array[i]<<endl;
    	}
    }
    
    void Sortieren()
    {
    	for(i=1;i<5;i++)
    	{
    		for(i=1;i<5;i++)
    		{
    			if(Array[i+1]>Array[i])
    			{
    				hilf=Array[1];
    				Array[i]=Array[i+1];
    				Array[i+1]=hilf;
    			}
    		}
    	}
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	Eingabe();
    	Sortieren();
    	Ausgabe();
    	system("pause");
    	return 0;
    }
    

    Ich gebe Zahlen ein und diese sollen geordnet werden. Aber das geht nicht, mein Lehrer setzt es aber voraus das ich es verstehe! Könnt ihr mir helfen?

    LG
    -Lima-



  • Wie äußert sich denn "geht nicht"? Auf Anhieb kann ich sehen, daß du mit Array[i+1] auf Werte zugreifen könntest, die außerhalb des Arrays liegen.
    Ansonsten solltest du es vermeiden, Variablen global anzulegen - und zum Thema Sortieren gibt es hier schon genug Themen.



  • in zeile 34 in deinem code, ist das ne 1 oder ein kleines L ?!?



  • Skym0sh0 schrieb:

    in zeile 34 in deinem code, ist das ne 1 oder ein kleines L ?!?

    Was wohl 🙄

    Wenn er wenigstens eine Schleifenvariable L hätte, aber er nimmt zweimal das i. Vielleicht hättest du ihn besser auf das hingewiesen ...



  • nein cih wollte damit nicht auf etwaige fehler hinweisen, sondern eher darauf aufmerksam machen, aus lesbarkeitsgründen NICHT das kleine L zu benutzen als variable



  • Skym0sh0 schrieb:

    nein cih wollte damit nicht auf etwaige fehler hinweisen, sondern eher darauf aufmerksam machen, aus lesbarkeitsgründen NICHT das kleine L zu benutzen als variable

    Dann weis ich ihn besser noch darauf hin, seine Variablennamen nicht mit Unterstrichen zu beginnen.

    Vorsicht ist besser als Nachsicht.



  • In C++ starten Arrayindexe immer mit 0. Außerdem solltest du die Laufvariable immer im Kopf der For-Schleife definieren. Dein Array wird also von 0 bis 4 einschließlich durchlaufen:

    for( int i = 0; i < 5; ++i ) {
    }
    

    Die innere Schleife in sort darf wegen dem i+1 nur bis <4 laufen.



  • das wesentliche bleibt gleich aber
    wie bereits gesagt ein 5 stelliges array geht von 0-4
    bei Array[i+1] darf i nur bis 4 gehn sonst bist du bei der
    6ten stelle die du nicht hast

    #include <iostream>
    
    using namespace std;
    
    int i, hilf,Array[5];
    
    void Eingabe()
    {
        for(i=0;i<5;i++)
        {
            cout<<"Bitte geben sie eine Zahl ein: " << endl;
            cin>>Array[i];
            system("cls");
        }
    } 
    void Ausgabe()
    {
        for(i=0;i<5;i++)
        {
            cout <<Array[i] << endl;
        }
    }
    
    void Sortieren()
    {
        for(int i2=0;i2<5;i2++)
        {
            for(i=0;i<4;i++)
            {
                if(Array[i+1]>Array[i])
                {
                    hilf=Array[i];
                    Array[i]=Array[i+1];
                    Array[i+1]=hilf;
                }
            }
        }
    }
    
    main()
    {
        Eingabe();
        Sortieren();
        Ausgabe();
        system("pause");
        return 0;
    }
    


  • der gröbste Fehler liegt wohl darin, dass du beim Sortieren 2 Schleifen hast, die beide i benutzen. Das müssen aber unterschiedliche Zählvariablen sein.

    greetz KN4CK3R



  • Hallöchen 🙂

    Danke erstmal für die vielen Antworten. Also muss ich in der 2. -for schleife zb. anstatt i einfach nur o nehmen, und schon soll das funktionieren?

    Oder wie meint ihr das jetzt?

    Also gut, das mit den arrays mach ich jetzt auch nicht mehr mit 1. Habs mir nun irgendwie so lange eingeprügelt bis ich i=0 nehme, weil ja auch die meisten Programme so geschrieben werden.

    Ich teste es dann mal nacher aus. Dankeschön! 🙂

    LG



  • Limatex schrieb:

    Also muss ich in der 2. -for schleife zb. anstatt i einfach nur o nehmen, und schon soll das funktionieren?

    Oder wie meint ihr das jetzt?

    Dann könnte es funktionieren.

    Wie schon geschrieben wurde, ist "ghat nicht funktioniert" nicht grade die genaueste Aussage. Kriegst du Fehlermeldungen? Abstürze? Oder stimmt einfach die Ausgabe nicht?


Anmelden zum Antworten