Blutiger Anfänger



  • Ist das schwer für so einen Anfänger -.-

    Wie bekomme ich denn so eine "solange" Schleife?
    Geht das mit einer do-while Schleife?



  • Bei der do-while Schleife steht die Abbruchbedingung am Ende der Schleife, d.h. die Schleife wird mindestens einmal durchlaufen.
    Bei der while-Schleife steht die Abbruchbedingung am Anfanf der Schleife, d.h. die Schleife wird evtl. gar nicht durchlaufen.
    Und eine for-Schleife ist nur eine kürzer Schreibweise für eine while-Schleife.

    for(i=0;i<n;i++)  machwas;
    

    ist gleich mit

    i=0
    while(i<n) {
     machwas;
     i++;
    }
    

    Bei diesem Proplem ist es egal da 0 % 10 == 0.



  • Kann ich vielleicht einen Tipp bekommen, also in Programmiersprache??

    Ich grübel echt schon die ganze Zeit, und komme nicht weiter, echt frustrieren -.-



  • Schreibst du dann in deine Hausaufgabe auch dieses Forum als Quelle?
    Was für eine Schule ist das denn und welche Klasse?



  • Es ist keine Schule, sondern eine Uni.
    Aber wenn man noch nie mit solchen Sachen konfrontiert wurde, ist es
    schwer gleich von Anhieb eben mal so ein Programm zu schreiben.



  • Hallo Leute,

    ich möchte mich mal vergewissern, ob ich den folgenden Quellcode richtig deute:

    double absolut(double x)
    {
    	if (x<0) x=-1*x;
    	return x;
    }
    
    double sinus(double x, double g)
    {
    	double s=x,y=x*x*x/6;
    	int i=0;
    	while (absolut(y)>=g) {
    		s = s - y;
    		y = (-1)*y*x*x/((4+i)*(5+i));
    		i = i+2;
    	}
    	return s;
    }
    

    Im ersten Schritt wird doch die Variable absolut einer von x abgängigen Funktion zugeordnet.
    Wenn x kleiner als 0 sein sollte, dann wird x als negativ zugewiesen, so dass am Ende wieder ein positiver Wert entsteht.
    Wie deute ich das return x richtig?

    Als nächstes wird sinus einer von x und g abhängigen Funktion zugeornet.
    s und y sind dann dezimalzahlen (wegen double) und s ist dann x und y ist x^3/6.
    Bei i handelt es sich um eine ganze Zahl, die gleich 0 ist.
    Jetzt kommt eine while-Schleife, die solange ausgeführt wird, wie die Gleichung absolut(y)>=g gilt. (g wird später als eine dezimalzahl angegeben)
    Aber warum steht da nun ein (y)?

    Desweiteren verstehe ich nicht ganz, was in der while-Schleife ganz genau passiert.

    Kann mir da jemand weiterhelfen? Darüber wäre ich sehr dankbar!



  • Wie deute ich das return x richtig?

    Der aktuelle Wert von x wird zurückgegeben.
    Wenn x >= 0 ist bleibt x so wie es ist.
    Wenn x < 0 ist ... weißt du schon.

    Der Sinus wird näherungsweise über eine Reihe berechnet. Siehe http://de.wikipedia.org/wiki/Sinus#Definition_als_Taylorreihe
    g ist die Ungenauigkeit, die du angeben mußt. Wenn die Änderung kleiner als die Ungenauigkeit ist kann abgebrochen werden.

    Aber warum steht da nun ein (y)?

    Das y ist ein Element der Reihe, und wird mit dem 2. Reihenwert vorbesetzt.



  • Danke für Deine Hilfe!!!

    Okay jetzt ist mir da ein klarer. Dennoch habe ich hierzu noch eine Frage, die auch zum Programm gehört:

    double PeriodenCheck(double x)
    {
    	while (x>(2*pi)) {
    		x=x-2*pi;
    	}
    	if (x>pi) x=pi-x;
    }
    

    Das bedeutet ja, solange x größer 2pi ist, dann wird x als x-2pi ausgegeben.
    Falls x größer pi ist, dann ist x=pi-x.

    Wozu dient das ganze? Ist dies notwendig um sich der Reihe von Sinus anzunähern?



  • Ich denke ich habe das Vorgehen so in etwa verstanden.

    Also wenn wir zB als x die Zahl 9 wählen, ist diese ja größer als 2pi. Deswegen wird das neue x dann als 9-2pi ausgegeben.

    Nun ist diese Zahl aber nicht mehr größer als 2pi, aber dennoch größer als pi.
    So wird am Ende x als pi-(9-pi) herausgegeben.

    Aber dann habe ich ja ein negatives Ergebnis. Aber am Anfang wurde ja definiert, falls x negativ ist, wird es in positiv umgewandelt.

    Aber warum das ganze mit 2 pi? Meine Erklärung wäre jetzt dazu, dass Sinus 2pi-periodisch ist.
    Aber brauche ich das für eine Annäherung für diese Potenzreihe/Tayloreihe?



  • Das ist einfach nur um den Wertebereich und damit Aufwand einzuschränken. Wie du schon festgestellt hast, ist der Sinus periodisch. Also berechnen wir die Werte für eine Periode und übernehmen den die Ergebnisse. Das sollte aber eigentlich alles im Unterricht behandelt worden sein. Ich meine jetzt den Matheunterricht in der Schule. Ich weiß aus sicherer Quelle, dass die Winkelfunktionen in der 10. Klasse behandelt werden. Bei uns war das zumindest damals so und angeblich soll ja der Stoff immer schwerer werden.
    Ich will damit nicht deine Mathekenntnisse angreifen, sondern nur darauf hinweisen, dass das Problem fehl am Platz ist. Wenn du Fragen zur Mathematik hast, bist du in einem Matheforum besser aufgehoben.



  • Dir Reihe ist im Bereich von -π bis +π definiert. (http://de.wikipedia.org/wiki/Bogenma%C3%9F)

    Diese Schleife

    while (x>(2*pi)) {
            x=x-2*pi;
        }
    

    zieht sooft 2π ab bis x < 2π ist. (⚠ mehrmals wenns sein muss)

    Das if (x>pi) x=pi-x; dient dazu den Bereich auf -π bis +π zu bringen.

    Wenn du dir die Sinuskurve anschaust wirst du feststellen das sin(x) = -sin(-x) ist. Und sin(π+x) = -sin(x) ist.



  • Okay habe es verstanden! Tausend Dank!!!



  • Hallo allerseits, ich habe mal wieder eine Frage.
    Ich hab folgendes Programmausschnitt:

    short figur[8][8] = {
    {2,1,1,1,0,0,0,0},
    {1,2,1,0,1,1,0,0},
    {1,1,2,1,1,1,1,0},
    {1,0,1,2,0,1,1,0},
    {0,1,1,0,2,1,0,1},
    {0,1,1,1,1,2,1,1},
    {0,0,1,1,0,1,2,1},
    {0,0,0,0,1,1,1,2}
    };
    
    void perm(int anz, int array[], int start);
    void ausgabe(int anz, int array[]);
    int test(int anz, int array[]);
    
    int main() {
    	const int MAX = 8;
    	int loesung[MAX];
    	int i;
    	printf("Folgende Loesungen treffen zu:\n");
    	for (i = 0; i < MAX; i++) {
    		loesung[i] = i;
    	}
    	perm(MAX, loesung, 0);
    }
    

    In diesem Programm, sollen alle Zahlenkombinationen von 0-7 ausgegeben werden, wobei die Zahlenabstände größer als 1 sein sollen. Jetzt ist meine Frage dazu, inwiefern mir die 8x8 Matrix dabei weiterhilft.

    Kann mir da jemand weiter helfen?


Anmelden zum Antworten