Informatik 1 - C -Programm basics



  • @Swordfish PRAKTIKUM INFORMATIK I / PROJEKTAUFGABE 3
    1 Datenrepräsentation und Suche in Datensätzen
    1.1 Einführung
    Die Grundlage für eine effiziente automatisierte Suche in Datenbanken ist die Strukturierung
    der einzelnen Datensätze. Ein Datensatz repräsentiert die Gesamtheit der Information, die zu
    einem Objekt oder Ereignis gespeichert ist. Ein Such-Kriterium kann sich auf eine einzelne
    Angabe in den Datensätzen beziehen oder mehrere Angaben verknüpfen.
    Wir betrachten in dieser Aufgabe den Speiseplan der Mensa Campus Derendorf an einem
    bestimmten Öffnungstag als einen Datensatz. Alle Mensa-Daten, mit denen Sie bei dieser
    Aufgabe arbeiten sollen, stammen von folgender Webseite:
    https://www.stw-d.de/en/gastronomie/speiseplaene/mensa-campus-derendorf/
    Auf dieser Seite veröffentlicht das Studierendenwerk Düsseldorf für die Mensa Campus
    Derendorf den aktuellen Speiseplan und die Speisepläne der folgenden vier Tage in englischer
    Sprache.
    Wir verfügen über eine Datenbank in der alle Speisepläne des Jahres 2019 gespeichert sind.
    Diese Datenbank ist für ein C-Programm im CVis Onlinecompiler zugänglich wenn die
    Header-Datei "mensadata_en.h" in das Programm eingefügt wird:
    #include "mensadata_en.h"
    Die Datensätze sind in C-Strukturen abgelegt. Jeder Datensatz (der Speiseplan eines Tages)
    ist ein Element eines Datenfelds. Die symbolische Konstante "NUMDAYS" gibt an, wie viele
    Datensätze aktuell vorhanden sind. Das Datenfeld ist in mensadata_en.h definiert als:
    const Tagesplan tp[NUMDAYS];
    In dieser Aufgabe sollen von den Daten aus dem Datenfeld tp lediglich die Einträge aus dem
    Sommersemester 2019 verwendet werden. Der erste Datensatz des Sommersemesters 2019 ist
    vom 01.03.2019 und hat den Indexwert 51 ( tp[51] ). Der letzte Eintrag aus dem
    Sommersemesters 2019 ist vom 30.08.2019 und hat den Indexwert 185 ( tp[185] ).
    Nachfolgend sind die Definitionen der Strukturen Mensa_Gericht und Tagesplan
    sowie der Datenfelder Angebot und tp aus mensadata_en.h gezeigt. Durch das
    #include von mensadata_en.h können Sie damit arbeiten.
    PRAKTIKUM Seite 2 INFORMATIK I / PROJEKTAUFGABE 3
    1.2 Aufgabenstellung
    Sie sollen ein Programm schreiben, das für ein bestimmtes Mensa-Gericht eine Statistik für
    das Sommersemester 2019 erstellt.
    Im ersten Schritt sollen Sie in Ihrem Programm eine Struktur-Variable vom Typ Tagesplan
    definieren. Diese Variable soll tp123456 heißen. 123456 steht für Ihre Matrikelnummer
    und muss von Ihnen entsprechend ersetzt werden. Die Variable muss mit den aktuellen
    Speiseplan-Daten für den Tag Ihres Präsenztermins 4 gefüllt werden. Die Daten bekommen
    Sie von der Webseite
    https://www.stw-d.de/en/gastronomie/speiseplaene/mensa-campus-derendorf/
    sobald der Speiseplan für den Tag Ihres Präsenztermins 4 online ist. Bitte beachten Sie, dass
    Sie die englische Version des Speiseplans benutzen sollen. Die Kennzeichnungen über
    Zusatzstoffe und Allergene stehen hier:
    #define NUMDAYS 252 /* Anzahl der Datensätze für Mensa-Öffnungstage /
    /
    Alle möglichen Mensa-Angebotskategorien für einen Tag /
    const char Angebot[][50] =
    {
    "void" /Nr. 0, markiert eine leere Mensa-Essen-Datenstruktur/,
    "Essen I" /Nr. 1/, "Essen II" /Nr. 2/, "Eintopf" /Nr. 3/,
    "Dessertauswahl" /Nr. 4/, "Pizza" /Nr. 5/,
    "Beilagenauswahl" /Nr. 6/, "Aktionsstand" /Nr. 7/,
    "Grill" /Nr. 8/, "Gratin" /
    Nr. 9*/, "zur Pizza" /* Nr. 10*/,
    "GreenCorner" /Nr. 11/, "Sonstiges" /Nr. 12/
    };
    /* Die Struktur "Mensa_Gericht" enthält alle Daten für ein bestimmtes
    Angebot /
    typedef struct {
    int angebot_nr; /
    Nummer der Angebotskategorie /
    int hauptgericht; /
    1= Hauptgericht / 0= kein Hauptgericht /
    char bezeichnung[100]; /
    Bezeichnung des Gerichts, z.B. "Obstbecher /
    /
    Kennzeichnung ist eine Zeichenkette mit einem oder mehreren
    Buchstaben.
    Gibt es keine Kennzeichnung dann ist die Zeichenkette leer "" /
    char kennzeichnung[10]; /
    z.B. "FA" fuer fleischlos mit Alkohol /
    /
    Max. 20 Angaben (Zahlen) fuer Zusatzstoffe. 0 ! keine Angabe /
    char zusatzstoffe_und_allergene[20][4];
    int centpreise[3]; /
    Preise in Euro-Cent:
    centpreise[0]=Studierendenpreis /
    /
    centpreise[1]=Bedienstetenpreis, centpreise[2]= Gaestepreis /
    } Mensa_Gericht;
    /
    Die Struktur "Tagesplan" enthält das komplette Mensa-Angebot eines
    bestimmten Tages /
    typedef struct {
    int wochentag; /
    Nr. des Wochentags, 1=Montag, 2=Dienstag, ... /
    int kalenderwoche; /
    Nr. der Kalenderwoche (KW) /
    int datum[3]; /
    Datum als {tag, monat, jahr} /
    Mensa_Gericht gerichte[15]; /
    Max. 15 Gerichte an einem Tag /
    } Tagesplan;
    const Tagesplan tp[NUMDAYS] = ...
    PRAKTIKUM Seite 3 INFORMATIK I / PROJEKTAUFGABE 3
    https://www.stw-d.de/wp-content/uploads/2017/07/Zeichenerklaerung.pdf
    Hinweis:
    Es gibt verschiedene Möglichkeiten dafür, die Daten für den Tag Ihres Präsenztermins 4 in
    die Variable vom Typ Tagesplan zu schreiben. So können Sie z.B. eine Folge von
    Programmanweisungen programmieren, die jeweils eine Komponente in der TagesspeiseplanStruktur mit dem (den) gegebenen Wert(en) besetzt. Oft ist es einfacher, eine Strukturvariable
    bei ihrer Definition mit den vorgegebenen konstanten Werten per Initialisierung zu belegen.
    Diese Initialisierung erfolgt ganz ähnlich wie bei Datenfeldern.
    Siehe z.B.: http://c-buch.sommergut.de/Kapitel13/Strukturen.shtml.
    In der Arbeitsunterlage für das Praktikumsmodul 4 ist entsprechend ein Beispiel gezeigt, wie
    einer Strukturvariablen eine Kopie einer "Struktur-Konstanten" zugewiesen wird. Im Internet
    finden sich dazu Informationen unter dem Stichwort "compound literal". Am Beispiel der
    Struktur "STUDI" aus dem Praktikumsmodul 4 sind nachfolgend die alternativen
    Möglichkeiten von Initialisierung und Zuweisung eines compound literals gezeigt:
    Das nachfolgende Beispielprogramm zeigt, wie die Werte der einzelnen Komponenten in den
    Datenstrukturen ausgegeben und angezeigt werden können. Mit diesem Beispielprogramm
    können Sie sich den Inhalt des ersten Datensatzes in der Datenbank anzeigen lassen:
    typedef struct {
    char name[50]; /
    max. 49 Zeichen lang /
    int matrikelnummer; /
    6-stellige Matrikelnummer /
    char geschlecht; /
    entweder w, m oder x /
    } STUDI;
    /
    Strukturvariable ich: Definition und Initialisierung */
    STUDI ich = {"Mein Name", 123456, 'f'};

    ich = (STUDI){"Mein Name", 123456, 'f'}; /* Alternative */
    ich = (STUDI){.matrikelnummer=123456,
    .name="Mein Name", .geschlecht='f'}; /Alternative/
    PRAKTIKUM Seite 4 INFORMATIK I / PROJEKTAUFGABE 3
    Für eines der Hauptgerichte am Tag Ihres Präsenztermins 4 sollen Sie ermitteln, wie oft
    dieses Gericht im Sommersemester 2019 angeboten wurde. Es muss eines der Gerichte
    "Essen I" /Nr. 1/, "Essen II" /Nr. 2/ oder "Eintopf" /Nr. 3/ sein, siehe Datenfeld
    Angebot, das in mensadata_en.h definiert ist. Die Nummer des Gerichts (1, 2, oder 3) soll
    als Benutzereingabe programmiert werden, andere Zahlen soll Ihr Programm ignorieren. Bei
    der Suche in der Datenbank müssen Sie jeweils die ersten N Zeichen der Bezeichnung
    vergleichen. Dafür sollen Sie die Funktion strncmp() aus der Standardbibliothek
    verwenden:
    http://www.c-howto.de/tutorial/strings-zeichenketten/string-funktionen/strings-vergleichn/
    Der dritte Parameter dieser Funktion ist die Anzahl der Zeichen, die verglichen werden sollen.
    Nur wenn alle diese Zeichen gleich sind liefert der Funktionsaufruf den Wert 0 (Null).
    Wie viele Zeichen für den Vergleich notwendig sind, also das N, müssen Sie festlegen. Auf
    jeden Fall sollen Sie die Vergleiche in der Datenbank mit Funktionsaufrufen in der Form
    strncmp(tp123456.gerichte[...].bezeichnung, ... , N) durchführen.
    Hinweis:
    Die Komponente angebot_nr in der Struktur Mensa_Gericht ist mit dem Wert 0 (Null)
    belegt, wenn die Struktur "leer" ist. Bei einer Suche durch die Strukturen muss dieser Fall
    immer zuerst abgefragt werden, um nicht eventuell Werte aus einer "leeren" Struktur in die
    Statistik aufzunehmen. Wenn ein Datenbank-Eintrag (Struktur Tagesplan) in der ersten
    #include <stdio.h>
    #include "mensadata_en.h"
    int main(void)
    {
    int j, i;
    Tagesplan bsp=tp[0];

    printf("Datum: %i.%i.%i KW:%i Wochentag:%i\n",
    bsp.datum[0], bsp.datum[1], bsp.datum[2],
    bsp.kalenderwoche, bsp.wochentag);
    for(j = 0; j < 15 && bsp.gerichte[j].angebot_nr>0; j++){
    Mensa_Gericht gbsp = bsp.gerichte[j];
    printf("\nAngebot: %s, %s\n%s\n",
    Angebot[gbsp.angebot_nr],
    gbsp.hauptgericht ?
    "Hauptgericht" : "kein Hauptgericht",
    gbsp.bezeichnung);
    printf("Kennzeichnung: %s\n", gbsp.kennzeichnung);
    printf("zusatzstoffe_und_allergene: ");
    for (i=0; i<20 && gbsp.zusatzstoffe_und_allergene[i]!=0; i++)
    printf("%s ", gbsp.zusatzstoffe_und_allergene[i]);

    printf("\nStudierendenpreis (Cent): %i", gbsp.centpreise[0]);
    printf("\nBedienstetenpreis (Cent): %i", gbsp.centpreise[1]);
    printf("\nGaestepreis (Cent): %i\n", gbsp.centpreise[2]);
    }
    return 0;
    }
    PRAKTIKUM Seite 5 INFORMATIK I / PROJEKTAUFGABE 3
    Komponente des Datenfelds gerichte die Angebotskategorie "void" (0) hat
    (tp[...].gerichte[0].angebot_nr==0) , dann können Sie davon ausgehen, dass dieser
    Eintrag überhaupt kein Gericht enthält. Das kann z.B. der Fall sein, wenn die Mensa
    geschlossen war. In allen anderen Fällen können Sie davon ausgehen, dass in dem Datenfeld
    gerichte "Essen I" den Index-Wert 0 hat, "Essen II" den Index-Wert 1 und "Eintopf" den
    Index-Wert 2.
    Für die Statistik zu dem von Ihnen ausgewählten Gericht muss nicht nur die Anzahl des
    Vorkommens im Sommersemester 2019 ermittelt werden, sondern auch der Mittelwert des
    Wochenabstands zwischen zwei Tagen, an dem dieses Gericht im Speiseplan stand. Dieser
    Mittelwert drückt aus, wie viele Wochen im Mittel vergehen, bis dieses Gericht wieder im
    Speiseplan zu finden ist. Als Anzahl der Wochen zwischen zwei Speiseplaneinträgen für ein
    Gericht können Sie die Differenz der Kalenderwochenangaben in der Struktur Tagesplan
    verwenden.
    Die Angaben in der kleinen Statistik für diese Aufgabe bestehen aus drei Dateneinheiten:
    • eine Zeichenkette für die Bezeichnung des Gerichts
    • ein int-Wert für die Anzahl des Vorkommens des Gerichts im Sommersemester 2019
    • ein float-Wert für den mittleren Wochenabstand dieses Angebots in der Mensa
    Eine weitere Teilaufgabe dieser Projektaufgabe ist es, für die Angaben in der Statistik eine
    Datenstruktur zu definieren und zu benutzen. Die Datenstruktur soll mit Hilfe von typedef
    definiert werden, ein Datenfeld von Typ char enthalten sowie zwei weitere Komponenten
    von Typ int bzw. float. Die Ergebnisse Ihrer Datenbanksuche müssen Sie in einer
    Variablen vom Typ dieser Struktur ablegen. Die Inhalte dieser Struktur-Variablen sind
    anschließend als Programmausgabe dem Benutzer mitzuteilen.
    Folgende Vorgaben muss Ihr Programm zusätzlich einhalten:
    • Die erste Programmanweisung (hinter den Definitionen der Programmvariablen)
    soll mit der Funktion printf eine Ausgabezeile erzeugen, bestehend aus dem
    Programm-Titel "Suchen im Mensa-Speiseplan Sommersemester 2019", Ihrem Namen
    (Vor- und Nachname) und Ihrer Matrikelnummer.
    • Alle Variablen in Ihrem Programm sollen am Anfang des Programmtextes
    definiert werden. Das ist nach der Kopfzeile des Hauptprogramms ("main") und vor
    der ersten Programmanweisung. Direkt danach soll folgende Kommentarzeile stehen:
    /* Hauptprogramm: Ende der Variablen-Definitionen */
    • Die Namen der Variablen, Datenstrukturen und eigenen Typen in Ihrem Programm
    müssen mindestens 5 Zeichen lang sein. Die Variablennamen dürfen keine
    Großbuchstaben enthalten. Gleiche aufeinanderfolgende Zeichen dürfen in den
    Variablennamen höchstens zweimal vorkommen ("ttt00" wäre nicht erlaubt!). Sie
    sollen sich Variablennamen überlegen, die mit der Verwendung der jeweiligen
    Variable in Zusammenhang stehen. Insbesondere sollen sich die Unterschiede der
    Namen zweier Variablen aus deren Verwendung im Programm ableiten lassen.
    PRAKTIKUM Seite 6 INFORMATIK I / PROJEKTAUFGABE 3
    Einfaches Durchnummerieren, z.B. variable1, variable2 ...., ist nicht erlaubt, ebenso
    wenig sinnfreie Namen wie z.B. torsten, florian oder franziska.
    • Ihr Programm soll nur solche Ausgaben erzeugen, die in der Aufgabenstellung explizit
    gefordert werden



  • Es reichen mir auch nur Teilsachen damit ich irgendwas abgebe ...



  • @Lordkurd sagte in Informatik 1 - C -Programm basics:

    Diese Variable soll tp123456 heißen. 123456 steht für Ihre Matrikelnummer
    und muss von Ihnen entsprechend ersetzt werden.

    Hab den Rest nicht gelesen, mir ist nur das hier ins Auge gesprungen 🙂



  • hab bis 18 uhr zeit bitte ..



  • wer mir hilft kriegt auch 20 Euro, ist nur eine arbeit von 5-10 Minuten



    1. dauert es mindestens 10 minuten, die aufgabe durchzulesen
    2. hättest du vielleicht vor 2 wochen fragen sollen
    3. hat das studium die aufgabe, diejenigen auszusortieren, die entweder nicht die fähigkeiten, oder die motivation haben, um später in dem beruf zu arbeiten.


  • @Lordkurd sagte in Informatik 1 - C -Programm basics:

    ist nur eine arbeit von 5-10 Minuten

    Scherzkeks



  • @Lordkurd sagte in Informatik 1 - C -Programm basics:

    wer mir hilft kriegt auch 20 Euro, ist nur eine arbeit von 5-10 Minuten

    Studierst du BWL?



  • Keine Panik, dein Freund hat das alles genau eingeplant. Er meldet sich bei dir pünktlich 5 vor 18h.



  • Ich frag nach hilfe, was macht ihr auf einen drauf hacken..
    Ich studiere kein bwl
    wie ich schon sagte der Anfang würde mir reichen damit ich teilpunkte bekomme.
    nur weil ich die Arbeit verschätzt habe und vil auf 20-30 min Arbeit ankommt könnte man trz sich über 20 euro freuen und das gewissen haben jemanden geholfen zu haben



  • @Lordkurd sagte in Informatik 1 - C -Programm basics:

    und das gewissen haben jemanden geholfen zu haben

    also ich würde eher glauben, dir geholfen zu haben, wenn ich dir die aufgabe eben nicht mache.



  • @Wade1234
    Informatik ist 0 relevant für das Studium unser Prof sagt es selber,
    lernt das einmalig und habt es hinter euch und mit einigen Sachen kommt man garnicht klar
    Info bzw C-Programm ist mein schwäche ..



  • @Lordkurd sagte in Informatik 1 - C -Programm basics:

    Ich frag nach hilfe, was macht ihr auf einen drauf hacken..

    Einfach ignorieren. Ist nicht persönlich. Ich find die Situation tatsächlich irgendwie witzig (kennen wir alle schon was ähnliches aus eigener Erfahrung), und das ist für mich auch eine Möglichkeit, Stress abzubauen.
    Was die konkrete Aufgabe betrifft, ich persönlich finde das viel zu uninteressant, um mir das überhaupt durchzulesen, und ich verdiene so viel, dass mich 20€ überhaupt nicht reizen, schon gar nicht an einem Feiertag.

    @Wade: ich kenne sowas schon auch... Wir hatten im Informatikstudium auch genügend Vorlesungen, die ziemlich fachfremd waren und die ich extrem lästig fand. Ja, das ist kein Grund, 2 Stunden vor der Abgabe mit dem Thema anzufangen, aber ich kann den TE auch gut verstehen.

    Normalerweise gibt´s hier schon paar Leute, die solche Fragen beantworten, musst vielleicht noch etwas warten.



  • @Mechanics Leider muss ich es in 27 minuten abgeben, bin Student für mich ist 20 Euro die welt ( 2x feiern")



  • @Lordkurd sagte in Informatik 1 - C -Programm basics:

    ( 2x feiern")

    Das ist ein Troll oder? Bitte lass das ein Troll sein.



  • @Bashar 4 Euro eintritt 6 Euro trinken, Student ohne Barfög ist leider so



  • @Lordkurd dass studenten feiern gehen, ist ein übles klischee. jedenfalls für die, die das studium auch ernst nehmen und bestehen wollen.



  • @Wade1234 Abgesehen von Info läuft es echt stark jede Klasur unter 2,5 bestanden



  • Was studierst du überhaupt?



  • @Mechanics Maschinenbau


Anmelden zum Antworten