Meanvalue in C
-
Erstmal vielen Dank für die Antworten. Ja, das mit dem int macht schon wenig Sinn. Das mit dem Call-by-Value kann ich etwas wenig anfangen. Ich will ehrlich seien. Ich hatte dieses Semester viel damit zutun die Nachprüfungen nachzuholen und im Mai hatte ich noch einen Unfall gehabt. Dadurch war ich 1Monat krankgeschrieben. Aber egal, soll jetzt keine Ausrede seien. Ich will hier auch nicht Schmarotzermäßiges oder so.
Mit den Antworten kann ich aber etwas wenig anfangen. Für eine Erklärungen oder ein Beispiel oder die Korrektur von meinem Code wäre ich aber sehr sehr dankbar.
-
Nee, ich habe immer noch zwei Probleme. Ich kann an meine Meanvalue-Funktion maximal drei Werte aus dem Array übergeben. Also wenn im Array 10 Werte sind, werden nur die ersten drei übergeben.
Und ich habe nach wie vor kein Plan wie ich den Wert des ausgabe von der Main abfragen soll. Bitte um Hilfe.
-
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 duMeanvalue
alsanzahl
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 aussehenfor (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 duMeanvalue
alsanzahl
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.