Seite 1 von 2

Was ist ein "new float"?

Verfasst: Sa Jan 02, 2010 12:52 am
von IndigoGott

Code: Alles auswählen

float * calcF(int a, int b, float c)	// Parameter a und b als ganze Zahlen, c als reelle Zahl
{
	float * arr = new float[601];
	int i = 0;							// i = Position
	for (float x = -3; x <= 3; x = x+0.01)	// 601 Werte
	{
		float f = ((float)a / (float)b) * (float)sin(c * x) + (float)sin(x);	// Ergebnis f
		arr[i] = f;						// f auf arr
		i = i + 1;						// i = Position
	}
	return arr;
}

int findGlobalMin (float * array2)		// Funktion gibt ganzzahligen wert zurueck, arbeitet aber mit float
{
	float min = array2[0];			// Anfang
	int i = 0;							// i = Position
	for (int a = 1; a < 601; a++)
	{
		if (min < array2[a])		// Wenn das zuzeitige min kleiner als array2,
		{
			min = array2[a];		// dann wird min array2 (der Minimumwert)
			i = a;					// und position array2 (Position der Minimumwert)
		}
	}
	return i;
Das ist ein Teil von unserem gesamten Programm, dass wir zu 3 gemacht haben und das muss ich nachher nochmals beschreiben. Aber ich verstehe es nicht so ganz, da ich einfach nicht alles kann bzw. gemacht habe.

float * arr = new float[601];

Meine erste Frage ist: was ist eigentlich ein "new float" und wie es arbeitet?? :shock:
Ansonsten lass ich euch kommentieren, ob so meine Beschreibung ok ist, da ich nachher noch demonstrieren muss^^


PS. ICH WUENSCHE EUCH ALLE EIN SEHR MEGA GUTES NEUES JAHR, GESUNDHEIT UND VIEL ERFOLG AUF ALL EUREN WEITEREN LEBENSWEGEN UND VIEL GLUECK FUER DIE ZUKUNFT :) ;)

Re: Was ist ein "new float"?

Verfasst: Sa Jan 02, 2010 1:05 am
von nufan
IndigoGott hat geschrieben:Meine erste Frage ist: was ist eigentlich ein "new float" und wie es arbeitet?? :shock:
Mittels "new" wird in C++ Speicher reserviert. Die Zahl zwischen den eckigen Klammern gibt die Anzahl der Elemente an.

Code: Alles auswählen

float * arr = new float[601];
wäre in C

Code: Alles auswählen

float * arr = (float *) malloc (sizeof (float) * 601);
Es ruft außerdem den Konstruktor von Objekten auf. In diesem Fall ist das aber egal, da es nur ein float ist. Man sollte es aber nicht mit "malloc" und "free" vermischen.
IndigoGott hat geschrieben:Ansonsten lass ich euch kommentieren, ob so meine Beschreibung ok ist, da ich nachher noch demonstrieren muss^^
Ich persönlich kommentiere lieber in Englisch, ist aber wohl eher Geschmackssache.
Aufgrund der Variablenbenennung (Arr!!) schließe ich mal, dass die anderen Programmierer Softwarepiraten sind ;)

Re: Was ist ein "new float"?

Verfasst: Sa Jan 02, 2010 12:16 pm
von Xin
IndigoGott hat geschrieben:

Code: Alles auswählen

float * calcF(int a, int b, float c)	// Parameter a und b als ganze Zahlen, c als reelle Zahl
{
	float * arr = new float[601];
	int i = 0;							// i = Position     ## Warum heißt es dann nicht position oder pos, wenn ihr es kommentieren müsst?
	for (float x = -3; x <= 3; x = x+0.01)	// 601 Werte   // <- guter Kommentar
	{
		float f = ((float)a / (float)b) * (float)sin(c * x) + (float)sin(x);	// Ergebnis f   // unnötiger kommentar
		arr[i] = f;						// f auf arr       // total unnötig
		i = i + 1;						// i = Position    // siehe oben.
	}
	return arr;
}

int findGlobalMin (float * array2)		// Funktion gibt ganzzahligen wert zurueck, arbeitet aber mit float  ## überflüssig, steht ja schon im Code.
{
	float min = array2[0];			// AnfangNet   ## Hier verstehe ich den Kommentar weniger als den Code? (An error within the code is worth two in the documentation)
	int i = 0;							// i = Position   ## siehe oben
	for (int a = 1; a < 601; a++)
	{
		if (min < array2[a])		// Wenn das zuzeitige min kleiner als array2,    ## das steht auch im Code ^^
		{
			min = array2[a];		// dann wird min array2 (der Minimumwert)     ## überflüssig
			i = a;					// und position array2 (Position der Minimumwert)    ## überflüssig
		}
	}
	return i;
Kommentiert überschaubarer. Wenn ihr das wiederholt, was im Code steht, dann ist das keine Information. Kommentiert blockweise, was ihr tut.

Code: Alles auswählen

/**
*** Erzeugt ein Array mit 601 Werten der Funktion f(x) = a/b * sin( cx ) + sin( x ) zur Beschleunigung von (Warum wurde das geschrieben)
*** \param a Bedetung von a
*** \param b Bedetung von b
*** \param c Bedetung von c
*** \returns Array 
**/
float * calcF(int a, int b, float c)
{
// Initialisierung

	float * arr = new float[601];
	int i = 0;

	float aValue = (float) a;
	float bValue = (float) b;

// Erzeugung des Arrays 

	for (float x = -3; x <= 3; x = x+0.01), ++i)	// 601 Werte
		arr[i] = (aValue / bValue ) * (float)sin(c * x) + (float)sin(x);

	return arr;
}

/**
*** Sucht den kleinsten Wert eines 601 Elemente großen float-Arrays heraus und gibt den Index zurück
*** (Wozu wurde es geschrieben/wozuwirds eingesetzt?)
*** \param array2 das zu durchsuchende Array
*** \returns Index des kleinsten Wertes
int findGlobalMin (float * array2)
{
// Initialisierung

	float min = array2[0];
	int i = 0;

// Suche des kleinsten Arraywertes

	for (int a = 1; a < 601; a++)
		if (min < array2[a])		
		{
			min = array2[a];	
			i = a;
		}

	return i;
}
Ein Kommentar ist nicht die Wiederholung von dem, was da steht, sondern eine Zugabe: Du beschreibst, warum das da steht. Du unterteilst Code-Blöcke in Abschnitte, so dass man bei Änderungen sich leichter zurecht findet. Die Wiederholung von Information, die bereits im Code steht ist zum einen Redundant und wenn es nicht redundant ist, dann ist eines davon falsch. Und zum anderen macht es den Kommentar wertlos, also liest man Kommentare nicht mehr und übersieht so auch eventuell wertvolle Kommentare.

Einzelne Zeilen kommentierst Du nur, wenn sie kompliziert erscheinen.

Die Funktionskommentare von mir sind Doxygen-Kompatibel. Doxygen generiert Dokumentation für Entwickler in HTML, PDF usw.
IndigoGott hat geschrieben:Ansonsten lass ich euch kommentieren, ob so meine Beschreibung ok ist, da ich nachher noch demonstrieren muss^^
Welche Beschreibung. Das war ein Protokoll, was getan wird - es wurde nicht beschrieben, warum oder wie etwas getan wurde.

Auch Dir ein frohes Neues. :-)

Re: Was ist ein "new float"?

Verfasst: So Jan 03, 2010 9:09 am
von IndigoGott
Kann jemand noch vielleicht diesen Ausdruck bitte erklaeren:

Code: Alles auswählen

int main(int argc, char** argv)
:) :)

Re: Was ist ein "new float"?

Verfasst: So Jan 03, 2010 10:35 am
von Xin
IndigoGott hat geschrieben:Kann jemand noch vielleicht diesen Ausdruck bitte erklaeren:

Code: Alles auswählen

int main(int argc, char** argv)
Abba sischa datt, aber dafür haben wir ja das Wiki.

Re: Was ist ein "new float"?

Verfasst: So Jan 03, 2010 12:28 pm
von IndigoGott
Oh stimmt!!
Ich dachte, dass int main(int argc, char** argv) und int main(int argc, char* argv[]) unterschiedlich sind^^ Trozdem habe ich noch Probleme und brauche noch die Hilfe :roll:

Code: Alles auswählen

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

float * calcF(int a, int b, float c)		// Parameter a und b als ganze Zahlen, c als reelle Zahl
{

	float * arr = new float[601];			// Mittels "new" wird in C++ Speicher reserviert. Die Zahl zwischen den eckigen Klammern gibt die Anzahl der Elemente an
	int i = 0;								// i = Position
	for (float x = -3; x <= 3; x = x+0.01)	// 601 Werte
	{
		float f = ((float)a / (float)b) * (float)sin(c * x) + (float)sin(x);	// Ergebnis f
		arr[i] = f;							// f auf arr
		i = i + 1;							// i = Position
	}
	return arr;

}

int findGlobalMin (float * array2)		// Funktion gibt ganzzahligen Wert zurueck, arbeitet aber mit float
{

	float min = array2[0];				// Anfang
	int i = 0;							// i = Position
	for (int a = 1; a < 601; a++)
	{
		if (min < array2[a])			// Wenn das zuzeitige min kleiner als array2,
		{
			min = array2[a];			// dann wird min array2 (der Minimumwert)
			i = a;						// und Position array2 (Position des Minimumwertes)
		}
	}
	return i;

}
int findGlobalMax (float * array2)		// Funktion gibt ganzzahligen Wert zurueck, abertet aber mit folat
{

	float max = array2[0];			// Anfang
	int i = 0;							// i = Position
	for (int a = 1; a < 601; a++)
	{
		if (max > array2[a])			// Wenn das zuzeitige max groeszer als arry2,
		{
			max = array2[a];			// dann wird max array2 (der Maximumwert)
			i = a;						// und Position array2	(Position des Maximumwertes)
		}
	}
	return i;

}


int main(int argc, char** argv) 
{

	int a, b;
	float c;

	printf("- Eingabe dreier Parameter\n  ------------------------\n");
	printf("Parameter a (ganze Zahl): ");
	scanf("%d", &a);
	printf("Parameter b (ganze Zahl): ");
	scanf("%d", &b);
	printf("Parameter c: \n");
	scanf("%f", &c);

	float * array2 = calcF(a, b, c);

	printf("a = %d, b = %d, c = %f\n", a ,b, c);

	printf("Minimum bei %d\n", findGlobalMin(array2));
	printf("Maximum bei %d\n", findGlobalMax(array2));


	//open drawing window, window size will be 640x480
	if (cairoUtils_initialize() == CAIROUTILS_RESULT_INITCAIROWINDOW_SUCCESS)
	{
		cairoUtils_clear(0,0,0);	//black blackground

		//Zeichenen der y-Achse
		cairoUtils_drawLine(20,10,20,420,1,0,0,1);		//Linie y-Achse
		cairoUtils_drawLine(20,10,15,20,1,0,0,1);		//Linker Teil Pfeil y-Achse
		cairoUtils_drawLine(20,10,25,20,1,0,0,1);		//Rechter Teil Pfeil y-Achse
		cairoUtils_drawText(2,20,12,"Y",1,0,0,1);		//Beschriftung y-Achse

		//Zeichnen der x-Achse	
		cairoUtils_drawLine(11,410,620,410,0,0,1,1);	//Linie x-Achse
		cairoUtils_drawLine(610,405,620,410,0,0,1,1);	//Oberer Teil Pfeil x-Achse
		cairoUtils_drawLine(610,415,620,410,0,0,1,1);	//Unterer Teil Pfeil x-Achse
		cairoUtils_drawText(600,425,12,"X",0,0,1,1);	//Beschriftung X-Achse

		float max = array2[findGlobalMax(array2)], min = array2[findGlobalMin(array2)];
		float b = max - min;

		for(int i = 1; i < 600; i++)
		{
			int y_wert				=	(((array2[i] - min) * 400) / b);
			int y_wert_naechster	=	(((array2[i + 1] - min) * 400) / b);
			cairoUtils_drawLine(20 + i, 10 + y_wert, 22 + i, 10 + y_wert_naechster, 0, 1, 0, 1);
		}

		//Zecihnen der MAX/MIN-Kästchen
		cairoUtils_drawRect(findGlobalMax(array2)+15, (((array2[findGlobalMax(array2)] - array2[findGlobalMin(array2)]) * 400) / b) + 5,10,10,1,1,0,1);
		cairoUtils_drawRect(findGlobalMin(array2)+15,5, 10,10, 1,1,0, 1);

		fflush(stdin);

		printf("Press ENTER to bestaetigen.\n");
		//wait for user pressing ENTER
		getchar();

		//close drawing window
		cairoUtils_close();
		return 0;
	}
	else
	{
		fprintf(stderr, "Function cairoUtils_initialize returned error.\n");
		return -1;
	}
}
Das ist das ganze Programm und ich hab noch Fragen dazu und zwar das Ganze hier:

Code: Alles auswählen

		float max = array2[findGlobalMax(array2)], min = array2[findGlobalMin(array2)];
		float b = max - min;

		for(int i = 1; i < 600; i++)
		{
			int y_wert				=	(((array2[i] - min) * 400) / b);
			int y_wert_naechster	=	(((array2[i + 1] - min) * 400) / b);
			cairoUtils_drawLine(20 + i, 10 + y_wert, 22 + i, 10 + y_wert_naechster, 0, 1, 0, 1);
		}
habe ich nicht verstanden, wozu max - min muss?

und das hier "float max = array2[findGlobalMax(array2)], min = array2[findGlobalMin(array2)];" habe ich noch nie gesehen was heisst das denn, neben array2 gibt es [] und wiederum gibt es noch (array2) in []??

Code: Alles auswählen

		for(int i = 1; i < 600; i++)
		{
			int y_wert				=	(((array2[i] - min) * 400) / b);
			int y_wert_naechster	=	(((array2[i + 1] - min) * 400) / b);
			cairoUtils_drawLine(20 + i, 10 + y_wert, 22 + i, 10 + y_wert_naechster, 0, 1, 0, 1);
		}
Was versteht man unter dem Ganzen? und wo kommt die 400 her?
:shock: :shock: :? :?: :?:

vielen vielen Danke

Arnont

Re: Was ist ein "new float"?

Verfasst: So Jan 03, 2010 12:51 pm
von stampuhh
und das hier "float max = array2[findGlobalMax(array2)], min = array2[findGlobalMin(array2)];" habe ich noch nie gesehen was heisst das denn, neben array2 gibt es [] und wiederum gibt es noch (array2) in []??
array2 ist ein Array aus float-Werten. int findGlobalMax(float * array) ist eine Funktion die einen int-Wert liefert und einen float-Zeiger (in diesem Fall ein array) erwartet. Sie liefert den Integer (/die Stelle) wo im Array der größte Wert zu finden ist.

float max = array2[findGlobalMax(array2)] bedeutet also, dass max den größten Wert aus dem Array array2 zugewiesen bekommt. Min min sieht es ähnlich aus. Nur halt statt dem größten den kleinsten Wert ;)

Zu dem restlichen kann ich jetzt so nicht viel sagen. Die 400 kommen vermutlich daher weil mit der Auflösung 640x480 gearbeitet wird und es mit 400 noch im Rahmen liegt :D

gruß stampuhh

Re: Was ist ein "new float"?

Verfasst: Sa Jan 09, 2010 9:53 am
von IndigoGott
Erstmal vielen Dank fuer eure Hilfe!
Ich hab schon am Montag die Testatklausur vom PT geschrieben und hoffe, dass ich bestanden habe.
Aber am Montag kommen Anatomie und Physiologie >.<

MfG

Re: Was ist ein "new float"?

Verfasst: Sa Jan 09, 2010 10:07 am
von Xin
IndigoGott hat geschrieben:Erstmal vielen Dank fuer eure Hilfe!
Ich hab schon am Montag die Testatklausur vom PT geschrieben und hoffe, dass ich bestanden habe.
Programmierst Du ausschließlich für die Schule oder aus Spaß an der Sache?
IndigoGott hat geschrieben:Aber am Montag kommen Anatomie und Physiologie >.<
Dann weiß ich ja schon, was Du dieses Wochenende tust ^^

Re: Was ist ein "new float"?

Verfasst: Sa Jan 09, 2010 9:33 pm
von IndigoGott
Xin hat geschrieben:
IndigoGott hat geschrieben:Erstmal vielen Dank fuer eure Hilfe!
Ich hab schon am Montag die Testatklausur vom PT geschrieben und hoffe, dass ich bestanden habe.
Programmierst Du ausschließlich für die Schule oder aus Spaß an der Sache?
Nun programmiere ich nicht nur fuer die Schule, sondern hab ich auch Spasz dabei an der Sache^^ ;)