5.66k likes | 6.89k Views
یَرفعُ اللهَ الذینَ آمَنوُا مِنکُم وَ الذینَ اوُتوالعِلم دَرَجَات. مبانی کامپیوتر و برنامهنویسی. برنامهنویسی به زبان C. مدرس: رضا رمضانی. ترم 1-92. مراجع. «برنامهنویسی به زبان C » ، سعید ابریشمی، انتشارات جهاد دانشگاهی
E N D
یَرفعُاللهَالذینَآمَنوُامِنکُموَالذینَاوُتوالعِلمدَرَجَاتیَرفعُاللهَالذینَآمَنوُامِنکُموَالذینَاوُتوالعِلمدَرَجَات مبانی کامپیوتر و برنامهنویسی برنامهنویسی به زبان C مدرس: رضا رمضانی ترم 1-92
مراجع «برنامهنویسی به زبان C»، سعید ابریشمی، انتشارات جهاد دانشگاهی «مبانی کامپیوتر و برنامهنویسیبه زبان C» ، محمد داورپناهجزی، انتشارات دانشگاه صنعتی اصفهان C How to program, Deitel and Deitel, 6thed مبانی رایانه، فنی و حرفهای، محمدرضا موحدی، محمدرضا یمقانی ابزار Visual Studio – C++ (6, 2003, 2005, 2008, 2010, 2012)
ارزیابی درس امتحان پایان ترم: 10 نمره امتحان میان ترم: 5 نمره پروژه کلاسی و نهایی: 5 نمره حضور و غیاب، فعالیت کلاسی
مبانی کامپیوتر و برنامه سازی فصل اول : مبانی کامپیوترها مدرس : رضا رمضانی
1-1 تعاریف اولیه • کامپیوتر • وسیلهای است که دادهها و دستورالعملها را از انسان دریافت کرده و پس از اجرای دستورالعملها برروی داده ها، دادههای حاصل را به انسانها باز میگرداند. به اجرای دستورالعملها برروی دادهها پردازش گفته میشود. • الگوریتم • دستورالعملهایی که برای کامپیوتر نوشته میشود را الگوریتم گوییم . • برنامه کامپیوتری • به تشریح الگوریتمها برای کامپیوتر با استفاده از یک زبان برنامه سازی گفته میشود.
1-1 تعاریف اولیه • زبان برنامه سازی • زبانی است که برای کامپیوتر قابل فهم بوده و الگوریتمها با استفاده از آن به کامپیوتر داده میشوند. این زبانها به سه دسته تقسیم میگردند : • زبانهای سطح پایین : که به آن زبان ماشین نیز گفته میشود، مستقیما به زبان خود کامپیوتر (یعنی زبان صفر و یک) نوشته میشود و توسط کامپیوتر قابل اجرا میباشد. • زبانهای سطح بالا : این زبانها بسیار نزدیک به زبان انسان هستند. مثلا : If (a > b) then c = c + 1; برای تبدیل این زبان به زبان ماشین نیاز به مترجم داریم : • کامپایلر (Compiler) : ابتدا کل برنامه زبان سطح بالا را بررسی کرده و درصورت نبود خطا کل آن را به زبان ماشین تبدیل میکند. اکنون برنامه آماده اجرا است. • مفسر (Interpreter) : برنامه زبان سطح بالا را دستور به دستور به زبان ماشین تبدیل و همزمان آن را اجرا میکند. • زبانهای بسیار سطح بالا : زبانهای خاص منظورهای که برای عملیات خاص طراحی شدهاند همانند زبان PROLOG برای هوش مصنوعی و یا SQL برای پایگاه داده ها.
2-1 تاریخچه کامپیوتر • کامپیوترهای نسل اول • ابداع در اوایل دهه 1950 و از لامپ خلاء بعنوان جزو اصلی خود استفاده میکردند. • کامپیوترهای نسل دوم • ابداع در اوایل دهه 1960و ویژگی مهم آنها استفاده از ترانزیستور بود. • کامپیوترهای نسل سوم • در سال 1964 با ابداع مدارات مجتمع IC که صدها ترانزیستور را در یک فضای کوچک جای میداد، ایجاد شدند. • نسل چهارم کامپیوترها • در اواسط دهه 1970 با ابداع مدارات مجتمع با فشردگی بالا ایجاد شدند. • نسل پنجم کامپیوترها • یا نسل کامپیوترهای هوشمند که قادر به انجام اعمالی همانند استنتاج و استدلال مانند انسانها باشند.
3-1 انواع کامپیوتر • کامپیوترهای بزرگ (mainframe) • این کامپیوترها از سرعت و قدرت بالایی برخوردارند و معمولا در سازمانهای بزرگ و برای محاسبات سنگین استفاده میشوند. دستهای از این کامپیوترها که دارای توان بسیار بالای محاسباتی هستند به ابرکامپیوتر (supercomputer) موسومند. • کامپیوترهای کوچک (minicomputer) • در اواخر دهه 1950 کامپیوترهای کوچک وارد بازاز شدند که توان محاسباتی کمتری داشتند و توسط سازمانهای کوچکتر مورد استفاده قرار میگرفتند. • ریزکامپیوتر (microcomputer) • در آغاز دهه 1980 ریزکامپیوترها یا کامپیوترهای شخصی با قیمت پایین و حجم بسیار کوچک وارد بازار شدند و مورد استقبال مردم و افراد عادی قرار گرفتند.
4-1 اجزای کامپیوتر • کامپیوتر از دو قسمت اصلی تشکیل شده است • سخت افزار (Hardware) : کلیه دستگاههای الکتریکی، الکترونیکی و مکانیکی تشکیل دهنده یک کامپیوتر را سخت افزار آن میگوییم. • نرم افزار (Software) : مجموعه برنامههایی هستند که برای یک کاربرد خاص نوشته شدهاند و بدون آنها سخت افزار قادر به کاری نیست.
کنترل واحد ورودی حافظه اصلی محاسبه و منطق واحد خروجی حافظه جانبی 1-4-1 سخت افزار کامپیوتر
1-4-1 سخت افزار کامپیوتر • واحد ورودی • وظیفه این بخش دریافت دادهها از محیط خارج و انتقال آنها به کامپیوتر میباشد. دستگاههای ورودی مهم عبارتند از : صفحه کلید، ماوس، صفحه لمسی (touch screen)، قلم نوری، اسکنر، دیجیتایزر و ... • واحد خروجی • این بخش وظیفه انتقال اطلاعات از کامپیوتر به محیط خارج را بعهده دارد و مهمترین دستگاههای خروجی عبارتند از : صفحه نمایش(Monitor)، چاپگر، رسام، بلندگو و ... • واحد محاسبه و منطق • مغز اصلی کامپیوتر است که اعمال اصلی همچون جمع، ضرب، تفریق، تقسیم، مقایسه دو مقدار و ... در آن انجام میپذیرد. • واحد کنترل • این بخش و ظیفه کنترل سایر بخشها را بعهده دارد و تصمیم میگیرد کدام عمل در چه زمانی صورت پذیرد این بخش بهمراه واحد محاسبه و منطق تشکیل واحد پردازش مرکزی CPU (Central Processing Unit) را میدهند.
1-4-1 سخت افزار کامپیوتر • واحد حافظه اصلی • این واحد وظیفه نگهداری اطلاعات (شامل دادهها و برنامه ها) را بعهده دارد. در واقع هر برنامهای برای اجرا، ابتدا باید بهمراهدادههای مورد نیاز وارد حافظه اصلی گردد.حافظه اصلی به دو دسته اصلی تقسیم میگردد : • - حافظه با دستیابی تصادفی (RAM Random Access Memory) این حافظه قابل خواندن و نوشتن میباشد و برای ذخیره اطلاعات کاربران بکار میرود. • - حافظه فقط خواندنی (ROM Read Only Memory) این حافظه فقط قابل خواندن است و محتویات آن قابل تغییر نیست. این حافظه معمولا در کارخانه سازنده پر شده و حاوی دستورالعملهای لازم برای راه اندازی اولیه کامپیوتر میباشد. • حافظه از واحدهای کوچکی بنام بیت(Bit) تشکیل شده است که هر بیت قابلیت نگاهداری یک 0 یا 1 را در خود دارد. به هر 8 بیت یک بایت(Byte) گفته میشود که واحد اندازه گیری حافظه است. به هر 2 یا 4 بایت، یک کلمه(Word) میگوییم. علاوه براین داریم : 1 KiloByte or 1K = 1024 Byte 1 MegaByte or 1M = 1024 KiloByte = 1048576 Byte 1 GigaByte or 1G = 1024 MegaByte = 1073741824 Byte 1 TeraByte or 1T = 1024 GigaByte
1-4-1 سخت افزار کامپیوتر • حافظه جانبی • از آنجا که با خاموش شدن کامپیوتر اطلاعات حافظه اصلی پاک میگردد، نیاز به حافظهای داریم که بتواند دادهها را مدت طولانیتری در خود نگاه دارد. حافظه جانبی برای نگاهداری طولانی مدت اطلاعات و همچنین جابجایی آنها بکار میرود. علاوه براین بدلیل سرعت پایینتر نسبت به حافظه اصلی، ارزانتر بوده و درنتیجه معمولا حجم آن بالا تر میباشد. اما نکته مهم آن است که اطلاعات برای پردازش ابتدا باید وارد حافظه اصلی گردند.در حال حاضر حافظههای جانبی مهم عبارتند از : • دیسکهای مغناطیسی (Hard Disk and Floppy Disk) • دیسکهای نوری (CD and DVD) • Flash Disk
2-4-1 نرم افزار کامپیوتر • نرم افزار کامپیوتر به دو دسته اصلی تقسیم میگردد : • نرم افزارهای کاربردی : نرم افزارهایی هستند که برای یک کاربرد خاص و رفع یک نیاز مشخص کاربران نوشته شده اند. مانند سیستمهای حسابداری، دبیرخانه، سیستم انتخاب واحد دانشگاهی، انواع بازیها • نرم افزارهای سیستمی : نرم افزارهایی هستند که برای ایجاد و یا اجرای برنامههای کاربردی نوشته میشوند. مهمترین برنامه سیستمی، سیستم عامل است. سیستم عامل نرم افزاری است که ارتباط بین سخت افزار و کاربران (یا برنامههای کاربردی کاربران) را فراهم میسازد. در حقیقت سیستم عامل مدیریت منابع سخت افزاری یک کامپیوتر را بعهده دارد. • Windows : بیشتر در منازل و محیطهای اداری مورد استفاده قرار میگیرد • Linux : بیشتر در محیطهای دانشگاهی و بعنوان سرور استفاده میشود. • Unix : نیز بیشتر در کامپیوترهای بزرگ نصب میشود.
مبانی کامپیوتر و برنامه سازی فصل دوم : نحوه نمایش اطلاعات در کامپیوتر مدرس : رضا رمضانی
2 نحوه نمایش اطلاعات در کامپیوتر • اطلاعات در کامپیوتر به دو دسته اصلی تقسیم میگردند: • اطلاعات کاراکتری (حرفی) : مانند :A B …Z $ # @ ! • اطلاعات عددی که خود به دو دسته اعداد صحیح و اعداد اعشاری تقسیم میگردند. • برای نمایش اطلاعات در کامپیوتر از مبنای 2 استفاده میگردد
1-2 سیستم اعداد • مبنای 10 ، مبنای مورد استفاده انسانها در ریاضیات • در ریاضیات متداول هر عدد Nبصورت زیر تفسیر میگردد : N = (an-1 an-2 … a2 a1 a0 )10 = a0 × 100 + a1 × 101 + a2 × 102 + … an-1 × 10n-1 • بعنوان مثال عدد 3482 بصورت زیر تفسیر میگردد : (3482 )10 = 2 × 100 + 8 × 101 + 4 × 102 + 3 × 103 • در سیستم دهدهی نیاز به 10 رقم (از 0 تا 9) داریم. • می توان اعداد را در هر مبنای دلخواه دیگری مانند b نیز نشان داد در اینصورت هر عدد مانند N در مبنای bبصورت زیر تفسیر میگردد : N = (an-1 an-2 … a2 a1 a0 )b = a0 × b0 + a1 × b1 + a2 × b2 + … an-1 × bn-1 • کاملا واضح است که در مبنای b نیاز به b رقم (از 0 تاb-1 ) خواهیم داشت. • بعنوان مثال یک عدد در مبنای 6 از ارقام 0..5 تشکیل میگردد، بنابراین (341)6 یک عدد درست است اما (592)6 غیر قابل قبول میباشد.
6 6 6 2-2 تبدیل مبناها • برای تبدیل یک عدد از مبنای 10 به هر مبنای دلخواه b، از روش تقسیمات متوالی استفاده میگردد (941)10 = (?)6 6 941 936 156 26 156 5 4 24 0 0 0 2 4 (941)10 = (4205)6
2-2 تبدیل مبناها • برای تبدیل از مبنای b به مبنای 10 کافی است ارقام عدد مورد نظر را در ارزش مکانی آنها ضرب و سپس با یکدیگر جمع کنیم . (4205)6 = (?)10 (4205)6 = 5 × 60 + 0 × 61 + 2 × 62 + 4 × 63 = 5 + 0 + 72 + 864 = (941)10
3-2 مبنای 2 و اهمیت آن • مبنای 2 اهمیت بسیار زیادی در کامپیوترهای دیجیتال دارد. چراکه : • در مبنای 2 تنها به 2 رقم نیاز داریم،یعنی0 و 1 • آین دو رقم را میتوان توسط هر ابزاری که دارای دو حالت باشد نشان داد. مثلا یک لامپ که خاموش بودن لامپ به معنای 0 و روشن بودن آن به معنای 1 میباشد. • این همان ایدهای است که کامپیوترهای دیجیتال از آن استفاده میکنند. • همانطور که قبلا نیز گفته شد واحد نگهداری اطلاعات در کامپیوتر بیت میباشد که هر بیت قادر به نگهداری 0 و یا 1 است. با کنار هم قرار دادن بیتها، بایتها تشکیل میگردند و بدینوسیله اطلاعات مورد نظر در قالب بایتها تشکیل میگردند.
3-2 مبنای 2 و اهمیت آن • تبدیل اعداد از مبنای 10 به 2 و بالعکس بسیار ساده و همانند سایر مبناها است. • تبدیل از مبنای 2 به 10 (11001001)2 = (?)10 (11001001)2 = 1 × 20 + 0 × 21 + 0 × 22 + 1 × 23 + 0 × 24 + 0 × 25 + 1 × 26 + 1 × 27 = 1 + 0 + 0 + 8 + 0 + 0 + 64 + 128 = (201)10 • تبدیل از مبنای 10 به مبنای 2 (486)10 = (?)2
2 2 2 2 2 2 2 2 3-2 مبنای 2 و اهمیت آن 2 486 486 243 121 242 0 60 120 1 30 60 1 15 30 0 14 7 0 3 6 1 1 2 1 0 0 1 1 (486)10 = (111100110)2
4-2 مبناهای 8 و 16 و کاربرد آنها • مشکل اصلی در مبنای 2 اندازه بزرگ اعداد است. بعنوان مثال عدد486 که در مبنای 10 تنها 3 رقم دارد، تبدیل به یک عدد 9 رقمی در مبنای 2 شده است. • این مسئله باعث میشود که محاسبه در مبنای 2 برای انسانها بسیار مشکل شود و معمولا برنامهنویسان علاقه چندانی به مبنای 2 ندارند. • مبنای 8 نیز همانند سایر مبناها میتواند مورد استفاده قرار گیرد و در ظاهر تفاوتی با سایر مبناها ندارد. اما ویژگی جالب این مبنا در تبدیل ساده آن به مبنای 2 و بالعکس است. • همانطور که میدانیم در مبنای 8 تنها ارقام 0 تا 7 استفاده میشوند. از طرف دیگر اگر یک عدد در مبنای 2 با حداکثر 3 رقم را درنظر بگیریم،در مییابیم که میتوان 000 = 0, 001=1, 010=2, … , 111=7 را با آن نشان داد. بنابراین میتوان نتیجه گرفت که هر 3 رقم در مبنای 2، برابر است با 1 رقم در مبنای 8 و بالعکس. این نتیجه گیری تبدیل این دو مبنا را به یکدیگر ساده میکند.
4-2 مبناهای 8 و 16 و کاربرد آنها • تبدیل از مبنای 2 به 8 1 0 1 0 1 1 1 0 = (256)8 2 6 5 • تبدیل از مبنای 8 به 2 ( 2 7 1 )8 = (10111001)2 001 010 111
4-2 مبناهای 8 و 16 و کاربرد آنها • اکثر برنامهنویسان کامپیوتر ترجیح میدهند از مبنای دیگری بنام مبنای 16 استفاده نمایند. • این مبنا نیز همانند مبنای 8 بسادگی قابل تبدیل به مبنای 2 است، اما اعداد آن به ارقام کمتری نیاز دارند. • در این مبنا نیاز به 16 رقم داریم درحالیکه ارقام موجود فقط 10 تا است. بهمین دلیل از حروف A تا F برای ارقام 10 تا 15 استفاده میگردد.یعنی ارقام عبارتند از : 0 1 2 3 4 5 6 7 8 9 A B C D E F • تبدیل اعداد از مبنای 2 به 16 و بالعکس ازهمان روش گفته شده برای مبنای 8 استفاده مینماییم با این تفاوت که هر رقم در مبنای 16 معادل 4 رقم در مبنای 2 است.
4-2 مبناهای 8 و 16 و کاربرد آنها • تبدیل از مبنای 2 به 16 1 1 0 1 0 1 1 1 0 0 1 = (6B9)16 6 B 9 • تبدیل از مبنای 16 به 2 ( A 3 E )16 = (101000111110)2 1110 1010 0011
5-2 نمایش اعداد صحیح • اعداد صحیح در کامپیوتر با استفاده از مبنای 2 نمایش داده میشوند. • برای نمایش اعداد صحیح از 1 یا 2 بایت و یا بیشتر (بسته به اندازه عدد) استفاده میگردد. • چنانچه قصد ذخیره اعداد صحیح مثبت را داشته باشیم، با استفاده از 1 بایت میتوان اعداد 0 تا 255 را ذخیره کرد. بنابراین برای 1 بایت، بزرگترین عدد قابل ذخیره برابر است با 28 – 1 = 255. • با استدلال مشابهی چنانچه از 2 بایت یا 16 بیت استفاده گردد، بزرگترین عدد قابل ذخیره برابر 216 – 1 = 65535 خواهد بود. • اما مشکل آنستکه اعداد منفی را چگونه ذخیره نماییم؟ • برای این کار چندین روش وجود دارد که هریک را جداگانه بررسی مینماییم.
1 1010011 0 1010011 -83 +83 1-5-2 استفاده از بیت علامت • در این روش سمت چپ ترین بیت برای علامت عدد درنظر گرفته میشود و سایر بیتها مقدار عدد رانشان میدهند. • 0بودن بیت علامت بمعنای مثبت بودن و1 بودن آن به معنای منفی بودن عدد میباشد. • با داشتن 8 بیت میتوان اعداد بین -127 … +127 را نمایش داد. • این روش دو مشکل اصلی دارد: • دو مقدار متفاوت +0 و -0 وجود دارد. • برای عمل جمع و تفریق نیاز به دو مدار جداگانه داریم.
00000000 11111111 +0 -0 2-5-2 استفاده از متمم 1 • در این روش اعداد مثبت بصورت معمولی نمایش داده میشوند. اما برای نمایش اعداد منفی، ابتدا قدر مطلق آن را (بصورت عدد مثبت) نمایش داده و سپس کلیه 0ها را به 1 و بالعکس تبدیل مینماییم. 0 1 0 1 0 0 1 1 1 0 1 0 1 1 0 0 + 83 - 83 • با توجه به محدودیت تعداد بیتها و جلوگیری از تداخل اعداد مثبت و منفی، برای اعداد مثبت باید بیت سمت چپ 0 باشد و بهمین دلیل بازه اعداد مجاز از-127 تا +127 است. • خوشبختانه اکنون تنها نیاز به یک مدار برای عمل جمع و تفریق است اما هنوز هم دو نمایش مختلف برای +0 و-0 وجود دارد.
01011010 10100110 +90 -90 3-5-2 استفاده از متمم 2 • در این روش برای نمایش اعداد منفی ابتدا متمم 1 آنها را محاسبه و سپس آن را با 1 جمع میکنیم. 10100101 • بازه اعداد مجاز در این روش از-128 تا +127 است.
00000000 11111111 00000000 1 +0 -0 3-5-2 استفاده از متمم 2 • این روش هردو مشکل روشهای قبل را حل میکند. چرا که : • تنها یک نمایش برای +0 و -0 وجود دارد. • برای عمل تفریق میتوان از همان مدار جمع استفاده کرد. بدین ترتیب که ابتدا عدد دوم را به روش متمم 2 منفی کرده و با عدد اول جمع میکنیم. 53 – 22 = 53 + (-22) = 31 (00110101) – (00010110) = (00110101) + (11101010) = 1(00011111) 38 – 60 = 38 + (-60) = -22 (00100110) – (00111100) = (00100110) + (11000100) = (11101010)
6-2 نمایش مقادیر اعشاری • نمایش اعداد اعشاری در کامپیوتر مشکلتر است. • ما معمولا اعداد اعشاری را به شکل ممیز ثابت نشان میدهیم : 53.648 • اما شکل دیگری نیز وجود دارد که به آن نماد علمی یا ممیز شناور گفته میشود و به شکل زیر است : 53.648 × 100 5.3648 × 101 0.53648 × 102 5364.8 × 10-2 • همانطور که دیده میشود، مکان ممیز در این نمایش شناور است و میتواند در هر نقطهای قرار گیرد و البته توان نیز باید متناسب با آن تنظیم گردد. نماد علمی نرمال به حالتی گفته میشود که قسمت صحیح فقط دارای یک رقم غیر صفر باشد. • برای نمایش اعداد اعشاری در کامپیوتر استانداردهای مختلفی وجود دارد که همگی در اصول مشترکند و تنها تفاوتهایی در جزئیات دارند.
1 8 23 m e s مانتیس توان علامت 6-2 نمایش مقادیر اعشاری • ما در اینجا از یک روش استاندارد متداول که توسط انجمن معتبر IEEE ارائه شده است، استفاده میکنیم. این استاندارد بنام IEEE Standard 754 Floating Point Numbers شناخته شده است. • برای اطلاعات بیشتر به سایت http://standards.ieee.org مراجعه نمایید. • در استاندارد مورد نظر هر عدد اعشاری در یک کلمه 32 بیتی ذخیره میگردد. ساختار هر عدد بصورت زیر است:
6-2 نمایش مقادیر اعشاری • برای ذخیره یک عدد اعشاری باید ابتدا آن را به نماد علمی نرمال در مبنای 2 تبدیل کنیم. سپس آن را به شکل زیر ذخیره میکنیم : • علامت عدد را در s قرار میدهیم (مثبت = 0 و منفی = 1) • توان را در قسمت e قرار میدهیم که یک عدد مثبت بدون علامت است(بین 0 تا 255). • نکته مهم آنکه از آنجا که ممکن است توان مثبت یا منفی باشد، ابتدا 127 واحد به توان اضافه میکنیم و سپس آن را ذخیره میکنیم. • بنابراین e = 131 باشد بدین معناست که توان برابر 4 بوده است و e=120 به معنای توان برابر -7 است. • البته توانهای e=255 و e=0 برای منظورهای خاصی در نظر گرفته شدهاند که بعدا توضیح داده خواهند شد. • قسمت پایه عدد را در مانتیس قرار میدهیم. • نکته جالب آن است که چون در نمایش نرمال قسمت صحیح تنها یک رقم غیرصفر دارد و در نمایش دودویی نیز تنها رقم غیر صفر، رقم 1 میباشد؛ بنابراین تنها قسمت اعشاری در مانتیس ذخیره میگردد و قسمت صحیح بطور پیش فرض 1 درنظر گرفته میشود. این باعث میشود که یک بیت در ذخیره سازی صرفه جویی گردد.
0 10000111 11100110000000000000000 6-2 نمایش مقادیر اعشاری • مثال: عدد 486 را بصورت دودویی اعشاری ذخیره نمایید. • ابتدا آن را به مبنای 2 تبدیل میکنیم. (486)10 = (111100110)2 • اکنون داریم : 111100110 = 1.11100110 × 28 s : 0e : 8+127 = 135 = 10000111 m : 11100110 • بنابراین جواب نهایی بصورت زیر خواهد شد :
6-2 نمایش مقادیر اعشاری • مثال 2: عدد -121.640625را بصورت دودویی اعشاری ذخیره نمایید. • ابتدا عدد 121 را به مبنای 2 میبریم: (121)10 = (1111001)2 • واما برای تبدیل قسمت اعشاری باید از روش ضربهای متوالی استفاده نماییم. بدین صورت که ابتدا آن را در 2 ضرب کرده و قسمت صحیح حاصلضرب را ذخیره میکنیم. همین عمل را مجددا برروی قسمت اعشاری حاصلضرب انجام میدهیم و اینکار را تا صفر شدن قسمت اعشاری و یا پر شدن تعداد بیتهای کلمه موردنظر (23 بیت) تکرار میکنیم. در پایان ارقام ذخیره شده را از اول به آخر به ترتیب پس از ممیز قرار میدهیم. داریم : 0.640625 × 2 = 1.28125قسمت صحیح = 1 0.28125 × 2 = 0.5625قسمت صحیح = 0 0.5625 × 2 = 1.125 قسمت صحیح = 1 0.125 × 2 = 0.25 قسمت صحیح = 0 0.25 × 2 = 0.5 قسمت صحیح = 0 0.5 × 2 = 1.00 قسمت صحیح = 1 (0.640625)10 = (0.101001)2
1 10000011 11100110100100000000000 6-2 نمایش مقادیر اعشاری • بنابراین عدد نهایی بصورت زیر درخواهد آمد : (121.640625)10 = (1111001.101001)2 = (1.111001101001 × 26)2 s : 1 e : 6 + 127 = 133 = 10000011m : 111001101001 • نکته مهم : توجه داشته باشید که به دلیل محدود بودن اندازه مانتیس (23 بیت)، در هنگام تبدیل اعداد از مبنای 10 به مبنای 2 مجبور هستیم عمل ضرب را تا زمانیکه بیتها پر شوند ادامه دهیم. این مسئله باعث میشود که مقدار تقریبی اعداد در کلمه 32 بیتی ذخیره گردد. بنابراین در هنگام کار با اعداد اعشاری به این مسئله توجه کنید
6-2 نمایش مقادیر اعشاری • یک عدد اعشاری ذخیره شده به فرم استاندارد موردنظر به شکل زیر تفسیر میگردد : • اگر 0<e<255 آنگاه (-1)s × (1.m) × 2e-127= عدد • اگر e=0 و m غیر صفر باشد آنگاه(-1)s × (0.m) × 2e-126= عدد • که به آن عدد غیرنرمال (unnormalized) گفته میشود. دلیل این مسئله آنست که با کوچکترین توان ممکن یعنی -126 بتوان کوچکترین مانتیس ممکن (بدون اضافه شدن 1) را برای نمایش اعداد کوچک داشت. • اگر e=0 و m=0 آنگاه = 0 عدد • که البته بسته به میزان s مقدار آن +0 یا -0 خواهد بود. • اگر e=255 و m غیرصفر باشد آنگاه حاصل یک عدد نیست (NaN یا Not a Number) • اگر e=255 و m=0 و s=0 آنگاه عدد برابر مثبت بینهایت است. • اگر e=255 و m=0 و s=1 آنگاه عدد برابر منفی بینهایت است.
7-2 نمایش کاراکترها در کامپیوتر • در کامپیوترها علاوه بر اطلاعات عددی، گاهی لازم است که حروف و علائم نیز ذخیره گردد که به آنها کاراکتر میگوییم. • برای ذخیره سازی کاراکترها به هریک از آنها یک کد عددی نسبت داده شده است و در حقیقت کد عددی هر کاراکتر در کامپیوتر ذخیره میگردد. • در گذشته پر کاربردترین کد مورد استفاده، کد ASCII بود که برای نمایش هر کاراکتر از یک بایت استفاده میکرد. از آنجا که هر بایت میتواند بین 0 تا 255 تغییر کند، بنابراین تا 256 کاراکتر قابل تعریف است. از این بین کدهای بین 0 تا 127 بصورت استاندارد برای علائم و حروف انگلیسی تعریف شده است و کدهای بالاتر از 127 برای هر کشور خالی گذاشته شده است تا بتوانند حروف خاص زبان خود را تعریف کنند. بعنوان مثال به کدهای ASCII زیر دقت کنید: A=65 B=66 C=67 … 0=48 1=49 … • اما امروزه و بدلیل ارتباطات گسترده جهانی از طریق اینترنت، نیاز به تعریف یک کد بین المللی میباشد که کلیه زبانهای جهانی را دربرگیرد. چراکه متنی که در کشور دیگری به زبان فارسی نوشته میشود باید در ایران هم قابل خواندن باشد و لازمه این مسئله یکسان بودن کدها است. • بهمین دلیل اخیرا کد بین المللی بنام Unicode ابداع شده است که تقریبا تمام زبانهای زنده دنیا (از جمله زبان فارسی) را دربر میگیرد. البته این کد از 2 بایت برای نمایش هر کاراکتر استفاده میکند و سیستم عاملهای جدید همگی از آن حمایت میکنند.
مبانی کامپیوتر و برنامه سازی فصل سوم :الگوریتم مدرس : رضا رمضانی
3 الگوریتم • الگوریتم • مجموعه محدودی از دستورالعملها است که اگر به ترتیب دنبال شوند موجب انجام کار خاصی میگردند. • هر الگوریتم باید دارای شرایط زیر باشد • ورودی : یک الگوریتم میتواند صفر یا چند ورودی داشته باشد که از محیط خارج تامین میگردد. • خروجی : الگوریتم باید یک یا چند کمیت خروجی داشته باشد. • قطعیت : هر دستورالعمل باید واضح و بدون ابهام باشد. • کارایی : هر دستورالعمل باید قابل اجرا باشد. • محدودیت : در تمام حالات، الگوریتم باید پس از طی مراحل محدودی خاتمه یابد.
3 الگوریتم • در علم کامپیوتر، ما معمولا با یک مسئله مواجهیم که باید آن را حل کنیم. این مسئله میتواند در زمینههای مختلفی همچون علمی، اقتصادی، ریاضی، فنی و ... باشد. • معمولا برای حل یک مسئله، مراحل زیر طی میگردد • تعریف مسئله بصورت جامع و دقیق (شامل تعریف ورودیها و خروجیها) • بررسی راه حلهای مختلف برای حل مسئله • انتخاب مناسبترین راه حل و تهیه یک الگوریتم برای آن • آزمایش الگوریتم با دادههای ورودی و اشکالزدایی آن • تبدیل الگوریتم به یک زبان برنامهنویسی کامپیوتری (مانند C یا Pascal) • وارد کردن برنامه به کامپیوتر و تست و اشکالزدایی آن • استفاده از برنامه
1-3 نحوه بیان الگوریتمها • چگونه میتوانیم الگوریتمها را بیان کنیم؟ • الگوریتمها باید برای انسانها قابل فهم و درک باشند و همه بتوانند به راحتی منظور نویسنده الگوریتم را درک کنند • معمولا الگوریتمها به یک زبان طبیعی مانند فارسی یا انگلیسی نوشته میشود. • این مسئله باعث میشود که بعضی ابهامات در درک الگوریتمها پیش آید. • معمولا یکسری از توافقات و تعریفها از قبل بین طراح و خواننده الگوریتم برقرار میگردد. • از آنجا که زبانهای برنامهنویسی مانند C به زبان انگلیسی خیلی نزدیک هستند، بعض از طراحان از ترکیب زبان C و انگلیسی (که به آن کد شبه C میگویند) برای بیان الگوریتم استفاده میکنند • لازم بذکر است که در گذشته از نمودار گردشی (Flowchart) نیز برای بیان الگوریتمها با استفاده از شکلهای استاندارد استفاده میشد، که تنها برای الگوریتمهای کوچک مناسب بود.
2-3 شروع به کار با الگوریتمها • الگوریتمی بنویسید که ضرایب یک معادله درجه دوم بصورت زیر را دریافت و ریشههای آن را محاسبه و چاپ کند. ax2 + bx + c = 0 • برای حل این مسئله ابتدا باید ضرائب a ، b و c از کاربر دریافت و در خانههای حافظه ذخیره گردند. • برای اینکه بتوانیم بعدا به این خانههای حافظه مراجعه کنیم، به هریک از آنها یک نام نسبت میدهیم. به هریک از این نامها یک متغیر گفته میشود. • دلیل این نامگذاری آنستکه مقادیر ذخیره شده در هریک از این خانههای حافظه میتواند تغییر کند. • گرچه انتخاب نام بعهده خودشماست و میتواند هر چیزی باشد، ولی توصیه میگردد از اسامی بامعنی و متناسب استفاده گردد. این کار سبب میشود که خواندن و درک الگوریتم شما برای سایر افراد نیز ساده گردد. • اکنون به قراردادهای زیر توجه کنید : • برای دریافت اطلاعات از کاربر از دستور بخوان استفاده میگردد. • برای نوشتن اطلاعات در خروجی از دستور چاپ کن استفاده میگردد. • برای انتساب یک مقدار به یک متغیر از علامت ← استفاده میشود.
2-3 شروع به کار با الگوریتمها • a و b و c را بخوان • delta ← b2 – 4ac • و • x1و x2 را چاپ کن • توقف کن
3-3 مکانیزم شرط • مکانیزم شرط هنگامی استفاده میشود که قصد داریم درستی یا نادرستی یک عبارت رابررسی کرده و متناسب با نتیجه بررسی شرط، عملیات خاصی را انجام دهیم و یا از انجام بعضی عملیات صرفنظر کنیم. • شکل کلی این دستور به شکل زیر است اگر (عبارت شرطی) آنگاهدستورات • این دستور به شکل زیر نیز استفاده میشود: اگر (عبارت شرطی) آنگاهدستورات1 درغیر اینصورتدستورات 2
3-3 مکانیزم شرط • a و b و c را بخوان • اگر ( a = 0 ) آنگاه چاپ کن ”معادله درجه 2 نیست“ و توقف کن • delta ← b2 – 4ac • اگر ( delta < 0 ) آنگاه چاپ کن ”معادله جواب ندارد“ درغیراینصورت و و x1 و x2 را چاپ کن • توقف کن
4-3 مکانیزم حلقه تکرار • در بعضی الگوریتمها لازم است که عملیات مشخصی چندین بار تکرار شوند. بعنوان مثال فرض کنید قصد داریم میانگین معدلهای 100 دانشجو را محاسبه کنیم. قطعا 100 بار دستور خواندن و جمع کردن راه حل چندان مناسبی نیست. • راه حل بهتر آنستکه بگونهای به مجری الگوریتم بگوییم بنحوی عمل خواندن معدل و جمع زدن آنها را 100 بار تکرار کند. • حلقه تکرار مکانیزمی است که مجموعهای از دستوزات را تا زمانیکه شرط خاصی برقرار باشد تکرار میکند. • حلقه تکرار به دو شکل مورد استفاده قرار میگیرد
4-3 مکانیزم حلقه تکرار • شرط در ابتدای حلقه که مکانیزم کلی آن به شکل زیر است : تا زمانیکه (شرط مورد نظر) دستوراتa تا bرا تکرارکن … (a . . . … (b • در این حالت ابتدا شرط موردنظر بررسی میگردد؛ درصورتیکه شرط برقرار نباشد به اولین دستور پس از b میرود. اما در صورتیکه شرط درست ارزیابی شود، دستورات شماره a تا b انجام میشوند و سپس مجددا به ابتدای حلقه بازگشته و عملیات فوق را مجددا تکرار میکند.
4-3 مکانیزم حلقه تکرار • شرط در انتهای حلقه که مکانیزم کلی آن به شکل زیر است : تکرار کن …(a . . . … (b تا زمانیکه (شرط مورد نظر) • در این روش ابتدا دستورات حلقه یکبار انجام میشوند و در پایان حلقه شرط بررسی میگردد. چنانچه شرط برقرار نبود به دستور بعدی میرود و در صورت برقرار بودن شرط، مجددا به ابتدای حلقه باز میگردد.