خوب می تونید برا اینکه تاپیک آموزش هم داشته باشه سوالاتتون رو درباره ی طرز کار کد ها بگید؟
خوب می تونید برا اینکه تاپیک آموزش هم داشته باشه سوالاتتون رو درباره ی طرز کار کد ها بگید؟
سلام دوست خوبم
راستش ديدم زبان برنامه نويسي شما c هستش
ولي من بايد vb ياد بگيرم
آخه براي امتحان بايد ياد بگيرم كه قبول شم...
يا حق (:
نمي شه ديگه كد نمونه نذارين؟
اين كد كه گذاشتين خيلي خوبه كه! چي از اين بهتر بذاريم آخه!!!
باشه از هفته دیگه کد نمی ذارم تا کم کم خودتون با روش های کوتاه کردن کد آشنا شین.
سلام دوست خوبم
راستش ديدم زبان برنامه نويسي شما c هستش
ولي من بايد vb ياد بگيرم
آخه براي امتحان بايد ياد بگيرم كه قبول شم...
يا حق (:دوستان عزیز لطف کنید پستها بی ربط ندید همین الآن هیچی نشده 3 صفحه شد تاپیک! اگر جواب دارید کوتاهتر پست کنید اگر نه که دیگه این که شما vb کارید و c بلد نیستید و یا وقت ندارید به دوستان این انجمن هیچ مربوط نمیشه!عاليه حيف وقت ندارم
لطف می کنید.
دقیقا من هم این هفته کمی سرم خلوت بود، نشستم یک دستی یه کد اول بکشم دیدم یک کد دوم آقا حامد پست داد! دیگه تمام، این هفته رو بی خیال شدمنمي شه ديگه كد نمونه نذارين؟
اين كد كه گذاشتين خيلي خوبه كه! چي از اين بهتر بذاريم آخه!!!
آقا حامد لطف می کنی این قسمت رو توضیح بدی مخصوصا آنجا که رنگی کردم...ممنونint f(int n)
{
j = s = 0;
e = 15;
do {
s <<= 4;
s += (n&e)>>j;
e <<= 4;
j += 4;
} while (e>>4 < n);
return s == n;
}
Last edited by taia; 04-08-2008 at 05:36.
سلام
تابع F میاد قرینه n رو در s قرار می ده و در خط آخر تابع هم همونطور که میبینین اونا رو با هم مقایسه میکنه.
حالا در مورد چگونگی حساب کردن قرینه:
همون طور که می دونید اگه م یه عدد رو در مبنای دو 4 رقم 4 رقم از هم جدا کنیم هر کدوم از این 4 رقم ها برابر با 1 رقم در مبنای 16 می باشند. چون که 16 = 2 به توان 4
برای مثال برای عدد 1011100 روش کار اینه
------- اول اونو 4 تا 4 تا از سمت راست جدا می کنیم =1100، 101
------- هر کدوم از رقم ها رو در مبنای 16 می نویسیم 2(1100) = 10(12) = 16(C) و 2(101) = 10(5) = 16(5)
------- ------- پس عدد مورد نظر در مبنای 16 برا بر است با 16(5C)
خوب حالا به راحتی میتونیم نتیجه بگیریم که می تونیم قرینه ی یک عدد رو در مبنای 16 میشه بدون تبدیل اون عدد به مبنای 16 بدست آورد به طوری که اول اون عدد رو در مبنای 2 می نویسیم و 4 تا 4 تا رقم ها شو جدا میکنیم و اونا رو بر عکس می کنیم.
برای مثال برای عدد 1011100 روش کار اینه
------- اول اونو 4 تا 4 تا از سمت راست جدا می کنیم =1100، 101 و آخر اونایی که کمتر از 4 رقم دارن 0 اضافه می کنیم تا 4 رقمی بشن = 1100، 0101
------- سپس اونارو برعکس می کنیم : =0101، 1100
------- خب اگه این عدد رو به مبنای 16 ببریم میبینیم که برابر است با 16(C5)
خوب این دوتا عدد رو با هم مقایسه میکنیم و میبینیم که با هم فرق می کنن پس 10(92) در مبنای 16 قرینه نیست.
حالا اینم توضیحات برنامه اگه می خواین بهتر متوجه شین یه کاغذ وردارین و یه ورودی فرضی (مثلا همین 92) بهش بدین رو رو کاغذ کار برنامه رو خط به خط دنبال کنین.
موفق باشید.
دوست عزیز این چیزایی که شما گفتید همه درستنوشته شده توسط hamed valizadeh [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
چند تا سوال داشتم:
1.عملگر >> یا << همون شیفت به چپ . شیفت به راست هست دیگه
2. s+=(n&e)<<j توی اینجا چرا n و e رو &کردی اصلا این خط چه کار میکنه ؟
3.eرو که مساوی 15 گذاشتی چه کار میکنه ؟
4.کلا تابع f رو توضیح بدی ممنون میشم
سلام
1. بله
2 و 3 . همون طور که میدونی در اول مقدار e عدد 10(15) یا 2(1111) هست زیرا وقتی هر عددی رو با e، & کنیم عدد حاصل برابر با 4 بیت اول اون عدد میشه برای مثال 1111 & 10111001 = 1001 و در دور دوم while مقدار e برابر با 11110000 میشه چون که این دور ما 4 بیت دوم رو می خوایم پیداکنیم برای مثال 11110000 & 10111001 = 10110000. مقدار j برای از بین بردن 0 های اضافه ی جلوی عدد است. برای مثال در دور دوم 4 عدد 0 اضافه جلوی عدد است و ما اون رو j بار به سمت راست شیفت می دیم، به همین دلیل j هر دفعه 4 تا اضافه میشه.
4. کل این حرفایی که تو این دو تا پست بود رو بزار جواب این سوال!
KEEP POSTING
چه جالبسلام
1. بله
2 و 3 . همون طور که میدونی در اول مقدار e عدد 10(15) یا 2(1111) هست زیرا وقتی هر عددی رو با e، & کنیم عدد حاصل برابر با 4 بیت اول اون عدد میشه برای مثال 1111 & 10111001 = 1001 و در دور دوم while مقدار e برابر با 11110000 میشه چون که این دور ما 4 بیت دوم رو می خوایم پیداکنیم برای مثال 11110000 & 10111001 = 10110000. مقدار j برای از بین بردن 0 های اضافه ی جلوی عدد است. برای مثال در دور دوم 4 عدد 0 اضافه جلوی عدد است و ما اون رو j بار به سمت راست شیفت می دیم، به همین دلیل j هر دفعه 4 تا اضافه میشه.
4. کل این حرفایی که تو این دو تا پست بود رو بزار جواب این سوال!
واقعا يه كد خلاقانه بود
هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)