0 Daumen
283 Aufrufe

Frage:

Schreiben Sie ein Programm in C++, das

- zwei Kommandozeilenparameter besitzt: eine Hilfeoption und ein Integerargument n, welches eine Anzahl von einzugebenden Zahlen darstellt

- dann nach n Zahlen fragt und diese mittels Bubbleund Quicksort sortiert.

Avatar von

1 Antwort

0 Daumen

Antwort mit KI erzeugt

Programm in C++ mit Kommandozeilenparametern

Das folgende C++ Programm zeigt, wie man ein Programm erstellen kann, das die angegebenen Anforderungen erfüllt. Zunächst erklären wir die Komponenten des Programms und dann präsentieren wir den gesamten Quellcode.

Das Programm wird:
- Zwei Kommandozeilenparameter akzeptieren: Eine Hilfeoption (z.B. -h oder --help) und ein Integerargument n, das die Anzahl der einzugebenden Zahlen angibt.
- Dann wird das Programm nach n Zahlen fragen und diese sowohl mit Bubble Sort als auch mit Quick Sort sortieren.

Wir gehen davon aus, dass die Hilfeoption einfach ausgeführt wird, wenn sie angegeben ist, und die Ausführung mit einer hilfreichen Nachricht beendet, die den Benutzer über die Nutzung informiert.

Da beide Sortiermethoden weithin bekannt sind, betrachten wir kurze Implementationen von Bubble Sort und Quick Sort.

Quick Sort Algorithmus (Pseudocode):

1. Wähle ein "Pivot"-Element aus der Liste.
2. Teile die Liste in zwei Teillisten: eine mit Elementen kleiner als das Pivot und die andere mit Elementen größer als das Pivot.
3. Wende Quick Sort rekursiv auf die zwei Teillisten an.
4. Kombiniere die sortierten Teillisten und das Pivot in eine einzige, sortierte Liste.

Bubble Sort Algorithmus (Pseudocode):

1. Vergleiche benachbarte Elemente. Wenn das erste größer ist, tausche sie.
2. Führe diesen Schritt für jede Elementpaarung in der Liste durch, am Ende ist das größte Element am Ende der Liste.
3. Wiederhole den Vorgang für alle Elemente außer dem zuletzt sortierten.

Quellcode:

cpp
#include <iostream>
#include <cstdlib> // für std::atoi
#include <vector>

void bubbleSort(std::vector<int>& arr) {
    int i, j;
    bool swapped;
    int n = arr.size();
    for (i = 0; i < n-1; i++) {
        swapped = false;
        for (j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                std::swap(arr[j], arr[j+1]);
                swapped = true;
            }
        }
        if (!swapped) break;
    }
}

void quickSort(std::vector<int>& arr, int low, int high) {
    if (low < high) {
        int pi = partition(arr, low, high);
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

int partition(std::vector<int>& arr, int low, int high) {
    int pivot = arr[high];
    int i = (low - 1);
    for (int j = low; j <= high- 1; j++) {
        if (arr[j] < pivot) {
            i++;
            std::swap(arr[i], arr[j]);
        }
    }
    std::swap(arr[i + 1], arr[high]);
    return (i + 1);
}

int main(int argc, char* argv[]) {
    if (argc != 3 || std::string(argv[1]) == "-h" || std::string(argv[1]) == "--help") {
        std::cout << "Verwendung: " << argv[0] << " [-h|--help] <Anzahl_der_Zahlen>" << std::endl;
        return 1;
    }

    int n = std::atoi(argv[2]);
    std::vector<int> numbers(n);

    std::cout << "Bitte geben Sie " << n << " Zahlen ein:" << std::endl;
    for (int i = 0; i < n; ++i) {
        std::cin >> numbers[i];
    }

    bubbleSort(numbers);
    std::cout << "Bubble Sort Ergebnis:" << std::endl;
    for (int num : numbers) std::cout << num << " ";
    std::cout << std::endl;

    // Da Bubble Sort die Liste bereits sortiert hat, müssen wir sie neu initialisieren
    std::cout << "Bitte geben Sie die Zahlen erneut ein für Quick Sort:" << std::endl;
    for (int i = 0; i < n; ++i) {
        std::cin >> numbers[i];
    }

    quickSort(numbers, 0, n - 1);
    std::cout << "Quick Sort Ergebnis:" << std::endl;
    for (int num : numbers) std::cout << num << " ";
    std::cout << std::endl;

    return 0;
}


Anmerkungen:

- Bitte beachten Sie, dass der obige Code für Zwecke der Demonstration vereinfacht ist und in Produktionsumgebungen erweiterte Fehlerprüfungen erfordert.
- Die Umwandlung von argv[2] in eine Ganzzahl erfolgt mittels std::atoi. In einem robusten Programm sollte man für diesen Vorgang eine sicherere Methode berücksichtigen, die fehlerhafte Eingaben korrekt handhabt.
Avatar von 4,6 k

Ein anderes Problem?

Stell deine Frage

Willkommen bei der Stacklounge! Stell deine Frage einfach und kostenlos

x
Made by a lovely community