Lösungen Übung 1 1. Aufgabe 1a) /* Das Programm (pr12102.CPP) ruft 3 Prozeduren auf: 1. eingabe() Zahlen werden in ein Feld eingelesen 2. bsort() Die Zahlen werden sortiert 3. ausgabe() Die sortierten Feldelemente werden ausgegeben */ // Compiler-Instruktionen #include <iostream> // Deklaration von globalen Variablen int n; int x[20]; // Funktionsprototypen void eingabe(int[], int&); void ausgabe(int[], int); void bsort(int[], int); void auswahlsortieren(int[], int); void einfuegesortieren(int[], int); void tauschen(int[], int, int); // // // // // // Eingabe Ausgabe Bubble-Sort Sortieren durch Auswaehlen Sortieren durch Einfuegen Tauschen int main() // kann auch so geschrieben werden: int main(void) { // int n; // int x[20]; eingabe(x,n); cout << "Ausgabe unsortiert:\n"; ausgabe(x,n); cout << "Ausgabe sortiert:\n"; bsort(x,n); // einfuegesortieren(x,n); // auswahlsortieren(x,n); ausgabe(x,n); return 0; } // Eingabe void eingabe(int x[], int& n) { cout << "Anzahl Elemente? \n"; cin >> n; cout << "Elementweise Eingabe: \n"; for (int i = 0; i < n; i++) cin >> x[i]; } // Ausgabe void ausgabe(int x[], int n) { const int zeilenLaenge = 12; // Anzahl der Elemente je Zeile cout << "(" << n << ") <"; for (int i = 0; i < n; ++i) { if (i % zeilenLaenge == 0 && i) // ; cout << "\n\t"; cout << x[i]; // Trennen durch , Ausnahme letztes Element if (i % zeilenLaenge != zeilenLaenge - 1 && i != n - 1) cout << ", "; } cout << ">\n"; } // Sortieren void bsort(int x[], int n) { // Sortieren durch Austauschen for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) // if ((*vrgl) (x[i], x[j]) < 0) if (x[i] > x[j]) tauschen(x,i,j); } void auswahlsortieren(/* int *x,*/ int x[], int n) { int min; for (int i = 0; i < n - 1; i++) { min = i; for (int j = i + 1; j < n; j++) if (x[j] < x[min]) min = j; tauschen(x,min,i); } } void einfuegesortieren(int x[], int n) { int schl, j; for (int i = 1; i < n; i++) { schl = x[i]; j = i - 1; while ((schl < x[j]) && (j >= 0)) { x[j + 1] = x[j]; j--; } x[j + 1] = schl; } } void tauschen(/* int* x,*/ int x[], int i, int j) { int zwischen = x[i]; x[i] = x[j]; x[j] = zwischen; } 1b) 1c) /* Das Programm (pr12101.CPP) ruft 3 Prozeduren auf: 1. eingabe() Zahlen werden in ein Feld eingelesen 2. bsort() Die Zahlen werden sortiert 3. ausgabe() Die sortierten Feldelemente werden ausgegeben #include <iostream.h> #include "a:\kap1\eing.h" #include "a:\kap1\ausg.h" #include "a:\kap1\sort.h" // eingabe() // ausgabe() // bsort() */ // int n; // int x[20]; void main() // kann auch so geschrieben werden: void main(void) { int n; int x[20]; eingabe(x,n); cout << "Ausgabe unsortiert:\n"; ausgabe(x,n); cout << "Ausgabe sortiert:\n"; // bsort(x,n); // einfuegesortieren(x,n); auswahlsortieren(x,n); ausgabe(x,n); return; // kann weggelassen werden } „eing.h“ #include <stdlib.h> void eingabe(int *x, int& n) { cout << "Anzahl Elemente? \n"; cin >> n; cout << "Elementweise Eingabe: \n"; for (int i = 0; i < n; i++) cin >> x[i]; } void fuelleFeld(int *x, int &n) { cout << "Anzahl Elemente?" << endl; cin >> n; // Fuellen des Felds mit Zufallszahlen aus dem Bereich 0 .. 99 for (int i = 0; i < n; i++) x[i] = rand() % 100; // Zufallszahlengenerator Borland C++ } ausg.h void ausgabe(int* x, int n) { const zeilenLaenge = 12; // Anzahl der Elemente je Zeile cout << "(" << n << ") <"; for (int i = 0; i < n; ++i) { if (i % zeilenLaenge == 0 && i) // ; cout << "\n\t"; cout << x[i]; // Trennen durch , Ausnahme letztes Element if (i % zeilenLaenge != zeilenLaenge - 1 && i != n - 1) cout << ", "; } cout << ">\n"; } sort.h /* typedef int (*VRGL) (int,int); void tauschen(/* int* x,*/ int x[], int i, int j) { int zwischen = x[i]; x[i] = x[j]; x[j] = zwischen; } int vrgl1(int z1, int z2) { return z1 - z2; } int vrgl2(int z1, int z2) { return z2 - z1; } */ void bsort(int* x, int n /*, VRGL vrgl*/) { // Sortieren durch Austauschen for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) if (/*(*vrgl) */(x[i] > x[j])) tauschen(x,i,j); } void auswahlsortieren(/* int *x,*/ int x[], int n) { int min; for (int i = 0; i < n - 1; i++) { min = i; for (int j = i + 1; j < n; j++) if (x[j] < x[min]) min = j; tauschen(x,min,i); } } void einfuegesortieren(int *x, int n) { int schl, j; for (int i = 1; i < n; i++) { schl = x[i]; j = i - 1; while ((schl < x[j]) && (j >= 0)) { x[j + 1] = x[j]; j--; } x[j + 1] = schl; } } /* void quicksort(int *x, int links, int rechts) { int i = links; int j = rechts; int test = x[(links + rechts) / 2]; do { while (x[i] < test) i++; while (test < x[j]) j--; if (i <= j) { tauschen(x,i,j); i++; j--; } } while (i <= j); if (links < j) quicksort(x,links,j); if (i < rechts) quicksort(x,i,rechts); } */ 1d) 5. Aufgabe 5a) /* Das Programm (pr12103.CPP) ruft 3 Prozeduren auf: 1. eingabe() Zahlen werden in ein Feld eingelesen 2. bsort() Die Zahlen werden sortiert 3. ausgabe() Die sortierten Feldelemente werden ausgegeben */ // Compiler-Instruktionen #include <iostream> #include <vector> // Standard-Vektor using namespace std; // Deklaration von globalen Variablen int n; vector<int> x(20); // Tabelle mit 20 int-Werten // Funktionsprototypen void eingabe(vector<int>&, int&); void ausgabe(vector<int>, int); void bsort(vector<int>&, int); void auswahlsortieren(vector<int>&, int); void einfuegesortieren(vector<int>&, int); void tauschen(vector<int>&, int, int); // // // // // // Eingabe Ausgabe Bubble-Sort Sortieren durch Auswaehlen Sortieren durch Einfuegen Tauschen void main() // kann auch so geschrieben werden: void main(void) { // int n; // int x[20]; eingabe(x,n); cout << "Ausgabe unsortiert:\n"; ausgabe(x,n); cout << "Ausgabe sortiert:\n"; bsort(x,n); // einfuegesortieren(x,n); // auswahlsortieren(x,n); ausgabe(x,n); return 0; // kann weggelassen werden } // Eingabe void eingabe(vector<int>& x, int& n) { cout << "Anzahl Elemente? \n"; cin >> n; cout << "Elementweise Eingabe: \n"; for (int i = 0; i < n; i++) cin >> x[i]; } // Ausgabe void ausgabe(vector<int> x, int n) { const int zeilenLaenge = 12; // Anzahl der Elemente je Zeile cout << "(" << n << ") <"; for (int i = 0; i < n; ++i) { if (i % zeilenLaenge == 0 && i) // ; cout << "\n\t"; cout << x[i]; // Trennen durch , Ausnahme letztes Element if (i % zeilenLaenge != zeilenLaenge - 1 && i != n - 1) cout << ", "; } cout << ">\n"; } // Sortieren void bsort(vector<int>& x, int n) { // Sortieren durch Austauschen for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) // if ((*vrgl) (x[i], x[j]) < 0) if (x[i] > x[j]) tauschen(x,i,j); } void auswahlsortieren(vector<int>& x, int n) { int min; for (int i = 0; i < n - 1; i++) { min = i; for (int j = i + 1; j < n; j++) if (x[j] < x[min]) min = j; tauschen(x,min,i); } } void einfuegesortieren(vector<int>& x, int n) { int schl, j; for (int i = 1; i < n; i++) { schl = x[i]; j = i - 1; while ((schl < x[j]) && (j >= 0)) { x[j + 1] = x[j]; j--; } x[j + 1] = schl; } } void tauschen(/* int* x,*/ vector<int>& x, int i, int j) { int zwischen = x[i]; x[i] = x[j]; x[j] = zwischen; } 5b) /* Das Programm (pr12105.CPP) ruft 3 Prozeduren auf: 1. eingabe() Zahlen werden in ein Feld eingelesen 2. bsort() Die Zahlen werden sortiert 3. ausgabe() Die sortierten Feldelemente werden ausgegeben */ // Compiler-Instruktionen #include <iostream> #include <vector> #include <string> // Standard-Vektor using namespace std; // Deklaration von globalen Variablen int n; vector<string> x(20); // Tabelle mit 20 string-Werten // Funktionsprototypen void eingabe(vector<string>&, int&); void ausgabe(vector<string>, int); void bsort(vector<string>&, int); void auswahlsortieren(vector<string>&, int); Auswaehlen void einfuegesortieren(vector<string>&, int); Einfuegen void tauschen(vector<string>&, int, int); // // // // Eingabe Ausgabe Bubble-Sort Sortieren durch // Sortieren durch // Tauschen void main() // kann auch so geschrieben werden: void main(void) { // int n; // int x[20]; eingabe(x,n); cout << "Ausgabe unsortiert:\n"; ausgabe(x,n); cout << "Ausgabe sortiert:\n"; bsort(x,n); // einfuegesortieren(x,n); // auswahlsortieren(x,n); ausgabe(x,n); return 0; // kann weggelassen werden } // Eingabe void eingabe(vector<string>& x, int& n) { cout << "Anzahl Elemente? \n"; cin >> n; cout << "Elementweise Eingabe: \n"; for (int i = 0; i < n; i++) cin >> x[i]; } // Ausgabe void ausgabe(vector<string> x, int n) { const int zeilenLaenge = 12; // Anzahl der Elemente je Zeile cout << "(" << n << ") <"; for (int i = 0; i < n; ++i) { if (i % zeilenLaenge == 0 && i) // ; cout << "\n\t"; cout << x[i]; // Trennen durch , Ausnahme letztes Element if (i % zeilenLaenge != zeilenLaenge - 1 && i != n - 1) cout << ", "; } cout << ">\n"; } // Sortieren void bsort(vector<string>& x, int n) { // Sortieren durch Austauschen for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) // if ((*vrgl) (x[i], x[j]) < 0) if (x[i] > x[j]) tauschen(x,i,j); } void auswahlsortieren(vector<string>& x, int n) { int min; for (int i = 0; i < n - 1; i++) { min = i; for (int j = i + 1; j < n; j++) if (x[j] < x[min]) min = j; tauschen(x,min,i); } } void einfuegesortieren(vector<string>& x, int n) { string schl; int j; for (int i = 1; i < n; i++) { schl = x[i]; j = i - 1; while ((schl < x[j]) && (j >= 0)) { x[j + 1] = x[j]; j--; } x[j + 1] = schl; } } void tauschen(/* int* x,*/ vector<string>& x, int i, int j) { string zwischen = x[i]; x[i] = x[j]; x[j] = zwischen; } 5 c) /* Das Programm (pr12103.CPP) ruft 3 Prozeduren auf: 1. eingabe() Zahlen werden in ein Feld eingelesen 2. bsort() Die Zahlen werden sortiert 3. ausgabe() Die sortierten Feldelemente werden ausgegeben */ // Compiler-Instruktionen #include <iostream> #include <vector> using namespace std; // Deklaration von globalen Variablen // int n; // Standard-Vektor // vector<int> x(); // Tabelle mit // Funktionsprototypen void eingabe(vector<int>&, int&); void ausgabe(vector<int>, int); void bsort(vector<int>&, int); void auswahlsortieren(vector<int>&, int); void einfuegesortieren(vector<int>&, int); void tauschen(vector<int>&, int, int); // // // // // // int-Werten Eingabe Ausgabe Bubble-Sort Sortieren durch Auswaehlen Sortieren durch Einfuegen Tauschen void main() // kann auch so geschrieben werden: void main(void) { int n; // int x[20]; // vector<int> x(20); vector<int> x; // anfaengliche Groesse ist 0 eingabe(x,n); cout << "Ausgabe unsortiert:\n"; ausgabe(x,n); cout << "Ausgabe sortiert:\n"; bsort(x,n); // einfuegesortieren(x,n); // auswahlsortieren(x,n); ausgabe(x,n); return 0; // kann weggelassen werden } // Eingabe void eingabe(vector<int>& x, int& n) { int wert; // cout << "Anzahl Elelemente?\n"; // cin >> n; cout << "Eingabe von Werten\n"; do { cout << "Wert (0 = Ende der Eingabe):"; cin >> wert; if (wert != 0) x.push_back(wert); // Wert anhaengen } while (wert != 0); n = x.size(); } // Ausgabe void ausgabe(vector<int> x, int n) { const int zeilenLaenge = 12; // Anzahl der Elemente je Zeile cout << "(" << n << ") <"; for (int i = 0; i < n; ++i) { if (i % zeilenLaenge == 0 && i) // ; cout << "\n\t"; cout << x[i]; // Trennen durch , Ausnahme letztes Element if (i % zeilenLaenge != zeilenLaenge - 1 && i != n - 1) cout << ", "; } cout << ">\n"; } // Sortieren void bsort(vector<int>& x, int n) { // Sortieren durch Austauschen for (int i = 0; i < n; i++) for (int j = i + 1; j < n; j++) // if ((*vrgl) (x[i], x[j]) < 0) if (x[i] > x[j]) tauschen(x,i,j); } void auswahlsortieren(vector<int>& x, int n) { int min; for (int i = 0; i < n - 1; i++) { min = i; for (int j = i + 1; j < n; j++) if (x[j] < x[min]) min = j; tauschen(x,min,i); } } void einfuegesortieren(vector<int>& x, int n) { int schl, j; for (int i = 1; i < n; i++) { schl = x[i]; j = i - 1; while ((schl < x[j]) && (j >= 0)) { x[j + 1] = x[j]; j--; } x[j + 1] = schl; } } void tauschen(/* int* x,*/ vector<int>& x, int i, int j) { int zwischen = x[i]; x[i] = x[j]; x[j] = zwischen; }