Brauche Hilfe bei Schleife



  • Hallo zusammen, ich bräuchte mal eure Hilfe, also wir sollen für die Schule folgendes programm programmieren:

    Entwickeln Sie ein Programm, das den Ausdruck (Hoch 2, Wurzel aus 2)berechnet
    Hinweise zur programmierung:

    Erzeugen Sie eine Folge von Positiven Zahlen, deren Quadrate sich der Zahl 2 immer mehr nähren. Führe Sie zu diesem Zweck folgende Anweisungen durch:

    1. a=1; b=2
    2. c=(a+b)/2
    3. Wenn c*c>2 dann b=c
      sonst a=c
    4. weiter bei 1.

    So uns wurde zusätzlich gesagt das wir als schleife die for schleife verwenden sollen, nur leider weis ich nicht wie ich das programm umsätzen soll, ich sitz bereits seit 2 Tagen dran, bekomm das aber nie raus.

    Danke schonmal für eure Hilfe.



  • zeig mal was du in den 2 tagen gemacht hast



  • Ich empfehle dir ein Grundlagenbuch, bevor du mit solchen "schweren" Aufgaben anfängst.



  • Das ist ne aufgabe die wir als Hausaufgabe von der Schule aufhaben.

    #include <stdio.h>
    
    main()
    {
    	int a=1, b=2, c;
    	printf("\n\tProgramm zur Berechnung von Wurzel 2");
    
    		for(c=(a+b)/2; c*c>2; c=c*c);
    		{
    		b=c;
    		}
    		printf("\n\n");
    		printf("\tWurzel 2= %i",b);
    }
    

    Ich hab mir das in etwa so gedacht, nur leider weis ich net, wie ich das jetzt mit der For schleife machen soll.
    Wir haben gerade erst damit angefangen.



  • Sehr "kreative" Formatierung.
    Welchen Sinn haben die geschweiften Klammern nach der for-Schleife?



  • OK, dann fang nochmal von vorne an:

    1. Erste Lektion: Wie funktionieren Schleifen?
    2. Zweite Lektion: Wie funktioniert eine Verzweigung? (wenn/dann/sonst)


  • Bei der Aufgabe macht eine for-schleife nur in sofern sinn, dass man die Anzahl der der Durchgänge begrenzen kann. So wie es oben angegeben ist, ist es ja eine Endlosschleife. Du kannst es also nicht endlos oft machen, sondern nur eine bestimmte Anzahl von durchgängen mit der for-schleife machen.

    Das "4) weiter bei 1." macht aber sowieso keinen Sinn, weil dann ja immer das gleiche gerechnet wird.



  • Ja das ist leider so eine scheiss aufgabe aus der schule die sich unser Lehrer ausgedacht hat, umm uns schüler zu ärgern.



  • Nero91 schrieb:

    1. a=1; b=2

    Der Teil kommt vor die Schleife, um die beteiligten Variablen zu initialisieren

    1. c=(a+b)/2
    2. Wenn c*c>2 dann b=c
      sonst a=c

    Der Teil kommt als Anweisung in den Schleifenrumpf

    1. weiter bei 1.

    Das sollte wohl eher "weiter bei 2." heißen - und stellt den Schleifenkopf dar. Außerdem solltest du dir noch ein Abbruchkriterium überlegen, mit dem du die Schleife verlassen kannst.

    (PS: Für die Aufgabe würde ich eher eine do-while-Schleife verwenden)



  • oehm, int als Datentyp ist vielleicht nicht ratsam, nimm lieber double a=1.0, b=2.0, c=0.0



  • evt. so?=

    #include <iostream>
    
    double radical(double value, std::size_t approx)
    {
    	if (value == 0.0 || value == 1.0) return value;
    
    	double a = 1.0, b = 2.0;
    	for (; approx > 0; --approx)
    	{
    		double c = ((a + b) / 2.0);
    		if ((c * c) > 2.0)
    			b = c;
    		else 
    			a = c;
    	}
    	return a;
    }
    
    int main()
    {
    	std::cout	<< "Wuzel² Berechnung V0.1\n"
    				<< "Zahl: " << std::flush;
    	double value = 0.0;
    	std::cin >> value;
    	std::cout	<< "Annäherungen: " << std::flush;
    	std::size_t approx = 1;
    	std::cin >> approx;
    	std::cout << radical(value, approx) << std::endl;
    }
    

    ... ist allerdings nen komischer Algo ^^



  • achja ... power sollt ihr dann bestimmt nachher auch schreiben 😉

    namespace math
    {
    	template <typename T>
    	T power(T const& value, std::size_t expo)
    	{	return value * power<T>(value, expo - 1);	}
    };
    

    ... ist nicht die beste Implementierung ... aber sollte gehen 😉


Anmelden zum Antworten