Hi leute,
ich bin ein neuling im umgang mit c++
jetzt habe ich eine aufgabe wo ich nicht weiß wie ich den ansatz überhaupt machen soll.
das ist die aufgabe
Schreiben Sie ein C++-Programm, welches die Einträge eines Integer-
Arrays aufsteigend sortiert. Die Sortierung soll in-place geschehen, d.h.
die resultierenden sortierten Werte sollen im gleichen Array stehen wie
die Ausgangswerte.
In dieser ersten Ausgabe sei das zu sortierende Array vorgegeben.
unsigned int a[] = { 9, 3, 5, 2, 8, 6, 4, 3, 7, 8 };
Sei N die Länge des Arrays, und die Indexzählung des Arrays beginne ab
Null. Ihr Sortieralgorithmus soll dann nach dem im folgenden beschriebenen
Prinzip arbeiten:
for (unsigned int i = 1; i < N; i++)
{
Nehme a und sortiere diesen Wert an der richtigen
Stelle in den Bereich a[0] … a[i-1] ein. D.h. sollte der
Wert eigentlich an die Position p (irgendwo zwischen
0 und i) gehören, so werden die Werte a[p] … a[i-1] nach
a[p+1] … a verschoben, und der einzusortierende Wert
wird an die Stelle a[p] gesetzt.
}
Sie können die Aspekte der Schleife (Zählvariable, Schleifengrenzen,
Schleifenbedingung) in ihrem Programm durchaus variieren. Nur das
Prinzip des Algorithmus soll den Anforderungen entsprechen.
Programmieren Sie ihren Sortieralgorithmus in eine Funktion
void sortiere(), die das zu sortierende Array und die Arraylänge als
Parameter übernimmt.
Ein Testlauf:
Vorher: 9, 3, 5, 2, 8, 6, 4, 3, 7, 8
Nachher: 2, 3, 3, 4, 5, 6, 7, 8, 8, 9
Drücken Sie eine beliebige Taste . . .
aufgabe 2
Erweitern Sie Ihr Programm aus Aufgabe P7.01 um eine flexiblere
Initialisierung des Arrays. Arraygröße und Maximalwert jedes
Arrayeintrags sollen vom Benutzer abgefragt werden. Für jeden der
Arrayeinträge soll dann ein Zufallswert zwischen 1 und dem
eingegebenen Maximalwert als initialer Wert gesetzt werden. Jeden
einzelnen Zufallswert erhalten Sie durch Aufruf der folgenden Funktion:
unsigned int zufall(const unsigned int untergrenze,
const unsigned int obergrenze)
{
static bool initialisiert = false;
if (! initialisiert++)
srand((unsigned int) time(0));
int bereich = (obergrenze - untergrenze) + 1;
return untergrenze + int(bereich * rand() /
(RAND_MAX + 1.0));
}
Zur Erklärung: Mittels dem einmaligen Aufruf von srand() wird der
Zufallszahlengenerator initialisiert. Unter Zuhilfenahme der aktuellen
Systemzeit wird dafür gesorgt, dass die Initialisierung bei jedem Aufruf
verschiedenartig ausfällt. Mittels der Funktion rand() wird dann eine
Zufallszahl vom Zufallszahlengenerator erfragt.
Fügen Sie folgende Headerdateien hinzu, damit die in der Funktion
zufall()
verwendeten Bezeichner und Funktionen bekannt sind:
#include <ctime>
#include <cstdlib>
Da Ihr Programm Zufallszahlen verwendet, wird natürlich nicht erwartet,
dass Sie exakt die Beispielzahlen der Testläufe reproduzieren können.
Ein Testlauf (Tastatureingaben unterstrichen):
Bitte geben Sie die Anzahl der Array-Elemente ein: 5
Bitte geben Sie die Maximalgroesse jedes Array-Elements ein: 20
Vorher: 2, 19, 2, 16, 20
Nachher: 2, 2, 16, 19, 20
Drücken Sie eine beliebige Taste . . .
Ein weiterer Testlauf (Tastatureingaben unterstrichen):
Bitte geben Sie die Anzahl der Array-Elemente ein: 15
Bitte geben Sie die Maximalgroesse jedes Array-Elements ein: 50
Vorher: 5, 39, 35, 31, 31, 21, 39, 30, 27, 41, 50, 3, 36, 38, 24
Nachher: 3, 5, 21, 24, 27, 30, 31, 31, 35, 36, 38, 39, 39, 41, 50
Drücken Sie eine beliebige Taste .
Danke im vorraus
ich bin ein neuling im umgang mit c++
jetzt habe ich eine aufgabe wo ich nicht weiß wie ich den ansatz überhaupt machen soll.
das ist die aufgabe
Schreiben Sie ein C++-Programm, welches die Einträge eines Integer-
Arrays aufsteigend sortiert. Die Sortierung soll in-place geschehen, d.h.
die resultierenden sortierten Werte sollen im gleichen Array stehen wie
die Ausgangswerte.
In dieser ersten Ausgabe sei das zu sortierende Array vorgegeben.
unsigned int a[] = { 9, 3, 5, 2, 8, 6, 4, 3, 7, 8 };
Sei N die Länge des Arrays, und die Indexzählung des Arrays beginne ab
Null. Ihr Sortieralgorithmus soll dann nach dem im folgenden beschriebenen
Prinzip arbeiten:
for (unsigned int i = 1; i < N; i++)
{
Nehme a und sortiere diesen Wert an der richtigen
Stelle in den Bereich a[0] … a[i-1] ein. D.h. sollte der
Wert eigentlich an die Position p (irgendwo zwischen
0 und i) gehören, so werden die Werte a[p] … a[i-1] nach
a[p+1] … a verschoben, und der einzusortierende Wert
wird an die Stelle a[p] gesetzt.
}
Sie können die Aspekte der Schleife (Zählvariable, Schleifengrenzen,
Schleifenbedingung) in ihrem Programm durchaus variieren. Nur das
Prinzip des Algorithmus soll den Anforderungen entsprechen.
Programmieren Sie ihren Sortieralgorithmus in eine Funktion
void sortiere(), die das zu sortierende Array und die Arraylänge als
Parameter übernimmt.
Ein Testlauf:
Vorher: 9, 3, 5, 2, 8, 6, 4, 3, 7, 8
Nachher: 2, 3, 3, 4, 5, 6, 7, 8, 8, 9
Drücken Sie eine beliebige Taste . . .
aufgabe 2
Erweitern Sie Ihr Programm aus Aufgabe P7.01 um eine flexiblere
Initialisierung des Arrays. Arraygröße und Maximalwert jedes
Arrayeintrags sollen vom Benutzer abgefragt werden. Für jeden der
Arrayeinträge soll dann ein Zufallswert zwischen 1 und dem
eingegebenen Maximalwert als initialer Wert gesetzt werden. Jeden
einzelnen Zufallswert erhalten Sie durch Aufruf der folgenden Funktion:
unsigned int zufall(const unsigned int untergrenze,
const unsigned int obergrenze)
{
static bool initialisiert = false;
if (! initialisiert++)
srand((unsigned int) time(0));
int bereich = (obergrenze - untergrenze) + 1;
return untergrenze + int(bereich * rand() /
(RAND_MAX + 1.0));
}
Zur Erklärung: Mittels dem einmaligen Aufruf von srand() wird der
Zufallszahlengenerator initialisiert. Unter Zuhilfenahme der aktuellen
Systemzeit wird dafür gesorgt, dass die Initialisierung bei jedem Aufruf
verschiedenartig ausfällt. Mittels der Funktion rand() wird dann eine
Zufallszahl vom Zufallszahlengenerator erfragt.
Fügen Sie folgende Headerdateien hinzu, damit die in der Funktion
zufall()
verwendeten Bezeichner und Funktionen bekannt sind:
#include <ctime>
#include <cstdlib>
Da Ihr Programm Zufallszahlen verwendet, wird natürlich nicht erwartet,
dass Sie exakt die Beispielzahlen der Testläufe reproduzieren können.
Ein Testlauf (Tastatureingaben unterstrichen):
Bitte geben Sie die Anzahl der Array-Elemente ein: 5
Bitte geben Sie die Maximalgroesse jedes Array-Elements ein: 20
Vorher: 2, 19, 2, 16, 20
Nachher: 2, 2, 16, 19, 20
Drücken Sie eine beliebige Taste . . .
Ein weiterer Testlauf (Tastatureingaben unterstrichen):
Bitte geben Sie die Anzahl der Array-Elemente ein: 15
Bitte geben Sie die Maximalgroesse jedes Array-Elements ein: 50
Vorher: 5, 39, 35, 31, 31, 21, 39, 30, 27, 41, 50, 3, 36, 38, 24
Nachher: 3, 5, 21, 24, 27, 30, 31, 31, 35, 36, 38, 39, 39, 41, 50
Drücken Sie eine beliebige Taste .
Danke im vorraus