Hilfe bei C-Programmierung Aufgabe



  • Hallo, ich bin Student im ersten Semester (WING) und habe die Aufgabe in Programmierung bekommen. Das Problem ist, dass ich sehr wenig Ahnung vom Programmieren habe und ich brauche Hilfe bei den Aufgaben. Ich habe es jetzt mehrere Stunden lang mehrmals versucht, aber ich schaffe es nicht

    Ein Teil der Aufgabe lautet:
    Deklarieren Sie die Aufzählungen rolllaeden [zu, auf], wetter [sonnig, regnerisch, bewoelkt] sowie bewohner [abwesend, anwesend]. Die Aufzählung bewohner hat den ASCII Wert ‘n‘ für abwesend und ‘j‘ für anwesend.
    Deklarieren Sie die Struktur zeit mit den Elementen monat, stunde und minute als Ganzzahlen.

    Sensoren: Definieren Sie die Variablen akt_temperatur als Gleitkommazahl, akt_wetter als wetter, anwesenheit als bewohner sowie akt_zeit als zeit.
    Aktoren: Definieren Sie die Variablen akt_rollladen als rollaeden und akt_heizung als Ganzzahl.

    Nutzen Sie die Bildschirmeingabe, um die Variablen akt_temperatur, akt_wetter und anwesenheit einzulesen. Bei akt_temperatur sollen eine Gleitkommazahl, bei akt_wetter eine Ganzzahl und bei anwesenheit ein Zeichen eingelesen werden. Schreiben Sie außerdem ein Unterprogramm init_zeit mit dem Rückgabewert vom Typ zeit. In der Funktion sollen die Elemente der Struktur zeit per Bildschirmeingabe eingelesen und eine somit initialisierte Instanz von zeit zurückgegeben werden. Initialisieren Sie mithilfe dieser Funktion die Variable akt_zeit.

    Kann jemand bitte mir da weiterhelfen? Ich komme damit nicht klar.


  • Mod

    Fang' doch erst einmal mit den ganzen Definitionen an. Da muss man ja noch gar nichts tun, da kann man nicht viel falsch machen. So können wir auch ein bisschen einschätzen, was dein Kenntnisstand ist.



  • Also bis jetzt habe ich ich das geschafft aber ich weiß nicht ob das stimmt und es ist nicht vollständig. Ich weiß nicht wie ich das mit Zeit, ASCII oder Unterprogramm machen kann.

    #include <stdio.h>

    // Aufgabe 1a: Definition von Aufzaehlung und Struktur
    enum rollaeden {zu,auf};
    enum wetter {sonnig,regnerisch,bewoelkt};
    enum bewohner {abwesend,anwesend};
    struct zeit {
    char monat;
    char stunde;
    char minute;
    };

    // Aufgabe 1c: Funktion init_zeit

    void init_zeit(){
    printf(""); scanf("%f",&);
    }

    int main(void)
    {
    // Aufgabe 1b: Deklaration der Variablen
    float akt_temperatur;
    char akt_wetter;
    int anwesenheit;
    int akt_zeit;

    int akt_rollladen;
    int akt_heizung;



  • Deklarieren Sie die Struktur zeit mit den Elementen monat, stunde und minute als Ganzzahlen.

    struct zeit { int monat,stunde,minute; };
    

    wäre doch schon mal ein Anfang.



  • // Aufgabe 1a: Definition von Aufzaehlung und Struktur
    enum rollaeden {zu,auf};
    enum wetter {sonnig,regnerisch,bewoelkt};
    enum bewohner {abwesend,anwesend};
    struct zeit { int monat,stunde,minute; };

    Wäre das jetzt für Aufgabe 1a richtig ? Was ist denn mit "Die Aufzählung bewohner hat den ASCII Wert ‘n‘ für abwesend und ‘j‘ für anwesend." gemeint? Soll man nicht auch nicht ein Datentyp für zu, auf, ... usw. schreiben?



  • Standardmäßig bekommen die Aufzählungselemente intern Nummern von 0 an aufsteigend zugewiesen (es sind dann quasi Konstanten), man kann jedoch diese auch selber zuweisen:

    enum rollaeden { zu = 0,auf = 1}; // oder beliebig andere Werte
    

    So kannst du dann auch für bewohner die Zuordnung vornehmen (auch mit Zeichenliteralen!).
    Testen kannst du das dann mit

    // gibt die Werte als Zahlen aus
    printf("abwesend: %d\n", abwesend);
    printf("anwesend: %d\n", anwesend);
    
    // oder gibt die Werte als Zeichen aus
    printf("abwesend: %c\n", (char)abwesend);
    printf("anwesend: %c\n", (char)anwesend);
    


  • Also jetzt für 1b ich muss die Variablen akt_temperatur als Gleitkommazahl, akt_wetter als wetter, anwesenheit als bewohner sowie akt_zeit als zeit und die Variablen akt_rollladen als rollaeden und akt_heizung als Ganzzahl definieren.

    Eine Definition von Variablen ist z.B. wie int a. In Aufgabenstellung steht aber, muss akt_wetter als wetter definieren. Was versteht man überhaupt unter "akt_" Wie soll ich z.B. akt_wetter als wetter definieren
    Ich habe so gemacht:

    int main(void) {
    float akt_temperatur;
    char akt_wetter;
    int akt_anwesenheit;
    int akt_zeit;
    int akt_rollladen;
    int akt_heizung;


  • Mod

    muss akt_wetter als wetter definieren.

    char akt_wetter;

    Wo kommt dann char her?
    An dieser Stelle solltest du mal wiederholen, was ein enum überhaupt ist, und was man damit machen kann. Dann kommst du auch darauf, was hier gemeint ist.

    Was versteht man überhaupt unter "akt_"

    Ist bloß ein Name, den sich dein Lehrer ausgedacht hat. Namen haben keine technische Bedeutung.



  • Mit enum wetter {sonnig,regnerisch,bewoelkt}; hast du einen neuen Datentyp wetter definiert und davon sollst du eine Variable definieren (so daß diese eine der drei Werte annehmen kann).
    Das akt steht für aktuell (im englischen current), also die aktuell geltenden Zustände.

    Hast du denn nicht ein Buch oder Skript, anhand dessen du C lernst?

    PS: Hier im Forum solltest du die Code-Tags benutzen (ComboBox [mit C++ vorbelegt], sowie den Button </> zum Einfügen der Code-Tags)!
    Du kannst auch noch nachträglich deine Beiträge mittels des 3-Punkte Menüs ("Bearbeiten") editieren.



  • Dieser Beitrag wurde gelöscht!


  • Also ich habe da ein Buch und nutze ich auch, aber bei Anwendungsbeispiele hilft es mir wenig. Aber ich habe jetzt recherchiert und kam darauf:

    int main(void) {
        // Aufgabe 1b: Deklaration der Variablen
        float akt_temperatur;
        int akt_heizung;
        enum wetter akt_wetter;
        enum bewohner anwesenheit;
        struct zeit akt_zeit;
        enum rollaeden akt_rollladen;
    

    Für der Letzen Teil der Aufgabe habe ich das:

    printf("Wieviel Grad sind draussen?"); scanf("%f",&akt_temperatur);
    printf("Wetter [0: Sonne, 1: Regen, 2: Wolken]?"); scanf("%d",&akt_wetter);
    printf("Ist jemand zuhause [j/n]?"); scanf("%c",&akt_wetter);
    
    

    Aber bei der Teil mit "Unterprogramm init_zeit mit dem Rückgabewert vom Typ zeit" weiß ich nicht was ich da mache.

    Es tut mir echt Leid, dass ich Ihnen störe, und vielen vielen Dank für Ihre Hilfe!


  • Mod

    @hilfehwi sagte in Hilfe bei C-Programmierung Aufgabe:

    Aber bei der Teil mit "Unterprogramm init_zeit mit dem Rückgabewert vom Typ zeit" weiß ich nicht was ich da mache.

    Würdest du es verstehen, wenn da stünde "Schreiben Sie eine Funktion foo mit Rückgabetyp int"? Falls ja, dann ist es nur eine Frage, die Bezeichner und Typen zu tauschen. Falls nein, solltest du nochmal das Kapitel über Funktionen/Unterprogramme lesen.

    Was ist denn das für ein Buch? "Unterprogramm" ist ein ziemlich archaischer Begriff.



  • Ich nutze das Buch "C als erste Programmiersprache" Das ist was zu uns empfohlen wurde. Und nein Ihre Frage verstehe ich nicht. Mal schauen ich lese über Unterfunktionen, hoffentlich kirege ich das.

    Aber selbst die Aufgabe: "Schreiben Sie außerdem ein Unterprogramm init_zeit mit dem Rückgabewert vom Typ zeit. In der Funktion sollen die Elemente der Struktur zeit per Bildschirmeingabe eingelesen und eine somit initialisierte Instanz von zeit zurückgegeben werden. Initialisieren Sie mithilfe dieser Funktion die Variable akt_zeit."
    Ich kann da nur das anfangen:

    void init_zeit(struct  zeit){
        printf(""); scanf("%f",&);
    

    Aber ich lese jetzt mehr darüber...



  • int foo;
    

    Das ist die Deklaration einer Variable Namens "foo". Sie ist vom Typ int.


    enum wetter { sonnig, regnerisch, bewoelkt };
    

    Jetzt hast Du einen Typ Namens "enum wetter" ...

    enum wetter bar;
    

    Das ist die Deklaration einer Variable Namens "bar". Sie ist vom Typ enum wetter.



  • Jetzt für diese Teilaufgabe:
    "Schreiben Sie außerdem ein Unterprogramm init_zeit mit dem Rückgabewert vom Typ zeit. In der Funktion sollen die Elemente der Struktur zeit per Bildschirmeingabe eingelesen und eine somit initialisierte Instanz von zeit zurückgegeben werden. Initialisieren Sie mithilfe dieser Funktion die Variable akt_zeit."

    habe ich das geschrieben. Es gibt da aber eine Fehler oder mehrere. Ich in YouTube und Google geguckt aber trotzdem fehlt etwas oder ist etwas falsch.

    void init_zeit(struct zeit){
        int monat;
        int stunde;
        int minute;
        printf("Gebe den Monat ein:"); scanf("%d",&monat);
        printf("Gebe die Zeit im Format hh:mm ein:"); scanf("%d : %d",&stunde, &minute);
        return(zeit)
    }
    
    

  • Mod

    Vereinfachen wir das. Wäre dies für dich eine sinnvolle Funktion? Falls nein, was ist daran falsch?

    void foo(int i)
    {
      int j = 1;
      return i;
    }
    


  • ist i hier zweimal anders deklaniert? und j ist undeklaniert?



  • Nein. Aber was ist denn hierbei der Rückgabetyp?


  • Mod

    @hilfehwi sagte in Hilfe bei C-Programmierung Aufgabe:

    ist i hier zweimal anders deklaniert? und j ist undeklaniert?

    Häh, was? Vielleicht waren i und j zu ähnlich.

    void foo(int irgendein_integer)
    {
      int ein_vollkommen_anderer_integer = 1;
      return irgendein_integer;
    }
    

    Analyse immer noch die gleiche?

    Und wichtiger: Findest du dein Programm darin wieder?



  • @SeppJ Der Return wert wurde nicht verändert?


Anmelden zum Antworten