زبان برنامه نویسی سی/پیش درآمدی بر برنامه نویسی

این کتاب را تقدیم میکنم به سرکار علّیه خانم شقایق جعفری جوزانی
امروزه بیشتر امور ، به صورت خودکار انجام میشوند . بعد از انقلاب رنسانس و صنعتی در اروپا ، جهان به سمت ماشینی و روتین ( خودکار ) شدن پیش رفت . اما علم الکترونیک باعث شد تا کارها با دقت و کلیت و سرعت بیشتری انجام پذیرند . اختراع ترانزیستورها و در نهایت مدارهای مجمتمع ( IC ها ) و میکروسکوپی و مدارهای کوانتومی ، منجر به پیشرفت چشمگیر علم الکترونیک شد و در همین مابین بود که رایانه ( کامپیوتر Computer ) ، اختراع شد و پا به عرصه وجود گذاشت . رایانه برخلاف دستگاههای الکترونیکی دیگر ، قابل برنامهریزی است . اما این برنامهریزی در ابتدا با ورقهایی پر از حفره انجام میشد که میتوانست به پردازشگر بفهماند که باید چه کاری انجام دهد ( به این ورقهها پانچ کارد punch card گفته میشد )
برخلاف یک دستگاه دیویدیپلیر که تنها میتواند کارهایی را که از پیش برای آن در نظر گرفته شده انجام دهد ؛ یک رایانه که امروزه شامل تبلتها و گوشیهای همراه هوشمند و بسیاری دیگر از دستگاههای الکترونیکی دیگر میشود میتواند مدام برنامههای مختلفی را دریافت کند و بر اساس آنها عمل کند . همان طور که گفته شد در ابتدای امر ، کار برنامه دادن به رایانه ، بسیار مشکل بود ، گرچه کارهایی که در آن زمان انجام میشدند آنقدر ساده بودند که به هیچ وجه با پردازشهایی که رایانهها و برنامههای امروزی انجام میدهند قابل مقایسه نیستند . اما این حفره ها به مثابه 0 و 1 بودند ! اما 0 و 1 چیستند ؟ رایانه ، یک دستگاه دیجیتالی است ؛ بر خلاف دستگاههای الکترونیکیِ قدیمی که آنالوگ بودند و سیگنالها از طریق موجهای پیوستهای که بر روی جریان الکتریکی یا امواج الکترومغناطیسی ایجاد میشدند ، رفت و آمد میکردند ؛ در دستگاههای الکترونیکی دیجیتالی ، سیگنالها با ولتاژ یا شدّت جریان یا بسامد ( فریکوانسی که به صورت متداول فرکانس تلفظ می شود Frequency ) پائین و یا ولتاژ یا شدّت جریان یا بسامد بالا و نهایی ، رفت و آمد میکنند . عدد « ۱ » نماینده جریان بالا ( یا وجود بار با ولتاژ یا میدان مغناطیسی با یکای تسلای بالا و وجود موج الکترومغناطیسی با بسامد بالا ) و عدد « ۰ » نماینده جریان کم ( یا وجود بار با ولتاژ یا تسلای پائین یا وجود موج الکترومغناطیسی با بسامد کم ) میباشند و بدینترتیب با جریان الکتریکی که مرتب کم-زیاد میشود که تحت استانداردها و پروتکلهای الکترونیکی بینالمللی یا اختصاصی شرکتها و کمپانیها هستند ، سیگنالها رفت و آمد میکنند ( سیگنال به معنی پیام است که در علوم برق و الکترونیک به جریان الکتریکی یا امواج الکترومغناطیسیای گفته میشود که دارای معنای خاصی باشد ) برخلاف دستگاههای ( Device دیوایس ) های دیجیتالی ، دستگاههای آنالوگ با موج انداختن در تمام طیفهای ولتاژ یا شدّت جریان یا بسامد یا میدان مغناطیسی ، پیامها را جا به جا کرده و پردازش سادهای انجام میدادند ( از معایب دیگر عمده آنها وجود پارازیت و نویز بسیار و آسیبپذیری بسیاری بالای سیگنالها بود ) بنابراین زبان واقعی ماشین و از جمله رایانه ، زبان 0 و 1 میباشد که جهت سهولت در کار ، سیگنال ها را که همان 0 و 1 میباشند و در مبنای ۲ هستند ( دودویی ) به مبناهای دیگری همچون ۴ ، ۸ ، ۱۰ و ۱۶ تبدیل مینمایند . اما این کار باز هم باعث سهولت مطلوبی نمی گردد . برنامهنویسی به زبان ماشین فوقالعاده امری دشوار و وقتگیر است . اما فراموش نکنید که برای نوشتن هسته مرکزی ( کرنل ) یک سیستمعامل ( که مجموعه ای از نرم افزارها و میان افزارها جهت مدیریت سختافزار و ترجمه برنامههای نوشته شده به زبان ماشین و از طرفی فراهم نمودن محیطی برای ایجاد برنامه میباشد ) یا درایور یک دستگاه الکترونیکی و یا کامپایلر که کدهای سطح بالا مثل زبان C را به زبان ماشین ترجمه میکند ، مطمئناً باید از زبانهای سطح پائین نیز استفاده نمائید و با مقادیر دیجیتالی ( معمولاً ) در مبنای ۲ ( به ندرت ) یا ۱۶ ( هگزادسیمال که متداولترین شکل آن میباشد ) با سختافزار ارتباط برقرار نمائید
در دهه های دور ، زبانی برای تلفیق با زبان ماشین و سهولت در برنامهنویسی ابداع شد که زبان اسمبلی ( Assembly ) نام دارد و هنوز هم به کار میرود و این زبان ( البته اسمبلی سطح پائین ) دارای کدهایی میباشد که که هر کد ، نماینده یک عمل پردازنده رایانه ( واحد پردازش مرکزی Central Processing Unit - CPU ) میباشد و بدین ترتیب کار تا حدی آسان شد . بعد از گذشت زمان ، مهندسین دانش رایانه ، زبانهای بسیار زیادی را ارائه کردند که همگی جزء زبانهای سطح بالا ( زبانهای نزدیک به زبان و فهم انسان ) به شمار میروند و کار نوشتن برنامه و برنامه دادن به رایانه را تا حد زیادی آسان مینمایند
این نکته را فراموش نکنید که زبان ماشین برای هر پردازنده مجزا میباشد . به دنبال آن نیز زبان اسمبلی سیپییو ( و نه اسمبلیِ سطح بالا ) نیز برای هر پردازنده جدا میباشد . به غیر از این دو زبان ، تمامی زبانها ، سطح بالا به شمار میروند . مزیت زبانهای سطح پائین این است که شما هیچ گونه محدودیتی در نوشتن برنامه ندارید و از کرنل سیستمعامل گرفته تا برنامههای جانبی ، خدماتی ، کاربردی و . . . همه را میتوانید بنویسید . اما این نکته مهم ، همچنان وجود دارد که اگر برنامهای را بخواهید برای ماشین های مختلف بنویسید باید برای هر کدام از نو برنامه را نوشته و سپس اجرا کنید و نکته مهم دیگر اینکه اگر به زبانهای سطح بالا برنامهنویسی کنید برنامه را میتوانید ظرف چند ساعت یا چند هفته و یا نهایتاً چند ماه بنویسید اما اگر بخواهید با اسمبلی یک پیرایشگر تصویری رستر ( Raster Graphics Editor ) مثل فتوشاپ یا گیمپ را بنویسید یا این کار میتواند تا چند سال یا چند دهه طول بکشد ! از طرفی اگر اشتباهی مرتکب شوید ممکن است به سیستم آسیب وارد کنید . از زبانهای سطح پائین ، معمولاً فقط در نوشتن میانافزار و کرنل سیستمعامل استفاده میشود و البته تمام کرنل یا سیستمعامل را به زبان اسمبلی نمینویسند ؛ بلکه از زبانی نزدیک به اسمبلی مثل سی استفاده میکنند و در داخل کدهای C از کدهای اسمبلی کمک میگیرند ( هرگاه زبان سی پاسخگوی نیاز ما برای ارتباط با سختافزار نباشد )
ربان برنامهنویسی ، زبانی برای نوشتن کدهایی است که در چارچوب خاصی برای کامپایلر یا مفسر مفهوم دارند ، تا ترجمه آن به زبان ماشین یا کرنل و سیستمعامل ، امکانپذیر باشد و سپس توسط پیادهساز زبان ( مثلاً کامپایلر Compiler ) به زبان ماشین یا زبان سیستمعامل ترجمه میشوند و یا توسط مفسر ( Interpreter ) بدون ترجمه به زبان ماشین ، تفسیر شده و به اجرا در میآیند . هر چه زبان ، سطح پائینتری داشته باشد ، در نوشتن برنامه وظیفه بیشتری به شما واگذار میشود و حتی برای نوشتن برنامههای ساده نیز باید مدتهای طولانیتری نسبت به زبانهای سطح بالا کدنویسی کنید ، زبانهای سطح بالا ، زبانهایی هستند که مجموعهای از نیاز های برنامهنویسی را که به صورت متداول در برنامهنوسی به کار میروند را با زبانهای سطح پائین نوشتهاند تا برنامهنویس به راحتی و در کمترین زمان ، برنامه مورد نیاز خود را بنویسد و بدون نیاز به تغییر کد ( یا با کمترین تغییر در کد ) آن را روی هر ماشینی پیاده سازی نماید . زبانهایی همچون Pascal ، ALGOL 68 ، Ada و در نهایت زبان C و خانواده آن که شامل Objective-C و ++C هم میشود و بسیاری از زبانها که تأثیر گرفته از سی هستند همگی زبانهای سطح بالا هستند و زبانهایی همچون COBOL ( کوبول ) یا Python ( پایتان ) زبانهای خیلی سطح بالا محسوب میشوند . با نوشتن برنامه ، شما این قابلیت را به رایانه میدهید تا کارهای مورد نیاز یا مد نظر شما را به صورت خودکار ( روتین Routine ) انجام دهد
زبانهای برنامهنویسی با کمک دستورها ، عملگرها و دادهها ، امکاناتی را نظیر پردازش بر روی اعداد ، حروف و متون ، برقراری ارتباط با سخت افزار و ارتباط با ورودیها و خروجیهای سیستم را فراهم مینمایند . ضمن اینکه خطاهایی که خارج از استاندارد هستند ، در زبانهای سطح بالا توسط مجموعه برنامههای پیادهساز جلوگیری میشوند تا رفع اشکال و به عبارتی دیباگ و خطازدایی Debug شوند ، همچنین زبانهای سطح بالا مثل C ، برنامه دیباگر Debugger دارند تا مرحله به مرحله برنامه را ارزیابی و اجرای برنامه را از ابتدا تا انتهای آن به شما نشان دهد تا بتوانید خطای برنامه خود را بیابید
در همین ابتدا نیز عرض میکنم که در این کتاب از ۰ تا ۱۰۰ زبان برنامهنویسی C مرحله به مرحله نوشته و تشریح خواهد شد و در پایان ، شما میتوانید با استعداد و پشتکار خود یک برنامهنویس حرفهای C بشوید ؛ اما در ابتدای کتاب که اصطلاحاتی را میبینید که برای شما نامعلوم است و نیاز به تعریف و تمثیل و تفسیر دارند ؛ در ادامه کتاب ، تمام آنها را نوشته و خواهیم نوشت . ضمن اینکه با مرور چندباره کتاب و تمرین در کد زدن و استمرار در آن حتماً موفق خواهید شد