klitze kleines problema

  • also ich hab das programm nochmal etwas verändert, ist jetzt etwas kürzer und ein bissl übersichtlicher. trotzdem hab ich noch ein problem. sobald er die eingegebene zahl nach der eingegebene stelle findet gibt er sie aus. das ist auch in ordnung dannach soll er auch nix mehr machen. aber sollte er nix finden soll der zeiger null beinhalten, das geht auch, dannach soll er den ganzen array durchsuchen. bei mir findet er dann die zahl wenn sie vor der stelle liegt. er gibt sie aus, aber trotzdem will ich dann auch noch die anderen stellen wissen an der die zahl sich befindet aber das geht bei mir net weil er durch das return laufend das programm abbricht und nur eine stelle ausgibt. wo muss ich die for schleife einbauen?
    ich hab mir gedacht das ich eine normale variable hochzählen lass aber die darf nicht größer sein als die anzahl der elemente(anzahl der zahlen).
    das würde dann so aussehen for(int index = 0; index < elemente; index++). ja gut das wäre das dann muss ich aber noch sagen das die stelle an der er die zahl gefunden hat ist doch dann die stelle an der er die suche fortsetzen soll oder? also wäre das doch der return wert resultat+1 damit der zeiger an der nächsten stelle weitermacht. warum macht er das dann nicht??? hab ich irgendeinen denkfehler oder so? hab das 2000 mal ausprobiert und trotzdem gibt er mir immer die selbe stelle aus. könnte mir da mal bitte jemand helfen!?!?!?!?! dann noch ein problem: angenommen die zahl die zu suchen ist liegt nicht nach der eingegebenen stelle im feld. er fängt die suche von der stelle 0 an des arrays. so jetzt liegt die zu suchende zahl an der stelle 0 würde ich nicht pStelle = &array[-1]; schreiben sondern pStelle = &array[0]; dann würde er die nullte stelle überspringen und an der ersten anfangen warum?


  • Hallo,
    den Lösungsansatz habe ich doch schon geschrieben das mit
    pArray=array+(*pStelle) ist falsch und entspricht auch nicht der Aufgabenstellung:
    "sowie einen zeiger, der auf ein element des feldes zeigt"
    und Nicht,so wie du das gemacht hast:
    "sowie einen zeiger der auf eine Zahl verweist,die die Position innerhalb des Feldes angibt"


    pArray=pStelle Nichts anderes!


    Peter

  • ja ok stimmt, habs umgeändert, danke. ein problema weniger. jetzt brauch ich auch nicht mehr das dumme -1. trotzdem könntest du mir vielleicht nochmal einen ansatz für das geben damit er mir alle stellen heraus sucht, an der die eingegebene zahl steht?! hab ein post weiter oben mal meine idee hingeschrieben aber beim verwirklichen klapp es nicht so vielleicht hab ich auch einen denkfehler den ich nicht finde?

  • Hst du das [url=http://www.paules-pc-forum.de/phpBB2/topic,35531.html]HIER[/url] gelesen????
    anstelle des einfachen Count++ könnte man pResult ja auch in irgendeinem zusätzlichen Array speichern.


    Peter

  • hab deinen beitrag irgendwie gar net gesehen oder geschweigeden gelesen. naja ok weiss net was ich sagen soll aber hab das jetzt mal so gemacht. es geht aber trotzdem zeigt er mir einen fehler an er gibt mir die stellen aus meinetwegen 1 4 8 und dann eine total kommische zahl
    -2334234 und dann beschwerd er sich mit der meldung


    THREAD angehalten
    Fehler: access violation at 0x401092:



    weiss absolut net was das ist der blaue balken8in borland der auf fehler zeigen soll zeigt mir etwas mit dem vergleich if (*pArray == eingabe) an. weiss du was der damit meint?? hier nochmal der code


  • Solche fehler (Acces violation)deutet auf einen Zeiger fehler hin,
    -nicht intialisierter Zeige
    -Zeiger auf einen falschen Speicherbereich (z.B. Wertzuweisung an das Element vor dem ersten Element oder nach der letzten Stelle des Arrays.


    Die Eingabefunkion die du verwendest ist so auch etwas falsch
    wenn du die vierte Stelle eingeben willst müsste das so aussehen:
    cin>>iStelle;
    pStelle=pArray+iStelle.


    Peter

  • also hab den fehler jetzt gefunden! mit meiner for schleife stimmt
    was net. angenommen ich hab 10 elemente die mit zufallszahlen
    gefüllt sind und ich suche nach der 7 ab stelle 0.
    10 3 7 2 9 7 8 5 3 2
    dann würde er mir als erstes die 2 stelle ausgeben. dann geht er in die for schleife count ist 0. und die stelle an der er weitersuchen soll wäre ja dann die 3 (durch pResultat+1).die nächste stelle wäre 5. count ist 1. er beginnt an der nächsten stelle weiter zu suchen das wäre dann die 6te stelle. jetzt sollte er normalerweise abbrechen weil ja keine zahlen mehr drinne sind aber er führt die schleife noch 8 mal aus und kommt damit dann über das array.


    Code
    pResultat = findeZahl(array, elemente, eingabe, pStelle);
    cout << (pResultat - array) << endl;
    
    
    for (count = 0; count < elemente; count++)
    {      		{
           pResultat = findeZahl(array, elemente, eingabe, pResultat+1);
           cout << (pResultat - array) << endl;
    }



    und deswegen macht mein linker dann aufstand mit der if anweisung

    Code
    if (*pArray == eingabe)
    {
            return pArray;
    }


    trotzdem weiss ich nicht was ich in die for schleife als bedingung schreiben muss damit er mir nicht wieder aus dem feld abhaut.


    hätte jemand eine idee?


  • Da fallen mir als erstest ganz spontan 2 Sachen ein,
    ->pStelle=&array[0]; hmmmh würde pStelle=array nicht reichen?
    ->das mit count=0;count<element;da wir dein Lehrer rum meckern...
    da einige Zahlen doppelt gezählt werden,du dürftest eigentlich nur bis zu der Stelle suchen bis zu der schon gesucht wurde.
    Das Problem mit dem pResult+1 dürfte sich dann erledigt haben.


    Peter

  • ich hab jetzt alles ausprobiert komm aber net dahinter was ich in die for schleife als bedingung schreiben muss. wie meintest du das eigentlich mit?


    Zitat

    da einige Zahlen doppelt gezählt werden,du dürftest eigentlich nur bis zu der Stelle suchen bis zu der schon gesucht wurde.
    Das Problem mit dem pResult+1 dürfte sich dann erledigt haben.

  • Hat noch jemand ne Lösung für die Aufgabe gefunden! Ist sehr dringend !!!


    DANKE!!



Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!