Prozedur



  • hallo,
    hab da mal wieder eine Aufgabe und komm nicht weiter:

    Ein zweidimensionales Feld muster mit Elementen vom Typ char soll dazu
    benutzt werden, um ein in beiden Dimensionen größeres Feld flaeche zu
    "parkettieren", d.h. unter wiederholter Anwendung des Musters auszufüllen. In dem folgenden Beispiel parkettiert ein 4x4-Muster eine 6x10-Fläche:

    matrix 4x4 mit beliebigen muster und leeren feldern.
    dieses soll dann in eine 6x10-matrix eingefügt werden!

    Für die Abmessungen des Füllmusters und der zu füllenden Fläche sollen die
    folgenden symbolischen Konstanten verwendet werden:
    #define MUSTER_ZEILEN 4
    #define MUSTER_SPALTEN 4
    #define FLAECHEN_ZEILEN 6
    #define FLAECHEN_SPALTEN 10

    a) Geben Sie geeignete Variablendefinitionen für muster und flaeche.

    *Meine Antwort:

    char muster [MUSTER_ZEILE][MUSTER_SPALTE];
    char flaeche [FLAECHE_ZEILE][FLAECHE_SPALTE];
    

    richtig??!*

    b) Schreiben Sie eine Prozedur eingabe, der ein Muster übergeben wird. Die
    Prozedur soll die Zeilen des Musters durch Abfrage des Benutzers von der
    Tastatur einlesen.

    Meine Antwort:

    void eingabe (char *muster1 [j]){
    int i, j; 
    char m= '\0';
    
         for (i=0; i<MUSTER_ZEILE; i++)
             for (j=0; j<MUSTER_SPALTE; j++){
                 printf("Bitte geben Sie ein Zeichen ein:");
                 scanf("%c", &m);
                  *muster1[i][j]=m;
    }
    

    [i]da fehlt doch was oder? und stimmen die prozedurparameter?*

    c) Schreiben Sie eine Prozedur parkettierung, der ein Muster und eine Fläche
    als Parameter übergeben werden. Die Prozedur soll die Fläche wie oben gezeigt
    mit dem Muster füllen.

    meine lösung:

    void parkettierung (char *muster_a[][], char *flaeche_a[][]){
    //und dann komm ich nicht weiter weil ich muss ja die prozedur eingabe
    //aufrufen, aber wie ruf ich diese auf?
    

    d) Schreiben Sie einen Aufruf der Prozedur parkettierung mit den Variablen
    aus Teilaufgabe (a).
    meine lösung:

    parkettierung(char muster[MUSTER_ZEILE][MUSTER_SPALTE], char flaeche[FLAECHEN_ZEILE][FLAECHEN_SPALTE]
    

    oder, wie ruft man prozeduren sonstn auf!?😕

    danke für eure hilfe!
    mfg



  • Hi,

    du hast bei deinen Funktionen ein paar Fehler gemacht:

    Zur ersten: eingabe();

    void eingabe (char *muster1 [j]){  // <-- j ist an dieser Stelle unbekannt, und macht auch keinen Sinn.
    
    void eingabe (char muster[MUSTER_ZEILEN][MUSTER_SPALTEN]) { // <-- das ist wohl besser so
    
    int i, j; 
         char m= '\0';
    
         for (i=0; i<MUSTER_ZEILE; i++)
             for (j=0; j<MUSTER_SPALTE; j++){
                 printf("Bitte geben Sie ein Zeichen ein:");
                 scanf("%c", &m);             
                 getchar();                    // <-- im Tastaturpuffer ist noch etwas drinnen. Unter Linux reicht das. Was unter Windows da noch zu tun ist, weiß ich nicht.
                 muster1[i][j]=m;              // <-- hier kommt der Stern * weg.
         }
    }
    

    Mit der obigen Funktion kannst du nun Muster einlesen. Eine Print-Funktion
    für Muster ist bestimmt hilfreich beim Debuggen.

    Die Funktionsdefinition deiner Funktion parkettierung() ist auch nicht korrekt.
    Mach das analog zur obigen Funktion eingabe(). Beim Übergeben von Arrays
    kann man höchstens die "äußerste" Größenbegrenzung weglassen. Alle anderen
    muß man explizit angeben.

    Also richtig wäre:

    void parkettierung (char muster_a[MUSTER_ZEILEN][MUSTER_SPALTEN], char flaeche_a[FLAECHEN_ZEILEN][FLAECHEN_SPALTEN])
    

    oder

    void parkettierung (char muster_a[][MUSTER_SPALTEN], char flaeche_a[][FLAECHEN_SPALTEN])
    

    Wie würde man nun die Funktionen aufrufen:

    int main(void) {
        char muster[MUSTER_ZEILEN][MUSTER_SPALTEN];    // <-- diese solltest du vielleicht noch initialisieren
        char flaeche[FLAECHEN_ZEILEN][FLAECHEN_SPALTEN]; // <-- diese solltest du vielleicht noch initialisieren
    
        eingabe(muster);
        parkettieren(muster, flaeche);
    }
    

    Ich hoffe mal, du kommst damit weiter.

    Gruß mcr

    PS: du solltest dir vielleicht mal überlegen, ob du einen Typen für muster und
    flaeche schreibst, damit du nicht immer die gesamte Array-Definition schreiben darfst. 😉


Log in to reply