Wert in einem Array austauschen



  • Hallo, ich habe die Aufgabe ein Programm zu schreiben, in das man 5 integer einliest und diese dann nach Größe sortiert werden. Anschließend soll ein weiterer Wert eingelesen werden, an die passende Stelle gesetzt werden und der kleinste Wert soll ersetzt werden. Zum Beispiel:
    Please input the array: 1 9 3 5 2 7 8 4 6 0
    Ascending order as: 0 1 2 3 4 5 6 7 8 9
    Insert a new integer: 5
    Final results: 1 2 3 4 5 5 6 7 8 9
    Ich habe ein Programm geschrieben, dass das Array sortiert, also bis zum 2. Schritt im Beispiel, aber ich weiß nicht, wie ich eine Zahl in einem Array ersetze, an die richtige Stelle bringe und den linken Wert entferne.
    Kann mir da jemand helfen?
    Vielen Dank im Voraus,
    Katharina.



  • @KathiJ Du überschreibst den 1. (linken) Wert im Array und sortierst erneut.



  • ok danke
    wie überschreibe ich einen Wert?



  • @KathiJ mit arrayname[position] = wert;



  • Vielen lieben Dank und noch ein schönes Wochenende. 🙂



  • @KathiJ sagte in Wert in einem Array austauschen:

    ok danke
    wie überschreibe ich einen Wert?

    Wie hast du denn die Eingabe erledigt?
    Wie hast du das Sortieren erledigt?



  • @DirkB das ist mein sortierprogramm und die eingaben mache ich einfach mit cin.

    #include<iostream>
    using namespace std;

    int main()
    {
    int a[4], b, c, d ;
    cout << "Enter your numbers: " ;

    for(b = 0 ; b < 4 ; ++b)
    cin >> a[b] ;

    for(b = 1; b < 4; ++b)
    {
    for(c = 0; c < (4 - b); ++c)
    if(a[c] > a[c + 1])
    {
    d = a[c] ;
    a[c] = a[c + 1] ;
    a[c + 1] = d ;
    }
    }
    cout << "Sorted numbers: " << endl ;
    for(b = 0; b < 4; b++)
    cout << a[b] << endl ;
    return 0;
    }


  • Mod

    Bloß, dass du nicht 5, sondern nur 4 Werte verarbeitest. Und dass du die zweite Hälfte der Aufgabe, nach der du doch gefragt hattest, gar nicht bearbeitet hast.

    Puh! Da muss man ja eine ganze Menge Stellen im Programm abändern, wenn man das auf 5 erweitern möchte. Und dann muss ich alles noch einmal machen, um die zweite Hälfte der Aufgabe zu erledigen. Und dabei ständig dieses Aufpassen, dass man auch immer weiß, was gerade a, b, c, und d sind. Ganz schön anstrengend, dieses Programmieren!



  • @SeppJ bloß, dass ich nur auf eine Frage geantwortet hab und wie oben geschrieben schon erfolgreich war...



  • @KathiJ Was @SeppJ dir sagen will:

    • die 4 solltest du durch eine Konstante ersetzen (siehe auch Magische Zahlen)
    • deine Variablen sollten der besseren Lesbarkeit wegen längere, bessere Namen haben. Insbesondere sollte ein Name nicht nur aus einem Buchstaben bestehen (mit Ausnahme von Scheifenvariablen oder ähnlichem, deren Gültigkeit nur wenige Zeilen lang ist, wobei wenig ganz grob bei 5 Zeilen endet).
    • die Sortier-Funktionalität solltest du in einer separaten Funktion erledigen


  • @KathiJ sagte in Wert in einem Array austauschen:

    a[c] = a[c + 1] ;
    a[c + 1] = d ;

    Da beschreibst du doch das Array. An Position c und c+1.
    Oder hast du das gar nicht selber gemacht?



  • C++ ...

    #include <cstddef>
    #include <iterator>
    #include <algorithm>
    #include <iostream>
    
    int main()
    {
    	int arr[10];
    	
    	std::cout << "Please input the array: ";
    	for (auto &element : arr)
    		if (!(std::cin >> element))
    			return EXIT_FAILURE;
    
    	std::sort(std::begin(arr), std::end(arr));  // Do it Yourself, sos!!
    
    	std::cout << "Ascending order is: ";
    	std::copy(std::cbegin(arr), std::cend(arr), std::ostream_iterator<int>{ std::cout, " " });
    	
    	std::cout << "\nInsert a new integer: ";
    	int new_value;
    	if (!(std::cin >> new_value))
    		return EXIT_FAILURE;
    	
    	bool inserted{};
    	for (std::size_t i{}; i < std::size(arr) - 1; ++i) {
    		if (arr[i + 1] < new_value) {
    			arr[i] = arr[i + 1];
    		}
    		else {
    			arr[i] = new_value;
    			inserted = true;
    			break;
    		}
    	}
    	if (!inserted)
    		arr[std::size(arr) - 1] = new_value;
    
    	std::cout << "Final result: ";
    	std::copy(std::cbegin(arr), std::cend(arr), std::ostream_iterator<int>{ std::cout, " " });
    	std::cout << "\n\n";
    }
    

    eloganter:

    template <typename Iter, typename T>
    void insert_sorted_remove_lowest(Iter begin, Iter end, T new_value)
    {
    	if (begin == end)
    		return;
    
    	bool inserted{};
    	for (; begin + 1 != end; ++begin) {
    		if (*(begin + 1) < new_value) {
    			*begin = *(begin + 1);
    		}
    		else {
    			*begin = new_value;
    			inserted = true;
    			break;
    		}
    	}
    	if (!inserted)
    		*(end - 1) = new_value;
    }
    
    // ...
    
    insert_sorted_remove_lowest(std::begin(arr), std::end(arr), new_value);
    

    @DirkB sagte in Wert in einem Array austauschen:

    @KathiJ Du überschreibst den 1. (linken) Wert im Array und sortierst erneut.

    Das Ding ist doch schon sortiert.



  • @Swordfish sagte in Wert in einem Array austauschen:

    Das Ding ist doch schon sortiert.

    Dann hat es der Algorithmus leichter.


Log in to reply