c# cannot convert double to double

Neue Frage »

Auf diesen Beitrag antworten »
D0RK 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.
 
Auf diesen Beitrag antworten »
D0RK RE: c# cannot convert double to double

Hab' schon herausbekommen. LOL Hammer
Auf diesen Beitrag antworten »
D0RK 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.
Auf diesen Beitrag antworten »
eulerscheZahl

Das ist aber C und nicht C#.
 
Auf diesen Beitrag antworten »
D0RK

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.
Auf diesen Beitrag antworten »
eulerscheZahl

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.
Auf diesen Beitrag antworten »
D0RK

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?
Auf diesen Beitrag antworten »
D0RK

Sprich für müssten es dann 40 Zellen für das Array sein. So verstehe ich das...
Auf diesen Beitrag antworten »
eulerscheZahl

%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.
Auf diesen Beitrag antworten »
D0RK

Alles klar, danke. Hab's kapiert.
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »