array über return schicken
-
Geht nicht.
Du musst der Funktion das Array schon mitgeben.void rechnung(float *feld, int a, int b);
Du hast auch noch arge Probleme mit den Datentypen.
-
mr. c schrieb:
In C werden Arrays i.d.R. als Zeiger an Funktionen übergeben, guckst du:
void rechnung(int a,int b, float* feld){ feld[0]=a*b; feld[1]=(float)a/b; // Mindestens eine Variable nach float konvertieren, sonst Integerdivision! } int main(void){ int a,b; float feld[2]; // Du möchtest das Ergebnis einer Divison speichern, wähle einen passenden Datentyp! printf("Bitte Geben Sie 2 Zahlen ein: "); if ( 2 == scanf("%i %i",&a,&b)) // Leerzeichen im Formatstring lassen! { rechnung(a,b,feld); // An dieser Zeile mangelt es nun nicht mehr. printf("%f %f\n", feld[0], feld[1]); } else { printf ("%s\n", "Eingabefehler!"); } return 0; }
woher kriegt denn das printf die informationen über das feld???
-
DirkB schrieb:
Geht nicht.
Geht wohl.
Wenn man das Array in eine Struktur einbettet.
Macht man aber nicht, erst recht nicht bei großen Arrays, um unnötige Kopiervorgänge zu vermeiden.
-
coon schrieb:
woher kriegt denn das printf die informationen über das feld???
Vorher wird doch die Funktion aufgerufen und das Feld wird an die Funktion übergeben.
-
also wird feld[] in der funktion rechnung direkt überschrieben?
-
Bingo!
-
feld[2];
-
VIELEN DANK
THEMA ABGESCHLOSSEN
-
hier noch was mit struct
struct rechnung { float div; float mult; }; struct rechnung rechnung(int a,int b) { struct rechnung erg; erg.mult=a*b; erg.div=(float)a/b; return erg; }
-
Also ich habe ganz gut verstanden was Ihr versucht hab mir zu vermitteln...
Habe das jetzt versucht anzuwenden und bin da auf Schwierigkeiten gestoßen... Vielleicht könntet Ihr mir auch hier weiterhelfen...Ich kriege einfach einen komplett falschen wert für das feld und das mit dem typ hatte ich mir auch anders vorgestellt...#include<stdio.h> #include<stdlib.h> #include<math.h> float rechnung(int,int,int,int); int main(){ int x1,x2,y1,y2,zaehler; float feld[3]; char const typ[]={"Euklidische" "Manhattan" "Maximum"};//FUNKTIONIERT AUCH NICHT //typ[0]="Euklidische"; //typ[1]="Manhattan"; //typ[2]="Maximum"; printf("Geben Sie 2 Punkte in Form : x1,y1,x2,y2 ein: "); scanf("%i,%i,%i,%i",&x1,&y1,&x2,&y2); printf("%i-%i-%i-%i",x1,y1,x2,y2); rechnung(x1,y1,x2,y2); for(zaehler=0;zaehler<=2;zaehler++){ printf("\nDer %c Abstand betraegt %i",typ[zaehler],feld[zaehler]); } return 0; } float rechnung(int x1,int y1,int x2, int y2){ float erg_euk,erg_man,erg_max,feld[3]; erg_euk=sqrt(float((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))); //erg_euk=sqrt(pow((x1-x2),2)/pow((y1-y2),2)); //erg_man=max(1,2); if(abs(x1-x2)>abs(y1-y2)){ erg_max=abs(x1-x2); } else{ erg_max=abs(y1-y2); } erg_man=abs(y1-y2)+abs(x1-x2); feld[0]=erg_euk; feld[1]=erg_man; feld[2]=erg_max; //printf("\n%f,%f",erg_euk,feld[0]); }
-
coon schrieb:
Also ich habe ganz gut verstanden was Ihr versucht hab mir zu vermitteln...
Du wendest aber keinen der Vorschläge an.
coon schrieb:
Habe das jetzt versucht anzuwenden und bin da auf Schwierigkeiten gestoßen... Vielleicht könntet Ihr mir auch hier weiterhelfen...Ich kriege einfach einen komplett falschen wert für das feld und das mit dem typ hatte ich mir auch anders vorgestellt...
Wo übergibst du da
feld
anrechnung
, bzw. wo ist der Rückgabewert?Wegen "//FUNKTIONIERT AUCH NICHT" mach mal
char const *typ[]={"Euklidische" "Manhattan" "Maximum"};// Achte auf den *
-
Auf
coon schrieb:
also wird feld[] in der funktion rechnung direkt überschrieben?
wurde mit
mr. c schrieb:
Bingo!
geantwortet.
Und das wurde hoffnungslos missverstanden.
Coon, schau dir noch mal Gültigkeitsbereiche von Variablennamen an!
-
erstmal sorry für die später antwort....
ich habe jetzt versuch´t das feld an die rechnung zu geben und auch den typ als array anzugeben....ich bekomme vom compiler jedoch bei dem typ wieder nichts und des feld scheint auch noch nicht übergeben worden zu sein:#include<stdio.h> #include<stdlib.h> #include<math.h> float rechnung(int,int,int,int,float*); int main(){ int x1,x2,y1,y2,zaehler; float feld[3]; char const *typ[]={"Euklidische" "Manhattan" "Maximum"};//FUNKTIONIERT AUCH NICHT //typ[0]="Euklidische"; //typ[1]="Manhattan"; //typ[2]="Maximum"; printf("Geben Sie 2 Punkte in Form : x1,y1,x2,y2 ein: "); scanf("%i,%i,%i,%i",&x1,&y1,&x2,&y2); printf("%i-%i-%i-%i",x1,y1,x2,y2); rechnung(x1,y1,x2,y2,feld); for(zaehler=0;zaehler<=2;zaehler++){ printf("\nDer %c Abstand betraegt %i",typ[zaehler],feld[zaehler]); } return 0; } float rechnung(int x1,int y1,int x2, int y2,float* feld){ float erg_euk,erg_man,erg_max; erg_euk=sqrt(float((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))); //erg_euk=sqrt(pow((x1-x2),2)/pow((y1-y2),2)); //erg_man=max(1,2); if(abs(x1-x2)>abs(y1-y2)){ erg_max=abs(x1-x2); } else{ erg_max=abs(y1-y2); } erg_man=abs(y1-y2)+abs(x1-x2); feld[0]=erg_euk; feld[1]=erg_man; feld[2]=erg_max; //printf("\n%f,%f",erg_euk,feld[0]); }
-
coon schrieb:
char const *typ[]={"Euklidische" "Manhattan" "Maximum"};//FUNKTIONIERT AUCH NICHT
Komma fehlt, Komma fehlt:
char* const typ[]={"Euklidische", "Manhattan", "Maximum"};
printf("\nDer %c Abstand betraegt %i",typ[zaehler],feld[zaehler]);
%c gibt einen einzelnen Buchstaben aus, Du brauchst %s. %i gibt ein Integer aus, in Feld[] sind aber Float-Werte. So gehts erst einmal:
printf("\nDer %s Abstand betraegt %f",typ[zaehler],feld[zaehler]);
Weitere Fehler werden Dir in Form von Compiler-Warnungen (GCC) oder -Fehler (MSVC u.a.) ausgegeben.
viele grüße
ralph
-
ok danke das programm funktioniert nun
ich dachte das ich das feld faölsch übergeben... aber das es so ein trivialer datentypfehler ist hätte ich nicht gedacht:xmas1: