Reis am Schachbrett Programm

könnte man mir nochmal das ganze ahand des Beispiels zeigen? Hier nochmal das funktionierende Bsp


(Eigentlich brauch ich eh nur die arrays drin)

Code:
#include<iostream.h>
#include<conio.h>
#include<math.h>
int main()
{
	unsigned long long x,y,z;
	
	y=1;
	for(x=1;x<65;x++)
	{
		if(x==1)
		{
		 cout<<"1\t1"<<"\n";
	 }
	 else
	 {	  
		   cout<<x;
		   cout<<"\t";
		   y=y*2;
		   cout<<y<<"\n"; 
	   }		   
	}
	getch();
}
 
kann man das programm bitte auch ohne unsigned machen
und vllt so: leicht mit einfachen dingen auch wenn das programm vllt unübersichtlicher wird aber trotzdem weil wenn ich jetzt einige dinge noch nicht gelernt hab, kann ich sie ja nicht verwenden.... versteht ihr wie ichs mein
 
Was brauchst du den im Endeffekt, die Anzahl für jedes Feld oder einfach die Gesamtanzahl?
Und warum willst du unsigned nicht verwenden?

Am Beispiel für eine 1-Byte-Variable:
Hat 8 Bit, dh kann 2 hoch 8 Werte annehmen, ist 256.
Normalerweise werden die von -128 bis +127 aufgeteilt (nicht +128, weil 0 braucht auch noch einen Platz)
Bei unsigned wird der negative Bereich weggelassen, dafür gehen sich dann halt doppelt so viel positive aus: Von 0 bis 255 (nicht 256, eben wegen der 0)

Um noch einmal auf signed zurückzukommen: Bei 8 bit von -128 bis +127,
beim genaueren Betrachten ist 127=2^7 -1
Bei 8Byte/64bit (in dem Fall die größte standartmäßig unterstütze C-Variable) geht das dann bis maximal 2^63 -1

Aufs Schachproblem übertragen: Das erste Feld hat 1 Reiskorn =2^0
Das zweite hat 2 =2^1
Drittes: 4=2^2
Viertes: 8=2^3
...
Nr. 64 hat dann 2^63, da 64bit leider grad nur 1 niedriger schaffen, lässt du eben den negativen Bereich weg und kommst dafür doppelt so hoch -> unsigned

Falls du noch die Gesamtanzahl aller Reiskörner brauchst (Geht sowieso nicht ohne unsigned! , wenn nicht einmal das "Vollste" Schachfeld ohne auskommt):
Von der Mathematischen Seite her ist das genau 2^64 -1.

Noch erwähnenswert, falls du es nicht weißt: 2 hoch n ist in C-Schreibweise
1<<n

Die Gesamtanzahl hast du dann beispielsweise so:
unsigned __int64 gesamtanz=1<<64 -1;

Da unsigned 64bit von 0 bis 2^64-1 gehen, könnte das 2^64 allerdings Probleme machen.
Das minus 1 wird ja erst dann gerechnet, davor überschreitet das gerade um 1 den Wertebereich

Vllt. Sicherere Lösung:
unsigned __int64 gesamtanz=1<<63 -1;
gesamtanz=gesamtanz*2 +1;

Kommt aufs gleiche Ergebnis

Gruß
 
Zurück