6Danke
ERLEDIGT
JA
JA
ANTWORTEN
13
13
ZUGRIFFE
421
421
EMPFEHLEN
-
Hi,
ich hab ne Frage zu den Strukturen.
Es geht um Unterprogramm mit Strukturen
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
struct adresse { char vorname[MAXSTRING]; char nachname[MAXSTRING]; char strasse [MAXSTRING]; char ort[MAXSTRING]; char PLZ[MAXSTRING]; }; struct personendaten { struct adresse adresse; int schuhgroesse; float groesse; };
Hier werden mehrere variablen in eine Variable "gespeichert"(gespeicheret werden sie nicht, aber mir fällt kein anderes wort ein
) Auf jedenfall kann man dann von "personendaten" aus auf schuhgroesse, groesse oder adresse zugreifen.
Stimmt oder?
Code cpp:1 2 3 4 5 6 7 8 9 10 11
struct personendaten getPerson(void) { struct personendaten thePerson; strncpy(thePerson.adresse.vorname,"Lieselotte",MAXSTRING); strncpy(thePerson.adresse.nachname,"Musterschuelerin",MAXSTRING); strncpy(thePerson.adresse.strasse,"adresse",MAXSTRING); strncpy(thePerson.adresse.ort,"ort",MAXSTRING); thePerson.groesse=172; thePerson.schuhgroesse=38; return (thePerson); }
Hier verstehe ich nicht warum man das Unterprogramm personendaten nennen muss?
Was bringt das bzw. Welcher Sinn steckt dahinter?
struct personendaten thePerson steht ja schon drinnen --> man kann eh auf alle variablen zugreifen?
MfG C_boy
-
Hi
das Unterprogramm/die Funktion heißt nicht personendaten,
sondern getPerson.
Das "struct persondendaten" vorn ist der Rückgabetyp,
also was für eine Variablenart bei return dabeisteht.
GrußNetiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
z.B. bei:
Code cpp:1
float flaeche(float a, float b)
Das float ist der Rückgabetyp, also ne Kommazahl.
Code cpp:1
struct personendaten getPerson(.....)
Ok, "struct personendaten" ist der Rückgabetyp, d.h. das eine Strukturvariable zurückgegeben wird.
Und könnte das sein das das "personendaten" dafür steht aus welchem "Verzeichnis" oder "Struktur" der Rückgabewert kommt?
-
Das mit dem Rückgabewert hast du richtig verstanden.
Den Rest versteh ich nicht - was du damit meinst.
Eine Struktur ist nichts anderes als eine neue Variablenart (wie int, float usw.usw.)
die aus mehreren Variablen existierender Arten besteht.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Naja ich mein das halt so.
bei float und so schreibt man danach ja nur den namen.
und ich dachte nur "struct" ist der Rückgabetyp.
Das "personendaten" weist nur auf das hin das es irgendwas mit:
Code cpp:1 2 3 4
struct personendaten { ..... };
zu tun hat.
Stimmt das in etwa?Geändert von C_Boy (01.10.11 um 19:25 Uhr)
-
Nein.
Das struct zeigt nur an, dass die Variable aus mehreren anderen zusammengesetzt ist.
Der Typ ist nicht struct, sondern personendaten.
Und das ist ein struct.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
02.10.11 10:11 #7
- Registriert seit
- Jun 2005
- Beiträge
- 8.168
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
Ok ich danke euch.
Nun meine Frage: z.B. wie haben ein unterprogramm: "struct punkt point":
Code cpp:1 2 3 4 5 6 7 8 9 10
struct punkt { float x; float y; }; struct punkt getpoint(struct punkt points,[] int len) { //hier "speichere" x und y-werte in das array points(also points[].x und points[].y) }
Angenommen ich möchte die Array-Struktur-Variable zurückgeben ans Hauptprogramm und die Werte halt ausgeben.
Wie mache ich das jetzt genau?
Muss ich schreiben return(points[]) oder die eckigenklammern weg?
Andere Frage:
Code cpp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
void printPerson(struct personendaten thePerson) { printf("Adresse:\n%s\n%s\n%s\n%s\n",thePerson.adresse.vorname,thePerson.adresse.nachname, thePerson.adresse.strasse,thePerson.adresse.ort); printf("Persoenliche Daten:\n"); printf("Schuhgroesse:%d\n", thePerson.schuhgroesse); printf("Groesse:%f\n", thePerson.groesse); } void main() { struct personendaten das_bin_ich; printPerson(das_bin_ich); }
Warum muss man immer dann in Hauptprogramm die Strukturvariable ändern?
Also bei Personendaten: oben im Übergabeparameter heißt es ja thePerson und dann ändert mann die Variable im Hauptprogramm in das_bin_ich um. Warum?
MfGGeändert von C_Boy (02.10.11 um 13:39 Uhr)
-
Hi
Erster Code:
,[] im Code ist einmal falsch.
Zum Array: Das musst du nicht zurückgeben, um die Werte auch im main zu haben.
Bei Einzelwerten wäre es nötig, Arrays (Pointer) aber nicht.
Wenn du es zurückgeben willst, dann ohne [] beim return, aber ist eben nicht nötig.
Zweiter Code: Du könntest auch im main "thePerson" verwenden.
Ist also kein Muss.Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Ok, danke.
Um ein bisschen Strukturen zu üben hab ich ein Programm geschreiben das y=sin(x) ausrechnet und dann das ganze in ein Array speichert und den kleinsten wert von y sucht.
1. steht dann da dass der kleinste wert 0 ist, obwohl die zahl 0 gar nicht vorkommt.
2. Wenn ich mit Einzelschritt durchgehe dann erscheint in Zeile 26 eine Fehlermeldung(siehe Pic).
Was bedeutet das jetzt genau das der Quellcode nicht mehr verfügbar ist?
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 67 68 69
#include <stdlib.h> #include <stdio.h> #include <math.h> #include <string.h> #define MAXLEN 10 struct punkt_struct { float x; float y; }; typedef struct punkt_struct punkt; void getpunkte(punkt point[], int len); float fndminimum(punkt point[], int len); void getpunkte(punkt point[], int len) { double t=0; for(t=0.0; t<len; t=t+0.1) { point[(int)t].x=(float)t; point[(int)t].y=sin((float)t); printf("sin(%f)=%f\n",point[(int)t].x,point[(int)t].y); } } float fndminimum(punkt point[], int len) { int i=0; int n=0; float tmp=0; float min=0; for(n=0; n<len; n++) { for(i=0; i<len; i++) { if(point[i].y > point[i+1].y) { tmp=point[i].y; point[i].y=point[i+1].y; point[i+1].y=tmp; } } } min=point[0].y; return(min); } int main() { punkt point[MAXLEN]; float min=0; getpunkte(point,MAXLEN); min=fndminimum(point,MAXLEN); printf("Die kleinste Zahl im Array ist:%d\n",min); return(0); }
Wie man sehn kann mach icih das mit Bubble Sort und da an der 0ten stellen des Arrays dann die kleinste Zahl steht ist das dan die kleinste Zahl
.
Aber das geht sicher einfacher.
MfG
-
Zum Bild: Startest du das als Release?
Zu getpunkte: Welche Fehlermeldung kommt da, außer dem "Quellcode nicht verfügbar"?
Du fülls die Werte zehnmal an der gleichen Stelle. Warum immer "+=0.1" und dann ein int-cast?
float/double in Arrayindizes machen auch gecastet nichts einfacher...warum nicht int verwenden?
Falls du es nicht weißt: sin will die Zahl als Radiant, also nicht über "falsche" Ergebnisse wundern.
Zu fndminimum: Sortieralgorithmen gibts bessere, aber das weißt du ja selber...
Warum tauscht du immer nur y? Warum nicht die ganze struct?Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
-
Ich weis net was du meinst, aber ich drücke einfach F11 und dann immer wieder F11 für Einzelschritt. Wenn ich STRG+F5 drücke dann kommt ganz normal das schwarze Fenster und die "falschen" Sinuswerte sind zu sehn.
Die kleinste Zahl ist halt 0.
Ich kann nur das unten in der Ausgabe finden, wenn ich STR+F5 mache:Zu getpunkte: Welche Fehlermeldung kommt da, außer dem "Quellcode nicht verfügbar"?
Du fülls die Werte zehnmal an der gleichen Stelle. Warum immer "+=0.1" und dann ein int-cast?
float/double in Arrayindizes machen auch gecastet nichts einfacher...warum nicht int verwenden?
Falls du es nicht weißt: sin will die Zahl als Radiant, also nicht über "falsche" Ergebnisse wundern.
: warning C4244: '=': Konvertierung von 'double' in 'float', möglicher Datenverlust(1. for/3.zeile)
Naja ich will halt sin() berechnen aus Kommazahlen. Ok ich könnte statt double t float t schreiben.
Array-Index darf ja keine Kommazahl haben, darum der cast.
Naja weil ich nur y also das ergebnis des sin() sortieren bzw. die kleinste zahl suchen will.Zu fndminimum: Sortieralgorithmen gibts bessere, aber das weißt du ja selber...
Warum tauscht du immer nur y? Warum nicht die ganze struct?
Qucksort ist mir zu kompliziert noch, haben es zwar mal kurz angeschnitten, aber wird wahrscheinlich noch kommen.Geändert von C_Boy (02.10.11 um 18:02 Uhr)
-
Dasr Problem ist ich kann nicht mit einzelschritt durchgehen, weils in Zeile 15 hängen bleibt, also der Quellcode kann nicht angezeigt werden oder so?
Immer bei den blöden cast passiert das
.
Du sagtest mir ja ich soll dir noch was anderes dazu sagen, dass du mir weiterhelfen kannst. also irgendwo im Debugger? Ich weis net wo ich da schauen könnte.
Das steht im Disassambly: 010D1DD0 cmp dword ptr [___sse2_available (10D75A0h)],0Geändert von C_Boy (08.10.11 um 19:57 Uhr)
-
So, alles verschoben etc.
Ich schau mir das mal selbst im Compiler an.
edit:
Alles bisher Genannte ausgebessert, und es geht...
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
#include <stdlib.h> #include <stdio.h> #include <math.h> #include <string.h> #define MAXLEN 10 struct punkt_struct { float x; float y; }; typedef struct punkt_struct punkt; void getpunkte(punkt point[], int len); float fndminimum(punkt point[], int len); void getpunkte(punkt point[], int len) { for(int i = 0; i < len; i++) { point[i].x = ((float)i) / 10.0; point[i].y = sin(point[i].x); printf("sin(%f)=%f\n", point[i].x, point[i].y); } } float fndminimum(punkt point[], int len) { float x; int i; if(len < 1) return 0.0; x = point[0].y; for(i = 1; i < len; i++) { if(point[i].y < x) x = point[i].y; } return x; } int main() { punkt point[MAXLEN]; float min = 0.0; getpunkte(point, MAXLEN); min = fndminimum(point, MAXLEN); printf("Die kleinste y-Zahl im Array ist:%f\n", min); return 0; }
Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
"Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?
Ähnliche Themen
-
Strukturen
Von seriously im Forum C/C++Antworten: 6Letzter Beitrag: 09.05.11, 21:15 -
Strukturen in C
Von Disap im Forum C/C++Antworten: 2Letzter Beitrag: 04.03.07, 11:09 -
Strukturen in C/C++
Von fujitsufan im Forum C/C++Antworten: 4Letzter Beitrag: 07.07.06, 08:42 -
Strukturen
Von CosmoKey im Forum C/C++Antworten: 3Letzter Beitrag: 06.07.04, 23:28 -
[C++] Strukturen
Von pheGez im Forum C/C++Antworten: 1Letzter Beitrag: 17.12.03, 22:55





Zitieren


Login






