array an funktion übergeben
-
Hallo, ich habe ein Programm geschrieben das ein Array mit Zufallszahlen füllt. Bei diesen Zahlen will ich nun mit einer Funktion (InRange) prüfen ob sie in einem bestimmten Zahlenbereich liegen. Ich schaffe es nur leider nicht das Array oder den Arraywert an die Funktion richtig zu übergeben.
Das ist die Fehlermeldung:
error #2140: Type error in argument 1 to 'InRange'; expected 'double *' but found 'double'.[cpp]#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>//#define array 99;
int InRange (double test[],double n,double a, double b, int w)
{n=test[w];
if((a<=n) && (n<=b))
{ return(1);}
if((a>n) || (b<n)){return(0); }
else { return(-1); }
}int main (void){
double n=0;
double a=100.20;
double b=200.20;
int i=0;
int k=0;
double m=0;
double test[99]={0};srand(time(0));
//scanf("untere grenze a eingeben: %2.2lf\n",&a);
//scanf("obere grenze b eingeben: %2.2lf\n",&b);for( i = 0; i <= 99; i++ )
{
k=0 + rand()%(255-0+1);
m=0 + rand()%(99-0+1);m=m/100;
test[i] = k+m;
}printf("k = %i\n",k);
printf("m = %2.2lf\n",m);for ( int w = 0; w <= 99; w++)
{char* liegt;
//int j=InRange(test[w],n,a,b,w);
if(InRange(test[],n,a,b,w)==1){
liegt = "liegt im Bereich";}
else{
liegt = "liegt nicht im Bereich";};printf("%i. Zahl = %2.2lf %s\n", w, test[w],liegt);
//printf("%d\n",j);
printf("%2.2lf\n",test[w]);
}system("pause");}[/cpp]
Ich will der Funktion den double-Wert aus dem jeweiligen Array-Feld übergeben. Er will den double nur nicht nehmen. Wenn jemand dazu ne Idee hat, wäre ich sehr froh.
M.f.G jonas
-
Yay, ein Namensverwandter.
#include <stdlib.h> #include <stdio.h> #include <math.h> #include <time.h> //#define array 99; int InRange (double test[],double n,double a, double b, int w) { n=test[w]; if((a<=n) && (n<=b)) { return(1);} if((a>n) || (b<n)){return(0); } else { return(-1); } } int main (void){ double n=0; double a=100.20; double b=200.20; int i=0; int k=0; double m=0; double test[99]={0}; srand(time(0)); //scanf("untere grenze a eingeben: %2.2lf\n",&a); //scanf("obere grenze b eingeben: %2.2lf\n",&b); for( i = 0; i <= 99; i++ ) { k=0 + rand()%(255-0+1); m=0 + rand()%(99-0+1); m=m/100; test[i] = k+m; } printf("k = %i\n",k); printf("m = %2.2lf\n",m); for ( int w = 0; w < 99; w++) //!!!! NIE <= 99 { char* liegt; //int j=InRange(test[w],n,a,b,w); if(InRange(test,n,a,b,w)==1) //********Da liegt dein Problem. Wenn du ein Array übergibst, dann immer ohne [] { liegt = "liegt im Bereich";} else{ liegt = "liegt nicht im Bereich";}; printf("%i. Zahl = %2.2lf %s\n", w, test[w],liegt); //printf("%d\n",j); printf("%2.2lf\n",test[w]); } system("pause"); //********unportabel, da gibt es bessere Lösungen }
Wobei ich sagen muss, dass dein Lösungsansatz irgendwie etwas komisch ist. Warum übergibst du nicht einfach nur den Wert, von dem du testen möchtest, ob er in einem Bereich liegt.
Alsoif(InRange(test[w], a, b))
Die Funtkion dann halt einfach abändern:
int InRange(double wert, double min, double max) { return (wert > min && wert < max); }
-
Gibt es einen Fehler während der Laufzeit oder einen Compilerfehler?
Wie äußerst sich der Fehler?Beim Aufruf von InRange haben die [] bei test nichts zu suchen. -> Compilerfehler
Du greifst außerhalb der Arraygrenzen auf test zu.
double test[99];
bedeutet, dass das test 99 Element hat, beginnt bei 0 und endet bei 98.
Durch diew <= 99;
kommt w aber bis 99.Dass die cpp-Tags nicht richtig angezeigt werden, liegt an einem Fehler, wenn gleichzeitig noch andere Formatierungen innerhalb des Code genutzt wird. Bei dir ist es die Fettschrift.
-
Warum übergibst du übehaupt den Parameter n an InRange?
Warum ist das keine lokale Variable?
-
Habe die eckigen Klammern bei den Argumenten rausgenommen und es läuft.
Wäre da gestern fast drann verzweifelt. Vielen Dank.
-
Jo hast recht, das mit dem n ist in der Form unnötig. Das werde ich noch anpassen.
-
jonas87 schrieb:
Habe die eckigen Klammern bei den Argumenten rausgenommen und es läuft.
Wäre da gestern fast drann verzweifelt. Vielen Dank.Das ist doch ein Compilerfehler. Der sagt doch, dass er mit den Klammern Probleme hat.