You are not logged in.

  • Login

c++

rickluca

Unregistered

1

Monday, November 28th 2011, 6:38am

c++

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

2

Monday, November 28th 2011, 9:32pm

2 Threads = Schlecht
Von so etwas bekomme ich Augenkrebs. Nicht nochmal so eine Ordnung rein, ja? Alles zusammenfassen und eine Problemschilderung reicht.
Nun, solch ein Aufbau nötigt mich irgendwie eine ziemlich beknackte Antwort zu geben, die sicherlich so nicht von deinem Dozent erwartet wir:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <algorithm>
 
int main() {
  int array[] = { 23, 5, -10, 0, 0, 321, 1, 2, 99, 30 };
  int elements = sizeof(array) / sizeof(array[0]); 
  std::sort(array, array + elements);
  for (int i = 0; i < elements; ++i) 
     std::cout << array[i] << ' ';
}

Wenn du jetzt intelligent bist schaust du dir den Inhalt der Funktion std::sort an. :D

MfG
Check

Social bookmarks