Mehrdimensionale Arrays inkrementieren ?!



  • Hallo , ja ich bin neu , habe aber vorab die Suchfunktion benutzt und glaube zu arrays nichts passendes gefunden zu haben.
    Ich bin auch nicht überzeugt das mein Ansatz richtig ist, ganz und gar nicht, aber ich bin seit vorgestern in einer Sackgasse und suche nun mal ein paar Ideen und Hilfe.
    Vorab, "Sinn der Sache" steht ganz unten;

    Fangen wir mal so an, was will ich überhaupt ?
    Wissen ob und wie es möglich ist ... :

    ...Ein Array mit der Spaltenlänge "
    maxzahl"
    das erstmal per scanf von mir definiert wird erzeugen.
    jeder index soll anfangs immer 0 sein.

    array[zahl][index];

    ...Mehrdimensionale Arrays zu inkrementieren
    array[zahl][index];
    aus Maxzahl wird per rand() ermittelt so das wir zahl bekommen.
    nun muss zu jeder zahl , der entsprechende index erhöht werden.

    ...Arraywerte per printf ausgeben ; Dafür brauche ich vermutlich pointer ?
    int *ptr;
    ptr = array[3];
    /*Jetzt bräuchte ich wohl eine Summe von jedem i zu jeder spalte ...*/

    Sinn der Sache:
    Ich will am Ende für "maxzahl" einträge die Statistik haben wie oft sie vorgekommen sind:
    0 , 5 /*Wert 0 tauchte 5 mal auf*/
    1 , 3
    2 , 17
    3 , 9
    ...

    Ich nehme jede Art von Lösungsideen gerne an, will schliesslich mein Repertoire erweitern , damit ich irgendwann mal was von C verstehe^^
    vielleicht ist es ja absoluter Schmarrn mit Arrays aufzuwarten , nein ich gehe sogar davon aus, aber mir fiel nichts besseres ein.
    Wenn sich jemand Zeit nehmen kann, wäre ich super glücklich, mir reicht es auch wenn ihr Quellen und Hinweise gebt , braucht nicht Ewig was zu erklären, Zeit ist schliesslich kostbar. Das bedeutet nicht das ich keine Erklärungen mag^^

    Gruß
    Jan



  • Wozu brauchst du einen 2D-Array?

    int maxzahl = 100;
    int array[maxzahl];
    int i;
    for(i = 0;i < maxzahl; i++) {
       array[i] = 0;
    }
    
    for(i = 0; i < 1000; i++) {
       array[rand()%maxzahl]++;
    }
    
    for(i = 0;i < maxzahl; i++) {
       printf("%i = %i",i,array[i]);
    }
    


  • JHM sagte doch, dass die Spaltenlänge bei der eingabe festgelegt werden soll und zwar beim scanf();

    Und die Spaltenlänge zu beginn des Programm mit 0 zu Instalieren ist.
    Wieso Instalierst du es dann mit 100 ?

    Gruß



  • \Edit/:

    Autsch, schwerer Fehler:

    Ich hab mir das falsch vorgestellt,
    array [key][index]

    Nun wollte ich den Wert der Zweiten Spalte verändern ;
    Aber ...stimmt ich brauche keine 2 Dimensionalen Arrays.

    Ich nehme den rand()-Wert als key und der index ist der wert den ich dann inkrementieren kann.
    Mal gucken, ich werd mir das nachher oder morgen mal praktisch vornehmen und dann poste ich wenn es funktioniert hier noch rein.

    Weitere Tipps und Ideen nehme ich dennoch gerne an^^

    Hier die lösung die ich glücklicherweise bekommen habe, ein 1D Array , ganz grob tut es das was ich wollte, nur das mit dem Rundenbasierend und Lebenspunktabhängig muss ich noch mal einbauen.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main() {
            int x;  /* Größe Array = Zufallszahlenbereich(0-x) */
            int zufall;     /* temporäre Zufallszahl */
            int *array;     /* das Array */
            int i;          /* Index für for-Schleife*/
    
            printf("gebe den maximalwert ein: ");
            scanf("%i", &x);
            /* Speicher vormerken
             Platz für x+1 (+1 weil die Indizies bei 0 anfangen) *Integer-Werte 
             */
            array = malloc((x+1)*sizeof(int));
            /* Array initialisieren () */
            for(i=0; i<=x; ++i) {
                    array[i] = 0;
            }
            /* Zufallszahl im Bereich von 0 bis x ermitteln.
             * Die Zufallszahl ist der Schlüssel des Arrays und als zugeordneter Wert die Anzahl
             * Anzahl um 1 erhöhen
             */
            for(i=0; i<20; ++i) {
                    zufall = (int)(((double)rand() / RAND_MAX) * (x+1 - 0) + 0);
                    array[zufall] = array[zufall] + 1;
            }
            /* Array ausgeben */
            for(i=0; i<=x; ++i) {
                    printf("%u kam %u mal vor\n", i, array[i]);
            }
    }
    


  • am ende noch ein

    free(array);
    

    und gut is 👍


Anmelden zum Antworten