C++ Array Problem

Gast #2265354
Lesenswert?

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
#include <iostream>
2
#include <stdlib.h>
3
using namespace std;
4

5
int main() {
6

7
int i[10];
8
int y;
9
int x;
10

11
cin >> i[10];
12

13

14
i[0]=i[1];
15

16

17
cout << i[10] << endl;
18

19

20
system ("PAUSE");
21
return 0;
22

23

24
}
Gast #2265363
Lesenswert?

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)
1
int temp;
2
temp = i[1];
3
i[1] = i[0];
4
i[0] = temp;
#2265371
Lesenswert?

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.
Gast #2265398
Lesenswert?

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...
Gast #2265417
Lesenswert?

Der Code sieht jetzt so aus und die Ausgabe bleibt unverändert

1
#include <iostream>
2
#include <stdlib.h>
3
using namespace std;
4

5
int main() {
6

7
int i[10];
8
int x;
9

10
cin >> i[9];
11

12
x = i[1];
13
i[1]=i[0];
14
i[0] = x;
15

16

17
cout << i[10] << endl;
18

19

20
system ("PAUSE");
21
return 0;
22
}
#2265424
Lesenswert?

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.
* ...
#2265429
Lesenswert?

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.
Gast #2265450
Lesenswert?

Sorry ich kapier nicht was ihr meint ...

Was müsste ich denn genau ändern damit das Programm das tut was es tun 
soll?
1
#include <iostream>
2
#include <stdlib.h>
3
using namespace std;
4

5
int main() {
6

7
int i[9];
8
int x;
9

10
cin >> i[8];
11

12
x = i[1];
13

14
i[0] = x;
15
cout << i[8] << endl;
16

17

18
system ("PAUSE");
19
return 0;
20
}
Gast #2265463
Lesenswert?

1
#include <iostream>
2
#include <stdlib.h>
3
using namespace std;
4

5
int main() {
6

7
int i[9];
8
// int x;
9

10
cin >> i[8];
11

12
// x = i[1];
13

14
i[8] *= 2;
15
cout << i[8] << endl;
16

17

18
system ("PAUSE");
19
return 0;
20
}

und halt dich an den tipp von khb: basics!
#2265465
Lesenswert?

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.
Gast #2265472
Lesenswert?

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?
Gast #2265477
Lesenswert?

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
#2265480
Lesenswert?

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
Gast #2265485
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren