Strukturen

C_Boy

Mitglied
Hi,

ich hab ne Frage zu den Strukturen.
Es geht um Unterprogramm mit Strukturen


C++:
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?

C++:
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ß
 
z.B. bei:

C++:
float flaeche(float a, float b)

Das float ist der Rückgabetyp, also ne Kommazahl.

C++:
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.
 
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:

C++:
struct personendaten
{
.....
};

zu tun hat.

Stimmt das in etwa?
 
Zuletzt bearbeitet:
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.
 
Ok ich danke euch.

Nun meine Frage: z.B. wie haben ein unterprogramm: "struct punkt point":

C++:
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:
C++:
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
 
Zuletzt bearbeitet:
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.
 
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?

C++:
#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 :D.

Aber das geht sicher einfacher.

MfG
 

Anhänge

  • error.png
    error.png
    15,6 KB · Aufrufe: 5
Zurück