tutorials.de Buch-Aktion 05/2012
Like Tree6Danke
  • 1 Beitrag von sheel
  • 1 Beitrag von sheel
  • 1 Beitrag von sheel
  • 1 Beitrag von deepthroat
  • 1 Beitrag von sheel
  • 1 Beitrag von sheel
ERLEDIGT
JA
ANTWORTEN
13
ZUGRIFFE
421
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    C_Boy C_Boy ist offline Mitglied Bronze
    Registriert seit
    Jan 2011
    Beiträge
    44
    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
     

  2. #2
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    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ß
    C_Boy bedankt sich. 
    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, ...?

  3. #3
    C_Boy C_Boy ist offline Mitglied Bronze
    Registriert seit
    Jan 2011
    Beiträge
    44
    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?
     

  4. #4
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    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.
    C_Boy bedankt sich. 
    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, ...?

  5. #5
    C_Boy C_Boy ist offline Mitglied Bronze
    Registriert seit
    Jan 2011
    Beiträge
    44
    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)
     

  6. #6
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    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.
    C_Boy bedankt sich. 
    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, ...?

  7. #7
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von sheel Beitrag anzeigen
    Der Typ ist nicht struct, sondern personendaten.
    So ganz stimmt das ja nicht. Der Typ heißt "struct personendaten", das struct gehört sozusagen zum Namen dazu. Deshalb definiert man sich häufig aus Bequemlichkeit einen Typalias mit typedef.

    Gruß
    C_Boy bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  8. #8
    C_Boy C_Boy ist offline Mitglied Bronze
    Registriert seit
    Jan 2011
    Beiträge
    44
    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?
    MfG
    Geändert von C_Boy (02.10.11 um 13:39 Uhr)
     

  9. #9
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    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.
    C_Boy bedankt sich. 
    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, ...?

  10. #10
    C_Boy C_Boy ist offline Mitglied Bronze
    Registriert seit
    Jan 2011
    Beiträge
    44
    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
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Strukturen-error.png  
     

  11. #11
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    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, ...?

  12. #12
    C_Boy C_Boy ist offline Mitglied Bronze
    Registriert seit
    Jan 2011
    Beiträge
    44
    Zitat Zitat von sheel Beitrag anzeigen
    Zum Bild: Startest du das als Release?
    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.

    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.
    Ich kann nur das unten in der Ausgabe finden, wenn ich STR+F5 mache:
    : 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.

    Zu fndminimum: Sortieralgorithmen gibts bessere, aber das weißt du ja selber...
    Warum tauscht du immer nur y? Warum nicht die ganze struct?
    Naja weil ich nur y also das ergebnis des sin() sortieren bzw. die kleinste zahl suchen will.

    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)
     

  13. #13
    C_Boy C_Boy ist offline Mitglied Bronze
    Registriert seit
    Jan 2011
    Beiträge
    44
    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)],0
    Geändert von C_Boy (08.10.11 um 19:57 Uhr)
     

  14. #14
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    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;
    }
    C_Boy bedankt sich. 
    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

  1. Strukturen
    Von seriously im Forum C/C++
    Antworten: 6
    Letzter Beitrag: 09.05.11, 21:15
  2. Strukturen in C
    Von Disap im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 04.03.07, 11:09
  3. Strukturen in C/C++
    Von fujitsufan im Forum C/C++
    Antworten: 4
    Letzter Beitrag: 07.07.06, 08:42
  4. Strukturen
    Von CosmoKey im Forum C/C++
    Antworten: 3
    Letzter Beitrag: 06.07.04, 23:28
  5. [C++] Strukturen
    Von pheGez im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 17.12.03, 22:55