2.54k likes | 2.84k Views
برنامه نويسي. يک برنامه در واقع مجموعه اي از دستورات است که در حافظه ذخيره مي شود و سپس کامپيوتر آنها را اجرا مي کند. چگونگي شکل گيري برنامه نويسي.
E N D
برنامه نويسي • يک برنامه در واقع مجموعه اي از دستورات است که در حافظه ذخيره مي شود و سپس کامپيوتر آنها را اجرا مي کند.
چگونگي شکل گيري برنامه نويسي • در کامپيوترهاي اوليه براي انجام يک دستور خاص(مثلا جمع) ورودي ها به فرم مبناي 2 به دستگاه داده مي شد و سپس خروجي به صورت مبناي 2 مشاهده مي شد و بعد از آن دستورات بعدي انجام مي شد. • با استفاده ساختار فون نيومن کامپيوترهايي توليد شدند که قادر بودند دستورات را در حافظه ذخيره کنند و سپس آنها به طور خودکار و متواليا اجرا شوند. • به يک مجموعه دستورات که توسط کامپيوتر اجرا مي شود برنامه گفته مي شود.
زبان ماشين و اسمبلي • چون برنامه هاي اوليه به صورت کدهاي دودوئي که مستقيما قابل فهم به زبان ماشين بود نوشته مي شدند به اين برنامه ها برنامه ها به زبان ماشين (machine language program) گفته مي شد و به هر دستور، يک دستور زبان ماشين گفته مي شد. • مشکل نوشتن برنامه به زبان ماشين سختي نوشتن و ناخوانايي آن بود. • براي رفع اين مشکل زبانهاي اسمبلي شکل گرفت. در اين زبان ها براي هر دستور زبان ماشين يک عبارت تعريف شده است. مثلا براي جمع دو خانه حافظه A و B عبارت ADD A,B . در اين حالت برنامه نويس به جاي نوشتن يک سري 0 و1 ، با اين عبارات برنامه خود را مي نوشت. • برنامه اي که برنامه اسمبلي نوشته شده توسط کاربر را به زبان ماشين تبديل مي کند اسمبلر خوانده مي شود.
زبان هاي سطح بالا • با وجود آنکه زبان هاي اسمبلي کار برنامه نويسي را آسان مي کرد اما باز برنامه ها طولاني و معمولا ناخوانا بودند. • براي رفع اين مشکل زبان هاي سطح بالا بوجود آمدند. در اين زبان ها هر چند دستور زبان ماشين به يک عبارت با معنا که به زبان معمولي نزديک بود تبديل مي شود. • دو برنامه کامپايلر(compiler) و linker روي هم کار تبديل برنامه سطح بالا به زبان ماشين را انجام مي دهند.
مراحل ايجاد يک برنامه مراحل ايجاد برنامه سطح بالا: نوشتن متن برنامه، کامپيايل، link و اجرا به مجموع دو عمل compile و link اصطلاحا Build مي گوييم. Build=compile+link Builder=compiler+linker متن برنامه فايل object فايل executable (اجرايي) Linker compiler اجرا توسط سيستم عامل
تاريخچه زبان هاي برنامه نويسي • اولين زبان برنامه نويسي در1946 توسط Plankalkülآمد و • اولين زبان سطح بالا FORTRANI بود که در 1954 بوجود آمد. • به مرور زمان برنامه نويسي ساده تر و پيشرفته تر شد: • زبان هاي مجهز به امکانات گرافيکي :زبان هاي ويژوال : امکان نوشتن برنامه بدون تايپ دستورات: دهه 1960 • زبان هاي شيء گرا : Simula (دهه 1970) • انجام کارهاي شبکه اي و اينترنتي: java (1995)
زبان C • موضوع درس آشنايي با زبان سطح بالاي C است. • اين زبان در سال توسط 1972 توسط دنيس ريچي (DennisRitchie) بوجود آمد که بر اساس زبان ديگري به نام B شکل گرفته بود. • B توسط KenThompsonدر 1969 بوجود آمد.
نکته • در يک زبان عادي براي بيان يک مفهوم مي توان از عبارات مختلفي استفاده کرد : • علي به خانه رفت. • علي خانه رفت. • علي رفت خانه. • رفت علي خانه. • در يک زبان برنامه نويسي نياز دستورات نياز به بيان دقيق دارند و بايد طبق ساختار مشخصي که در زبان مشخص شده استفاده شوند تا کامپايلر قادر به درک آنها باشد.
ساده ترين برنامه به زبان C void main( ) { } نکات: • خط اول در هر برنامه C بايد وجود داشته باشد. • { : شروع برنامه • { : خاتمه برنامه • دستورات برنامه در داخل {} نوشته مي شوند.
نمايش مراحل سه گانه نوشتن، compile، link و اجرا • نوشتن • Compile • Link • اجراء
نکات-1 • فاصله گذاري • حساس بودن به حالت حروف (case sensitivity)
نکات-2 • error: به خطاهاي برنامه نويسي error مي گويند. • انواع خطاها در برنامه نويسي: • خطاهاي زمان compile(compile errors): • مانع کامپايل صحيح برنامه مي شوند. • خطاهاي زمان link (Link errors): • براي کامپايل مزاحمتي ايجاد نمي کنند اما مانع Link برنامه مي شوند. • خطاهاي زمان اجرا: (Run time errors): • کامپايل و Link با موفقيت انجام مي شود ولي اجراي برنامه دچار اشکال مي شود.
error • حسن سيب را خورد. • هسن سيب را خورد. • متناظر با خطاي کامپايل • را حسن خورد سيب. • متناظر با خطاي Link • سيب حسن را خورد. • متناظر با خطاي زمان اجرا
مثال) نمايش متن بر روي مانيتور برنامه اي بنويسيد که پيغام Hello را در مانيتور نشان دهد. #include <stdio.h> void main() { printf(“Hello”); } پيغام Hello چاپ مي شود و مکان نما بعد از حرف o قرار مي گيرد.
نکات • Stdio.h نمونه اي از يک header file است. فايل هاي header جزئيات غير مرتبط با • کاربر را از ديد او مخفي مي کند و موجب مي شود برنامه اي خلاصه تر و خواناتر داشته باشيم. • دستور #include …. يک راهنماي پيش پردازش (preprocessor directive) يا • راهنماي کامپايلر (compiler directive) خوانده مي شود. Compiler قبل از شروع • کامپايل محتويات اين فايل را به برنامه اضافه مي کند و سپس کامپايل آغاز مي گردد. • در انتهاي هر دستور زبان C داخل main علامت ; قرار داده مي شود.
نکات (ادامه) • Printf(“Hello welcome”); خروجي ؟؟ • فاصله ها هم نمايش داده مي شوند. • مي خواهيم خروجي ما به صورت زير باشد: Hello Welcome #include <stdio.h> Void main( ) { Printf(“Hello Welcome”); } #include <stdio.h> Void main( ) { Printf(“Hello\nWelcome”); } خطا
\t #include <stdio.h> Void main( ) { Printf(“Hello\tWelcome”); } حرکت به اندازهيک tab \nو \t اصطلاحا کاراکترهاي کنترلي ناميده مي شوند. کاراکترهاي کنترلي در printf عينا چاپ نمي شوند بلکه اثراتي ديگر از خود بروز مي دهند.
طراحي الگوريتم • به مراحل حل يک مسئله که با ترتيب و توالي خاصي پشت سر هم قرار مي گيرند الگوريتم مي گوئيم که دارای ویژگیهای زیر است: • داراي يک نقطه شروع و يک نقطه خاتمه است. • داراي ترتيب در مراحل است. • هر مرحله کارا است؛ يعني هر مرحله مارا بطور کارايي به جواب نزديک تر مي کند. • تمامي مراحل بصورت دستي قابل اجرا هستند.
مثال: مي خواهيم معدل سه عدد 3، 5 و 7 را محاسبه نمائيم. شروع سه عدد را بگير سه عدد را با هم جمع کن حاصل جمع را بر سه تقسيم کن حاصل تقسيم را نمايش بده پايان • شروع • سه عدد را بگير • ميانگين سه عدد را بياب • ميانگين را نمايش بده • پايان شروع سه عدد را بگير سه عدد را با هم جمع کن معدل را برابر صفر فرض کن از حاصل جمع سه تا کم کن به معدل يکي اضافه کن اگر حاصل جمع از سه کمتر نشد بروبه 5 معدل را نمايش بده پايان
با فرض اينکه سه عددي که به الگوريتم تحويل داده مي شود 3 و 5 و 7 باشد جدول اجراي دستي الگوريتم بالا بصورت زير است: A B C حاصل جمع معدل 3 5 7 15 0 12 1 9 2 6 3 3 4 0 5 همانگونه که انتظار مي رفت نتيجه برابر 5 است.
فلوچارت فلوچارت ها از اجزايي هندسي تشکيل شده اند که هرکدام بيان گر مفهوم خاصي هستند. در زير برخي از اين شکال به همراه معنايشان را مشاهده مي کنيد: ورود داده پردازش تصميم گيري چاپ در خروجي
الگوریتم و فلوچارت حل معادله درجه دوم
فلوچارتی رسم کنید 3 عدد را گرفته و آنها را به ترتیب صعودی مرتب نماید.
فلوچارتي رسم كنيد كه تعداد و مجموع مقسوم عليه هاي عدد گرفته شده را محاسبه و چاپ نماید
خلاصه مطالب قبل • تعريف و تاريخچه مختصري از کامپيوتر • مقدمه اي بر مفهوم برنامه نويسي و چگونگي شکل گيري آن • نوشتن چند برنامه ساده به زبان C • کاراکترهاي کنترلي : مانند \n و \t void main() { } ساده ترين برنامه #include <stdio.h> void main() { printf("Hello"); } چاپ متن روي مانيتور
آشنايي با مفهوم متغيرها، اپراتورها (عملگرها) • چاپ مقدار متغيرها • دستورات ورودي • فرمت بندي خروجي • تبديل انواع • تقدم عملگرها
مثال • برنامه اي بنويسيد که حاصل 2+2 را محاسبه کند. void main( ) { int x; x=2+2; }
نکات-1 • int x; • هنگام اجراي اين دستور: • يک مکان 4 بايتي حافظه به برنامه اختصاص داده مي شود. • اين مکان را x مي نامد. • به برنامه اجازه مي دهد که يک عدد صحيح (integer) در x بريزد. • اصطلاحا به x ، يک متغير (Variable) از نوع صحيح (int)گفته مي شود. • به دستور بالا دستور تعريف متغير مي گوييم. • x نام متغير مي باشد. • نام متغير • ترکيبي از حروف a تا z و A تا Z ، ارقام 0 تا 9 و _ (Undeline) مي باشد. • نبايد با يک رقم شروع شود. مثال : اسامي مجاز: a، asd، ali، A09 ، _A اسامي غير مجاز: 9a، A-s x
نکات-2 • X=2+2; • ابتدا 2 با 2 جمع مي شود. • به علامت + اصطلاحا يک operator (عملگر) ميگوييم. • هر يک از اعداد 2 يک operand (عملوند) خوانده ميشوند. • سپس حاصل جمع در x قرار مي گيرد. • يا اصطلاحا 4 به xتخصيص مي يابد. • به = اصطلاحا يک اپراتور تخصيص مقدار و به دستور بالا يک دستور تخصيص مقدار (Assignment statement) ميگوييم. • درسمت چپ يک دستور تخصيص مقدار فقط و فقط نام يک متغير بايد باشد. سمت راست مي تواند ترکيبي از نام متغير و مقادير باشد. x 4
بعضي انواع متغيرها float x; X=2.3; short ys; ys=123; char c; c='a‘; c=97; ys=0x23;
?? int x; short x; x=2.3; x=3243243255556; float x; x=3;
بعضي انواع اپراتورها • محاسباتي: • + - * / % (باقيمانده) ++ -- • تخصيص مقدار: • = • مقايسه اي: • < < == =!
صورت هاي ديگر نوشتن برنامه Void main () { int x; int y; y=2; x=y+2; } Void main () { int x,y; y=2; x=y+2; } Void main () { int y=2; int x; x=y+2; } Void main () { int y=2,x; x=y+2; } Void main () { int z=2,y=2,x; x=z+y; } void main( ) { int x; x=2+2; }
چرا متغير Void main () { int x=4; int y=5; x=2; y=x+2; }
نمايش مقادير در مانيتور • مسئله: مي خواهيم مقدار يک متغير را روي مانيتور چاپ کنيم. #include <stdio.h> Void main () { int x=4; int y=5; x=2; y=x+2; printf(“Result=%d”,y); } %dيعني يک عدد صحيح را روي مانيتور نشان بده اين عدد صحيح y خواهد بود. %d نيز يک کاراکتر کنترلي مي باشد.
نکات • چاپ بيش از يک مقدار Void main () { int x=2,y=2,z; z=x+y; printf(“%d + %d =%d”,x,y,z); }
چند مثال • printf(“%d”,23); • 23 چاپ مي شود. • printf(“%c”,’a’) • کاراکتر a روي مانيتور چاپ مي شود. • printf(“%d”,’a’); • کد اسکي کاراکتر a يعني 97 چاپ مي شود. • printf(“%c”,97) • کاراکتري که کد اسکي آن 97 است يعني a چاپ مي شود.
دستورات ورودي • با استفاده از دستورات ورودي مي توانيم مقدار متغيرها را از طريق keyboard وارد کنيم.
دستور scanf برنامه اي بنويسيد که عددي صحيح را از keyboard دريافت کند و مربع آن را چاپ کند. #include <stdio.h> void main() { int x; scanf(“%d”,&x); printf(“%d”,(x*x)); } علامت آدرس يک عدد صحيح را از کاربر دريافت و آن را در متغير x مي ريزد.
نکات • به طرزي مشابه printf • براي خواندن اعداد اعشاري: %f • خواندن کارکترها:%c • خواندن اعداد مبناي 16: %x • براي استفاده از scanf هم بايد از stdio.h استفاده کرد. • بعد از وارد کردن مقدار بايد ENTER زده شود.
مثال • برنامه اي بنويسيد که دو عدد را از صفحه کليد دريافت کرده و حاصل ضرب آنها را چاپ کند. #include <stdio.h> void main() { int x,y; printf(“\nEnter two numbers”); scanf(“%d%d”,&x,&y); printf(“The sum=%d”,(x*y)); } هنگام وارد کردن اعداد بايد بين آنها لااقل يک فاصله قرار داده شود يا ENTER زده شود. بعد از وارد کردن عدد آخر بايد ENTER زده شود. دستور scanf بالا را مي توان به صورت زير هم نوشت: scanf(“%d”,&x); scanf(“%d”,&y); مي توان بيش از دو مقدار هم با دستور scanf دريافت کرد.
يک مشکل در گرفتن کاراکتر با scanf • برنامه اي بنويسيد که دو کاراکتر بگيرد و سپس آنها را در کنار هم چاپ کند. ظاهرا اين برنامه بايد به صورت زير باشد: #include <stdio.h> void main() { char c1,c2; scanf("%c%c",&c1,&c2); printf("%c%c",c1,c2); } اما هنگام اجراي برنامه ملاحظه مي کنيم که تنها يکي از کاراکترهاي وارد شده چاپ مي شود.
بافر ورودي • علت رخ دادن اين مشکل: • داده هايي که در هنگام اجراي scanf وارد مي کنيم در داخل محلي از حافظه که بافر دستور scanf خوانده مي شود ذخيره مي شود. دستور printf بسته به آنچه برايش مشخص شده است از اين بافر عنصر بر مي دارد و روي مانيتور چاپ مي کند. • در اين مثال هنگام اجراي scanf ما ابتدا يک کاراکتر (مثلا a) ، سپس فاصله يا ENTER و بعد کاراکتربعد (مثلا b) را وارد کرده ايم. با توجه به اينکه فاصله يا ENTER در واقع خود يک کاراکتر هستند در واقع ما سه کاراکتر وارد کرده ايم که هر 3 در بافر scanf قرار مي گيرند. • هنگام اجراي printf دو تا کاراکتر اول يعني a و فاصله (يا ENTER) چاپ مي شود و کاراکتر مورد نظر (b) چاپ نمي شود. • براي رفع مشکل مي توان نوشت : scanf(“%c%c%c”,&c1,&c2,&c3); • به طور کلي استفاده از scanf براي گرفتن کاراکتر مناسب نيست. دو دستور که مخصوص گرفتن کاراکتر هستند و مشکل بالا را ندارند getche و getch مي باشند.
دستور getche • تنها براي دريافت کاراکتر از keyboard به کار مي رود. • تفاوت آن با scanf اين است که در اينجا نيازي به زدن Enter بعد از وارد کردن مقدار نيست. • نياز به header file با نام conio.h دارد. #include <conio.h> #include <stdio.h> void main() { char ch; ch=getche(); printf(”\n%c",ch); }
دستور getch • کاملا مشابه getche مي باشد. تنها تفاوت آن اين است که ورودي را نمي بينيم.