PI Annaeherung durch Dartpfeile Hilfe
-
Meine void funktion funktioniert nicht?! der counter c wird nicht verändert? Er bleibt 0.
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#include <conio.h>struct wurf{
double x,y;
int io;
};wurf wuerfeln( wurf );
wurf inCircle( wurf );
void count (int *c, wurf);int main ()
{
float pi;
wurf w;
int c, i, n;
c=0;printf("Programm zur PI-Annaeherung\n");
printf("Wieviele Wuerfe wollen Sie taetigen?\n");
scanf("%i", &n);for(i=0; i<n; i++){
w=wuerfeln(w);
w=inCircle(w);
count(&c, w);
}pi=9.0*(c/n);
printf("Die Pi-Annaeherung durch die Dartscheibe ergibt fuer PI: %f\n",pi);getch();
return 0;
}wurf wuerfeln(wurf w){
w.x=(rand()/RAND_MAX)*3-1.5;
w.y=(rand()/RAND_MAX)*3-1.5;
return w;
}wurf inCircle(wurf w){
if(w.x*w.x+w.y*w.y<=1)
w.io=1;
else w.io=0;
return w; }void count(int *c,wurf w){
int p;
p=*c;
if(w.io==1)
p=p+1;
c=&p;
}
-
p ist eine Stack-Variable in count. Ein Zeiger auf p gilt nach der Rückkehr von count nicht, also darfst Du nicht c die Adresse von p zuzuweisen, sondern:
(*c)=p;
-
Klingt logisch,hab i probiert funktioniert aber dennoch nicht? Die Anfangszuweisung von *c auf P ist doch in ordnung,o nicht?
-
Ja, das ist sie. Aber am Ende mußt du auch wieder "*c=p" anwenden, um das Ergebnis zurückzuliefern.
Spezi L schrieb:
Ein Zeiger auf p gilt nach der Rückkehr von count nicht, also darfst Du nicht c die Adresse von p zuzuweisen
Noch schlimmer - auch c ist nur eine lokale Variable, damit ist die Zuweisung an c letztendlich wirkungslos

-
Hmm wie krieg ich nun die Schleife hin,die mir in main c erhöht?
-
in count ist c ein Parameter der auf int zeigt, deshalb sollte es gehen.
#include <iostream> using namespace std; void count(int *counter) { ++(*counter); } void count2(int *counter) { int p = *counter; ++p; (*counter) = p; } int main() { int c = 0; count(&c); count(&c); cout << c << endl; count2(&c); count2(&c); cout << c << endl; cin.get(); }
-
Vielen Dank,dann werde ich das mal probieren.Dachte es geht allerdings kürzer.
Gruß rees
-
Schon mal was von Referenzen gehört?
void count(int& c, const wurf&); void count(int& c, const wurf& w) { c += w.io; }Daran kannst du sehen, dass deine count Funktion momentan vollkommen unnütz ist, denn du kann in main auch gleich
c += w.io;schreiben.