Brauche Hilfe Bei Pflichtübung



  • Hi Leute,

    😃 😃 Erstmal Frohes Neues Jahre. 😃 😃

    brauche dringent hilfe bei meiner Pflichtübung für Digitaltechnik.
    Mein Verrückter Prof. hat den Vogel wieder mal abgeschossen.
    Müssen die Übung am Montag abgegeben. Und keine weiss was wir machen
    sollen.
    Hoffe Ihr könnt mir helfen.

    Schreibe euch mal die Komplette Übnung ins Forum.

    Danke schonmal im Voraus für eure Hilfe.

    Eurer Studi84

    Aufgabe 3.1 (Programmieraufgabe zu C-Datenstrukturen):
    Folgende Deklarationen und Definitionen für einen LIFO-Puffer (Last In, First Out, d.h. das zuletzt gespeicherte Element wird als erstes wieder herausgenommen) sind vorgegeben:

    #define LEN 20
    typedef unsigned short WORD;
    typedef struct {
    int Top; // Index Top-Element
    WORD Daten[LEN]; // Datenplatz
    } Buffer;
    typedef Buffer *HDLD;
    typedef enum {BufOK = 0, BufEmpty = 1, BufFull = 2 , BufError = 0xFF} BufStatus;

    Lösen Sie die folgenden Aufgaben möglichst knapp, aber mit Kommentaren:
    a) Eine Initialisierungsroutine „InitBuf“ soll dynamisch den notwendigen Speicherplatz für einen Datenpuffer des Typs Buffer anlegen1, die Datenstruktur sinnvoll initialisieren und dabei insbesondere die Verwaltungsvariable Top auf den Wert -1 setzen2 und als Ergebnis die Adresse des Datenpuffers zurückgeben. Die Signatur der Routine ist:

    HDLD InitBuf();

    b) Eine Schreibroutine „WriteElem“ soll ein übergebenes Datenwort „w“ an die Speicherstelle Top+1 in den Puffer schreiben, falls der Puffer noch Platz hat. Bei vollem Puffer wird „w“ nicht gespeichert. Der Rückgabewert teilt der aufrufenden Funktion mit, ob die Schreiboperation erfolgreich
    war oder nicht. Die Signatur ist:

    BufStatus WriteElem(HDLD buf, Word w);

    c) Eine Leseroutine „ReadElem“ soll das oberste Element aus dem Puffer entnehmen und in der als Referenz übergebenen Bytevariablen „w“ an die aufrufende Funktion zurückgeben, falls der der Puffer noch mindestens ein Element enthält. Bei leerem Puffer soll in „w“ ersatzweise das zuletzt gepufferte Element zurückgegeben werden. Der Rückgabewert teilt der aufrufenden Funktion mit, ob die Leseoperation erfolgreich war oder nicht. Die Signatur ist:

    BufStatus ReadElem(HDLD buf, WORD *w);

    d) Eine Prüfroutine ChkBuf soll überprüfen, ob die Datenwerte im Puffer zwischen zwei Grenzwerten „min“ und „max“ liegen. Falls alle Datenwerte zwischen den Grenzwerten liegen oder der Puffer leer ist, soll 0, falls mindestens ein Datenwert kleiner min ist, soll -1 sonst +1 zurückgegeben
    werden. Die Signatur ist:

    int ChkBuf(HDLD buf, WORD min, WORD max);

    Achtung: Zum Lesen der Datenwerte muss die Funktion „ReadElem“ genutzt werden. Beim Verlassen von „ChkBuf“ muss der Inhalt von „buf“ exakt mit dem Inhalt zum Zeitpunkt des Aufrufs von „ChkBuf“ übereinstimmen, d.h. der Inhalt von „buf“ darf aus Sicht der aufrufenden Funktion nicht verändert werden. Hinweis: Legen Sie mit „InitBuf“ einen lokalen temporären Testpuffer an.

    1 Zum Anlegen eines Speicherplatzes soll die C-Funktion calloc verwendet werden wie folgt:

    HDLD myBuffer = calloc(1,sizeof(Buffer));

    Mit diesem Aufruf wird der Variable myBuffer dynamisch Speicher der Größe von Buffer zugeordnet. Die Funktion calloc initialisiert alle Speicherstellen mit 0 (siehe Hilfe des Borland-Systems).
    2 Der Wert -1 kennzeichnet, dass der Datenpuffer keine Daten enthält (leer ist)





  • Ich machs dir fuer 5 Euro (Paypal) und verspreche dir 95% der Punkte in der Aufgabe.



  • 5 Euro?

    Dafür schalte ich ichtmal den Computer ein.

    Zeiten sind das heutzutage...



  • Entenwickler schrieb:

    Ich machs dir fuer 5 Euro (Paypal) und verspreche dir 95% der Punkte in der Aufgabe.

    Du verkaufst die recht billig



  • Wenn ich dafuer 20min brauchen wuerde waeren es immer noch 15 Euros/Stunde [unversteuert]. Wenn ich bedenke, dass ich sonst fuer 8 Euros Rotoren niete... Achja PC ist ja schon an 😉



  • Entenwickler schrieb:

    Wenn ich bedenke, dass ich sonst fuer 8 Euros Rotoren niete...

    Ich dachte du wickelst Enten 😕



  • THX 1138 schrieb:

    Entenwickler schrieb:

    Wenn ich bedenke, dass ich sonst fuer 8 Euros Rotoren niete...

    Ich dachte du wickelst Enten 😕

    Ja aber in der Ausbildung zum Entenwickler verdient man zu wenig, muss mich als Rotorennieter ueber Wasser halten 😞



  • hallo brauche die gleiche Übung,
    wäre also super, wenn du sie, wenn du sie bekommen hast ins netz stellen könntest



  • machen wir hier versteigerungen wer für wieviel programmiert -.- ?

    schreibt halt paar ansätze hin dann wird euch bestimmt geholfen, aber ohne ansätze usw. kommt ihr wohl nicht um eine bezahlung herum



  • aller anfang ist halt schwer. wenn ich wüsste, wie ich anfange, hätte ich nicht gefragt?



  • hi,
    diese pflichtübung musste ich heute auch abgeben.
    hab die auch noch nicht so 100%ig verstanden, aber trozdem mal bisl was dran rum gefummelt.
    ist exakt die selbe aufgabe und ich habe folgende lösung:

    #define LEN 20
    #include <stdlib.h>
    
    typedef unsigned short WORD;
    typedef struct {
    	int Top;
       WORD Daten[LEN];
    }Buffer;
    typedef Buffer *HDLD;
    typedef enum {BufOK=0, BufEmpty=1,BufFull=2, BufError=0xFF}BufStatus;
    
    //aufgabe A
    HDLD InitBuf();
    {
    	HDLD myBuffer=calloc(1,sizeof(Buffer)); //Anlegen eines Speicherplatzes
       myBuffer -> Top=-1; //Setzt den Buffer auf Top=-1
       return myBuffer; //Gibt die Adresse von myBuffer zurück
    }
    //A Ende
    //aufgabe B
    BufStatus WriteElem(HDLD Buf, WORD w)
    {
    	if (Buf == NULL) //für den Fall, das der Buffer nicht angelegt wurde
       {
       	return BufError;
       }
       else
       {
       	if (Buf->Top<LEN-1)
          {
          	Buf->Top++;
          	Buf->Daten[Top]=w; //Wert von 'w' wird in den Speicher geschrieben
             return BufOK; //Gibt wieder, das das Schreiben in den Buffer OK war
          }
          else
          {
          	return BufFull; //Gibt wieder, dass der Buffer voll ist
          }
    	}
    }
    //Ende B
    //Aufgabe C
    BufStatus ReadElem(HDLD Buf, WORD *w)
    {
    	if(Buf == NULL)     //Für den Fall, dass der Buffer nicht angelegt wurde
       {
    		return BufError;
       }
       else
       {
         	if	((Buf->Top)>buf->Top-1)
          {
         		w=buf->Daten[Top]; //Wert wird an w übergeben
          	buf->Top--; //dekrementierung von Top
             return BufOK;
          }
          else
          {
          	return BufEmpty;
          }
       }
    }
    //Ende C
    //Aufgabe D
    int ChkBuf(HDLD buf, WORD min, WORD max);
    
    	int Ergebnis=0;
       HDLD Temp=InitBuf;
       while(ReadElem(Buf,&w)!=BufEmpty)
       {
       	WriteElem(temp,w);
          if (w< min)
          {
          	Ergebnis=-1;     //wenn min kleiner daraus folgt -1
          }
          else
          {
          	if (w>max)
             {
             	Ergebnis=1;  //wenn max größer daraus folgt 1
             }
          }
    
    while (ReadElem(temp,&w)!=BufEmtpy)        //schreibt die Werte wieder zurück in den ersten Speicher
    {
    	WriteElem(buf,w);                       //Chk stimmt mit Buf exakt überein
    }
    return Ergebnis; //Gibt das Ergebnis wieder
    }
    
    //Ende D
    

    wäre euch sehr dankbar, wenn ihr en paar sachen erleutern könntet.
    zum beispiel.. ähm alles 😃
    nein quatsch.

    if (Buf->Top<LEN-1)
          {
          	Buf->Top++;
          	Buf->Daten[Top]=w; //Wert von 'w' wird in den Speicher geschrieben
             return BufOK; //Gibt wieder, das das Schreiben in den Buffer OK warif (Buf->Top<LEN-1)
          {
          	Buf->Top++;
          	Buf->Daten[Top]=w; //Wert von 'w' wird in den Speicher geschrieben
             return BufOK; //Gibt wieder, das das Schreiben in den Buffer OK war
    
    HDLD InitBuf();
    
    HDLD Temp=InitBuf;
    
    while(ReadElem(Buf,&w)!=BufEmpty)
       {
       	WriteElem(temp,w);
    

    besonders diese WriteElem und ReadElem geschichte hab ich noch nich so 100%ig aufm kasten. kann das jemand besser erklären als die "herkömmlichen" erklärungen, die zu finden sind ? also auch für doofe 😉



  • also alle erklärungen für doofe ^^


Anmelden zum Antworten