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.