Frage zu Eingabe von Werten in ein Int Array.



  • Hi Leute,

    meine Frage ist eigentlich ganz einfach.
    Ich möchte Werte in ein int Array eingeben, bisher habe ich das so gemacht :

    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;
    

    ich möchte die Werte nun aber hintereinander eingeben :

    int dual [9] = ............;
    

    Aber irgendwie mach ich da nen Fehler, könnt ihr mir die Syntax sagen, es ist wie verhext 😕 🙄 😡

    Vielen Dank für eure Mühe und Hilfe
    Shadow Eater



  • öhm also ist das nicht so? -->

    int Array[9] = {1,2,3,4,5,6,7,8,9}
    


  • hmmmmm, da krieg ich falsche Ergebnisse bei meiner Rechnung, da stimmt was noch nicht !

    Gruß
    Markus



  • ShadowEater schrieb:

    hmmmmm, da krieg ich falsche Ergebnisse bei meiner Rechnung, da stimmt was noch nicht !

    Gruß
    Markus

    Dann zeig deine Rechnung und drück dich bitte beim Nächsten mal verständlicher aus.



  • fang mit dual[0] an.



  • Hi,

    so sieht das kleine Programm aus :

    #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 < 8; i++)
    		{
    			dez = dez+(pow((2*dual[i]),n));
    			n--;
    		}
    	}
    	return dez;
    }
    
    int main()
    {
    	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;
    
    	int n	= 8;
    	int dez = 0;
    
    	dez = BinToDez(dual,n);
    
    	cout << dez << endl;
    
     return 1;
    }
    

    Danke für eure Mühe
    Gruß
    ShadowEater



  • Welche Ausgabe erwartest du denn?



  • 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


Anmelden zum Antworten