You are not logged in.

  • Login

1

Thursday, December 7th 2006, 5:05pm

Struct in C

Brauch unbedint mal eure Hilfe!

Und zwar soll ich ein Programm entwickeln welches Koordinaten ( x, y, z ) in einer Struktur speichert. soweit so gut hab ich auch geschafft das es die 3 Koordinaten in einem struct als VEKTOR speichert nun jedoch mein Problem:
Ich will mehrere Vektoren speichern, sprich das struct befindet sich in einer schleife die ersten 3 Koordinaten werden eingegeben und gespeichert, 3 neue Koordinaten werden eingegeben und diese sollen nun als neuer Vektor gespeichert werden sprich
Vektor A: x, y, z
Vektor B: x2, y2, z2

Hoffe ist verständlich?

2

Thursday, December 7th 2006, 5:28pm

Quoted

Hoffe ist verständlich?

Noe ! :D

Quoted

die 3 Koordinaten in einem struct als VEKTOR

aehm struct als vector ?

also sowas:

C Quellcode

1
2
3
4
struct MyStructT
{
     unsigned int koords[3];
};


wenn du ne feste (kleine)anzahl an elementen hasst solltest da keinen vector ddraus machen ... sondern ne wirkliche struct ... in deinem Fall bietet sich soqas an wie

C Quellcode

1
2
3
4
5
6
struct Point3dT 
{
    unsigned int x;
    unsigned int y;
    unsigned int z;
};


DIe chance das du mal auf 4 dimensional switschen musst ist doch gering oder ?
genau so brauchst du keinen index operator um auf die richtige dimension zugreifen zu muessen oder ? oder planst du den fall das du den wert einer dimension mittels eines indexes variabel abfragen willst (dann brauchst nen array)

Variable menge speichern ist eigentlich immer ne Aufgabe dynamischer speicherverwaltung ....
viele viele elemente speichert man z.b. so

C Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
unsigned int anz = 3678; 
 
Point3dT * pPointers = (Point3dT *) malloc(anz * sizeof(Point3dT )); 
 
// nu kann man auf den structuren mittels zeigeerops zugreifen ... 
// zb. alle auf werte setzen ... 
 
for(Point3dT * pIdex = pPointers ; pIdex != &pPointers[3678] ; ++ pIdex)
{
    pIdex->x = 0;
    pIdex->y = 1;
    pIdex->z = 2;
}
// oder auch per index zugriff 
for(int i = 0 ; i < 3678 ; ++ i)
{
    pIdex[i].x = 0;
    pIdex[i].y = 1;
    pIdex[i].z = 2;
}

Vektoren gibts in der Mathematik
In C (und damit c++ auch) gibts nur Arrays
In c++ gibts dann auch ne vector klasse die ne impl eines dynamischen Arrays im C Sinne ist (mit ner menge comfort funktionen)

Ciao ...

3

Thursday, December 7th 2006, 6:53pm

ok doch sch*** erklärt ^^ ich schreibe einfach mal die Aufgabe rein vielleicht wird man daraus schlauer ^^

Eine Menge von N Punkten, die Raumkoordinaten darstellen, sollen in einem Array gespeichert werden. Jeder Punkt soll durch eine Struktur mit den x-, y- und z- Koordinaten als Komponenten dargestellt werden. Entwickeln sie ein Programm, das zu manuell eingegebenen Punktkoordinaten den nächsten Nachbar vorhandenen Punkt ermittelt. Zur Strukturierung des Programms entwickeln sie zwei Funktionen:

- Berechnung des euklidischen Abstandes zwischen zwei Punkten: Parameter sind 2 Punktstrukturen. Der Rückgabewert ist der Abstand zwischen den Punkten.
- Bestimmung des nächsten Nachbarn zu eingegebenen Koordinaten: Parameter Koordinaten eines Punktes. Der Rückgabe wert sind die Koordinaten des nächsten Nachbarn.

was ich bisher habe:

C Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h>
#include <math.h>
#define N 31
 
 
int main()
{
int anzahl=0, punkt=0, stelle=0;
int feld[N]={0};
int x, y, z;
struct VEKTOR
{
	int a, b, c;
};
 
printf("EUKLIDISCHER-Abstand\n\nDieses Programm errechnet den Abstand zwischen Punkten und gibt\nden naechsten Nachbarn aus\n\n");
printf("Wieviele Vektoren moechten sie eingeben?: "); 
scanf("%d",&anzahl);
 
 
do
	{
		printf("Geben sie bitte die Punkte an!\n");
		printf("x: ");
		scanf("%d", &x);
		feld[stelle]=x;
		stelle++;
		printf("y: ");
		scanf("%d", &y);
		feld[stelle]=y;
		stelle++;
		printf("z: ");
		scanf("%d", &z);
		feld[stelle]=z;
		stelle++;
		anzahl--;
 
		struct VEKTOR d,e;
		{
			e,d.a = x;
			//stelle--;
			e,d.b = y;
			//stelle--;
			e,d.c = z;
			//stelle--;
 
		};
	}
	while (anzahl>0);
 
	return 0;
 
}

Similar threads

Social bookmarks