Frage zu Eingabe von Werten in ein Int Array.
-
Hi,
die Ausgabe muß 170 sein, So wie das Prg. oben steht funzt das auch aber wenn ich das Array dual so ein geben dual = {1,0,1,0,1....} klappt das nicht.
Es muß doch eine Möglichkeit geben die int Werte hintereinander zu schreiben ohne ständig dual[...] = zu wiederholen.Gruß
ShadowEater
-
ShadowEater schrieb:
int dual [9]; dual[1] = 1; dual[2] = 1; dual[3] = 1; dual[4] = 0; dual[5] = 1; dual[6] = 0; dual[7] = 1; dual[8] = 0;In diesem Fall hast Du dual[0] nicht belegt, der Wert ist zufällig. Wenn Du, wie oben vorgeschlagen:
int dual[9] ={1,2,3,4 ...
benutzt, dann hast Du dual[0] aber einen Wert zugewiesen. In der aufgerufenen Funktion wird dual[0] aber mit verarbeitet ...
-
Wie schon weiter oben gesagt wurde ist das erste Element, das in der Liste angegeben wird, nicht dual[1] sondern dual[0]. Arrays fangen in C und C++ immer mit dem Index 0 an.
Dein Programm ergibt sowieso unspezifiziertes Verhalten, weil du dual[0] in der Funktion zwar liest, es aber vorher nie gesetzt hast.
-
1.) Dir ist bewusst, 170d = 10101010b und nicht 11101010b?
2.) Dir ist bewusst, dass du ein 9-elementiges Array nutzt, dass du bei eins zu füllen beginnst, anstatt ein 8-elementiges Array, dass du ab 0 füllst?
3.) Dir ist bewusst, dass du in deiner Rechnung die Indizes von 0 bis 7 durchzählst?
-
Hi,
o.k. ich hab das alles geändert aber es kommt immernoch 340 und nicht 170 raus :
int BinToDez(int dual[], int n) { int dez = 0; if (n < 16) { for (int i = 0; i < 8; i++) { dez = dez+(pow((2*dual[i]),n)); n--; } } return dez; } int main() { int dual [8] ={1,0,1,0,1,0,1,0}; int n = 8; int dez = 0; dez = BinToDez(dual,n); cout << dez << endl; return 1; }Gruß und vielen Dank
ShadowEater
-
dann mach "return dez/2" oder zieh n-- vor.
-
sry aber das ist keine Antwort auf das Problem, irgendwoher muss das doch kommen wenn ich einfach nur die Wertangabe im Arry ändere, das kanns ja wohl nicht sein !!!
Gruß
ShadowEater
-
Hi,
ich habs fast, das Ergebnis ist jetzt 171, wo kommt denn die verdammte überflüssige 1 jetzt her :
#include <iostream> #include <math.h> using namespace std; int BinToDez(int dual[], int n) { int dez = 0; if (n < 16) { for (int i = 0; i <= 7; i++) { dez = dez+(pow((2*dual[i]),n)); n--; } } return dez; } int main() { int dual [8] ={1,0,1,0,1,0,1,0}; // dual[1] = 1; // dual[2] = 0; // dual[3] = 1; // dual[4] = 0; // dual[5] = 1; // dual[6] = 0; // dual[7] = 1; // dual[8] = 0; int n = 7; int dez = 0; dez = BinToDez(dual,n); cout << dez << endl; return 1; }Gruß und vielen Dank
ShadowEater
-
Du mußt für n den Wert 7 übergeben, nicht 8. Die Bits sind durchnumeriert von 0 bis 7, und genau damit mußt Du auch potenzieren.
-
Hi,
aber ich übergeb doch n = 7

Vielen Dank
Gruß Rudi Ratlos
-
dez = dez + (pow(2,n) * dual[i]);
-
Hi,
ich hab den Fehler durch Zufall gefunden :
for (int i = 0; i < 7; i++)hier war ein <= drin, die Schleife zählt jetzt von 0 - 6, also bis 7 aber meine Dualzahl besteht doch naus 8 ziffern also brauch ich doch auch 8 Potenzen ???
Gruß
ShadowEater
-
Danke jetzt gibt das ganze Sinn !!!!!!
Gruß
ShadowEater
-
gelöscht. Belli war schneller.
-
???
-
ShadowEater schrieb:
???
volkard will damit nur sagen, dass er seine Antwort nachträglich entfernt hat, weil Belli ihm zuvorkam.
-
Also für diese Aufgabe pow() zu benutzen, ist wie mit dem Pfeil durch die Brust ins Auge (oder so ähnlich)... oder mit Kanonen auf Spatzen oder...
jedenfalls ziemlich umständlich!Denn wofür gibt es Bit-Shifting?