Zufallszahlen aus dem Zahlenfeld werden nicht richtig verteilt.



  • @minimi
    nette Lösung leider für mich zu fortgeschritten außerdem würde ich gerne mein Programm zum laufen bringen.

    Hallo es läüft viel Besser als vorher, aber ich brauch noch ein wenig Hilfe.
    Hat jm. Rat wie ich das ganze If else Zeug verkürzen könnte.
    Achja wegen der Bibliotheken bitte nicht sauer sein, ich habe es zwar kapiert, arbeite aber noch mit dem alten Programm, mit dem Neuen muss ich mich erst mal einarbeiten.



  • Hallo kommt noch jemand in meinen Thread? 😞 😕



  • ChrisTucker schrieb:

    .. außerdem würde ich gerne mein Programm zum laufen bringen.

    Hallo Christian,

    dann sage uns doch mal konkret, was nicht geht.

    Nochmal zur Info: wenn man ein Array Gruppe[10] definiert, so ist nur der Zugriff auf Gruppe[0] bis Gruppe[9] zulässig. Die '10' bei der Definition gibt die Anzahl der Elemente an, aber die Zählung der Indizes beginnt bei 0, nicht bei 1. Also 0,1,2 .. 8,9 sind die 10 gültigen Indizes.

    Gruß
    Werner



  • Also ich habe es jetzt einwandfrei zum laufen gebracht allerdings würde ich gerne das mit der if else Anweisung ein wenig vereinfachen, mit ner Schleife oder so aber cih bekomme en nicht so ganz hin liegt daran das ich nicht weis wie ich soviele Variablen gleichzeitig beim schleifendurchlauf berücksichtigen soll. Habe mal eine Seite weiter hinten den letzten stand des Quellcode hinein edittiert.



  • Hast du meinen Post angeschaut? Ich habe diverse Änderungsvorschläge gebracht, von denen du keinen einzigen beachtet hast (z.B. neue Header, int main() etc...). Dann hättest du auch keine Überschreitungen der Arraygrenzen. Aber es reicht scheinbar nicht, wenn es auch noch Werner Salomon sagt. Das selbe gilt übrigens für die Header - bereits 5 Mal wurde es schon erwähnt (Kreppel, ich, drakon, minimi, asc), aber du inkludierst immer noch <iostream.h>... 🙄

    Und wenn du Schleifen beherrschst, solltest du das auch hinkriegen mit den If-Else-Abfragen.

    void Gruppenzuweisung (tGruppen *&pTop, int zahl[])
    {
       // ...
       for (int i=0; i<anz; i++)    // pass hier auf, dass anz nicht zu gross wird.
       {
          if (zahl[i] > 100*i  &&  zahl[i] < 100*(i+1))
          {
             pTop->Gruppe[i][a[i]] = zahl[i];
             a[i]++;
             zaehler[i]++;
          }
       }   
    }
    

    Ich habe jetzt einfach mal die Abfragen in einer Schleife zusammengefasst, ohne den ganzen Zusammenhang mit eventuellen anderen Fehlern zu untersuchen. Du solltest versuchen, die Vereinfachung zu verstehen, und nicht ohne Weiteres zu kopieren. Zudem solltest du vielleicht den grundlegenden Aufbau noch einmal überdenken, dann hättest du auch nicht mit Pointern auf Referenzen zu tun...

    Ich hoffe, du schaust meinen vorherigen Thread und diesen genau an, sonst muss ich mir überlegen, dir weiterhin zu helfen... 🙄



  • ChrisTucker schrieb:

    Achja wegen der Bibliotheken bitte nicht sauer sein, ich habe es zwar kapiert, arbeite aber noch mit dem alten Programm, mit dem Neuen muss ich mich erst mal einarbeiten.

    Hast du es denn mal probiert mit <iostream> und so, ohne .h am Ende? Denn ich bin mir ziemlich sicher, dass sogar Visual C++ 6 diese Header kennt.



  • Also das mit den Bibliotheken geht nicht der erkennt die nicht, wie gesagt er erkennt nur die wo ich benutze. Umsteigen auf ein neues VS kann ich nicht. Weil Microsoft nicht Abwärtskompatibel ist. und die Programme müssen wieder mit VS 6.0 geöffnet werden. Außerdem ist des VS 6.0 Eine Vollversion die ich kostenlos nutzen kann.
    Wieso darf anz nicht zu groß werden?
    Die Header hab ich geändert Allerdings meldet er dann immer warnings das ich einen Wert zurückgeben muss.

    warnings
    C:\Dokumente und Einstellungen\Neo\Desktop\c++\Aufgabenblatt\Aufgabe8\Aufgabe8_Feldstatistik1.cpp(164) : warning C4518: 'int ' : Unerwartete(r) Speicherklassen- oder Typbezeichner; wird ignoriert
    C:\Dokumente und Einstellungen\Neo\Desktop\c++\Aufgabenblatt\Aufgabe8\Aufgabe8_Feldstatistik1.cpp(164) : warning C4228: Nicht dem Standard entsprechende Erweiterung : Qualifizierer nach einem Komma in der Deklaratorliste werden ignoriert

    Also habe es jetzt zum Laufen bekommen, bin euch shr dankbar für eure Geduld. Werde natürlich jetzt noch versuchen soviel eir möglich von euren Verbesserungsvorschlägen noch umzusetzen.



  • ChrisTucker schrieb:

    Weil Microsoft nicht Abwärtskompatibel ist. und die Programme müssen wieder mit VS 6.0 geöffnet werden. Außerdem ist des VS 6.0 Eine Vollversion die ich kostenlos nutzen kann.

    1. Kann man ältere Projekte konvertieren. (Klappt ganz gut mit dem VC 09).
    2. Bringt dir eine alte Vollversion bei weitem weniger, als eine neue Expressversion, die sich an der Standard hält. (Das du die Features, die dir nicht angeboten werden eh nicht brauchst, mal ganz davon abgesehen.)



  • drakon schrieb:

    ChrisTucker schrieb:

    Weil Microsoft nicht Abwärtskompatibel ist. und die Programme müssen wieder mit VS 6.0 geöffnet werden. Außerdem ist des VS 6.0 Eine Vollversion die ich kostenlos nutzen kann.

    1. Kann man ältere Projekte konvertieren. (Klappt ganz gut mit dem VC 09).
    2. Bringt dir eine alte Vollversion bei weitem weniger, als eine neue Expressversion, die sich an der Standard hält. (Das du die Features, die dir nicht angeboten werden eh nicht brauchst, mal ganz davon abgesehen.)

    Was kostet mich den das neue Visual Studio? Muss ich da was beachten beim Kauf?



  • ChrisTucker schrieb:

    drakon schrieb:

    ChrisTucker schrieb:

    Weil Microsoft nicht Abwärtskompatibel ist. und die Programme müssen wieder mit VS 6.0 geöffnet werden. Außerdem ist des VS 6.0 Eine Vollversion die ich kostenlos nutzen kann.

    1. Kann man ältere Projekte konvertieren. (Klappt ganz gut mit dem VC 09).
    2. Bringt dir eine alte Vollversion bei weitem weniger, als eine neue Expressversion, die sich an der Standard hält. (Das du die Features, die dir nicht angeboten werden eh nicht brauchst, mal ganz davon abgesehen.)

    Was kostet mich den das neue Visual Studio? Muss ich da was beachten beim Kauf?

    Express ist Gratis.

    http://www.microsoft.com/germany/express/download/default.aspx



  • ChrisTucker schrieb:

    Was kostet mich den das neue Visual Studio? Muss ich da was beachten beim Kauf?

    Die Express-Version ist kostenlos und reicht ziemlich sicher aus.
    Geh auf http://www.microsoft.com/germany/express/ und lade dort die C++-Version herunter.

    Edit: Verdammt, drakon! 😃



  • Hallo wie von euch empfohlen habe ich jetzt auf die Version 2008 umgestellt. Das Programm das vorher noch ging ist jetzt wieder ein Absturzprogramm. Syntax stimmt trotzdem klappt die Gruppenverteilung nicht.
    Desweiteren steht in der Version 2008 das ich sie nur noch 25 Tage nutzen kann und ich ein Registrierschlüssel eingeben soll.

    Kann das Vielleicht an Zeile 31 liegen das die Struktur in den Stack muss?? Wenn ja wie bekomme ich das hin?



  • ChrisTucker schrieb:

    Desweiteren steht in der Version 2008 das ich sie nur noch 25 Tage nutzen kann und ich ein Registrierschlüssel eingeben soll.

    Hast du wirklich die erwähnte EXPRESS Edition installiert, und nicht irgendeine Zeitlimitierte Visual Studio version?



  • asc schrieb:

    ChrisTucker schrieb:

    Desweiteren steht in der Version 2008 das ich sie nur noch 25 Tage nutzen kann und ich ein Registrierschlüssel eingeben soll.

    Hast du wirklich die erwähnte EXPRESS Edition installiert, und nicht irgendeine Zeitlimitierte Visual Studio version?

    Sie haben Ihre Kopie von Visual C++ 2008 Express Edition noch nicht registriert. Dieses Produkt kann noch 25 weitere Tage ausgeführt werden, bis es registriert werden muss.
    Genau die von dem oben genanntem Link.
    Kannste mir auch sagen was mit meinem Proggi nicht stimmt?

    MFG



  • ChrisTucker schrieb:

    asc schrieb:

    ChrisTucker schrieb:

    Desweiteren steht in der Version 2008 das ich sie nur noch 25 Tage nutzen kann und ich ein Registrierschlüssel eingeben soll.

    Hast du wirklich die erwähnte EXPRESS Edition installiert, und nicht irgendeine Zeitlimitierte Visual Studio version?

    Sie haben Ihre Kopie von Visual C++ 2008 Express Edition noch nicht registriert. Dieses Produkt kann noch 25 weitere Tage ausgeführt werden, bis es registriert werden muss.
    Genau die von dem oben genanntem Link.
    Kannste mir auch sagen was mit meinem Proggi nicht stimmt?

    MFG

    Wenn ich mich recht entsinne, musst du das so oder so machen. Auch wenn es die Expressedition ist. Kostet aber nix ist nur für die Datensamlung von Microsoft. 😉



  • Könntest du ein bischen genauer sein? Was muss ich machen? Mich bei Microsoft registrieren? Schicken die mir dann den Schlüssel?

    Ich weis noch immer nicht warum mein Code weiter oben nicht richtig funktioniert!



  • Erledigt



  • z.bsp kann es daran liegen:

    struct tGruppen *pTop = NULL;
    

    was willst du mit dem struct dort? Oo

    und vll solltest du mal genau sagen, was der compiler dir sagt und was abstürzen bei dir heißt ^^

    bb : )

    eidt:
    oder daran:

    void main(void)
    

    überhaupt: ich hab jz nur die ersten 5 beiträge oder so gelesen, aber du scheinst mehreres nicht berücksichtigt zu haben, was schon geschrieben wurde...
    als weiteres bsp. der pointer auf die referenz (vll hast du das ja iwo begründet, warum das so sein muss, aber ich denks mal nicht ^^)



  • Also der Kompilert gibt garkeine Fehler aus. Mit VS 6.0 Lief es ohne Probleme. Jetzt läuft es bis zur Zeile 56. Und Bricht ab. Dann erscheint ein Fenster mit folgendem Fehler.

    Run-Time Check Failure #2 - Stack around the variable 'zahl' was corrupted.
    

    und das struct

    struct tGruppen *pTop = NULL;
    

    verwende ich weil der Compiler meckert das sonst pTop nicht richtig deklrariert ist.

    Und das mit pointer vor der Referenz hat mir mal jm. bei nem anderen Prog so empfohlen, habe es jetzt mal ausprobiert es ändert sich nichts ob es da ist oder nicht.

    Habe mal des eine Verbessert und oben rein editiert.



  • ChrisTucker schrieb:

    #include <stdio.h>	         // nimm <cstdio> (wurde dir wohl erst 10 Mal gesagt...)
    
    const int anz=100;		// Deklaration einer globalen konstanten Anzahl 
    
    void zufallszahlen (tGruppen *&pTop)				// Neue Funktion
    {
    	const int anz=100;	  // wieso lokale Redeklaration?
        // konstanter integer genaue Gleitpunktzahl, z.B. 3.14 und 299793.0 --> eben nicht! Sondern konstante Ganzzahl (Integer)
    	int zahl[anz];
    	for (int i=1; i<=anz; i++)	
    		{
    		zahl[i] = rand()%1000;
    		}
    }
    

    Du überschreitest die Arraygrenzen, weil du erst mit Index 1 anfängst und dafür bis anz gehst. Bei einem Array mit der Dimension n kann man die Elemente [0] bis [n-1] ansprechen.


Anmelden zum Antworten