Quicksort mit Eingabe

dreigeld

Grünschnabel
Hi@,
ich sitz hier jetzt seit ner gefühlten Ewigkeit und finde den vermeindlich lächerlichen Fehler einfach nicht..
Ich soll für das Praktikum ein Programm schreiben welches nach dem Quicksort-Verfahren Zahlen sortiert.
Das klappt alles soweit auch wunderbar, jetzt wollte (muss) ich noch eine Funktion einbauen, welche nach
Zahlen suchen kann. Bzw. 1. Zahl.
Allerdings schaffe ich es nicht die eingegebene Zahl, meiner Funktion "suche" zu übergeben.
Das ist der einzige Haken der noch vorherscht.
Nachfolgend jetzt die jeweiligen Codes.


Code:
//Die Funktionsdatei


#include "MeineListe.hpp"

void Liste::eingabe()
{
	for(int i=0; i<99; i++)
	{
		zahlen[i] = rand();
	}
	cout << "99 Zahlen wurden Zufaellig erstellt, nun Eingabe der Letzten:" << endl;
	cin >> zahlen[99];
	//zahlen[99]= 10000;
}
void Liste::ausgabe()
{
	for(int i=0; i<100; i++)
	{
		cout << i+1 <<".    " << zahlen[i] << endl;
	}
}
void Liste :: sortieren(int l,int r)
{
	int links,rechts,hilfe;
	float grenzwert;
	links=l;
	rechts=r;
	grenzwert = zahlen[(l+r)/2];
	do
	{
		while( zahlen[links] < grenzwert)
			links=links+1;
		while( zahlen[rechts]>grenzwert)
			rechts=rechts-1;
		if(links<=rechts)
		{
			if(links<rechts)
			{
				hilfe= zahlen[links];
				zahlen[links]=zahlen[rechts];
				zahlen[rechts]=hilfe;
			}
			links=links+1;
			rechts=rechts-1;
		}
	}while(links<=rechts);
	if(l<rechts)
	{
		sortieren(l,rechts);
	}
	if(r>links)
	{
		sortieren(links,r);
	}
}


int Liste::setsuche()
{
	int suchzahl;
	cout << "Eingeben der zu suchenden Zahl:" <<endl;
	cin >> suchzahl;
	return suchzahl;
}

void Liste::suchen(int w)
{
	
	int pos;
	bool gefunden = false;
	int anfang = 0;
	int ende = 99;
	while((anfang<=ende)&&(!gefunden))
	{
		pos = (anfang + ende)/2;
		if(zahlen[pos]>w)
			ende=pos-1;
		else
		{
			if(zahlen[pos]<w)
				anfang=pos+1;
			else
				gefunden=true;
		}

	}
	cout << " Die Zahl " << w << " Befindet sich an der Position " << pos +1 <<endl;
}


Code:
//Headderdatei


#pragma once
#include <iostream>
#include <time.h>
using namespace std;

class Liste
{
public:

	Liste(void){cout <<"Konstruktor von Liste" << endl;}
	~Liste(void){cout << "Destruktor wurde aufgerufen" << endl;}
	void eingabe();
	void ausgabe();
	void sortieren(int , int);
	void suchen(int);
	int setsuche();

private:
	int zahlen[100];
	int suchzahl;

};


Code:
//Die eigentliche Main


#include "MeineListe.hpp"


void main()
{
	Liste neu;
	neu.eingabe();
	neu.sortieren(0,99);
	neu.ausgabe();
	neu.setsuche();
	neu.setsuche();
	neu.suchen(suchzahl);  Hier ist der Fehler
	system("Pause");
}

Fehlermeldung:
Fehler 1 error C2065: 'suchzahl': nichtdeklarierter Bezeichner

Wenn ich nichts reinschreibe, sagt er ich muss was reinschreiben, und wenn ich ne beliebe Zahl einfüge, funktioniert es.
Wäre genial wenn jemand helfen könnte ;)
Vielen Dank im Vorraus.
MfG
 
Du hast suchzahl auch nirgends deklariert, außer in der Klasse, in der wiederum suchzahl als private deklariert ist!
Der einzige Weg ist, auf sie zuzugreifen, innerhalb einer Klassenfunktion!
 
Der Integer "suchzahl" ist ja ein privates Datenelement der Klasse Liste. Und mit setsuche() ließt du diesen Wert ein. Somit existiert er innerhalb der Klasse. Also brauchst du keinen Parameter, sondern verwende in der Metode "suchen()" einfach "suchzahl" anstelle von "w".
 
Servus,

erstmal vielen Dank für die schnellen Antworten. Der Meinung war ich zu Anfangs auch, allerdings
kommt dann die Fehlermeldung: Überladene Memberfunktion nicht in 'Liste' gefunden.

Ich hab auch schon vieles Versucht, vllt könnte sich einer mal kurz dem Code annehmen und ihn testen,
mit den vorgeschlagenen Lösungen. Ich denke der Fehler ist marginal :/. Programmiert / Kompiliert
wird das ganze mit Visual Studio 2008 Express. Wäre genial wenn jemand vllt mal testen könnte wie es
funktioniert, und dann den Code bzw. den entscheidenden Ausschnitt hier posten könnte.

MfG, und ein schönes Spiel euch allen :D
 
Servus,

erstmal vielen Dank für die schnellen Antworten. Der Meinung war ich zu Anfangs auch, allerdings
kommt dann die Fehlermeldung: Überladene Memberfunktion nicht in 'Liste' gefunden.
Du hast nicht gesagt was du nun wie geändert hast.

Aber, du hast eine Methode Liste::suchen(int) implementiert und versuchst vermutlich Liste::suchen() aufzurufen, dann kann das nicht funktionieren. Du mußt also den Parameter aus der Deklaration entfernen und auch aus der Definition der suchen Methode.

Gruß
 
Zurück