1Danke
ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
781
781
EMPFEHLEN
-
Hallo zusammen!
ich haben einen Teil eines C-Programms vorgegeben:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
/*Daten von erbrachten sportlichen Leistungen*/
typedef struct {
double laufen_100m; /*in Sekunden*/
double weitsprung; /*in Metern*/
} Leistungen;
/*Daten eines Schuelers*/
typedef enum {M,F} Geschlecht;
typedef struct {
char name[50];
char gruppe;
Geschlecht g;
Leistungen l;
} Schueler;
int main (void)
{
int num;
Schueler* f;
printf("Bitte geben Sie die Anzahl der Schueler ein!\n"); /*1. Anweisung (siehe unten)*/
scanf("%d", &num);
/*hier sollen weitere C-Anweisungen eingefügt werden*/
return 0;
}
Ich soll nun weitere C-Anweisungen in das Programm integrieren.
1. Die Anzahl der Schüler soll von der Standardeingabe eingelesen und in der Variablen num gespeichert werden
2. Die Zeigervariable f soll mit der Startadresse eines dynamisch angelegten Feldes belegt werden, welches die Daten für num Schüler aufnehmen kann.
3. Der Schüler Lukas aus Gruppe H hat für 100 Meter 20.21 Sekunden gebraucht und ist nur 1.45 Meter weit gesprungen. Seine Daten sollen im letzten Eintrag des Feldes f abgespeichert werden.
4. Die besten Leistungen erbrachte die Schülerin Margarete aus Gruppe A: Sie ist 7.55 Meter weit gesprungen und hat die 100 Meter in 9.5 Sekunden absolviert. Ihre Daten sollen im ersten Eintrag des Feldes f abgelegt werden.
Die erste Anweisung habe ich bereits integriert aber bei den anderen dreien komme ich absolut nicht weiter.
Wie lege ich ein dynamisches Feld an? Wie kann ich die Daten der Schüler in den Feldern abspeichern und wie genau schaffe ich es, dass die Daten bestimmten Felder zugeordnet werden?
Ich hoffe, dass ich mir weiterhelfen könnt. Das Thema ist absolut klausurrelevant für mich.
Danke.
-
04.03.10 16:01 #2
Hi, nun was du hier brauchst ist, wie du uch in der Überschrift geschrieben hast, ein dynamisches Array.
Es gäbe zwei varianten dein Problem zu realisieren. Die eine komplexer, aber schöner, die andere, ich sage mal spartanisch, aber einfacher
Erst die "spartanische"
Du brauchst ja ein Array, du darfst dem Kompiler aber keine feste Größe sagen, da du diese ja als nutzer während der Laufzeit eingeben willst.
Also musst du erst einen Zeiger auf ein Array deklarieren, damit der Kompiler schonmal weis dass du ein Array haben willst.
das siht dan etwa so aus:
Code cpp:1
int *myarray;
hier hast du dann einen Zeiger auf den Datentyp integer festgelegt (noch kein array, und auch keine Variable!!).
als nächstes brauchst du deine variable, die der user eingibt.
Mit dieser variable setz du dan dein Array, und kannst dan ganz normal darauf zugreifen.
etwa so:
in der dritten wenn der nutzer jetz 10 eingibt, wir d erst in der dritten Zeile (während der Laufzeit) ein Array mit 10 Elementen angelegt.Code cpp:1 2 3 4 5
int size; cin>>size; myarray = new int[size];
Richtig dynamisch ist dieses jedoch nicht (deswegen meinte ich oben auch spartanisch).
Um ein voll dynamisches array hinzubekommen, müsstes du das Programm quasi selbst bestimmen lassen, zum Beispiel anhand der Anzahl der Werte, die man eingibt, dass dieses selbst die Array größe festlegt.
Oder du nutzt eine Liste, dort kannst du so viele Elemente hinzufügen und löschen wie du willst, doch das ist ein anderes Thema
Ich hoffe ich konnte helfen
EDIT:
Oh, tut mir leid, ich bin garnicht auf das beschreiben und ausgeben des Array eingegangen
beschreiben:
Code cpp:1 2 3 4
for(int i=0; i<size;i++) { myarray[i]=i*2; }
ausgeben:
Code cpp:1 2 3 4
for(int i=0; i<size;i++) { cout<<"\t"<<myarray[i]<<endl; }
Ps.: Das funktioniert auch mit mehr dimensionalen Arrays, falls du damit auch arbeiten musst, dann kann ich dazu auch hilfe leisten
Geändert von Marschal (04.03.10 um 16:07 Uhr)
" Gehirn: ein Organ, mit dem wir denken, daß wir denken. "
Ambrose Bierce
-
Ich danke dir für deine schnelle Antwort.
Aber leider verstehe ich immer noch Bahnhof.
Könntest du das vielleicht konkreter auf meine Aufgabenstellung beziehen? So ist mir deine Erklärung zu abstrakt. Sorry
-
04.03.10 16:36 #4
Hier, bitte

Habe den Quelltext auf dein Problem zugeschnitten und kommentiert, frag ruhig, wenn du noch was wissen willst
Code cpp: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 66
#include <stdafx.h> #include <iostream> #include <windows.h> using namespace std; /*Daten von erbrachten sportlichen Leistungen*/ typedef struct { double laufen_100m; /*in Sekunden*/ double weitsprung; /*in Metern*/ } Leistungen; /*Daten eines Schuelers*/ typedef enum {M,F} Geschlecht; typedef struct { string name; string gruppe; Geschlecht g; Leistungen l; } Schueler; int main() { WinMain(NULL,NULL,NULL,SW_SHOW); } int __stdcall WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd ) { int num;//variable num, für die Nutzereingabe Schueler *s;//zeiger auf schüler, um auch dynamisch schüler anzulegen cin>>num;//Die Anzahl der Schüler soll von der Standardeingabe eingelesen und in der Variablen num gespeichert werden s = new Schueler[num];//ein "dynamisch" angelegtes Array für unsere schueler //schüler Lukas an letzter stelle s[1].name="Lukas"; //s[1].g=M; s[1].l.weitsprung=1.45; s[1].l.laufen_100m=20.21; s[1].gruppe="H"; //schüler Margarete an erster stelle s[0].name="Margarete "; //s[0].g=W; s[0].l.weitsprung=7.55; s[0].l.laufen_100m=9.5; s[0].gruppe="A"; for(int i=0; i < num ; i++ )//schleife zur Ausgabe { cout<<s[i].name.c_str()<<endl; cout<<s[i].g<<endl; cout<<s[i].l.laufen_100m<<endl; cout<<s[i].l.weitsprung<<endl; cout<<s[i].gruppe.c_str()<<endl; cout<<"\n"<<endl; } system("PAUSE"); return 0; }
EDIT: übrigends habe ich char zu string geändert, ist komfortabler, und deine Struktur "Geschlecht", wie genau soll diese benuzt werden?
" Gehirn: ein Organ, mit dem wir denken, daß wir denken. "
Ambrose Bierce
-
Das hilft mir schon sehr weiter. Danke.
Wie ich sehe programmierst du mit C++? Wir benutzen an der Uni in dem Informatikkurs lediglich C.
In der Klausur haben wir keinen Computer und müssen die Anweisungen einfach nur zu Papier bringen. So ist beispielsweise die Ausgabe der Daten überhaupt nicht relevant.
Wie genau die Geschlecht Struktur verwendent wird kann ich dir auch nicht genau sagen. Ich habe nicht mehr Informationen dazu, als das was ich schon gepostet habe.
Noch eine weitere Frage zu deinem Quelltext.
Du hast die Daten von Lukas auf s[1] gepackt und die Daten von Margerete auf s[0]. Damit gehst du doch davon aus, dass wir nur zwei Schüler haben. Wie sieht es denn jetzt aus, wenn ich zB. 25 Schüler in einer Klasse habe und Felder für die Daten aller Schüler brauche und ich erstmal nur zwei Datensätze habe. Hier im Beispiel die von Lukas und Margarete. Kann ich dann sagen s[0] für Margarete und s[num-1] für den letzten Platz, wobei num die Anzahl aller Schüler ist?
-
04.03.10 17:13 #6
wenn es so steht in der Aufgabe, dass Lukas letzter sein soll, bei egal wie vielen Schueler, dan kannst du das so machen jop
Code cpp:1
s[num-1] //ist das letzte element des Arrays
alle anderen elemente sind dan halt unbelegt.
" Gehirn: ein Organ, mit dem wir denken, daß wir denken. "
Ambrose Bierce
-
04.03.10 19:21 #7
- Registriert seit
- May 2008
- Ort
- Baunatal (Hessen)
- Beiträge
- 413
Hier: // ist nicht getestet // müsste C Standart sein
Code cpp: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
#include <stdio.h> #include <stdlib.h> #include <assert.h> /*Daten von erbrachten sportlichen Leistungen*/ typedef struct { double laufen_100m; /*in Sekunden*/ double weitsprung; /*in Metern*/ } Leistungen; /*Daten eines Schuelers*/ typedef enum {M,F} Geschlecht; typedef struct { char name[50]; char gruppe; Geschlecht g; Leistungen l; } Schueler; int main (void) { int num; Schueler* f; printf("Bitte geben Sie die Anzahl der Schueler ein!\n"); /*1. Anweisung (siehe unten)*/ scanf("%d", &num); f = (Schueler *)malloc(num*sizeof(Schueler)); if(f == NULL) { printf("Fehler beim allozieren des Speichers\n"); return EXIT_FAILURE; } int i = 0; while( i < num ) { printf("Wert für Schüler[%d] eingeben : \n Name: ", i); scanf("%s", &f[i]name); printf("Gruppe: "); scanf("%s", &f[i]gruppe); printf("Geschlecht [M/F]: "); scanf("%c", &f[i]g); printf("100m laufen: "); scanf("%lf", &f[i].laufen_100m); printf("Weitsprung: "); scanf("%lf", &f[i].weitsprung); i++; } // Daten ausgeben bli bla blub ... SINEP free(f); return 0; }
Das ist keine Struktur Geschlecht das ist eine Enumeration ( Aufzählung)
ohne Zuweisung wird bei 0 angefangen zu zählen, also:
M = 0 und dann F = 1
Due könntest z.B. auch schreiben
dann wär F = 4Code cpp:1
typedef enum {M=3,F} Geschlecht;
Man kann das ganze mit nem "string" dann ansprechen. Im Prinzip wie eine #define Anweisung, nur das automatisch hochgezählt wird.
Ist oft ganz praktisch z.B. wenn man sich Tastten definiert ASCII-Code...
EDIT:
statt malloc kannst du dir ja auch mal realloc und calloc ansehen.
MFGGeändert von 3Cyb3r (04.03.10 um 19:25 Uhr)
Bei der Geburt ist ein Mensch so unfertig, wie ein an einem schönen blauen Montag in Taiwan hergestellter Computer vor der Programmierung.
- Wolfgang Körner
-
Danke für eure Beiträge!
-
08.03.10 10:42 #9
Bitte bitte
Die, die dir helfen konnten, werden sich über einen gedankten Beitrag freuen
(Danke-Button)
MfG
" Gehirn: ein Organ, mit dem wir denken, daß wir denken. "
Ambrose Bierce
Ähnliche Themen
-
Dynamische Felder zusammen rechnen
Von hoctar im Forum Javascript & AjaxAntworten: 4Letzter Beitrag: 13.01.09, 16:18 -
Dynamische Felder Kopiern
Von XeoX im Forum C/C++Antworten: 3Letzter Beitrag: 27.05.08, 11:30 -
Dynamische DropDown Felder
Von Kranetierli im Forum Javascript & AjaxAntworten: 3Letzter Beitrag: 17.09.07, 13:51 -
[VBS] dynamische Formular-Felder ausfüllen
Von MiLa im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 18.03.05, 19:14 -
Dynamische Felder in C
Von Radhad im Forum C/C++Antworten: 7Letzter Beitrag: 25.05.03, 19:54





Zitieren
Login






