برگزیده های پرشین تولز

آموزش C++ سي پلاس پلاس از پايه

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

73a1.gif


يك متغير چيست؟
از ديد يك برنامه نويس ، يك متغير ، يك مكاني در حافظه كامپيوتر شماست ، كه مي تواند يك مقدار را در خود ذخيره كند و شما مي توانيد بعدا دوباره اين مقدار را بازيابي كنيد.
To understand this, you must first understand a bit about how computer
memory works. Your computer’s memory can be thought of as a series of
cubby holes, all lined up in a long row. Each cubby hole—or memory loca-tion—
is numbered sequentially. These numbers are known as memory
addresses.

براي فهم اين ، شما بايستي اول مقداري راجع به طرز كار حافظه بدانيد. حافظه مثل حفره هايي است كه در يك رديف قرار گرفته اند. و اين خانه ها ، به ترتيب شماره گذاري شده اند. اين اعداد ، آدرسهاي حافظه نام دارند. Memory addresses .

Variables not only have addresses, they have names. For example, you might create a
variable named myAge . Your variable is a label on one of these cubby holes so that you
can find it easily, without knowing its actual memory address.
متغيرها نه تنها آدرس دارند ، بلكه ، نام هم دارند. براي مثال شما مي توانيد يك متغير با نام myage بسازيد. متغير شما نامي(برچسبي) است بر يكي از اين خانه ها ، و به اين ترتيب شما مي توانيد به راحتي آن را بيابيد ، بدون آنكه آدرس واقعي اين خانه حافظه را بدانيد.
در شكل زير متغير ما از خانه 103 شروع مي شود.


73a2.gif


وقتي يك برنامه نويس از حافظه صحبت مي كند ، منظورش Ram است. كه هر وقت كامپيوتر خاموش بشود ، پاك مي شود و بعدا از Hard باز پر مي شود. متغيرها در Ram شكل مي گيرند. .


73a3.gif


در ادامه اين مطلب كه ديگه متن اصلي را نمي گذارم، مي گويد كه شما دو وظيفه داريد موقع ايجاد يك متغير،
اول اينكه نامي براي آن تعيين كنيد.
دوم آنكه type را تعيين كنيد. مثل : integer, character, زيرا بايد معلوم شود كه چند خانه حافظه براي نگه داري اين متغير لازم است.
.
متغير char يك بايت حافظه مي خواهد. Short int در بيشتر كامپيوترها نياز به 2 بايت حافظه دارد. و long int نياز به 4 خانه حافظه دارد. و int بدون پيشوند long يا short مي تواند 2 يا 4 بايت باشد.

اگر شما ويندوز 95 يا 98 يا NT داريد ، مي توانيد int را 4 بايت تعيين كنيد وقتي يك كامپايلر مدرن داريد. شايد اين جمله را من خوب ترجمه نكردم. متن اصلي را مي گذارم.

If you are running Windows 95,Windows 98, or Windows NT, you can count on your int being four bytes as long as you use a modern compiler.

در ادامه ،
دستور sizeof به شما تعداد حافظه هر متغير را مي دهد.


#include <conio.h>
#include <iostream.h>

void main()
{
clrscr();
// ----------- shoroe ghaaleb -----------------
cout <<"The size of an int is:";
cout <<sizeof(int)<<"bytes.."<<endl;
cout <<"The size of a short int is:";
cout <<sizeof(short)<<"bytes.."<<endl;
cout <<"The size of a long int is:";
cout <<sizeof(long)<<"bytes.."<<endl;
cout <<"The size of a char is:";
cout <<sizeof(char)<<"bytes.."<<endl;
cout <<"The size of a float is:";
cout <<sizeof(float)<<" bytes.."<<endl;
cout <<"The size of a double is:";
cout <<sizeof(double)<<" bytes.."<<endl;
// ----------- entehaye ghaaleb -----------------
getch();
}

73a4.gif


البته نتايج بالا مربوط به كامپيوتر من است. ويندوز من 98 است و توربو سي 3.0 استفاده مي كنم.
مقاديري كه در اين كتاب ذكر شده را در عكس زير مي بينيد و گفته كه ممكن است در كامپيوتر شما متفاوت باشد. اگر فرق داشت ، بي زحمت بگيد تا مقايسه اي بكنيم.


73a5.gif

.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به برنامه زير دقت كنيد:


74a1.gif


#include <conio.h>
#include <iostream.h>


void main()
{
clrscr();
char c ;
menu:
// ----------- shoroe ghaaleb -----------------

unsigned short int a;
short int b;
a=40000;
b=40000;
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;

// ----------- entehaye ghaaleb -----------------
cout<<"end -x > exit-any key > repeat"<<endl;
c=getch();
if(c != 'x') goto menu;
}

74a2.gif



ما به a و b مقدار 40 هزار داده بوديم. ولي b مقداري اشتباه را نشان مي دهد.
قضيه از اين قراره كه وقتي كلمه unsigned را بكار مي بريم ، يعني اينكه فقط مقادير مثبت را مي خواهيم استفاده كنيم .
نوع int تا 32000 را قبول مي كند. خودتان حساب كنيد. 2 بايت حافظه را مي گيرد. هر بايت 8 بيت است. 2 بايت ميشه 16 بيت. حالا 2 را 16 بار در خودش ضرب كنيد. ميشه 65 هزار و 536 ولي يك بيت كم ميشه . چون براي علامت منفي يا مثبت استفاده ميشه. ميشه حدود 32 هزار .

حالا با دستور unsigned آن يك بيت را پس مي گيريم و باز ميشه 65 هزار . ولي ديگه اعداد منفي را نمي توانيم بهش بدهيم.
من براي امتحان 40 هزار را دادم كه بين 32 هزار بود و 65 هزار . و ديديد كه دومي قاطي كرد.
.
 

plusdeck

Registered User
تاریخ عضویت
19 فوریه 2005
نوشته‌ها
550
لایک‌ها
11
محل سکونت
In My Earphones
به نقل از saalek :
اگر شما ويندوز 95 يا 98 يا NT داريد ، مي توانيد int را 4 بايت تعيين كنيد وقتي يك كامپايلر مدرن داريد. شايد اين جمله را من خوب ترجمه نكردم. متن اصلي را مي گذارم.
.
منظور از كامپايلر مدرن يعني كامپايلر تحت ويندوز.
اگه كامپايلر شما تحت داس باشه سيستم عامل به عنوان مثال مقدار 2 بايت به داده از نوع integer اختصاص ميده و اگه از كامپايلر تحت ويندوز استفاده مي كنيد مقدار 4 بايت رو.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

76a1.gif


راجع به نوع char كه يك بايت است، ميشه 256 حالت كه همان كاراكترها ميشه .
اصطلاح ASCII يعني American Standard Code for Information .
لازم به تذكر است كه اين استاندارد را تمامي سيستم ها پشتيباني مي كنند.

Nearly every computer operating system supports ASCII, though many sup-port
other international character sets as well.


76a2.gif

.
راجع به نام گذاري متغيرها كه قبلا 3 نكته را گفتيم. و نكته 4 اين كه معني دار باشه تا بدوانيم چي را در خود نگه مي داره. و نكته 5 هم اين كه سي++ به بزرگي و كوچكي حروف حساس است. يعني با حروف بزرگ اگر بنويسي و بعد با حروف كوچك ، ميشه دو تا اسم نه يك اسم.
3 تا قانون قبلي هم يكي اين بود كه با حرف يا آندرلاين شروع بشه . از حروف و اعداد و آندرلاين ساخته بشه و از كلمات كليدي سي++ هم استفاده نكند.
به قوانين نام گذاري و تعريف متغير در زير توجه كنيد.


76a3.gif


دو روش مقدار دهي به متغير را در زير مي بينيد. يعني بلافاصله هم ميشه مقدار دهي كرد.


76a4.gif

 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به نقل از plusdeck :
منظور از كامپايلر مدرن يعني كامپايلر تحت ويندوز.
اگه كامپايلر شما تحت داس باشه سيستم عامل به عنوان مثال مقدار 2 بايت به داده از نوع integer اختصاص ميده و اگه از كامپايلر تحت ويندوز استفاده مي كنيد مقدار 4 بايت رو.
خيلي ممنون. فكر كنم توربو سي تحت داس هم داريم. آيا ايني كه ما استفاده مي كنيم تحت ويندوزه؟
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

#include <conio.h>
#include <iostream.h>

typedef unsigned short int ushort;

void main()
{
clrscr();char c ;
menu:
// ----------- shoroe ghaaleb ---------------

ushort a=10;
cout<<"a="<<a<<endl;


// ----------- entehaye ghaaleb -------------
cout<<"x=> exit anykey=> repeat"<<endl;
c=getch();if(c != 'x') goto menu;
}

به برنامه بالا دقت كنيد. با كلمه typedef مي توانيم يك اسم اختصاري براي نوعي از type انتخاب كنيم. در اينجا براي unsigned short int اسم ushort را گذاشتيم. و از اين كلمه در برنامه استفاده كرديم.
توجه كنيد كه ما type جديدي نساخته ايم بلكه يكي از type هاي موجود را اسم ديگري گذاشته ايم. اين براي اين خوبه كه در تايپ كردن صرفه جويي كنيم.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

#include <conio.h>
#include <iostream.h>

void main()
{
clrscr();char c ;
menu:
// ----------- shoroe ghaaleb -------------
unsigned short int smallnumber;
smallnumber =65535;
cout <<"small number:" <<smallnumber <<endl;
smallnumber++;
cout <<"small number:" <<smallnumber <<endl;
smallnumber++;
cout <<"small number:" <<smallnumber <<endl;

// ----------- entehaye ghaaleb -----------
cout<<"x=> exit anykey=> repeat"<<endl;
c=getch();if(c != 'x') goto menu;
}

برنامه بالا براي اينه كه بگيم وقتي از حدود مجاز يك متغير تجاوز كنيم چي ميشه. برنامه بالا را اجرا كنيد. 3 عدد خروجي اش است كه به ترتيب 65535 و صفر و يك است.
.
==================================​

اما در مورد متغيرهاي علامت دار ، وضع به گونه ديگري است. در شكل زير اين قضيه را مي بينيد. نتيجه اجرا را هم در ((گوشه تصوير)) مي بينيد. در اينجا اصطلاح آينه اي شدن را بكار مي برند. فكر كنيد كه چرا اين اصطلاح بكار مي رود.


79.gif

.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
كمي به عقب برگشتيم. شرمنده. منظورم پستهاي بالاست كه راجع به متغير صحبت شده.
راستش كتاب sams خيلي پايه اي راجع به متغيرها صحبت كرده بود و من دلم نيامد نگم.
كمي هم با ديد اسمبلي نگاه كرده بود به قضيه. به نظر من كسي كه سي كار مي كنه ، خيلي خوبه كه درك اسمبلي اش قوي باشه . چون همان طور كه مي گن ، سي يك زبان سطح مياني است و اين خصيصه تقريبا منحصر به فرده . سي بخاطر نزديكي به زبان ماشين خيلي قوي و سريع است. در عين حالي كه ميشه سي را يك زبان سطح بالا هم حساب كرد. منظور من از سطح بالا اينه كه به زبان انسان نزديك باشه.
كلا ، سي ، هم به زبان ماشين نزديكه ، هم به زبان انسان و اين خيلي خوبه.
ولي چون به زبان انسان شبيه است ممكنه با ماشين كمي ما بيگانه بشويم. يعني مثل اسمبلي نويسي نيست كه يكسره در تماس با سخت افزار باشيم ، بلكه سي با تعريف هاي دقيق خودش ارتباط با اسمبلي را برقرار مي كنه نه اينكه واقعا به زبان ماشين بنويسيم. اگر اين تعاريف را خوب بلد باشيم ، انگار كه داريم اسمبلي مي نويسيم.
 

لیلی

کاربر تازه وارد
تاریخ عضویت
7 نوامبر 2005
نوشته‌ها
15
لایک‌ها
0
سن
37
محل سکونت
Esf
سلام saalek
واقعا کار جالبی رو شروع کردی.من از اولش دنبال میکردم.من هم مبتدی هستم.بیشتر تمرین حل می کنم.
یه پیشنهاد داشتم.اگه از اون کتابی که درس میدی میشه تمرین های جالبشو هم اخر هر مبحث بذاری؟(البته خیلی سخت نباشه!!)
راستی من 2 تا برنامه است که توش اشکال دارم.اگه کمک کنی ممنون میشم.

1)برنامه ای که عدد صحیح مثبت n را از ورودی بگیرد و کلیه اعداد کوچکتر یا مساوی با n را که خود اعداد برابر سمت راست مربعشان باشد در خروجی چاپ کند.مثلا اگر n=80 باشد اعداد 1 .5 .6 .25 .76 چاپ کند.(1=1 و 5*5=25 و6*6=36 و25*25=625 و76=5776 )

2)برنامه ای که عددی را بخواند وعددی را محاسبه کند که ارقام ان از ارقام عدد اولیه باشد و بزرگترین عدد ممکن.در دو حالت 1)با ارقام تکراری و 2)بدون ارقام تکراری.مثلا اگر عدد خوانده شده 50952 باشد1)عدد 95520 و برای حالت دوم عدد 9520 را چاپ کند.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به نقل از لیلی :
سلام 1)برنامه ای که عدد صحیح مثبت n را از ورودی بگیرد و کلیه اعداد کوچکتر یا مساوی با n را که خود اعداد برابر سمت راست مربعشان باشد در خروجی چاپ کند.مثلا اگر n=80 باشد اعداد 1 .5 .6 .25 .76 چاپ کند.(1=1 و 5*5=25 و6*6=36 و25*25=625 و76=5776 )

2)برنامه ای که عددی را بخواند وعددی را محاسبه کند که ارقام ان از ارقام عدد اولیه باشد و بزرگترین عدد ممکن.در دو حالت 1)با ارقام تکراری و 2)بدون ارقام تکراری.مثلا اگر عدد خوانده شده 50952 باشد1)عدد 95520 و برای حالت دوم عدد 9520 را چاپ کند.

سلام دوست گرامي.
خيلي خوب كرديد كه پيام داديد. اين جوري آدم بهتر مي داند چكار كند.

راجع به سئوالات شما من خيلي كار كردم. با توابع رياضي ميشه حل كرد و من هم از همين راه رفتم. ولي آنقدر پيچيده ميشه كه خود آدم هم نمي دونه آخرش چكار كرده.
به نظر من نيازي به اين محاسبات پيچيده رياضي نيست. چون با توابع رشته اي خيلي كار ساده تره. چون (( مسئله شما ، به اعداد به چشم رشته نگاه مي كند)) ، پس بايد با توابع رشته اي حل بشه. و با توابع رياضي 5 برابر مراحل كار بيشتره. توابع حاضر و آماده اي سي داره كه به راحتي عددي را به رشته تبديل مي كند و بالعكس. مي توانيم هر جا خواستيم عددي روي عدد كار كنيم ، هر جا راحت تر بود ، سريع به رشته تبديل كنيم و رشته اي كار كنيم.

در ضمن من خيلي ضعيفم و دوستان ديگه به سادگي هر چه تمام تر اين مسائل را حل مي كنند.
البته من هم با همان روشهاي ضعيف خود حل خواهم كرد ولي چون هنوز رشته ها را نگفته ايم ، براي من سخته .
راجع به تمرينات ، من در حال حاضر 3 كتاب الكترونيكي دارم كه تمرينات آخر فصل ندارد. ولي اگر در سايتي ديدم منتقل مي كنم. دوستان هم ممكنه داشته باشند. . اگر لطف كنند خيلي خوبه.
.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
يكسري تمرين ساده از :
stranger_in_rain
با تشكر از ايشان.
=====================
دسته ی اول سوالات :

1-وزن یک مولکول آب23^10*3 و وزن یک لیتر آب در حدود 950 گرم است . برنامه ای بنویسید که وزن آب را بر حسب لیتر از ورودی خوانده و تعداد مولکوتهای ان را محاسبه کند.


2- هرسال برابر با 7^10 *156/3 ثانیه است. برنامه ای بنویسید که سن شما را دریافت کرده به ثانیه تبدیل کند.


3-برنامه ای بنویسید که حقوق کارمندی را خوانده بیمه ومالیات ودریافتی محاسبه کند و نمایش دهد.
بیمه=حقوق کارمند *7%
مالیات= حقوق کارمند *10%
دریافتی=بیمه-مالیات-حقوق


4-برنامه ای که قیمت کالایی را در سال قبل و جاری خوانده نرخ تورم و قیمت سال بعد را چاپ کند.نرخ تورم باید به صورت درصد مثلا 6.5% چاپ گردد.


5- مدیر شرکتی به هر متخصص خود ماهانه 750000 ریال پرداخت میکند.او میخواهد بداند که اگر5/13 درصدبه حقوق هر متخصص اضافه کند سالانه چقدر به هزینه شرکت اضافه میشود. برنامه ای بنویسید که تعداد متخصصین را خوانده این کار را انجام دهد.


6-برنامه ای بنویسید که عدد دورقمی را خوانده مجموع ارقام و مغلوب انرا چاپ کند.


7-برنامه ای بنویسید که عددی را خوانده بدون استفاده از عملگر ضرب عبارت زیر را محاسبه کند.
توضیح: دراین برنامه برای عمل ضرب از عملگر >> (شیفت به چپ ) استفاده میکنیم.



8-برنامهای بنویسید که سه عدد را خوانده بزرگترین عدد را نمایش دهد.


9- برنامه ای بنویسید که عددی را خوانده اگر عدد زوج باشد عبارت زوج اگر نه فرد را چاپ کندبرای حل این مسئله عملگرهای ؟و % مورد استفاده قرار میگیرد.


10- برنامه ای بنویسید که نام را خوانده که قد و وزن و سن فردی را خوانده اندازه لباسهای او را محاسبه کند
قد به اینچ / وزن به پوند*9/2=اندازه کلاه
7/5 /وزن به پوند =دور کمر به اینچ
▲برای افرادی که سن انها بالای 28 سال باشدبه ازای هر دو سال کامل 10/1 اینچ به دور کمر اضاف میگردد.
قد به اینچ *سن=اندازه کت به اینچ
. ▲ برای افراد بالای 30 سال به ازای هر 10 سال کامل 8/1 اینچ به اندازه کت اضافه میگردد.
===============
با تشكر از ايشان.
شايد اشاراتي به دستورات سي داشته باشد نه سي پلاس پلاس
ولي مهم مسائلي براي تمرين است
شايد هم بعضي براي اين قسمت نامناسب باشد
ديگه امكانات نيست من هم يه جايي فرستادم.
.
================
البته اينها تمرينات كتاب نيست. سئوالاتي است كه دوستي برايم فرستاده تا به موقع بكار برم. من هم قاطي كردم همه را بي موقع ارسال كردم.
.
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
به نقل از لیلی :
سلام saalek
واقعا کار جالبی رو شروع کردی.من از اولش دنبال میکردم.من هم مبتدی هستم.بیشتر تمرین حل می کنم.
یه پیشنهاد داشتم.اگه از اون کتابی که درس میدی میشه تمرین های جالبشو هم اخر هر مبحث بذاری؟(البته خیلی سخت نباشه!!)
راستی من 2 تا برنامه است که توش اشکال دارم.اگه کمک کنی ممنون میشم.

1)برنامه ای که عدد صحیح مثبت n را از ورودی بگیرد و کلیه اعداد کوچکتر یا مساوی با n را که خود اعداد برابر سمت راست مربعشان باشد در خروجی چاپ کند.مثلا اگر n=80 باشد اعداد 1 .5 .6 .25 .76 چاپ کند.(1=1 و 5*5=25 و6*6=36 و25*25=625 و76=5776 )

2)برنامه ای که عددی را بخواند وعددی را محاسبه کند که ارقام ان از ارقام عدد اولیه باشد و بزرگترین عدد ممکن.در دو حالت 1)با ارقام تکراری و 2)بدون ارقام تکراری.مثلا اگر عدد خوانده شده 50952 باشد1)عدد 95520 و برای حالت دوم عدد 9520 را چاپ کند.
برنامه اولت ميشه اين
کد:
#include <conio.h>
#include <iostream.h>

void main()
{
	clrscr();
	int Input_Num;
	int dumm;
	int Power_Ten;
	Input_Num=0;
	dumm=0;
	Power_Ten=0;
	cout<<"Please Enter number: ";
	cin>>Input_Num;
	for (int i=1;i<=Input_Num;i++){
		Power_Ten=10;
		while ((i/Power_Ten)>1)
			Power_Ten=Power_Ten*10;
		dumm=(i*i)%Power_Ten;
		if (dumm==i) cout<<"The number is "<< i <<" and power tow is "<<i*i<< endl;
	}
	cout<<"Press any key ...";
	getch();
}
كه اول مياد عدد رو ميگيره و بعد مياد ميبينه ازچه مرتبه 10 كوچكتره يعني يك رقمي دو رقمي يا و...
بعد مياد توان دو رو حساب كرده و بعد باقي مونده اون رو بر مرتبه ده اي كه بدست اورده بدست مياره
اينطوري عددي كه بدست مياد هم مرتبه عدد اوله و بعد اونها رو مقايسه و چاپ ميكنه

اما برنامه دومت بايد يه ارايه تعريف كني
بعد رقمهاي اعداد تو توش قرار بدي و بعد اونها رو از كوچيك به بزرگ مرتب كني حالا فرض كن اريت A[] عدت ميشه و 4 رقم داره
out=a[4]*10^4+a[3]*10^3 و الا اخر
اگه تكرار نيمخواي بعد از سورت بايد عدادي كه برابر هستند رو حذف كني و مثل فسمت قبل عددت رو حساب كني
:lol:
 

لیلی

کاربر تازه وارد
تاریخ عضویت
7 نوامبر 2005
نوشته‌ها
15
لایک‌ها
0
سن
37
محل سکونت
Esf
ممنون.من هم صبر می کنم تا به اون قسمت ها برسیم. من هم تو حلشون خیلی گیج شدم .البته saeedsmk توضیح داده.برنامه دوم هم سعی میکنم از رو توضیح saeed بنویسم.
البته این مسئله رو وقتی هنوز ارایه ها رو نخونده بودیم استادمون به عنوان مسئله اضافه داد حل کنیم.
از تمرین ها هم ممنون من هم اگه تمرین جالبی دیدم حتما می نویسم
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
مبناهاي عدد نويسي:

البته اكثرا اينها را بلدند و زياد هم يادگيريش ضروري نيست .
سه نوع مبنا در كامپيوتر استفاده ميشه . مبناي 2 ، مبناي 10 ، مبناي 16 .
در مبناي 10 كاراكترهاي مورد استفاده صفر تا 9 است يعني 10 حالت.
در مبناي 2 كاراكترهاي مورد استفاده صفر و يك است يعني 2 حالت.
در مبناي 16 كاراكترهاي مورد استفاده صفر تا 15 است يعني 16 حالت.


در مبناي 10 داريم: 0123456789
در مبناي 2 داريم:01
در مبناي 16 داريم: 0123456789abcdef

براي تبديل از مبناي 10 به 2 ، از تقسيم هاي متوالي بر 2 استفاده مي كنيم. و باقيمانده ها را كنار هم مي چينيم تا عدد در مبناي 2 حاصل شود.
اولين باقيمانده تقسيم(بر 2) ميشه اولين عدد از سمت راست و الي آخر.

اگر عددي در مبناي 16 عبارت باشد از 2f (بخوانيد 2 اف) و (ببينيد اف در سمت راسته و 2 در سمت چپه، چون در موقع انتقال به فروم ممكنه جاشون عوض بشه)

بله ، 2 اف ميشه 2 ضرب در 16 بعلاوه 15 .(a ميشه 10 ، b ميشه 11 ، c ميشه 12 ، d ميشه 13 ، e ميشه 14 ، f ميشه 15 ) پس ميشه 32 بعلاوه 15 كه ميشه 47 .

در درس pointer ها ديديم كه آدرس در مبناي 16 ارسال ميشه. البته نيازي به تبديل به مبناي 10 نبود ولي اين مبناها را گفتم تا معلوم بشه آن چطور ساخته ميشه.
كار در مبناي 16 ساده تر از مبناي 2 است. همين 47 را بياييد به مبناي 2 تبديل كنيم.
اول تقسيم بر 2 مي كنيم.
باقيمانده ميشه 1 . اين ميشه a0=1
خارج قسمت 23 بود كه باز تقسيم بر 2 ميشه 11 و باقيمانده 1 يعني a1=1
عدد 11 تقسيم بر 2 ميشه 5 و باقيمانده 1 يعني a2=1
پنج تقسيم بر 2 ميشه 2 و باقيمانده 1 يعني a3=1
دو تقسيم بر 2 ميشه 1 و باقيمانده ندارد. a4=0
و آخرين خارج قسمت هم ميشه a5=1
A=101111


86a1.gif


86a2.gif


86a3.gif

.
كامپيوتر در مبناي 2 كار مي كند و انسان در مبناي 10 و
مبناي 16 آشتي بين انسان وكامپيوتر است.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
کد:
#include <conio.h>		
#include <iostream.h>				
				
void main()						
{		
clrscr();char c;
 menu:
 // ----------- shoroe ghaaleb -------------
 char ca[10];
ca[0] = 'H';
ca[1] = 'e';
ca[2] = 'l';
ca[3] = 'l';
ca[4] = 'o';
ca[5] = 0; 
cout<<"ca="<<ca<<endl;
 // ----------- entehaye ghaaleb -----------
	cout<<"x=> exit  anykey=> repeat"<<endl;
	c=getch();if(c != 'x') goto menu;				
}


88.gif


آرايه يعني مجموعه اي اعضا. و بايد به هر يك جدا توجه شود.
در اينجا ما ، يكي – يكي اعضاي آرايه را مقدار دهي كرده ايم.
در موقع چاپ اين آرايه ، يعني ca ، سي اتوماتيك عمل كرده ، يعني با وجودي كه 10 عضو داشته آرايه ما ، همه را چاپ نكرده ، و وقتي به آرايه حاوي صفر رسيده كار را متوقف كرده.
.
 

لیلی

کاربر تازه وارد
تاریخ عضویت
7 نوامبر 2005
نوشته‌ها
15
لایک‌ها
0
سن
37
محل سکونت
Esf
سلام
یه سوال در مورد مبنا داشتم.
در مبنای 16 شما گفتید اعداد به صورت 0123456789abcdef در می اید.در قسمت اشاره گر ها شما ادرس یک متغیر رو چاپ کردید که 0x8f9ffff4 بود.و ادرس متغیر هم در مبنای 16 است.سوالم اینه این x چیه؟این منظور حرف x
یا یه علامت خاصه؟
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
در سي اعداد در چند مبنا بيان ميشن
دسيمال . هگزادسيمال . اكتال( مبنا 8)
اگه اعداد علامت مشخصه اي نداشته باشه يعني عدد ده دهي يا دسيمال
اگه علامت داشته باشه بسته به علامت عدد در مبنا مورد نظر بيان شده مثلا 0x ( نه x) يعني عدد در مبناي 16 داره بيان ميشه .
اگه اول عدد 0 باشه يعني اين عدد در مبناي 8 مثلا 010
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
با تشكر از كمكهاي تمامي دوستان كه ما را تنها نمي گذارند.

-----------------------------------
آرايه و اشاره گر و string در سي كمي پيچيده است و بايستي با مثال و تمرين ، بر اين مباحث مسلط شويم.
در پستهاي بعدي سعي مي كنيم با مثالهاي متعدد ،بر اين مباحث مسلط شويم.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به برنامه اي كه با اجازه k750i و programmer نقل مي كنم توجه كنيد:
تمريني براي حلقه و آرايه:

کد:
#include <iostream.h>
#include <conio.h>

int x,i,b[20]={0};
int main()
{
  clrscr();
  i=0;//counter
  cout<<"Enter number decimal format : ";
  cin>>x;
  while(x!=0)
  {
   b[i]=x % 2 ;
   x=x / 2;
   i++;
  }//end of while
  cout<<"number in binary format : ";
  for(int j=i-1;j>=0;j--)
   cout<<b[j];
  cout<<endl;
  getch();
  return 0;
}

شرح برنامه : 3 متغير از نوع int تعريف شده. كه سومي آرايه است. يعني آرايه اي كه اجزايش int است و 20 عضو دارد. پس با برنامه پست قبلي ما كه آرايه اي از char بود فرق مي كند.
آنجا char ها كاروان تشكيل مي دادند و اينجا int ها.

هدف برنامه: برنامه يك عدد در مبناي 10 مي گيره و عدد به مبناي 2 بازمي گرداند.

روش كار برنامه: در پست قبل از روش تقسيم هاي متوالي بر 2 براي (( تبديل از مبناي 10 به 2 )) استفاده كرديم. اين برنامه هم همين كار را مي كند.
عدد را از كاربر مي گيره و در x قرار مي دهد و بعد در يك حلقه while تقسيم ها را انجام مي دهد و با دستور باقيمانده % ، باقيمانده تقسيم ها را دريافت مي كند و در اعضاي آرايه قرار مي دهد.
در حلقه بعدي كه از نوع for است ، اعضاي آرايه را چاپ مي كند. اعضاي آرايه كه يا صفرند يا يك ، كنار هم كه چاپ مي شوند ، باعث ميشه عدد در مبناي 2 ساخته بشه.

به دستور b[20]={0} دقت كنيد. اين دستور همه 20 عضو آرايه را صفر مي كند.
و مي بينيد كه از علامت مجموعه استفاده شده، شايد ه اين دليل كه اعضاي هر آرايه ، هر يك به تنهايي يك متغير محسوب مي شوند و ما با مجموعه اي از متغير ها روبرو هستيم.

فوايد كار با برنامه: درك خوبي از تبديل به مبناي 2 ، تمرين با دو نوع حلقه ، تمرين آرايه.
.
اگر مي توانيد به عنوان تمرين كاري كنيد كه مبناي 16 خروجي برنامه باشد. من خودم هنوز كار نكردم ولي فكر كنم بشه.
.
 
بالا