Was gibt dieses Programm aus?
-
#include <stdio.h>
int compute_something (int *feld, int laenge)
{
int i;
int result = 0;for(i=0; i<laenge; i+=1)
result += feld[i]*feld[i];
return (result);
}
void main()
{
int numbers[6] = {5, 1, 4, 9, 11, 9};printf(" Ergebnis von compute_something(): %i \n", compute_something(numbers, 4));
}
hallo jungs,
es geht um das obere Programm.
Kann mir bitte einer erklären warum es den Wert 123 ausliefert.
Ehrlich gesagt verstehe ich unter diesen Zeilen gar nicht.
int compute_something (int *feld, int laenge)
result += feld[i]*feld[i];
Danke
-
#include <stdio.h> int compute_something (int *feld, int laenge) { int i; int result = 0; for(i=0; i<laenge; i+=1) result += feld[i]*feld[i]; return (result); } void main() { int numbers[6] = {5, 1, 4, 9, 11, 9}; printf(" Ergebnis von compute_something(): %i \n", compute_something(numbers, 4)); }
int compute_something (int *feld, int laenge)
leitet eine Funktionsdefinition ein.
Es wird eine Funktion (Unterprogrogramm) definiert, die als Parameter einen Zeiger auf int und ein int erwartet und einen int zurück gibt.
result += feld[i]*feld[i];
ist das gleiche wie
result = result + feld[i]*feld[i];
Mit feld[i] greifstdu auf das Element i des Feldes feld zu
-
Nun ja...Das Programm berechnet folgendes:
5*5+1*1+4*4+9*9 und das ist 123.
Ich will Dir nich zu nahe tretten, aber ich weiß nicht wie weit Deine C-Kenntnisse sind *natürlich: gehen,ohh man, wie blöd :-)* , deshalb kann ich es Dir, glaube ich, nicht erklären.
-
es ist eigentlich ganz leicht.
Du übergibst an deine Funktion ein Array mit Zahlen.
Deine Funktion geht das Array durch. Dabei quadriert sie jede Zahl im Array und addiert sie auf eine gesammtsumme, welche dann zurück geliefert wird...
-
danke an alle, die auf dieses thema geantwortet haben.
meine C-Kenntnisse, ob man dies Kentnisse nennen darf ist eine andere frage, sind einfach sehr schlecht
int compute_something (int *feld, int laenge) was ist denn mit diesem "Dereferenzierungsoperator" heißt das so? am *feld
danach müsste es doch, wenn die zahlen quadriert (AxA) = A^2 und anschließend addiert werden, stehen
result += feld[i]*feld[i];
so
result += feld[i]**feld[i]; ???????????????
-
Albes22 schrieb:
meine C-Kenntnisse sind sind einfach sehr schlecht
Du hast gar keine.
Albes22 schrieb:
int compute_something (int *feld, int laenge) was denn mit diesem "stern" * bzw mal (x) zeichen
Das besagt, das feld ein Zeiger auf ein int ist. Das kann auch ein int-Feld sein.
Albes22 schrieb:
result += feld[i]*feld[i]; nur ein mal wenn die zahlen quadriert werden müsste es doch
result += feld[i]**feld[i]; alo 2 mal ** stehen oder?Nein, denn hier ist es ein Mal-Zeichen (zur Multiplikation).
-
Du hast ihn falsch verstanden... er möchte wissen, warum er das nicht derefferenzieren muss...
Das muss er nicht, weil es nie refferenziert wurde... jedenfalls nicht wirklich... ich kann nicht erklären... das kannst du sicher besser
-
Sqwan schrieb:
Du hast ihn falsch verstanden... er möchte wissen, warum er das nicht derefferenzieren muss...
Dann hätte er ja 3 * machen müssen (*feld[i]**feld[i])
Ich bin mir nicht ganz sicher ob er nicht ** mit Potenz verwechselt und das alles Durcheinander würfelt mit Halbwissen aus anderen Programmiersprachen.Und auf die Wörter wie "derefferenzieren" habe ich darum bewusst verzichtet.
-
Oh hast recht. Dann fehlt ein *.
Jetzt bin ich auch etwas verwirrt ^^"derefferenzieren" war ja auch für dich, nicht für ihn