Array mit for Schleife befüllen Hilfeeee



  • Dieser Beitrag wurde gelöscht!

  • Mod

    Deine Fehler ist, dass du nicht zwischen dem Index und dem Wert trennst.

    array[i] = i;
    

    Das weist dem Element an Stelle i den Wert i zu. Aber du möchtest beispielsweise, dass an der Stelle 0 der wert 5 steht.

    Deine Mittelwertberechnung ist auch falsch, da du die Summen in der gleichen Variablen speicherst.



  • @SeppJ
    Also

    	for(int i=5; i <= 99; i++) 
    	{
    		array1[i] = i + 5;
    		array2[i] = array1[i*2];	//befüllen von array1 und array2
    	}
    
    

    Meinst du das so also mein jetziger i Wert bekommt dann einen neuen i Wert +5?



  • @SeppJ

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	float array1[20];		//soll bei 5 beginnen und immer 5 dazuzählen
    	float array2[20]; 		//array1 * 2 
    	float summe = 0, summe1 = 0;
    	float anzahl = 20;
    	int i;
    
    
    	for(int i=5; i <= 99; i++) 
    	{
    		array1[i] = i + 5;
    		array2[i] = array1[i*2];	//befüllen von array1 und array2
    	}
    
    	for(i=0; i != anzahl; i++)		//Summe von befüllten array1 und 2 Werten
    	{
    		summe += array1[i];
    		summe1 += array2[i];
    	}
    	
    	printf("array1: Summe: %.2f  Mittelwert: %.2f\n", summe, summe/anzahl);		//Ausgabe
    	printf("array2: Summe: %.2f  Mittelwert: %.2f\n", summe1, summe1/anzahl);
    
    	return 0;
    }
    

    Ich habe es jz so umgeschrieben, dass ich eine zweite Summe definiere. Das war ein sehr grober Fehler von mir aber funktioniert noch immer nicht.



  • @HIitsme sagte in Array mit for Schleife befüllen Hilfeeee:

    for(int i=5; i <= 99; i++) 
     	{
     		array1[i] = i + 5;
    

    Sei i == 80. array1[80] scheint nicht wirklich gut zu sein.



  • @HIitsme das war so gemeint, dass du mit array[0] = 5, array[1] = 10, array[2] =15 usw. an die erste, zweite, dritte stelle schreibst.

    als erstes musst du dir merken, dass wenn du array[20] deklarierst, du auf array[0] bis array[19] zugreifen kannst. alles andere ist falsch. wenn du also einen index i in einer schleife verwendest, musst du darauf achten, dass i innerhalb dieser bereiche bleibt.
    wenn du dann werte ins array schreiben möchtest, musst du dir eine variable anlegen, die diese werte aufnimmt und diese werte erst einmal ausrechnen und zuweisen.


  • Mod

    Ahh, ja. summe1 ist die Summer der Elemente von array2. Da besteht überhaupt keine Chance, dass so etwas irgendwann einmal zu Problemen führen wird…



  • @Wade1234 Achso mein Wert 99 war zu groß da mein array1 nur auf 20 Stellen zugreifen kann und ich aber schon längst über 20 bin nämlich 99.



  • #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	float array1[20];		//soll bei 5 beginnen und immer 5 dazuzählen
    	float array2[20]; 		//array1 * 2 
    	float summe = 0, summe1 = 0;
    	float anzahl = 20;
    	
    	
    	for(int i = 5; i <= 19; i++) 
    	{
    		array1[i] = i + 5;
    		array2[i] = array1[i*2];	//befüllen von array1 und array2
    	}
    
    	for(int i = 0; i != anzahl; i++)		//Summe von befüllten array1 und 2 Werten
    	{
    		summe += array1[i];
    		summe1 += array2[i];
    	}
    	
    	printf("array1: Summe: %.2f  Mittelwert: %.2f\n", summe, summe/anzahl);		//Ausgabe
    	printf("array2: Summe: %.2f  Mittelwert: %.2f\n", summe1, summe1/anzahl);
    
    	return 0;
    }
    
    Jz bekomme ich schon einen Wert und zwar Summe = 255 aber das ist einfach zu groß oder?
    

  • Mod

    Entweder nimmst du mal richtig Abstand von deinem Code und denkst über jede Zeile und jedes Zeichen gründlich nach, oder du fängst noch mal mit einer komplett leeren Datei neu an. Derzeit verschlimmbesserst du nur deine vorherigen Fehler, indem du einzelne Teile deines Programms korrigierst, wodurch du aber wieder anderswo was kaputt machst, weil dir der Gesamtüberblick fehlt.

    Die tiefere Lektion ist natürlich, dass man Programmstrukturen vermeiden sollte, bei denen man den Gesamtüberblick braucht, um irgendwo etwas ändern zu können. Das sollte bei 30 Zeilen zwar nicht zu schwierig sein, aber man sieht deutlich, dass dir dieser Überblick fehlt. Man kann das auch bei 30 Zeilen schaffen, dass man weniger Kopplung zwischen Programmteilen hat, aber das führt an dieser Stelle vermutlich zu weit.



  • @HIitsme sagte in Array mit for Schleife befüllen Hilfeeee:

    Jz bekomme ich schon einen Wert und zwar Summe = 255 aber das ist einfach zu groß oder?

    Nein. Zu klein. Viel zu klein.

    Du kannst ja mal folgende Zeilen bei Zeile 17 einfügen:

        for(int i = 0; i <anzahl; i++)		
    	printf("array1[%f] = %3d;  array2[%f] = %3d\n", i, array1[i], i, array2[i]);


  • @DirkB sagte in Array mit for Schleife befüllen Hilfeeee:

    @HIitsme sagte in Array mit for Schleife befüllen Hilfeeee:
    Jz bekomme ich schon einen Wert und zwar Summe = 255 aber das ist einfach zu groß oder?

    Nein. Zu klein. Viel zu klein.

    Falls du den kleinen Gauss kennst und das Prinzip verstanden hast, kannst du das auch selber schnell im Kopf ausrechnen.



  • @SeppJ

       for(int i=0, j=5; i<19 ; ++i , j += 5) 
       {
       	array1[i]=j;
       }
       
       for(int i = 0; i <= 19; i++) 
       {
       	array2[i] = array1[i]*2;	//befüllen von array1 und array2
       }
    ```bin auf das gekommen derzeitig glaube bin auf dem richtigem Weg.


  • @HIitsme sagte in Array mit for Schleife befüllen Hilfeeee:

    bin auf das gekommen derzeitig glaube bin auf dem richtigem Weg.

    Warum zwei Schleifen?
    Warum geht die eine bis < 19, die andere bis <= 19 ?

    Das mit demj hochzählen ist ok, da du so nur Addition hast. Man kann aber auch das j auch aus i berechnen.



  • @DirkB

    for(int i=0, j=5; i<19 ; i++ , j += 5) 
       {
       	array1[i]=j;
       	array2[i] = j*2;
       }
    ```Du meinst das so oder Dirk dass ich beide in einen zusammenfassen kann.


  • @HIitsme sagte in Array mit for Schleife befüllen Hilfeeee:

    Du meinst das so oder Dirk dass ich beide in einen zusammenfassen kann.

    Ja klar.
    Aber du zählst nur von 0 bis 18.

    Hättest du aber mit meiner Ausgabeschleife herausgefunden 🙂

    Wofür ist eigentlich die Variable anzahl da?



  • @DirkB

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
    	float array1[20];		//soll bei 5 beginnen und immer 5 dazuzählen
    	float array2[20]; 		//array1 * 2 
    	float summe = 0, summe1 = 0;
    	float anzahl = 20;
    	
    	
    	for(int i=0, j=5; i<19 ; i++ , j += 5) 		
    	{										
    		array1[i]=j;
    		array2[i] = j*2;
    	}
    	
    	for(int i = 0; i < anzahl; i++)		//Summe von befüllten array1 und array2 Werten
    	{
    		summe += array1[i];
    		summe1 += array2[i];
    	}
    	
    	printf("array1: Summe: %.2f  Mittelwert: %.2f\n", summe, summe/anzahl);		//Ausgabe
    	printf("array2: Summe: %.2f  Mittelwert: %.2f\n", summe1, summe1/anzahl);
    
    	return 0;
    }
    
    

    den habe ich für den Mittelwert genommen.


  • Mod

    @HIitsme sagte in Array mit for Schleife befüllen Hilfeeee:

    @SeppJ

     for(int i=0, j=5; i<19 ; ++i , j += 5) 
     {
     	array1[i]=j;
     }
     
     for(int i = 0; i <= 19; i++) 
     {
     	array2[i] = array1[i]*2;	//befüllen von array1 und array2
     }
    ```bin auf das gekommen derzeitig glaube bin auf dem richtigem Weg.
    

    Wieso adressierst du dies an mich, wenn du gerade genau nicht das gemacht hast, was ich dir vorgeschlagen habe? Hier geht nämlich genau das schief, wovor ich dich gewarnt habe.

    Das gilt auch für die danach gezeigten Codes. Das ist immer noch Herumpfuschen, um deinen ersten, kaputten Versuch noch irgendwie zu reparieren. Dabei wärst du wahrscheinlich schon lange fertig, wenn du es einfach noch einmal sauber von vorne gemacht hättest.



  • @HIitsme sagte in Array mit for Schleife befüllen Hilfeeee:

    den habe ich für den Mittelwert genommen.

    Na dann.

    Aber du möchtest doch beim aufsummieren genau dieselben Felder haben, wie beim füllen.
    Warum nimmst du dann andere Werte?

    Für die eine Summe muss übrigens 1050 raus kommen.



  • @HIitsme sagte in Array mit for Schleife befüllen Hilfeeee:

    @Wade1234 Achso mein Wert 99 war zu groß da mein array1 nur auf 20 Stellen zugreifen kann und ich aber schon längst über 20 bin nämlich 99.

    also mal was grundsätzliches: wenn du in einer schleife ein array komplett (in diesem fall mit den werten vom index) befüllten willst, sieht das so aus:

    #define ARRAYGROESSE 100 //großbuchstaben zur verdeutlichung, dass es eine konstante ist! 
                             //vorteil von konstanten: du musst sie nur an einer stelle (nämlich ganz oben) ändern 
                             //und vermeidest so schwer zu findende fehler.
    
    int i;
    int array[ARRAYGROESSE];
    
    for(i = 0; i < ARRAYGROESSE; i++) //durchläuft das array in diesem fall von 0 - 99
                                      //alles danach führt wieder zu schwer auffindbaren fehlern
    {
         array[i] = i; //füllt das array mit den werten 0 ... 99 bzw. 0 ... (ARRAYGROESSE - 1)
    }
    


  • @Wade1234 Danke das war wirklich sehr hilfreich habe nie arrays von dieser Seite mit Konstanten betrachtet.


Anmelden zum Antworten