PDA

View Full Version : سوال در مورد حداکثر ظرفیت آرایه ها و



rezareza550
سه شنبه 28 آبان 1392, 03:25 صبح
با سلام
من یه برنامه نوشتم که اعداد توان 10 به دودویی تبدیل میکنه برنامه رو درست نوشتم منتها فکر میکنم برنامه جواب نمیده.اولا میخوام برنامه تا 10 بتوان ه 100 رو حساب کنه ولی آرایه که واسه اینکار ساختم جواب نمیده
long int i,x,y=1,s=0,f,t=1,j=0,n=1; long int z[1000000];
چرا مگه آرایه max داره؟
و یه مشکله دیگه که اصل کاری اینه وقتی با z[10000] کام÷ایل میکنم بعضی از اعداد رو به دودویی تبدبل نمیکنه م÷لا تا 10 به توان 12 رو تبدیل میکنه ولی 13 رو یه عدد random ای نشون میده بعد یکی در میون درست نشون میده مثلا 10 به توان 15 رو به دودویی تبدیل میکنه.
مشکله من بیشتر رو سوال دومیه

rahnema1
سه شنبه 28 آبان 1392, 21:09 عصر
لطفا برنامه رو بذارید اینجا ببینیم چه طوریه
1000000 عنصر چیزی نیست و نباید ارور بده

rezareza550
چهارشنبه 29 آبان 1392, 02:40 صبح
لطفا برنامه رو بذارید اینجا ببینیم چه طوریه
1000000 عنصر چیزی نیست و نباید ارور بده
ممنون از اینکه ÷اسخ دادید
به برنامه عدد میدیم و 10 به توان 1 تا x رو حساب میکنه(عدد دودویش رو)

#include<iostream.h>
#include<conio.h>
int main()
{
long int i,x,y=1,f,j=0,n=1; long int z[10000];
cout<<"enter the powers of 10:\n";
cin>>x;
for (i=1;i<=x;i++)
{
f=0;
j=0;
n=n*10;
y=n;
while (y>=2)
{ z[j]=((y)%(2));
j++;
y=(y/2);
}
z[j]=y;
f=j;
cout<<"10 ^\t\t"<<i<<"=\t\t";

for(long int b=f;b>=0;b--)
cout<<z[b];
cout<<"\n\n";
}
getch();
return 0 ;
}
خروجیش این میشه :

enter the powers of 10:
33
10 ^ 1= 1010

10 ^ 2= 1100100

10 ^ 3= 1111101000

10 ^ 4= 10011100010000

10 ^ 5= 11000011010100000

10 ^ 6= 11110100001001000000

10 ^ 7= 100110001001011010000000

10 ^ 8= 101111101011110000100000000

10 ^ 9= 111011100110101100101000000000

10 ^ 10= 1010100000010111110010000000000

10 ^ 11= 1001000011101101110100000000000

10 ^ 12= -727379968

10 ^ 13= 1001110011100101010000000000000

10 ^ 14= 10000011110100100000000000000

10 ^ 15= -1530494976

10 ^ 16= 1101111110000010000000000000000

10 ^ 17= 1011101100010100000000000000000

10 ^ 18= -1486618624

10 ^ 19= -1981284352

10 ^ 20= 1100011000100000000000000000000

10 ^ 21= -559939584

10 ^ 22= -1304428544

10 ^ 23= -159383552

10 ^ 24= -1593835520

10 ^ 25= 1001010000000000000000000000000

10 ^ 26= -469762048

10 ^ 27= -402653184

10 ^ 28= 10000000000000000000000000000

10 ^ 29= -1610612736

10 ^ 30= 1000000000000000000000000000000

10 ^ 31= -2147483648
میخواستم بدونم چرا بعضی از اعداد رو حساب نمیکنه و سوال قبلیم

rahnema1
چهارشنبه 29 آبان 1392, 06:57 صبح
دقت کنید long int حداکثر تا عدد 1-32^2 را می تواند در خودش نگه دارد
حالا ببینید 9^10 تقریبا برابر است با 30^2 در نتیجه می تونه نتیجه محاسبه رو در خودش نگه داره
10^10 تقریبا برابره با 33.2^2 بنابراین نمی تونه نتیجه محاسبه رو در خودش نگه داره
اگه از unsigned long int استفاده می کردیدحداکثر تا عدد 1-64^2 را می توانست در خودش نگه دارد یعنی تا 19^10
حالا عدد 100^10 تقریبا برابره با 332.1^2 یعنی به یک متغیر نیاز دارید که بتونه 333 بیت رو در خودش نکه داره ولی unsigned long int متغیر 64 بیتی هست
همچنین با توجه به این نکته طول آرایه z رو کافیه 333 بگیرید
بنابراین باید به محدودیتهای متغیرها توجه کرد
در هر صورت واسه انجام این محاسبه یک روشش اینه که ابتدا برای محاسبه تقسیم، مثل عملیات تقسیم که با دست انجام می دهیم یک الگوریتم بنویسید که روی یک رشته کاراکتری شامل اعداد محاسبه رو انجام بده و وقتی تونست تقسیم بکنه اون وقت بیاد دو دویی رو حساب کنه

rezareza550
جمعه 01 آذر 1392, 02:51 صبح
ممنون از توضیح کاملتون