Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
--- Praktische Informatik (http://www.informatikerboard.de/board/board.php?boardid=6)
---- Softwaretechnik (http://www.informatikerboard.de/board/board.php?boardid=18)
----- c# cannot convert double to double (http://www.informatikerboard.de/board/thread.php?threadid=2699)


Geschrieben von D0RK am 21.12.2015 um 13:38:

  c# cannot convert double to double

Meine Frage:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
#include <stdio.h>
#include <math.h>

void polar_zu_kartesisch(double *u, double *v, double r, double phi)
{

	*u=r*cos(phi);
	*v=r*sin(phi);

}

int main()
{
	printf("Beispielwerte dieser Funktion r=2.75, phi=45°");
	double array[4]={0.00,0.00,2.75,45.0};
	double *p=array;
	polar_zu_kartesisch(p, p+1, p+2, p+3 );
	printf("Die Ergebnisse sind: x=%d, y=%d", p+1,p+2);
}


Meine Ideen:
Hi, ich verstehe nicht wie ich den Fehler in c# "cannot convert double to double" beheben kann. Wir sollen den oberen Funktionskopf verwenden. Ich gehe davon aus, dass der Fehler auftritt, weil ich 2x double deklariere? Biite um Hilfe.



Geschrieben von D0RK am 21.12.2015 um 14:01:

  RE: c# cannot convert double to double

Hab' schon herausbekommen. LOL Hammer



Geschrieben von D0RK am 21.12.2015 um 14:21:

  RE: c# cannot convert double to double

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
#include <stdio.h>
#include <math.h>

void polar_zu_kartesisch(double *u, double *v, double r, double phi)
{

	*u=r*cos(phi);
	*v=r*sin(phi);

}

int main()
{
	printf("Beispielwerte dieser Funktion r=2.84, phi=pi/4 \n");
	double array[4]={0.00,0.00,2.84,0.78539};
	double *p=array;
	polar_zu_kartesisch(p, p+1, *(p+2), *(p+3) );
	printf("Die Ergebnisse sind: x=%f, y=%f", array[0],array[1]);
}

So funktioniert das ganze. Falls jemand sehen will wie ich's gelöst hatte.



Geschrieben von eulerscheZahl am 21.12.2015 um 14:58:

 

Das ist aber C und nicht C#.



Geschrieben von D0RK am 21.12.2015 um 15:20:

 

Hoppala, hab mich vertan, ja natürlich ist das C smile . Wo ich schon mal hier bin. Hab nen neues Problem:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
#include <stdio.h>

int main()
{
	printf("Bitte gebe nun 10 Zahlen ein: \n");
	float array[10];
	for(int i=0;i<10;i++)
	{
		scanf("%f",&array[i]);
	};
	for(int u=0; u<10;u++)
	{
		printf("%f \n",array[9-u]);
	}
	float *d=array;
	printf("\nSpeicherstartadresse: %d",d);
	printf("\nSpeicherendadresse: %d",d+9);
	printf("\nerste Speicheradresse hinter dem Array: %d", d+10);
	printf("\nDie Differenz zweier benachbarter Einträge: %d", );
	
}

Aufgabe ist im Anhang.
Das funktioniert an sich, aber ich muss zum Schluss die Differenz der beiden benachbarten Adressen und die gesamt Adressen, die das Array besitzt angeben. Problem ist allerdings, dass ich den Pointer als float definiert habe und wenn ich dann die Differenz immer berechne 1 herauskommt.



Geschrieben von eulerscheZahl am 21.12.2015 um 15:56:

 

code:
1:
2:
3:
4:
printf("\nSpeicherstartadresse: %p",d);
printf("\nSpeicherendadresse: %p",d+9);
printf("\nerste Speicheradresse hinter dem Array: %p", d+10);
printf("\nDie Differenz zweier benachbarter Einträge: %ld\n", (d+10) - (d+9));

Die Differenz ist 1 und nicht 4, weil hier mit dem Datentyp float gerechnet wird und nicht mit Bytes.



Geschrieben von D0RK am 21.12.2015 um 16:14:

 

Dem kann ich nicht folgen... Das mit den Adressen hab ich verstanden. Wobei, wir im Tutorium die Adressen immer nur als Zahlen und nicht so angegeben haben. Allerdings soll man ja die Speicherzellen angeben die vom Array belegt sind und float sind doch immer 4 Byte? Müsste man dann nicht auch 4 Byte angeben können?



Geschrieben von D0RK am 21.12.2015 um 16:15:

 

Sprich für müssten es dann 40 Zellen für das Array sein. So verstehe ich das...



Geschrieben von eulerscheZahl am 21.12.2015 um 16:20:

 

%d ist für Adressen nicht geeignet, allein schon weil%d nur int (üblicherweise 32 Bit) kann, ein Zeiger bei mir aber 64 Bit hat. Also kommt es zum Überlauf, ich erhalte dann Speicherstartadresse: -112012448
Die 4 Byte bekommst du, wenn du mit sizeof(float) multiplizierst.



Geschrieben von D0RK am 21.12.2015 um 16:32:

 

Alles klar, danke. Hab's kapiert.


Forensoftware: Burning Board, entwickelt von WoltLab GmbH