Hi,
ich habe ein Problem bei einer eigendlich recht simpeln Aufgabe...
Ich möchte in einem Array einzelne Bits vertauschen und soweit ich weiß
müsste das doch so funktionieren wie es in meinem Code steht??
Also aus: 10100101 sollte im Bsp. unten : 00100101 werden ... das
passiert aber nicht ...
Jemand eine Idee woran das liegen könnte?
1.
i sind 10 INT, nicht Bit.
2.
> i[0]=i[1];
Damit wird nur das Element 1 auf 0 kopiert, nicht aber getauscht.
Für tauschen wäre eher sowas gut: (mit Zwischenspeicher)
Also für mein Verständnis ist das nur Müll.
Du schreibst: int i[10];
Somit kannst Du 10 Elemente adressieren, aber die zählen von i[0]..i[9].
i[10] steht irgendwo hintendran im speicher, parktisch gibts das gar
nicht.
dann liest Du in diesen nicht reservierten speicher i[10] was ein.
Die Anweisung i[0]=i[1] überschreibt den Wert im Index 0 mit dem Wert
aus dem Index1.
Aber ausgeben tust Du wieder den Wert aus dem nicht reservierten
Speicher, also genau das was du eingegeben hast.
Floh schrieb:> 1.> i sind 10 INT, nicht Bit.> 2.>> i[0]=i[1];> Damit wird nur das Element 1 auf 0 kopiert, nicht aber getauscht.> Für tauschen wäre eher sowas gut: (mit Zwischenspeicher)int temp;> temp = i[1];> i[1] = i[0];> i[0] = temp;
Hab das mal ausprobiert, aber dadurch ändert sich leider an der Ausgabe
nichts...
Casio schrieb:> dadurch ändert sich leider an der Ausgabe> nichts...
warum auch? es wird aufs 10te element eingelesen, nichts damit getan und
wieder ausgegeben. verändere mal i[10] und schon siehst du was. was hast
du überhaupt vor? erzähl mal was dazu.
Casio schrieb:> Der Code sieht jetzt so aus und die Ausgabe bleibt unverändert
logisch.
Wenn du einen von 25 Fehlern korrigierst bleiben immer noch 24 andere.
Die Prominentesten davon
* int sind keine Bit
* ein Array kann man als ganzes in einem Rutsch weder eingeben
noch ausgeben
* der höchste Index in einem Array der Länge n ist n-1.
Bei der Definition gibt man die Anzahl der Elemente an (also die
Länge).
Ein Array
int a[5];
hat also 5 Elemente.
a[0], a[1], a[2], a[3], a[4]
Zähl nach, sind genau 5 Stück. Trotzdem ist der höchste gültige
Index 4.
* ...
guest schrieb:> wie ist deine programmiererfahrung?
Wie du siehst sehr bescheiden :-)
Wenn beim cout i[9] steht (wie beim cin) tut sich aber auch nichts ...
Casio schrieb:> guest schrieb:>> wie ist deine programmiererfahrung?>> Wie du siehst sehr bescheiden :-)
Kauf dir ein Lehrbuch und arbeite es von vorne weg durch.
Die Fehler, die man in deinem Beispiel sieht, weisen darauf hin, dass
* du keine vernünftige Literatur hast
* dir einiges an Grundlagen fehlt. Und zwar massiv fehlt.
Vergiss Online-Tutorials. Das steht meistens dir Hälfte nicht drinnen.
Kauf dir ein vernünftiges Buch. Die 30€ sind gut investiert.
Casio schrieb:> Sorry ich kapier nicht was ihr meint ...>> Was müsste ich denn genau ändern damit das Programm das tut was es tun> soll?
Dazu musst du erst mal definieren was es tun soll.
Deine 'Beschreibung' im Eröffnungsposting ist so nämlich erst mal
Unsinn. Die kleinste Einheit, mit denen du erst mal arbeiten kannst, ist
ein Byte. Aber keine Bit. Klar gehen auch Bits. Aber sicher nicht als
Array.
Deine ganze Vorstellung davon was das Programm machen soll, ist schon
verquert.
> [c]> #include <iostream>> #include <stdlib.h>> using namespace std;>> int main() {>> int i[9];> int x;>> cin >> i[8];
Das liest EINE Zahl ein und speichert sie in i[8].
EINE Zahl. Aber auf keinen Fall das ganze Array.
Casio schrieb:> ... schrieb:>> Sowas?>> Nein,>> es soll ein einzelner Wert überschrieben werden (siehe erster Post)
Einzelner Wert? Welcher denn? Wie überschrieben? Was steht denn vorher
drin? Wo denn im ersten Post? Wozu brauchst Du 10 int's, wenn Du eh nur
einen einliest und wieder ausgibst?
So das ist meine Angabe für diese Aufgabe :
/* Schreiben Sie unten eine oder mehrere Anweisungen, die die
Bits in der Variable i so veraendern, dass zuletzt gilt:
In i haben die Bits an den Positionen 2 und 3 den Wert 0,
alle anderen Bits sind unverändert.
Anweisung(en): */
Ob ich jetzt 2 und 3 auf 0 setze oder 0 und 1 vertausche ist ja erstmal
egal
Casio schrieb:> So das ist meine Angabe für diese Aufgabe :>>> /* Schreiben Sie unten eine oder mehrere Anweisungen, die die> Bits in der Variable i so veraendern, dass zuletzt gilt:> In i haben die Bits an den Positionen 2 und 3 den Wert 0,> alle anderen Bits sind unverändert.> Anweisung(en): */
Und wo ist da jetzt von einem Array die Rede?
i einlesen
Bits vertauschen
i ausgeben
weit und breit kein Array
Bitmanipulation
Du hast aber weder im ersten noch in irgend einem anderen Code
irgendwelche Bits vertauscht. Das einzige, was hier je vertauscht wurde,
waren zwei Ganzzahlwerte zufälligen Inhalts.
Nochwas, wenn Du im von mir geposteten Program genau 2
aufeinandefolgende Zeichen durch zwei andere ersetzt, macht es genau
das, was Deine Aufgabe verlangt. Welche 2 Zeichen das sind darfst Du
jetzt aber selber rausfinden.
Die wievielte Aufgabe zum Bitfummeln ist das eigentlich in den letzten
Tagen?
Da steht nicht zufällig gleich mit drunter, daß man sie bei
mikrocontroller.net lösen lassen kann?