Hilfe bei einer Übung!



  • Hey Leute,
    ich habe zurzeit im Studium eine Übungs-Aufgabe zu lösen. Doch das problem ist das ich es komplett nicht versteh. Ich habe in wenigen wochen Prüfung und es ist laut Professor eine ähnliche Aufgabe zu lösen.
    Ich habe bereits alle Aufgaben gelöst nur das Programmieren fällt mir extrem schwer. Das größte problem ist die Vorgehensweise, wo soll ich nur anfangen?
    Bitte helft mir, das ist die einzige vorbereitung auf die prüfung.

    Es handelt sich um eine C++ Win32 Konsolenanwendung

    *VERSUCHSZIEL

    Ziel des Praktikums dieses Moduls ist das Kennenlernen von Vorgangs- und Prozessmodellen zur Erstellung von Software einschließlich der zugehörigen Werkzeuge und Verfahren. Es werden grundlegende Fertigkeiten zur Erstellung von Software vermittelt

    Im ersten Schritt sollen für eine zu erstellende Software die notwendigen Funktionen analysiert werden und eine Lösung mittels Architektur- und Feinentwurf erstellt werden.

    AUFGABENBESCHREIBUNG

    Ein System zur Lichtsignalerzeugung besteht aus 16 einzeln ansteuerbaren LED und vier Tasten.
    Es sollen folgende Lichtprogramme realisiert werden:

    - Lauflicht mit einer LED von links nach rechts
    - Lauflicht mit einer LED von rechts nach links
    - Lauflicht mit einer Lücke von links nach rechts
    - Lauflicht mit einer Lücke von rechts nach links
    - Lauflicht mit einer LED von links nach rechts und zurück
    - Lauflicht mit einer Lücke von links nach rechts und zurück

    Die Tasten dienen zur Auswahl der LED-Programme und Festlegung der Zeitperioden. Die Periode der Weiterschaltung basiert auf dem Grundtakt einer Sekunde und soll in Schritten auf bis zu 10 Sekunden erhöht werden können.
    Der Zugang zur Hardware wird über bereits realisierte Prozeduren / C-Funktionen bereitgestellt.

    Die LED werden in einem Feld von 16 Zeichen (char) abgebildet. Die Ausgabe der Daten auf die LED erfolgt über die Prozedur :
    printLED()
    Die Tasten werden mit der Funktion readKey() abgefragt. Es werden die Werte 0 – keine Taste, 72 - Taste hoch (↑), 80 - Taste runter (↓), 75 – Taste links (←) und 77 – Taste rechts (→) zurückgegeben.
    2
    Über die Funktion get_Time() wird eine Zeitinformation bereitgestellt (ganzzahlig 32 Bit). Die Zahl ändert sich im Sekundentakt.
    Entwerfen Sie eine geeignete Architektur und führen Sie einen Grob- und Feinentwurf der Software durch. Die Modelle dienen für eine spätere Umsetzung in ein einfaches C-Programm.*

    Dazu haben wir eine Quelldatei bekommen die wir zum erstellen des Programms verwenden sollen.
    http://ul.to/ew6deakk

    Bitte helft mir!! 😞



  • Fang doch einfach mal an und frage bei konkreten Problemen nach.

    Und wenn es nicht zu viel Code ist bitte im Beitrag posten statt irgendwo hochzuladen.

    #include <stdio.h>
    #include <conio.h>
    #include <time.h>
    
    /* konstante Werte als Literale */
    
    #define PFH 72
    #define PFT 80
    #define PFR 77
    #define PFL 75
    #define CONT 224
    
    #define Modus1 1
    #define Modus2 2
    #define Modus3 3
    #define Modus4 4
    #define Modus5 5
    #define Modus6 6
    
    #define Links 0
    #define Rechts 1
    
    #define ABBRUCH 27
    
    #define MAXLED 16
    
    /* globale Variablen */
    
    char LED[MAXLED]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    int Zeit_letzteAusgabe;
    int Zeit_AbstandAusgabe;
    int Zeit_aktuell;
    
    int AktuellePosition;
    int Richtung;
    
    int Modus = Modus1;
    char Taste;
    
    /* Funktion ermittelt die aktuelle Zeit 
       Uebergabe:
                  keine
    
       Rueckgabe: 
                  Zahl in Sekunden
    */
    int getTime()
    {
      time_t t1,t2;
      t1= time(&t2);
      return (int)t2;
    }
    
    /* Funktion setzt eine LED an der Stelle pos im Feld LED 
       Uebergabe:
                  pos Position der LED
    
       Rueckgabe: keine
    */
    void setLED_on(int pos)
    {
      if(MAXLED > pos)
        LED[pos] = 1;
    }
    
    /* Funktion loescht eine LED an der Stelle pos im Feld LED 
       Uebergabe:
                  pos Position der LED
    
       Rueckgabe: keine
    */
    void setLED_off(int pos)
    {
      if(MAXLED > pos)
        LED[pos] = 0;
    }
    
    /* Funktion liest die Tastatur aus
       Uebergabe: 
                  keine
    
       Rueckgabe: Tastaturwert
    */
    int readTaste()
    {
       int Taste;
       if (0 == _kbhit() )
         return 0;
       Taste = _getch();
       if (CONT == Taste)
          Taste = _getch();
    
       if ((PFH == Taste) ||(PFT == Taste )||(PFR == Taste) ||(PFL == Taste)||(ABBRUCH == Taste))
         return (Taste);
       return 0;
    }
    
    /* Funktion gibt alle LED-Werte auf BS aus
       Uebergabe: 
                  keine
    
       Rueckgabe: keine
    */void ausgebenLED()
    {
      int i;
      char Char = 248;
    
      printf("\r\v\b");
      for (i=0;i<MAXLED;i++)
      {
        if (LED[i]!= 0)
          printf("%c",Char);
        else
         printf(" ");
      }
    }
    
    /* Startfunktion */
    void main()
    {
    
    }
    


  • Mein problem ist das ich nicht weis wo ich beginnen soll zu schreiben. Ich hab noch nie ein höheres programm als text ein und ausgabe geschrieben. Der professor muss das grob in einer vorlesung erklärt haben aber ich war an dem tag krank.

    Und ja die datei hoch zu laden war dumm aber bin halt neu, sorry.



  • ++BioShock++ schrieb:

    Mein problem ist das ich nicht weis wo ich beginnen soll zu schreiben. Ich hab noch nie ein höheres programm als text ein und ausgabe geschrieben. Der professor muss das grob in einer vorlesung erklärt haben aber ich war an dem tag krank.

    Wichtig für diese Aufgabe sind die shift-Operatoren.

    Lauflicht eine LED links-nach-rechts (Pseudocode):

    begin:
    bits = 0x8000
    loop while bits <> 0 
       printLED (bits)
       bits >>= 1  // shift right
    end loop
    goto begin
    

    Lauflicht eine LED rechts-nach-links (Pseudocode):

    begin:
    bits = 0x0001
    loop while bits <> 0 
       printLED (bits)
       bits <<= 1  // shift left
    end loop
    goto begin
    

    Lauflicht Lücke rechts-nach-links (Pseudocode):

    begin:
    bits = 0x0001
    loop while bits <> 0 
       printLED (not bits)  // bitinversion
       bits <<= 1  // shift left
    end loop
    goto begin
    

    usw ...



  • Danke! nur was hat das 0x8000 bzw 0x0001 zu bedeuten? Ist das die bitzahl oder die bit größe oder was soll ich mir drunter vorstellen?



  • Danke! nur was hat das 0x8000 bzw 0x0001 zu bedeuten? Ist das die bitzahl oder die bit größe oder was soll ich mir drunter vorstellen?



  • ++BioShock++ schrieb:

    Danke! nur was hat das 0x8000 bzw 0x0001 zu bedeuten? Ist das die bitzahl oder die bit größe oder was soll ich mir drunter vorstellen?

    0x8000 ist 1000000000000000 in Hex-Darstellung.
    0x0001 ist 0000000000000001 in Hex-darstellung.



  • 0x0001 ist eine Hexadezimalzahl. Das 0x sagt, dass es sich um eine Hex Zahl handelt und 0001 ist eine 32-bit Zahl im Hex System.

    0x0001 = 1 im Deximalsystem
    0x8000 = 8 * 16^3 im Deximalsystem



  • Hallo,
    ich hab jetzt eine variante versucht doch kom auf kein ergebniss. 😞
    wenn ich das

    begin: 
    bits = 0x8000 
    loop while bits <> 0 
       printLED (bits) 
       bits >>= 1  // shift right 
    end loop 
    goto begin
    

    eingebe komm einen ein haufen Fehler.
    Kann mir es einer noch einmal hinein schreiben welches man einfach ausführen kann?
    Ich brauch ein beispiel um zu verstehen.
    Danke
    -Tobias-



  • ++BioShock++ schrieb:

    Hallo,
    ich hab jetzt eine variante versucht doch kom auf kein ergebniss. 😞
    wenn ich das

    begin: 
    bits = 0x8000 
    loop while bits <> 0 
       printLED (bits) 
       bits >>= 1  // shift right 
    end loop 
    goto begin
    

    eingebe komm einen ein haufen Fehler.
    Kann mir es einer noch einmal hinein schreiben welches man einfach ausführen kann?
    Ich brauch ein beispiel um zu verstehen.
    Danke
    -Tobias-

    Du musst C-Code daraus machen. Das sieht dann etwa so aus.

    unsigned bits;
    for(;;)
    {
       bits = 0x8000; 
       while (bits)
       {
          printLED (bits); 
          bits >>= 1; 
       }
    }
    

    Und du solltest eine Verzögerung nach dem printLED-Aufruf einfügen, sonst ist das so schnell, dass alle LEDs dunkel vor sich hinglimmend erscheinen.



  • ++BioShock++ schrieb:

    wenn ich das

    begin: 
    bits = 0x8000 
    loop while bits <> 0 
       printLED (bits) 
       bits >>= 1  // shift right 
    end loop 
    goto begin
    

    eingebe komm einen ein haufen Fehler.

    Wie kann man eine Lehrveranstaltung zu C besuchen und nichtmal erkennen, dass hier Pseudocode statt C gepostet wurde?

    ++BioShock++ schrieb:

    Kann mir es einer noch einmal hinein schreiben welches man einfach ausführen kann?

    Fang an zu lernen und lies ein Buch. Oder studier Pädagogik.



  • µ schrieb:

    Wie kann man eine Lehrveranstaltung zu C besuchen und nichtmal erkennen, dass hier Pseudocode statt C gepostet wurde?

    Vielleicht, weil man nachts immer Party machte und in der Zeit schlief, in der die Vorlesungen waren? 😃


Anmelden zum Antworten