Übungsaufgabe, ich verzweifle.
-
Hi,
unser Prof hat uns eine Übungsaufgabe gegeben bei der ich regelrecht verzweifle:
Man soll eine Struktur schreiben die 1 Byte groß ist aber einen Wert beinhalten kann von 1024.
Meine erste Idee waren Bitfields, doch da komme ich an meine Grenzen, ich dachte als ich mir diese Lösungsmöglichkeit ausgedacht hatte an das HIWORD/LOWORD verfahren, das bei der Win32API anwendung findet bei den Fensternachrichten.
z.B. bei der Ermittlung der Cursorposition (X und Y) gibt es nur einen long-wert aber die beiden Markos HIWORD und LOWORD womit man X und Y extrahieren kann.
Jedoch weiß ich nicht wie ich das richtig umsetzen kann.
Ich dachte da an folgendes:
struct one_byte { unsigned char value : 4; // 16 Möglichkeiten unsigned char hiword : 2; // 4 HIWORD-Möglichkeiten unsigned char loword : 2; // 4 LOWORD-Möglichkeiten }; // 1 Byte
Jedoch bekomm ich diese Idee nicht umgesetzt (vielleicht sogar total falscher Ansatz, aber wie soll es sonst gehen?) und verzweifle daran regelrecht.
Hat jemand eine Idee wie ich dieses Problem lösen könnte?
-
muss man mit diesem struct alle werte von 0 bis 1024 darstellen können?
wenn nicht:
struct less_than_one_byte
{
unsigned char x1000 : 1;
unsigned char x100 : 1;
unsigned char x10 : 2;
unsigned char x1 : 3;
}
wenn du nun die chars mit der jeweiligen zahl multiplizierst, kannst du 1024 wie folgt darstellen:
x1000 : 1;
x100 : 0;
x10 : 10;
x1 : 100;oder wie wärs, wenn du 1024 nicht im decimalsystem auffasst, sondern im octalsystem?
andere möglichkeiten fallen mir nicht ein.
-
Hi,
nein man soll eine Funktion haben ich nenne sie mal gerne "Foo" bei der man diese Struktur angibt und sie den Wert ausspukt.
Wenn noch jemand paar Möglichkeiten kennt bitte bitte posten. Ich glaub das wäre auch ein Geniales Optimierungssystem
-
ah ok falsch verstanden
-
das 'byte' speichert nur jeden 4ten wert, und fängt bei 1 an, so etwa:
0 ==> 1
1 ==> 5
2 ==> 9
...
...
255 ==> 1024btw: 'byte' ist ja nicht auf 8 bits beschränkt (hab ich erst hier im board gelernt
)
also definierste dir einfach ein eigenes 'byte' mit 10 oder 11 bits
-
@net
naja unser prof will 1Byte = 8 Bit haben
-
Sowas ?
#include <iostream> #include <string> #include <sstream> struct one_byte { unsigned char val1 : 1; unsigned char val2 : 2; unsigned char val3 : 2; unsigned char val4 : 3; }; // 1 Byte int foo( one_byte blub ) { std::string str; str = static_cast<char>(blub.val1 + 48); str+= static_cast<char>(blub.val2 + 48); str+= static_cast<char>(blub.val3 + 48); str+= static_cast<char>(blub.val4 + 48); return std::atoi(str.c_str()); } int main() { std::ostringstream os; os << 1024; one_byte test; test.val1 = os.str()[0] - 48; test.val2 = os.str()[1] - 48; test.val3 = os.str()[2] - 48; test.val4 = os.str()[3] - 48; std::cout << foo(test) << std::endl; }
-
DAF schrieb:
@net
naja unser prof will 1Byte = 8 Bit habenok, aber da man ohne lücken nicht alles in ein byte kriegt, musste eben was weglassen z.b. dein byte kann nur 769...1024 speichern
-
@eViLiSSiMo
So in der Art, aber gibt man da nun statt 1024 ne 17 oder 23 oder 999 ein, haste den Salat und bekommst ein total falsches Ergebnis.Also man soll von 0 bis 1023 kommen.
-
ja was für werte soll die funktion denn noch ausspucken?
sonst:struct one_byte { unsigned char value : 8; }; int foo(one_byte) { return 1024; }
-
MamboKurt schrieb:
ja was für werte soll die funktion denn noch ausspucken?
sonst:struct one_byte { unsigned char value : 8; }; int foo(one_byte) { return 1024; }
Sowas sinnloses kannste auch sein lassen, das hilft hier kein bisschen.
-
DAF schrieb:
MamboKurt schrieb:
ja was für werte soll die funktion denn noch ausspucken?
sonst:struct one_byte { unsigned char value : 8; }; int foo(one_byte) { return 1024; }
Sowas sinnloses kannste auch sein lassen, das hilft hier kein bisschen.
Zick mal nicht gleich rum.
Desweiteren kann man nur sagen das dies was du da machen sollst mit 8 Bit unmöglich ist. (imho)
-
ja wenn der net weiter sagt, was die funktion noch machen können soll zwingt mich eine fremde macht so etwas zu schreiben.
-
DAF schrieb:
Also man soll von 0 bis 1023 kommen.
eben war's noch 'eine 1024'
poste doch mal die genaue aufgabenstellung, ist bestimmt ein haken dabei
-
@MamboKurt
Hättest ja auch mal Nachdenken können, wenn ich schon sage Prof oder bitfields, dann brauchst du net mit einem return 1024 ankommen und einen auf dicke-eier machen. und nun zurück zum thema.net schrieb:
DAF schrieb:
Also man soll von 0 bis 1023 kommen.
eben war's noch 'eine 1024'
poste doch mal die genaue aufgabenstellung, ist bestimmt ein haken dabei1-1024 bzw. 0-1023 wo ist der unterschied?
Aufgabenstellung:
Schreiben sie 1 Strukut in der Größe von 8 Bit (1 Byte) die Zahlenwerte bis 1024 enthalten können (positive Zahlenwerte).Schreiben Sie dazu 2 Funktionen, 1 Funktion welche die Struktur füllen soll mit dem per Parameter übergebenen Zahlenwert und andere Funktion zur Ausgabe des Zahlenwertes welcher in der Struktur enthalten ist.
Tipps:
- benutzen sie struct
- benutzen sie unsigned char um 8 bit nicht zu überbieten
-
DAF schrieb:
Aufgabenstellung:
Schreiben sie 1 Strukut in der Größe von 8 Bit (1 Byte) die Zahlenwerte bis 1024 enthalten können (positive Zahlenwerte).siehste. da steht nirgends, dass die alle zahlen von 0...1024 lückenlos speichern können soll
-
net schrieb:
DAF schrieb:
Aufgabenstellung:
Schreiben sie 1 Strukut in der Größe von 8 Bit (1 Byte) die Zahlenwerte bis 1024 enthalten können (positive Zahlenwerte).siehste. da steht nirgends, dass die alle zahlen von 0...1024 lückenlos speichern können soll
Wenn ich dir sage 0-17 denkste da kannste die 15 einfach mal aus lust und laune rauslassen?
Was ist wenn dir jemand sagt "Feier in Stock 18-21" und du bist Feuerwehrmann, denkste du kannst einfach mal die 19 überspringen und rauslassen? Ich bitte dich, soweit kann doch nun wirklich jeder denken (bis auf MamboKurt)
-
menno keiner mag mich
-
MamboKurt schrieb:
menno keiner mag mich
Ich mag dich
-
DAF schrieb:
Wenn ich dir sage 0-17 denkste da kannste die 15 einfach mal aus lust und laune rauslassen?
ja, das nennt man verlustbehaftete kompression
btw: wenn es dir gelingt alle zahlen von 0...1023 in 8 bits zu quetschen, dann lass es mich wissen (und bitte, bitte erzähl es niemand anders)