# Mit Hilfe von Schleifen e-Funktion malen ... WIE



## brownsuga (4. Juni 2005)

Hi!

ich schreibe next week einen Test in c++ und kann nur Eingabe, Ausgabe und If.. else.. anwenden. Thema dieses mal Test ist...
Schleifen!
Könnt Ihr mir eine Anleitung geben wie man an so eine Aufgabenstellung rangeht?Ich hab den Dev-C++ compiler.

Aufgabe ist folgende:

einen C-Programm entwickeln um mit Hilfe von Schleifen eine e-Funktion auf dem bildschrim zu malen. Dabei verläuft die x-Achse vertikal, die y-Achse horizontal. Die Anzahl der Punkte entspricht y, die Punktzeile endet mit einem Sternchen.
Der Anwender soll den Anfangs- und Endwert und die Abstufung von x sowie die Konstanten a und b eingeben können.
Beispiel: Anfangswert x=0, Endwert x=5, Abstufung 1,5 a=50 und b=20

Formel:

y= a*exp(-x/b)

Beispiel:

x________y
-------------------------------------------------------------------------------------------------------------
0.0_____50.00................................................................................*
1.5_____46.39............................................................................*
3.0_____43.04.......................................................................*
4.5_____39.93...................................................................*

Wäre super wenn Ihr mir helfen würdet. ich muss es bis Montag verstanden haben!
ganz lieben Dank!


----------



## Tobias K. (4. Juni 2005)

moin


Was genau ist denn das Problem?


```
#include <iostream>
#include <math.h>

using namespace std;

int main()
{
	double y = 0, a=50, b=20;

	for(double x = 0; x <= 5; x+=1.5)
	{
		y = a * exp(-x/b);

		cout<< x << "\t" << y <<"\t";

		for(int i=0; i<y; i++)
			cout<<".";

		cout<< "*" << endl;
	}

	return 0;
}
```
So, das wars im großen und ganzen schon. Jetzt noch ein bsichen Textformatierung, halt das es so aussieht wie du es haben möchtest.


mfg
umbrasaxum


----------



## brownsuga (4. Juni 2005)

mein code:



```
#include <stdio.h>
#include <math.h>
int main ()
{
    double x,y,xx,xz,a,b
    printf("Bitte a eingeben:");
    scanf("%lf",&a);
    printf("Bitte b eingeben:");
    scanf("%lf",&b);
    printf("Bitte xx eingeben:");
    scanf("%lf",&xx);
    printf("Bitte xz eingeben:");
    scanf("%lf",&xz);
    for (x=0;x<=5;x=x+1.5)
    {
        x=x+1.5;
        printf("\n);
    }
    for (y=50;y<=39.93;y=y-3.61)
    {
        y=a*exp(-x/b);
        printf("\n");
        printf("%.......*lf" "%........*lf\n",x,y);
    }        
fflush(stdin);
getchar();
return 0;
}
```

wisst ihr warum das nicht funktioniert?


----------



## Tobias K. (4. Juni 2005)

moin



```
for (x=0;x<=5;x=x+1.5)
    {
        x=x+1.5;
        printf("\n);
    }
```
Du weisst x zweimal Werte zu, die Schleife dürfte nur 2 mal durchlaufen, also das zweite x=x+1.5; raus!


```
for (y=50;y<=39.93;y=y-3.61)
    {
        y=a*exp(-x/b);
        printf("\n");
        printf("%.......*lf" "%........*lf\n",x,y);
    }
```
Du weisst y den Wert 50 zu, sodass die Abbruchbedingung sofort erfüllt ist, und die Schleife wohl garnicht läuft, außerdem machst du den gleich Fehler wie in der ersten Schleife.

Die Punkte werde so natürlich auch nciht angezeigt.

Und warum schreibst du nciht genau was nciht geht?
Und warum schreibst du das du in C++ programmieren willst, wenn es dann doch C sein soll?!


mfg
umbrasaxum


----------



## brownsuga (4. Juni 2005)

ich wusste garnicht dass das jetzt C-programmierung ist. Aber ich benutze den Bloodshed dev c++. ist es dann nicht auch c++ programmierung?

ausserdem...

ich weiss eben nicht genau wie ich die aufgabenstellung lösen soll.
wie kann ich z.B. eine x-Achse "malen lassen"? Mit schleifen natürlich.
ich hab bis jetzt 1000 bücher gewälzt nichts in der richtung gefunden.

Danke auf jeden fall schonmal!


----------



## Tobias K. (4. Juni 2005)

moin


Also, ein C++ Compiler macht noch lange keine C++ programmierung.
Hast du meinen Code mal getestet? Der macht so ziemlich das was du oben als Aufgabenstellung geschrieben hast.

Willst du mit Sternen zeichnen, oder willst du einen richtig schönen Graphen zeichnen?
Wie du das machst kann ich dir zeigen, aber dann wird dein Lehrer dir nciht mehr glauben das das von dir ist.


mfg
umbrasaxum


----------



## brownsuga (4. Juni 2005)

Mit sternen soll der Graph gezeichnet werden. Der schöne Graph kann ja wohl kaum von mir stammen. Das weiß mein Prof 
Der erste Code hat irgendwie nicht funktioniert. Die Verbesserungsvorschläge mache ich gleich und schaue mal.

Thanx alot!


----------



## Tobias K. (4. Juni 2005)

moin



Was funktioniert denn nicht? Eine etwas genauere Fehlerbeschreibung wäre sehr von Vorteil!
Aber hier nochmal in C:

```
#include <stdio.h>
#include <math.h>


int main()
{
	double y = 0, a=50, b=20;

	for(double x = 0; x <= 5; x+=1.5)
	{
		y = a * exp(-x/b);

		printf("%.2f\t%.2f\t", x, y);

		for(int i=0; i<y; i++)
			printf(".");

		printf("*\n");
	}

	return 0;
}
```


mfg
umbrasaxum


----------



## brownsuga (4. Juni 2005)

der Code leuchtet mir ein.. aber ich den code nach compilieren nicht ausführen. der DOS-Fenster schliesst sich sofort. ich versuchs mit Microsoft Visual ++
leider weiss nicht was bei dem ersten nicht funktioniert hat. 
Thanx


----------



## Tobias K. (4. Juni 2005)

moin


Dann mach doch am Ende vor dem return 0

```
fflush(stdin);
getchar();
```
Das das dafür ist solltest du doch wissen, da du es selber benutzt hast!


mfg
umbrasaxum


----------



## brownsuga (4. Juni 2005)

Ja stimmt! Jetzt funktionierts! ich glaube ich hab verstanden wie man schleifen verwendet... 
aber zuletzt noch:
warum 

printf("%.2f\t%.2f\t", x, y);

was bedeutet %.2f\t


----------



## Tobias K. (4. Juni 2005)

moin


\t erzeugt einen Tab, also 5 Leerzeichen, kann aber variiren.
%f zum darstellen von fließkomme Zahlen.
.2 damit er auf 2 Stellen nach dem Komma genau anzeigt.


mfg
umbrasaxum


----------

