Chaoz77
Grünschnabel
Hi!
Ich programmiere momentan ein Programm in C++ welches 1. in einer Funktion ein Zufallsarray generiert, 2. dieses dann ausgibt, 3. es mittels dem Bubblesortalgorithmus/Shakeralgorithmus (Kann der Anwender wählen) sortiert und letzten Endes dann wieder ausgibt.
Das ganze Programm hat einwandfrei Funktioniert bis ich versucht habe die Funktion "array_erstellen" zu implementieren um somit die Erstellung eines Zufallsarrays außerhalb des Hauptprogramms stehen zu haben.
Allerdings klappt es hier nicht mehr ganz mit dem Übergeben der Variablen, bzw. die rückgegebnen Werte stimmen auch nicht.
Ich bekomme mehrere Fehlermeldungen was das anbelangt und weiß jetzt einfach nicht mehr weiter. Ich hoffe ihr könnt mir evtl. weiterhelfen und mir vielleicht auch gleich erklären wieso ihr das so lösen würdet, damit ich mir das für's nächste Mal merken und solche Probleme selbst lösen kann.
Außerdem würde ich gerne noch wissen wieso ich am Ende des Programms 2 X "cin.get();" stehen haben muss damit sich das Programm nicht selbst beendet (Ist für mich einfach nicht nachvollziehbar)?
Hier also mein Code:
Ich hoffe mein Code ist halbwegs verständlich und ihr könnt mir weiterhelfen. Ich sollte vielleicht noch dazu sagen, dass ich ein Anfänger bin was C++ angeht
.
Gruß Chaos
Ich programmiere momentan ein Programm in C++ welches 1. in einer Funktion ein Zufallsarray generiert, 2. dieses dann ausgibt, 3. es mittels dem Bubblesortalgorithmus/Shakeralgorithmus (Kann der Anwender wählen) sortiert und letzten Endes dann wieder ausgibt.
Das ganze Programm hat einwandfrei Funktioniert bis ich versucht habe die Funktion "array_erstellen" zu implementieren um somit die Erstellung eines Zufallsarrays außerhalb des Hauptprogramms stehen zu haben.
Allerdings klappt es hier nicht mehr ganz mit dem Übergeben der Variablen, bzw. die rückgegebnen Werte stimmen auch nicht.
Ich bekomme mehrere Fehlermeldungen was das anbelangt und weiß jetzt einfach nicht mehr weiter. Ich hoffe ihr könnt mir evtl. weiterhelfen und mir vielleicht auch gleich erklären wieso ihr das so lösen würdet, damit ich mir das für's nächste Mal merken und solche Probleme selbst lösen kann.
Außerdem würde ich gerne noch wissen wieso ich am Ende des Programms 2 X "cin.get();" stehen haben muss damit sich das Programm nicht selbst beendet (Ist für mich einfach nicht nachvollziehbar)?
Hier also mein Code:
HTML:
//---------------------------------------------------------------------------
#include<iostream>
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// Deklaration //
/////////////////////////////////////////////////////////////////////////////
int array_erstellen(int, int);
bool array_ausgeben(int, int, string);
int array_sortieren_bubble (int, int);
int array_sortieren_shake (int, int);
bool array_pruefen(int, int, bool);
/////////////////////////////////////////////////////////////////////////////
// FUNKTIONEN //
/////////////////////////////////////////////////////////////////////////////
// ARRAY PER ZUFALL ERSTELLEN
int* array_erstellen(int array, int arraymax){
int lauf = 0;
int elem_min = 1;
int elem_max = 50;
int elem_anzahl = 0;
randomize();
//Abfragen wie viele Elemente das Array beinhalten soll
//Array darf aus Gründen der Rechenzeit nicht mehr als 50 Elemente beinhalten
cout << "Wie viele Elemente soll das Array enthalten (1-50)?" << endl;
do{
cin >> elem_anzahl;
}while(elem_anzahl < elem_min && elem_anzahl > elem_max);
cout << "elem_anzahl= " << elem_anzahl << endl;
array = new int[elem_anzahl]; // <------ Deklarieren von Array
//Array mit zufälligen Werten zwischen 1 und 100 füllen
for(lauf=0; lauf<elem_anzahl; lauf++){
array[lauf]=random(100);
}
arraymax = sizeof(array)/sizeof(array[0]); // <------- arraymax berehcnen
cout << "arraymax= " << arraymax << endl;
return array;
}
//ARRAY AUSGEBEN
bool array_ausgeben(int *array, int arraymax, string meldung){
int lauf = 0;
cout<<meldung;
for (lauf=0; lauf<arraymax; lauf++){
cout << array[lauf] << "|";
}
cout<<endl;
return array;
}
//ARRAY PER BUBBLESORT-ALGORITHMUS SORTIEREN
int* array_sortieren_bubble(int *array, int arraymax){
int lauf = 0;
//int lauf2 = 0;
int temp;
cout << "Bubble" << endl;
/* URSPRÜNGLICHE VERSION VON BUBBLESORT
//Durchläuft das Array arraymax*arraymax mal
for (lauf=0; lauf<arraymax; lauf++){
for (lauf2=0; lauf2<arraymax; lauf2++){
//cout << "Bubble durchlauf: " << endl;
if(lauf2+1 <= arraymax){
if(array[lauf2]>array[lauf2+1]){
temp = array[lauf2];
array[lauf2] = array[lauf2+1];
array[lauf2+1] = temp;
}
}
}
}
*/
//OPTIMIERTE VERSION VON BUBBLESORT
//Durchläuft das Array nur einmal
for (lauf=0; lauf<arraymax; lauf++){
if(lauf+1 <= arraymax){
if(array[lauf]>array[lauf+1]){
temp = array[lauf];
array[lauf] = array[lauf+1];
array[lauf+1] = temp;
}
}
}
return array;
}
//ARRAY PER SHAKERSORT-ALGORITHMUS SORTIEREN (bidirektionaler Bubblesort)
int* array_sortieren_shake(int *array, int arraymax){
cout << "SHAKE" << endl;
return array;
}
//ARRAY ÜBERPRÜFEN OB ALLE ZAHLEN AN DER RICHTIGEN STELLE SIND
bool array_pruefen(int *array, int arraymax){
int lauf = 0;
for(lauf=0; lauf < arraymax; lauf++){
if(lauf+1 <= arraymax){
if(array[lauf]>array[lauf+1]){
//cout << "array[" << lauf << "]>array[" << lauf+1 << "]"<<endl;
return false;
}
}
}
return true;
}
/////////////////////////////////////////////////////////////////////////////
void main()
{
//DEKLARATION
char sortier_algorithmus; // Variable die entscheidet welcher Sortieralgorithmus verwendet wird
int arraymax = 0; //Anzahl der Arrayelemente
int *array = 0; //Zeiger auf Anfang von Array
array_erstellen(array, arraymax); //Array erstellen und Array + Arraygröße zurückgeben
//Generiertes Array ausgeben
array_ausgeben(array,arraymax,"vorher: ");
//Algorithmus bestimmen
cout << endl << endl << "Moechten Sie das Array mittels Bubblesort oder Shakesort sortieren? (B/S)" << endl;
do{
cin >> sortier_algorithmus;
cout << "elem_anzahl='" << sortier_algorithmus <<"'"<<endl;
}while(sortier_algorithmus != 'b' && sortier_algorithmus != 'B' && sortier_algorithmus != 's' && sortier_algorithmus != 'S');
//Im Fall das der Bubblesortalgorithmus gewählt wurde
if(sortier_algorithmus == 'b' || sortier_algorithmus == 'B'){
//Sortiervorgang solange wiederholen bis array_pruefen() true zurückgibt
do{
array_sortieren_bubble(array,arraymax);
}while(array_pruefen(array,arraymax) == 0);
//Im Fall das der Shakesortalgorithmus gewählt wurde
}else if(sortier_algorithmus == 's' || sortier_algorithmus == 'S'){
//Sortiervorgang solange wiederholen bis array_pruefen() true zurückgibt
do{
array_sortieren_shake(array,arraymax);
}while(array_pruefen(array,arraymax) == 0);
}
//Sortiertes Array ausgeben
array_ausgeben(array,arraymax,"nachher: ");
//WIESO ZWEIMAL?!
cin.get();
cin.get();
}
//---------------------------------------------------------------------------
Ich hoffe mein Code ist halbwegs verständlich und ihr könnt mir weiterhelfen. Ich sollte vielleicht noch dazu sagen, dass ich ein Anfänger bin was C++ angeht

Gruß Chaos