Lösungen Übung 1

Werbung
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;
}
Herunterladen