Schaltterm für ungültig verschlüsselte Pseudotetrade ermitteln?
Hallo,
ich arbeite gerade an Informatikaufgaben zu der technischen Informatik.
Hier erstmal die Aufgabenstellung:
Es soll ein BCD-Wandler (BCD-Code: siehe Material) mit einer zusätzlichen Verschlüsselung zum Schutz vor Datenmissbrauch entworfen werden. Dazu sollen die zehn im BCD-Code codierten Dezimalziffern jeweils für sich verschlüsselt werden: Zuerst wird zu jeder Tetrade dual 0010 addiert, dann wird die erste Stelle mit der letzten vertauscht.
b) Ermitteln Sie einen Schaltterm, der testet, ob eine ungültige verschlüsselte Pseudotetrade y 3y 2y 1y 0 vorliegt. Vereinfachen Sie diese Funktion begründet soweit wie möglich.
Ich habe die Aufgabe so verstanden, dass ich einen Schalterm ermitteln soll, der überprüft, ob eine eingegebene verschlüsselte Tetrade, eine Pseudotetrade ist, welche verschlüsselt wurde.
Das erste was ich gemacht habe, ist dass ich mir alle Tetraden einschließlich der Pseudotetraden aufgeschrieben habe und diese nach der Aufgabenstellung verschlüsselt habe (siehe Bild). Dabei sind mir schon mal zwei Sachen aufgefallen:
- Zum Ende hin habe ich keine vier Bits mehr, sondern fünf Bits. Also habe ich keine Tetraeden mehr, sondern Pentaeden? Ich nehme jetzt mal an, dass die dann Pentaeden heißen.
- Ich habe zweimal die gleichen verschlüsselten Tetraeden, also einmal 0001 und einmal 00001. Das kommt davon, dass ich das erste Bit und das letzte Bit vertauschen muss. Und dann kommt es unweigerlich zu zweimal 0001. Weil ich habe ja einmal 1000 und einmal 10000.
Jetzt habe ich mir erst mal gedacht: "Komisch, aber ich mache erstmal weiter.". Ich habe dann eine Wahrheitstabelle aufgestellt, mit all den verschlüsselten Pantaeden (siehe Bild). Ich habe jetzt Pentaeden genommen, weil ich zum Ende hin also bei den Dezimalzahlen 14 und 15, keine Tetraeden mehr bekommen habe. Und deswegen habe ich jetzt jede Tetraede vorne mit einer 0 zu einer Pentaede erweitert. Jetzt habe ich probiert einen Schaltterm zu finden. Aber das ist ja schließlich unmöglich, weil ich zweimal die gleichen verschlüsselten Pentaeden habe. Und bei der einen soll der Schaltterm eine null ausgeben und bei der anderen eine 1.
Hier sind erstmal alle, verschlüsselten Tetraeden, wo dann eben auch, nach der Addition mit 0010, Pentaeden, mit dem Fragezeichen versehen, rauskommen. Umkreist ist hier die zweimal auftauchende Folge 0001.
Hier ist dann die Wahrheitstabelle. Grün umrandet ist die Diskrepanz zwischen der Ausgabe x.
Was habe ich hier falsch gemacht? Oder habe ich die Aufgabe komplett falsch verstanden?
3 Antworten
In der Aufgabe steht es sollen zehn dezimal Ziffern in BCD codiert werden... Dein "Problem" hast du asserhalb der zehn dezimalen Ziffern.
Also alles außerhalb 0-9 ist ungültig. Du brauchst also irgendwas was deine Verschlüsselung in dezimal decodiert und das was nicht der Codierung entspricht ist ungültig.
Gruß
Okay, der Wandler der den Wert verschlüsselt gibt dir eine 4 bit variable raus. Es werden nicht auf einmal 5 bits es bleibt bei 4, ein Überlauf kommt zu stande. Der höchster bit fällt weg.
Also bekommst du einen verschlüsselten 4 bit variable jetzt sollst du diesen Wert auf A-F prüfen. Wenn zutrifft dann Ausgang TRUE.
Würde unvereinfacht so aussehen :
IF (NOT 3y AND 2y AND NOT 1y AND NOT 0y) OR....
Falls du das nicht verstehst muss ich Blatt und Stift holen 😅
Okay doch nicht so ganz. Du sagst, dass wenn ein Überlauf zustande kommt, also z.B. bei der Addtion von 1110 und 0010, dass ich den höchsten Bit einfach wegstreiche. Bei der Addition kommt dann ja 10000 raus, also streiche ich jetzt einfach die 1 weg, so dass ich 0000 habe. Und dann ist 0000 jetzt meine verschlüsselte Tetraede?
Ich verstehe zwar all die schönen neuen Begriffe nicht, kenne Digitaltechnik (also auch Logik-Glieder) von früher. Mehrere dekaden früher.
Wenn du schiebst sagst du, dass aus vier fünf Bit werden. Es gibt aber drei Möglichkeiten zu schieben. In den nächsten Varianten wird im Kreis geschoben. Also was hinten raus geht geht vorne rein. Eine davon über Carry, eine ohne (also direkt). So bleiben es immer vier Bit.
Natürlich kannst du in deiner Variante auch das fünfte Bit einfach ins jenseits schicken. Dann hast du auch nur vier Bit.
Hilft dir das weiter?
Bei mir werden, bei der Addition aus vier Bits fünf Bits. Also wenn ich zu 1110 0010 dazu addiere bekomme ich 10000. Und nun muss ich ja laut der Aufgabenstellung, das erste und letzte Bit vertauschen und komme somit auf 00001. Was ich schon als Ergebnis hatte, wenn ich zu 0110 0010 hinzuaddiere. Also ich schiebe hier eigentlich nicht wirklich, oder habe ich da was falsch verstanden. In der Aufgabenstellung steht ja auch nichts davon, dass ich schieben soll.
Ich weiß nicht ob ich dich richtig verstehe, aber meiner Meinung nach schiebe ich hier nie.
Habe ich wohl nicht gut genug gelesen.
Also ich habe erst die Hardware kennengelernt, dann das ganze über die Software.
In der Hardware hast du z.B. ein 4Bit-Register. Bei einer Addition mit einem Übertrag geht der Übertrag verlohren, bzw. wird über ein Extra-Pin (ähnlich Carry) angezeigt. Wenn deine Hardware aber nur für 4Bit ausgelegt ist, gehen Überträge verloren.
Ich habe den Unterricht ja nicht mitgemacht und kann somit nicht sagen, was der Pauker/Dozent sich dabei gedacht hat oder wie die Rahmenbedingungen gesteckt sind. Hier bist du gefragt.
Aber du kannst ja mal einen Versuch starten mit echten 4Bit. Wenn dann das Ergebnis deinen Vorstellungen entspricht hast, du wohl die richtige Lösung gefunden.
Okay, vielen Dank. Dann werde ich mal probieren die Aufgabe so zu lösen in dem ich das 5te Bit weglasse.
Ich glaube, ich habe jetzt die Aufgabe endlich verstanden (bei meiner Erklärung schenke ich mir jetzt mal wie BCD kodiert ist und verwende Binär. sonst müßte ich den BCD-Code heraussuchen):
10 x BCD heist:
8421 8421 8421 ..... 8421 (bzw. 3210 3210 3210 ..... 3210)
Ich bestrachte jetzt mal nur die unteren 2 BCDs:
0100 1010 -> Binär = 4A
0000 1000 -> addiere 08
0101 0010 -> Ergebnis 92
Du must den Übertrag ja in die nächst höhere Zahl übernehmen.
Vergleiche Dezimalsystem:
08+02 sind ja auch nicht 0(Carry+0) sondern 10. Also 10er und 1er.
Die addition und das Bit-tauschen aber innerhalb jedes BCDs. Übertrag immer ins nächste BCD.
Das sollte es sein.
Also ich verstehe das nur teilweise. Also ist, es falsch wenn ich so wie folgt vorgehe?
Ich habe die Pseudotetraede 1110 und diese wird verschlüsselt, also addiere ich 0010 dazu und komme auf 10000. Jetzt (aus einer anderen Antwort kam das hervor), streiche ich einfach das höchste Bit weg, also die 1 und habe 0000 als verschlüsselte Tetrade. Das ist jetzt falsch oder was?
Deine Antwort interpretiere ich jetzt so:
also du hast die eine Tetraede 0100 und die andere Tetraede 1010. Was zwei aufeinander folgende Tetraeden sind. Dann hast du dahinter aber 4A stehen, also 74 in Hexadezimal, aber ich weiß nicht woher das kommt. Weill wenn ich die beiden Tetraden zusammen nehme zu einem Byte, dann komme ich da auf 138, deswegen bin ich da schon etwas verwirrt. Dann addierst du dazu 0000 1000 also 8 in Dezimal, aber woher kommt denn die acht. Ich soll mit 0000 0010 also 2 in Dezimal addieren. Ich gehe jetzt davon aus, dass du die Tetraeden nicht als einzelne Zahlen betrachtest sondern als eine Zahl, also ein Byte und wenn das so ist, dann verwirrt es mich noch mehr, weil du sagst, dass das Ergebnis 92 ist. Aber ich komme nie auf 92, egal wie ich deine Dualzahlen interpretiere. Also du hast da 0100 1010 was eigentlich entweder 4 und 5 ist in Dezimal oder 138. Dahinter steht dann aber wieder 4A, was 74 ist. Dann addierst du aus mir nicht ersichtlichen Gründen 1000 also 8 dazu. Und dann kommst du auf 94. Wenn ich zu 4A also 74, 8 hinzu addiere dann komme ich auf 82.
Es tut mir leid, wenn ich hier irgendwas komplett falsch verstanden habe, aber ich bitte um eine Erklärung.
Ich habe leider keine Mail mit dem Hinweis erhalten, dass du hier einen Eintrag erstellt hast. Deshalb erst jetzt eine Antwort.
Für jemandem, der einem anderen etwas erklären will, habe ich diverse Fehler gemacht. Ich arbeite ausschließlich im Binär-Code und konnte mich nicht mal so eben auf BCD umstellen. Was ist BCD-Code? Eigentlich nichts anderes als eine codierte Darstellung des Dezimal-Codes (Ziffern 0-9) oder des Hexadezimal(Sedezimal)-Codes (Ziffern von 0-F). Habe extra noch mal bei Wikipedia reingeschaut und musste feststellen, das ich früher gar nicht bemerkt habe, dass der BCD-Code (Ziffern von 0-F) eigentlich Binärcode ist. Das habe ich jetzt erst aufgelöst.
In deinem Fall also Binär aber begrenzt von 0-9 und das nennt sich dann BCD-Code (Ziffern 0-9) und du sollst versuchen herauszufinden, ob nach der Verschlüsselung immer noch BCD-Code für 0-9 vorliegt oder bereits auch A-F verwendet wurde. Was ja echten Binär-Code bedeutet. Und das würde ein BCD zu Dezimal-Converter nicht mehr interpretieren können und du könntest das Ergebnis nicht lesen. Da der normale Mensch ja nur das Dezimalsystem beherscht.
Stelle dir vor, jede BCD-Stelle ist ein IC (gibt es tatsächlich, siehe 4000er-Serie). Du sollst 10 IC's in Reihe schalten (von rechts nach links). Dabei entspricht das 1. IC der 1er-Stelle, das 2. IC die 10er-Stelle, das 3. IC die 100er-Stelle ..... und das 10. IC die Milliarden-Stelle. Jedes mal wenn eine Stelle einen Übertrag erzeugt muss dieser in die nächst höhere Wertezahl übernommen werden. Da das ganze ja eigentlich nichts anderes ist als unser Dezimalsystem, ergibt das bei 09+01=10. Jedes IC kann nicht mehr als 4-Bit verarbeiten, also Ziffern von 0-9 (eigentlich bis F). Somit folgt nach 9+1 für das 1.IC = 0 mit einem Übertrag(Output) und für das 2.IC 0+Übertrag(input)=1. Wir Menschen sehen eine 10. Das eine IC aber nur eine 0 das andere IC eine 1.
Das heißt für eine 1 0 0 0 0 0 0 0 0 0 siehst du eine Million. Die IC's sehen nur die Bitstellung die für sie selbst gelten, ihre Nachbarn kennen sie nicht.
Übrigens hat jedes IC 4Bit für die Codierung, 1Bit für Übertrag-Ausgang, 1Bit für Übertrag-Eingang, einen Eingang für Auswahl ob dezimal oder hexadezimal usw..
Betrachten wir also wieder meine Aufgabe:
0100 1010 -> Binär = 4A
4 steht für 2.IC und A für das 1.IC -> und somit habe ich für meine Erklärung schon mal einen Fehler gemacht. A darf gar nicht verwendet werden, weil es ist ja eigentlich schon 0 + Übertrag (10). Mein Fehler! Blöder Fehler! Zu sehr Binär gedacht.
Deswegen hier eine bessere Aufgabe (gültig für BCD (0-9))
0100 1001 -> Binär(BCD (0-9)) = 49
0000 0001 -> addiere(BCD (0-9)) 01
0101 0000 -> Ergebnis(BCD (0-9)) 50
Warum? - Deine BCD-IC's sind auf 0-9 begrenzt (geht tatsächlich mit den 4000er IC's), d.h. sie zählen nur von 0-9 und danach beginnt es wieder bei 0 und es gibt einen Übertrag für das nächst höhere IC. Vergiss bitte nicht: da steht nicht 50 sondern 5 für das 2.IC und 0 für das 1.IC.
Habe ich mich jetzt verständlicher ausgedrückt?
Übrigens kann ich mir nicht vorstellen, dass heute noch irgend jemand den BCD-Code verwendet. Das macht nur Sinn wenn man die alten IC's verwendet. Heute verwendet doch jeder lieber einen Controller. Das ist eine Art Minni-Computer. Die Programmierung verwendet dann für alle Aufgaben Binär-Code.
Für ein Byte ist die Wertigkeit (8)(4)(2)(1)
Für ein Word ist die Wertigkeit (128)(64)(32)(16) (8)(4)(2)(1)
Für ein DoppelWort ..... usw.
Natürlich hat man sich auch etwas für (Minus) und für Fließkommazahlen einfallen lassen. Sprengt hier aber den Rahmen.
Will man eine Zahl für den Menschen darstellen, wird sie mal eben in Dezimal umgerechnet und zur Anzeige gebracht.
!!!Achtung Spoiler Alarm!!!
Ist nicht vereinfacht

Vielen Dank, aber müsste das letze AND-Gatter, nicht so wie folgt lauten:
(bit3 ^ nicht bit2 ^ nicht bit1 ^ nicht bit0)
Weil die einzige verschlüsselte Pseudotetraede, die in dem Bild nicht erfasst wird ist 1000 und nicht 0001. 0001 war es nur, weil ich das höchste Bit vorne stehen gelassen habe. Also bei der Addition von 1111 und 0010 kommt ja 10001 raus. Und da lasse ich jetzt einfach das höchste Bit weg. Also habe ich 0001, da muss ich ja jetzt noch das erste und letzt Bit vertauschen und so habe ich 1000 und nicht 0001 oder?
Ja du hast recht. Da ist mir wohl ein Fehler unterlaufen.
Ich weiß nicht ob du die Aufgabe vollständig gelesen hast, aber in der Teilaufgabe b) steht, dass ich einen Schaltterm ermitteln soll der testet ob eine ungültige verschlüsselte Pseudotetrade vorliegt.
Pseudotetraden sind die Tetraeden die den Dezimalzahlen 10 - 15 entsprechen, folglich muss ich ja mit den Pseudotetraden arbeiten. Gehen wir mal davon aus, dass ich selber einen BCD- Wandler entwickel, der als Input jede Tetraede annimmt und diese dann verschlüsselt. Dann muss ja letztendlich geprüft werden, ob diese verschlüsselten Tetraeden auch wirklich richtige Tetraeden sind oder eben nur Pseudotetraeden. Und dies muss ich mit einem Schaltterm testen.
Es kann auch sein, dass ich die Aufgabe falsch verstanden habe, wenn dies der Fall ist, könntest du mir dann bitte erklären wie du diese Aufgabe verstehst und wie du sie lösen würdest. Ich brauche nicht die komplette Lösung, mir muss nur mein Verständnisfehler erklärt werden.