Strukturen unter C



  • Hey,

    Danke dir für deine Antwort! Ja, das mit der Adressierung bei Strings ist mir schon klar, aber das ist der Standartfehler, welchen ich immer mache. Auch bei integer Werten vergess ich den öfters und deswegen habe ich mir einfach festgelegt, dass ich es immer benutzen werde mit der Hoffnung, dass es eines Tages feste sitzt 🙂

    Hm, dein Vorschlag sieht ganz gut aus aber gibt es da keinen eleganteren Weg? Also nichts gegen deinen Vorschlag, ist nur ne Frage 🙂

    Ich habe es mir eher im Form einer Schleife vorgestellt. Ansonsten könnte ich ja auch 6x mal hintereinander printf und scanf schreiben.. Ist ja nur eine Sache des "Copy-Paste".

    Ich schreibe demnächst meine erste Klausur an der Uni in C, die gleich von Assembler gefolgt wird. Alle Forenuser, die mir behilflich sind bei den Aufgaben, wissen gar nicht, welchen Gefallen sie mir tun!

    Vielen Dank an euch alle..



  • Was soll eine Schleife über die Strukturelemente bringen? Glaube mir, nichts außer zusätzliche Fehlerquellen.



  • Alles klar, dankeschön..
    Das sollte wohl eher mein kleineres Problem sein. Ich habe noch ein viel fetteres. Unzwar dieses:

    Ich habe folgende Aufgabenstellung, wovon ich eigentlich nur sehr wenig verstehe..
    Könntet ihr mir evtl. behilflich sein??

    Ein Dreieck besteht aus drei Punkten A,B,C. Folgende Struktur soll für "Punkt" realisiert werden:

    typedef struct Punkt
                    {
                        double x,y;
                    } Punkt;
    

    a) Struktur für "Dreieck" entwickeln

    Was genau darf ich darunter verstehen?



  • typedef struct PointStruct
    {
       double x,y;
    } Point;
    
    typedef struct DreieckStruct
    {
       Point a,b,c;
    } Dreieck;
    

    Das ist damit gemeint. Ein Dreieck hat 3 Punkte.



  • Ok, danke. Aber die Aufgabe wird immer unverständlicher sobald man sie weiter liest.

    unter b ist nänlich folgendes gefordert:

    b)Ein Unterprogramm "DreieckEingabe" schreiben. Das Unterprogramm soll die Strukturvariablen an das Hauptprogramm zurückgeben.
    

    Ich verstehe darunter folgendes:

    Ein Unterprogramm "DreieckEingabe" schreiben, welches die Punkte a,b,c einliest und anschließend per call-by-reference an das Hauptprogramm gibt.



  • Oder

    typedef struct PointStruct
    {
       double x,y;
    } Point;
    
    typedef struct DreieckStruct
    {
       Point p[3];
    } Dreieck;
    

    Je nachdem was dir passender erscheint.



  • Ja, du sollst eine Funktion schreiben, die den Benutzer zur Eingabe von 3 Punkten auffordert und das damit erstellte Dreieck mit call-by-reference an die main zurückgibt.



  • Hey Freunde,

    habe wieder einmal eine Frage und brauche eure Hilfe:

    Es geht um eine Aufgabe mit Strukturen..

    Hier die Aufgabenstellung:

    Ich habe hier folgendes verstanden:

    Ich solle eine Struktur "Point" in der Struktur "Dreieck" aufrufen und die Strukturvariablen nach Eingabe der Werte an das Hauptprogramm geben.

    Wie spreche ich die Strukturvariablen in einer Struktur an(bspw. der double Wert x von der Struktur "Point" welche in der Struktur "Dreieck" als A abgespeichert ist)?

    Noch wichtiger: Wie übergebe ich diese Werte per call-by-reference?

    Liebe Grüße..



  • Hattest du das nicht schon vor einigen Tagen gefragt (22:46:28 24.01.2011) ich hab gerade ein dickes Dejavu!

    Naja egal. Mit Pointer über -> ohne mit einem . . Weit bist du ja nicht gekommen... (Obwohl Dirk und ich dir schon zwei Möglichkeiten nannten.)

    Wie sieht denn dein Code aus?



  • Ich hatte so etwas ähnliches gefragt, stimmt. Die Aufgabenstellung war gleich bzw. die Sache ist gleich..

    Besonders weit bin ich nicht gekommen, das stimmt. Die Struktur in der Struktur und auch der Pointer ist kein problem, eher macht mir Sorgen die Übergabe an das Hauptprogramm..

    Wie würde bspw. der Prototyp aussehen?



  • void funktion(Dreieck *dreieck);
    Dreieck funktion();
    Dreieck* funktion();
    

    Erwartest du etwas anderes mystisches? Wie du möchtest kommt auf deinen Code an obwohl Variante 3 zu vermeiden ist.



  • Variante 1 habe ich versucht. Ich bekam aber ne Fehlermeldung dass "undeklarierte Variablen nicht als Prototyp genutzt werden können".



  • Das liegt dann aber an deinem Code, wonach ich schon gefragt habe.

    Wie sieht denn dein Code aus?



  • Versuch 1:

    #include<stdio.h>
    #include<stdlib.h>
    void DreieckEingabe(Dreieck dreieck);
    
    main(){
    }
    
    void DreieckEingabe(Dreieck dreieck){
    	//Deklaration von Punkt
    	typedef struct StructPunkt{
    		double x;
    		double y;
    	}Punkt;
    
    	//Deklaration von Dreieck
    	typedef struct StructDreieck{
    			Punkt A;
    			Punkt B;
    			Punkt C;
    		}Dreieck;
    }
    

    Fehlermeldung:
    aufg2.c:3: error: expected ‘)’ before ‘dreieck’
    aufg2.c:8: error: expected ‘)’ before ‘dreieck’



  • 😮 Was zum Teufel?

    1. Hast du meine Variante 1 nicht versucht wie man hier sehen kann.
    2. Hast du scheinbar keine Ahnung was du mit den Strukts machen sollst.
    3. Hast du bislang nichts geleisted! Eigenleistung?

    Ich finde das schon beinahe eine Frechheit, nein es ist eine 100%. Ich will/verlange implementation auch wenn diese voller Fehler ist, solange man guten willen und Leistung erkennt hilft man dir sicher gerne. So nicht.

    Edit: Lies ein Buch, informiere dich. Google ist dein Freund.



  • gaaaaaaaaanz langsam lieber User.

    Ich bin gerade deswegen in diesem Forum weil ich es nicht kann bzw. aus EIGENINITIATIVE lernen möchte.

    Wenn du mir helfen möchtest, dann bin ich dir dafür dankbar. Wenn nicht, ist das letzte was ich ein paar Tage vor der Klausur brauche eine Verspottung.

    Danke für deinen ironischen Tipp, den ich nicht wirklich brauche.



  • Ich hoffe das hilft dir...

    #include<stdio.h> 
    #include<stdlib.h> 
    
    //Deklaration von Punkt 
    typedef struct StructPunkt{ 
        double x; 
        double y; 
    }Punkt; 
    
    //Deklaration von Dreieck 
    typedef struct StructDreieck{ 
        Punkt pt[3]; 
    }Dreieck; 
    
    int main()
    { 
    	Dreieck dreieck;
    	char c = 'A';
    	int i;
    	Punkt tmp;
    
    	for(i = 0; i < 3; ++i)
    	{
    		printf("Geben Sie Punkt %c an:\n", c++);
    		scanf("%lf %lf", &tmp.x, &tmp.y);
    
    		dreieck.pt[i] = tmp;
    	}
    
    	c = 'A';
    	i = 0;
    	printf("\n\nDreieck hat folgende Punkte: \n");
    
    	for(i = 0; i < 3; ++i)
    	{
    		printf("Punkt %c x: %lf\nPunkt %c y: %lf\n", c, dreieck.pt[i].x, c, dreieck.pt[i].y);
    		c++;
    	}
    
    	return 0;
    }
    

    Edit: Ironische Tipps sind leider genau das was du brauchst. Ich denke du bekommst das mit den Funktionen selbst hin. Den Prototyp habe ich dir ja auch schon genannt. Und ich finde das diese 20 Zeilen hätten von dir kommen können. Das solltest du schon mal gesehen haben.



  • Hallo,

    Das Modell der Strukturen und die des Übergebens per call-by-reference ist mir vollkommen klar. Ich habe einen Programmcode für die Lösung der Aufgabe schon im Kopf. Nur fehlt mir die nötige Syntax dazu.

    Es ist ja auch so dass ich der beste Dichter sein kann, es mir aber nichts bringt, wenn die Person vor mir meine Sprache nicht spricht.



  • Dann bekommst du es halt noch mit Übergabe:

    #include<stdio.h> 
    
    //Deklaration von Punkt 
    typedef struct StructPunkt{ 
        double x; 
        double y; 
    }Punkt; 
    
    //Deklaration von Dreieck 
    typedef struct StructDreieck{ 
        Punkt pt[3]; 
    }Dreieck; 
    
    void eingabe(Dreieck *dreieck)
    {
    	Punkt tmp;
    	char c = 'A'; 
    	int i;
    
    	for(i = 0; i < 3; ++i) 
        { 
            printf("Geben Sie Punkt %c an:\n", c++); 
            scanf("%lf %lf", &tmp.x, &tmp.y); 
    
            dreieck->pt[i] = tmp; 
        }
    }
    
    void ausgabe(Dreieck *dreieck)
    {
    	char c = 'A'; 
    	int i;
    
    	printf("\nDreieck hat folgende Punkte: \n"); 
    
        for(i = 0; i < 3; ++i) 
        { 
            printf("Punkt %c x: %lf\nPunkt %c y: %lf\n", c, dreieck->pt[i].x, c, dreieck->pt[i].y); 
            ++c; 
        } 
    }
    
    int main() 
    { 
        Dreieck dreieck; 
    
    	eingabe(&dreieck);
    	ausgabe(&dreieck);
    
        return 0; 
    }
    


  • HighLigerBiMBam schrieb:

    Ich hoffe das hilft dir...

    Glaube ich kaum, solchen Code sollte man sich nicht als Beispiel nehmen:

    c = 'A';
        i = 0;
        printf("\n\nDreieck hat folgende Punkte: \n");
    
        for(i = 0; i < 3; ++i)
        {
            printf("Punkt %c x: %lf\nPunkt %c y: %lf\n", c, dreieck.pt[i].x, c, dreieck.pt[i].y);
            c++;
        }
    

    Klarer wäre so etwas:

    printf("\n\nDreieck hat folgende Punkte:\n");
        for (i = 0, c = 'A'; i < 3; ++i, ++c) {
            printf ("Punkt %c x: %lf\nPunkt %1$c y: %lf\n", c, dreieck.pt[i].x, dreieck.pt[i].y);
        }
    

    Anderer Ausschnitt:

    char c = 'A';
        ...
        for(i = 0; i < 3; ++i)
        {
            printf("Geben Sie Punkt %c an:\n", c++);
            scanf("%lf %lf", &tmp.x, &tmp.y);
    
            dreieck.pt[i] = tmp;
        }
    

    Klarer:

    for (i = 0, c = 'A'; i < 3; ++i, ++c) {
            printf ("Geben Sie Punkt %c an:\n", c);
            scanf ("%lf %lf", &dreieck.pt[i].x, &dreieck.pt[i].y);
        }
    

    Beäuge lieber misstrauisch vorgelöste Aufgaben,
    es gibt sie doch, diejen'gen Knaben,
    die nur glauben, dass sie haben,
    wunderbare Dichtergaben.


Anmelden zum Antworten