Meanvalue in C



  • Hier ein kleines Beispiel welches das Konzept erklären sollte, ohne deine Hausaufgaben zu machen 🙂

    void func (int *bar) { // bar ist ein Zeiger auf ein int
        *bar = 2; // * heisst: Dereferenziere den Zeiger bar
    }
    
    int main (void) {
        int foo = 1;
        func (&foo); // Wir übergeben nicht foo, sondern die Adresse (Zeiger auf) von foo
        printf ("%d\n", foo);
        return 0;
    }
    


  • Die 2 was du Meanvalue übergibst bestimmt wie oft deine for-schleife durchlaufen wird. Wenn du also 2 übergibst wird immer nur feld_noten[0], feld_noten[1] und feld_noten[2] abgerufen. Wenn du also n Werte in deinem Array hast musst du Meanvalue als anzahl n übergeben.

    Bei Zählergesteuerten Schleifen die ein Array durchlaufen muss die Laufvariable immer einen Wert kleiner sein als die Arraygröße ist.
    Somit muss ein Schleifenkopf so aussehen

    for (int i = 0; i < anzahl; i++)
    


  • Ok, Top. Bin etwas weiter gekommen. So sieht mein Code jetzt aus:

    #include <stdio.h>
    #include<stdlib.h>
    
    typedef enum { false, true } bool;
    
    bool Meanvalue (int anzahl, int feld_noten[100], int *ausgabe);
    
    int main(void){
    	int feld_noten[100] = {5,2,3,4};
    	//for (int i = 0; i <= 5; i++){
    		//scanf("%d", &feld_noten[i]);} 
    	int ergebnis = 0;
    	Meanvalue(2, feld_noten, &ergebnis); 
    	printf ("%d", ergebnis);
    
    	return 0;
    }
    
    bool Meanvalue(int anzahl, int feld_noten[100], int *ausgabe){
    	if (anzahl <= 0){
    		return false;}
    	int puffer = 0;
    	int puffer1 = 0;
    	for (int i = 0; i < anzahl; i++){
    		puffer = feld_noten[i] * 100; 
    		puffer1 = puffer + puffer1;}
    	*ausgabe = puffer1 / anzahl;
    	return true;		
    }
    

    Das letzte Problem ist, dass aus dem Array feld_noten nur die ersten beiden Werte an die Funktion übergeben werden. Also in diesem Beispiel nur 5 und 2. Wie kann ich das gesamte Feld an die Funktion übergeben?



  • Ok, Top. Bin etwas weiter gekommen. So sieht mein Code jetzt aus:

    #include <stdio.h>
    #include<stdlib.h>
    
    typedef enum { false, true } bool;
    
    bool Meanvalue (int anzahl, int feld_noten[100], int *ausgabe);
    
    int main(void){
    	int feld_noten[100] = {5,2,3,4};
    	//for (int i = 0; i <= 5; i++){
    		//scanf("%d", &feld_noten[i]);} 
    	int ergebnis = 0;
    	Meanvalue(2, feld_noten, &ergebnis); 
    	printf ("%d", ergebnis);
    
    	return 0;
    }
    
    bool Meanvalue(int anzahl, int feld_noten[100], int *ausgabe){
    	if (anzahl <= 0){
    		return false;}
    	int puffer = 0;
    	int puffer1 = 0;
    	for (int i = 0; i < anzahl; i++){
    		puffer = feld_noten[i] * 100; 
    		puffer1 = puffer + puffer1;}
    	*ausgabe = puffer1 / anzahl;
    	return true;		
    }
    

    Das letzte Problem ist, dass aus dem Array feld_noten nur die ersten beiden Werte an die Funktion übergeben werden. Also in diesem Beispiel nur 5 und 2. Wie kann ich das gesamte Feld an die Funktion übergeben?



  • Steht doch schon da:

    axels. schrieb:

    Die 2 was du Meanvalue übergibst bestimmt wie oft deine for-schleife durchlaufen wird. Wenn du also 2 übergibst wird immer nur feld_noten[0], feld_noten[1] und feld_noten[2] abgerufen. Wenn du also n Werte in deinem Array hast musst du Meanvalue als anzahl n übergeben.



  • Hallo,

    wie wäre es denn mit: IDEOne ?



  • Also der Code sieht jetzt so aus. Trotzdem werden nur die ersten zwei Werte übergeben. Danach bricht die For-Schleife ab.

    #include <stdio.h>
    #include<stdlib.h>
    
    typedef enum { false, true } bool;
    
    bool Meanvalue (int anzahl, int feld_noten[100], int *ausgabe);
    
    int main(void){
    	int feld_noten[100];
    	int ergebnis = 0;
    	for (int i = 0; i <= 5; i++){
    		scanf("%d", &feld_noten[i]);
    		Meanvalue(i, feld_noten[i], &ergebnis);}  
    	printf ("%d", ergebnis);
    
    	return 0;
    }
    
    bool Meanvalue(int anzahl, int feld_noten[100], int *ausgabe){
    	if (anzahl <= 0){
    		return false;}
    	int puffer = 0;
    	int puffer1 = 0;
    	for (int i = 0; i < anzahl; i++){
    		puffer = feld_noten[i] * 100; 
    		puffer1 = puffer + puffer1;}
    	*ausgabe = puffer1 / anzahl;
    	return true;		
    }
    


  • Was wäre eigentlich so schlimm daran gewesen, einfach die richtige Länge des Arrays als Parameter zu übergeben?

    int feld_noten[100] = {5,2,3,4}; // 4 Elemente im Array
    Meanvalue(4, feld_noten, &ergebnis); // Länge = 4
    


  • So jetzt funktioniert es. Vielen Dank für die Hilfe. Hier ist meine Lösung:

    #include <stdio.h>
    #include<stdlib.h>
    
    typedef enum { false, true } bool;
    
    bool Meanvalue (int anzahl, int feld_noten[100], int *ausgabe);
    
    int main(void){
    	int feld_noten[100];
    	int anzahl = 0;
    	int ergebnis = 0;
    	for (int i = 0; i <= 5; i++){
    		scanf("%d", &feld_noten[i]);
    		anzahl =  i;}
    	Meanvalue(anzahl, feld_noten, &ergebnis);  
    	printf ("%d", ergebnis);
    
    	return 0;
    }
    
    bool Meanvalue(int anzahl, int feld_noten[100], int *ausgabe){
    	if (anzahl <= 0){
    		return false;}
    	int puffer = 0;
    	int puffer1 = 0;
    	for (int i = 0; i < anzahl; i++){
    		puffer = feld_noten[i] * 100; 
    		puffer1 = puffer + puffer1;}
    	*ausgabe = puffer1 / anzahl;
    	return true;		
    }
    


  • Leider hast du nicht alle Aufgabenteile erfüllt.


Anmelden zum Antworten