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ückDie 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/ew6deakkBitte 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 dasbegin: 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 dasbegin: 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?