rekrusive Strukturen



  • Hallo,

    wir müssen folgendes programmieren:

    - Es gibt Produkte mit den Eigenschaften: Name, Preis und Hersteller
    - Es gibt Firmen mit den Eigenschaften: Name, Verkaufte Stückzahl pro Produkt und Name des Produktes

    Erstellen Sie zwei Strukturen die diese Eigenschaften abdecken:
    - die Struktur Produkt erhält einen Zeiger auf den Hersteller
    - Die Struktur Firma enthält einen zeiger auf die Hergestellten Produkte

    Schreiben Sie ein Programm das den mittleren Preis der verkauften Produkte einer Firma berechnet. (Zugriff über die Komponentenvariablen der beiden Strukturen.)

    Problem:

    Jetzt habe ich zwei Strukturen angelegt die einen Zeiger beinhalten der auf jeweil die andere Struktur zeigt (zeigen kann)

    struct lebkuchen;
    struct firma {
    	char name[101];
    	double anz;
    	struct lebkuchen *l;
    }flde={"feinste Lebkuchenbaeckerei dieser Erde"};
    struct lebkuchen {
    	char name[8];
    	double preis;
    	struct firma *f;
    };
    

    Jetzt lege ich drei Produkte an und Verknüpfe diese mit einem Hersteller

    int main () {
    
    	/* Deklaration der Strukturen */
    	struct lebkuchen leb1 = {"Schwarz", 0.5, &flde};
    	struct lebkuchen leb2 = {"Gewuerz", 0.25, &flde};
    	struct lebkuchen leb3 = {"Zucker", 0.2, &flde};
    

    Jetzt kommt das Problem

    leb1.f->anz = 200;
    printf("\n%lf", leb1.f->anz);
    leb2.f->anz = 100;
    printf("\n%lf - %lf", leb1.f->anz, leb2.f->anz);
    

    Ändere ich für ein Produkt die Menge der Produkte in der Struktur Hersteller, ändert sich das ja auch für die anderen Produkte. Ist ja ein und die selbe variable.

    Aber wie löse ich die Aufgabe.

    Meiner Ansicht nach besteht zwischen den beiden Strukturen eine n zu n beziehung, die man (bezogen auf Datenbabnken) ja nur mit einer Struktur (Tabelle) für die beziehungen lösen kann.

    Oder geht das auch anders ???

    Danke
    Junghjj



  • auf den ersten blick würde ich sagen, mach in der struktur firma noch ein Strukturarray für die Produkte.

    struct firmen_produkte
    {
         int Anzahl;
         struct lebkuchen *l;
    }
    
    struct Firma
    {
        char name[256];
        struct firmen_produkte *p;
    }
    

    Irgendwie in der Art halt.

    Oder du behältst deine Struktur und machst für die Anzahl und die Lebkuchen jeweils ein Array



  • auf den ersten blick würde ich sagen, mach in der struktur firma noch ein Strukturarray für die Produkte.

    Das wäre ja quasi die Beziehungstabelle/Struktur, aber die ist soweit ich das sehe nicht gefragt.

    > Oder du behältst deine Struktur und machst für die Anzahl und die Lebkuchen jeweils ein Array

    Dann müsste ich das array aber jedesmal vergrößern wenn Produkte dazukommen



  • das ist richtig. aber eine andere möglichkeit sehe ich nicht.
    Sonst kannst du jeder Firma nur ein Produkt zuordnen



  • Hab nochmal nachgefragt.

    Wir sollen in der Struktur firma mehrere Variablen machen, für jedes Produkt jeweils einen Zeiger auf die Struktur Lebkuchen und eine Variable wo die Stzückzahl drinsteht.

    Jetzt habe ich mir gedacht das ich ein mehrdimensionales Array mache wo ich den Zeiger auf das jweilige Produkt und die Zugehörige anzahl packe.

    Also: array[3][2]

    array[0][0] Zeiger auf leb1
    array[0][1] Anzahl verkaufter Stücke
    array[1][0] Zeiger auf leb2
    usw .....

    Nur wie bekomme ich das hin das im ersten Feld zeiger stehn und im zweiten die Anzahl



  • Habe es jetzt mit zwei Array Variablen geregelt.

    Das Programm funktioniert auch, lediglich der Preis wird nicht richtig ausgeben.
    Wenn ich

    printf("%lf",leb1.preis)
    

    oder

    printf("%lf",flde.l->preis);
    

    mache bekomme ich immer 1071644672 ausgegeben.

    Was mache ich falsch.

    Kompletter Code:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct lebkuchen;
    struct firma {
    	char name[101];
    	int anz[4];
    	struct lebkuchen *l[4];
    }flde={"feinste Lebkuchenbaeckerei dieser Erde"};
    struct lebkuchen {
    	char name[8];
    	double preis;
    	struct firma *f;
    }leb1 = {"Schwarz", 0.5, &flde},leb2 = {"Gewuerz", 0.25, &flde},leb3 = {"Zucker", 0.2, &flde};
    
    int main () {
    
    	/* Deklaration der Variablen */
    	double anzahl;		/* Gesamtanzahl */
    	double gpreis;		/* Gesamtpreis */
    	int i;				/* Zaehlervaraible */
    
    	/* Ausgabe des Kopfes */
    	printf("\nStrukturen\n");
    
    	/* Eintragen der Lebkuchen und Anzahlen in die Struktur Firma */
    	leb1.f->l[0]=&leb1;
    	leb1.f->anz[0]=200;
    	leb2.f->l[1]=&leb2;
    	leb2.f->anz[1]=40;
    	leb3.f->l[2]=&leb3;
    	leb3.f->anz[2]=10;	
    
    	/* Berechnen des mittleren Preises der Lebkuchen */
    	for (i=0;i<3;i++) {
    		anzahl += (flde.anz[i]);
    		gpreis += (flde.anz[i] + (flde.l[i]->*preis));
    
    		printf("\nAnzahl: %lf - Preis: %lf", anzahl, gpreis);
    	}
    
    	printf("\nMittlerer Preis: %.2lf\n", (gpreis / anzahl));
    
    	return 0;
    }
    


  • In der Zeile ist ein Fehler:

    gpreis += (flde.anz[i] + (flde.l[i]->*preis));
    

    Muss heißen

    gpreis += (flde.anz[i] + (flde.l[i]->preis));
    


  • Sauber. Ich glaub ich brauch mehr schlaf.
    Hab es hinbekommen.

    Danke an alle.


Anmelden zum Antworten