Was ist ein "new float"?

Schnelle objektorientierte, kompilierende Programmiersprache.
Benutzeravatar
IndigoGott
Beiträge: 29
Registriert: So Dez 06, 2009 1:19 am
Wohnort: Stralsund
Kontaktdaten:

Was ist ein "new float"?

Beitrag von IndigoGott » Sa Jan 02, 2010 12:52 am

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 :) ;)
IndigoGott
MagieFamilie

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Was ist ein "new float"?

Beitrag von nufan » Sa Jan 02, 2010 1:05 am

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 ;)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Was ist ein "new float"?

Beitrag von Xin » Sa Jan 02, 2010 12:16 pm

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. :-)
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
IndigoGott
Beiträge: 29
Registriert: So Dez 06, 2009 1:19 am
Wohnort: Stralsund
Kontaktdaten:

Re: Was ist ein "new float"?

Beitrag von IndigoGott » So Jan 03, 2010 9:09 am

Kann jemand noch vielleicht diesen Ausdruck bitte erklaeren:

Code: Alles auswählen

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

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Was ist ein "new float"?

Beitrag von Xin » So Jan 03, 2010 10:35 am

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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
IndigoGott
Beiträge: 29
Registriert: So Dez 06, 2009 1:19 am
Wohnort: Stralsund
Kontaktdaten:

Re: Was ist ein "new float"?

Beitrag von IndigoGott » So Jan 03, 2010 12:28 pm

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
IndigoGott
MagieFamilie

Benutzeravatar
stampuhh
Beiträge: 211
Registriert: Sa Nov 07, 2009 4:39 pm
Wohnort: Paderborn

Re: Was ist ein "new float"?

Beitrag von stampuhh » So Jan 03, 2010 12:51 pm

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
NachDenkSeiten.de

Benutzeravatar
IndigoGott
Beiträge: 29
Registriert: So Dez 06, 2009 1:19 am
Wohnort: Stralsund
Kontaktdaten:

Re: Was ist ein "new float"?

Beitrag von IndigoGott » Sa Jan 09, 2010 9:53 am

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
IndigoGott
MagieFamilie

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8862
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Was ist ein "new float"?

Beitrag von Xin » Sa Jan 09, 2010 10:07 am

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 ^^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
IndigoGott
Beiträge: 29
Registriert: So Dez 06, 2009 1:19 am
Wohnort: Stralsund
Kontaktdaten:

Re: Was ist ein "new float"?

Beitrag von IndigoGott » Sa Jan 09, 2010 9:33 pm

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^^ ;)
IndigoGott
MagieFamilie

Antworten