Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Softwaretechnik » C structs und dynamischer Speicher » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen C structs und dynamischer Speicher
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Lars
unregistriert
C structs und dynamischer Speicher Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Aufgabe im Anhang, ich komme gerade nicht weiter. Ich glaub, ich muss das Programm nochmal komplett umschreiben.
code:
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:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
#include <stdio.h>
#include <stdlib.h>


typedef struct vek{
	int x;
	int y;
	int z;
}vektoren;
vektoren v;



void useDynAr(int* Pointer1, int* Pointer2, int* Pointer3,int x ,int y, int z)
{
	*Pointer1=x;
	*Pointer2=y;
	*Pointer3=z;
}

void printDynAr(int Pointer4, int Pointer5, int Pointer6)
{
	printf("(%i %i %i)\n",(Pointer4),(Pointer5),(Pointer6));
}

void deleteAr(int* delPointer1,int* delPointer2,int* delPointer3)
{

}

int main()
{
	int a=0;
	char userChoice='q';
	int n=0;
	int* pointer=0;
	do{
	printf("Anzahl Vektoren: %i\n",n);
	for(int s=1;s<=n;s++){
	printDynAr(pointer[a*s-3],(pointer[a*s-2]), (pointer[a*s-1]));}
	printf("[q]uit, [a]dd, [d]elete ->\n ");
	userChoice = getchar();
	if(userChoice=='a'){a+=3;
		printf("Bitte die 3 Elemente (x,y,z) eingeben\n");
		if(n==0){pointer=(int*)malloc(3*sizeof(int));}
		if(n!=0){pointer=(int*)realloc(pointer, a*sizeof(int));}
		scanf("%i",&v.x);
		scanf("%i",&v.y);
		scanf("%i",&v.z);
		useDynAr((pointer+a-3),(pointer+a-2), (pointer+a-1),v.x, v.y, v.z);
		n++;
	

		};	
	if(userChoice=='d'){a-=3;
		deleteAr(pointer+a-3,pointer+a-2, pointer+a-1);
	};

	}while(userChoice!='q');
	
	return 0;

}

Aufgabe im Anhang.


Meine Ideen:
Nichtmal das adden funktioniert x).
Man kann doch auch das struct direkt als Pointer definieren, kann ich dann auch irgendwie die einzelnen Elemente in einem dynamischen Speicher anlegen lassen und dann einfach immer aufrufen? Das wäre bei weitem einfacher, als das so umständlich zu machen. Imo muss ich sie ja immer einzeln abspeichern.
Ich versuch mal, das ganze umzuschreiben.

Lars hat dieses Bild (verkleinerte Version) angehängt:
Komische Aufgabe.png

17.01.2016 10:37
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Habe dir mal das gröbste ausgebessert, denn laut Aufgabenstellung soll der Code ja schön sein smile

Statt eines int-Zeigers habe ich einen vertoren-Zeiger verwendet. Auch die Funktionsargumente sind jetzt vektoren.
code:
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:
#include <stdio.h>
#include <stdlib.h>

typedef struct vek{
	int x;
	int y;
	int z;
}vektoren;

void useDynAr(vektoren* v, vektoren* content)
{
	v->x = content->x;
	v->y = content->y;
	v->z = content->z;
}

void printDynAr(vektoren v)
{
	printf("(%i %i %i)\n",v.x, v.y, v.z);
}

int main()
{
	vektoren* v = (vektoren*)malloc(sizeof(vektoren));
	int a=0;
	char userChoice='q';
	vektoren* pointer=0;
	do {
		printf("Anzahl Vektoren: %i\n", a);
		for(int s = 0; s < a; s++){
			printDynAr(pointer[s]);
		}
		printf("[q]uit, [a]dd, [d]elete ->\n ");
		userChoice = getchar();
		if(userChoice == 'a'){
			a++;
			printf("Bitte die 3 Elemente (x,y,z) eingeben\n");
			if(pointer == NULL) pointer = (vektoren*)malloc(sizeof(vektoren));
			else pointer = (vektoren*)realloc(pointer, a*sizeof(vektoren));
			scanf("%i", &v->x);
			scanf("%i", &v->y);
			scanf("%i", &v->z);
			useDynAr(&pointer[a-1], v);
		};	
		if(userChoice == 'd') { 
			a--;
			pointer = (vektoren*)realloc(pointer, a*sizeof(vektoren));
		}
	} while (userChoice != 'q');
	free(pointer);	
	return 0;
}


__________________
Syntax Highlighting fürs Board (Link)
17.01.2016 11:08 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Lars
unregistriert
Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hab auch nen bisschen mit dem -> Operator rumgewerkelt und was funktionierendes rausbekommen. Schönheit liegt im Auge des Betrachters, bloß sieht dein Code leider wirklich schöner aus Zunge raus .
17.01.2016 16:30
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Softwaretechnik » C structs und dynamischer Speicher