برنامه سازي سيستم )استاد صهبا(

Save this PDF as:
 WORD  PNG  TXT  JPG

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "برنامه سازي سيستم )استاد صهبا("

Transcript

1 بسمه تعالي برنامه سازي سيستم )استاد صهبا( منابع: 1- مرجع كامل برنامه نويسان سيستم )پيتر نورتون( -2 مايكل فشر PC System Programing برنامه نويسي با C يا ++C كتابهاي با عنوان : مهندس جعفر نژاد )فصل برنامه نويسي سيستم و فصل گرافيك( Game Programing Port Programing So Cket Programing -3-4 نمره درس برنامه سازس سيستم 11 نمره پروژه )زبان برنامه نويسي آزاد - تيم حداكثر 3 نفر( 11 نمره آزمون موضوعات پروژه ها: ساخت ربات سيستم نمايش دهنده وضعيت يا كنترل كننده يك وسيله جانبي مثل كنترل دما هشدار دهنده آتش -1-2 اسمبلي ميكروكنترلر به پورت هاي مختلف BASIC C PIC يا AVR سيستم هدايت كننده وسيله جانبي شبه سيستم عامل كوچك كه بتواند دستورهاي زير را كپي نمايد: -3-4 فايل ايجاد پوشه تغيير ساعت با اينترانت فايل حذف پوشه ايجاد فايل Copy Move Delet فايل Reset نمايش فايل پيانو يا ساز زهي مجازي گيتار- سنتور تابلو روان Sno Bord

2 7- برنامه نويسي براي موبايل هدف درس : ايجاد و ساخت برنامه هايي براي مديريت سخت افزاري سيستم اليه هاي كامپيوتر كاربر برنامه كاربردي سيستم عامل سخت افزار كاربر نرم افزار سيستم سخت افزار كاربر سخت افزار سيستم عامل هايي كه توانايي برنامه هاي كاربردي هم داشته باشند شبهه سيستم عامل است كه يكسري از خواسته هاي كاربر را ايجاد مي كند. پورت يا درگاه : ابزاري براي ورود يا خروج اطالعات از رايانه - ابزاري براي ايجاد ارتباط بين درون و بيرون رايانه انواع پورت : USB Come يا سريال پارالل يا LPT پورت : USB 2

3 511 ميلي آمپر و ولتاژ 5 ولت است. Refrence را منتقل مي كند. داراي جريان باال يعني پاييني Data برق و USB دارد. ولتاژ * آمپر = توان اطالعات بيشتر در سايت usb.com پورت : COM پورت كام يا سريال RS232 هم ناميده مي شود. داراي 9 پين است. داراي Refrence باال مي باشد و برنامه نويسي آساني دارد. فقط Data منتقل مي كند. داراي جريان كم ميلي آمپر و ولتاژ 5 ولت است. پورت پارالل : پورت پارالل استاندارد كامپيوتر يك درگاه 25 پيني است كه 12 پين آن خروجي مي باشد. از اين 12 خط ۸ خط بعنوان داده خروجي ( Port ) DATA و 4 خط بعنوان خط كنترل ( Port ) CONTROL مي باشند. 5 پين نيز ورودي بوده و بعنوان ۸ پين باقيمانده نيز زمين ( GROUND ) هستند. خطوط وضعيت ( Port ) STATUS استفاده مي شوند. يا LPT مزيت آن نسبت به USB كمتر و از Com بيشتر است. همه اين پورت ها را مي توان براي دستگاههاي ديگر استفاده كرد. زماني كه بخواهيم از كامپيوتر براي مديريت خارج از دستگاه استفاده كنيم. مثال براي استفاده از پرينتر يا بجاي آن از يك بازو استفاده كنيم كه مثال اگر كليد 1 را زديم بازو باال 3

4 برود و اگر 2 را زديم بازو پايين بيايد. اسكنر را به usb وصل مي كنيم اين دستگاه عكس راگرفته و اطالعات از طريق پورت به كامپيوتر ارسال مي شود. بجاي اسكنر مي توان يك حسگر دماي محيط قرار داد. اين حسگر اطالعات را به پورت مي دهد. از طريق اين حسگر ها دما را لحظه اي مي توان اندازه گيري كرد. 4

5 مكانيزاسيون سيستم آبياري باغ : قصد مكانيزاسيون سيستم آبياري يك باغ را داريم پايين هر درخت يك حسگر رطوبت قرار دارد همچنين باغ مجهز به لوله كشي تا پاي هر درخت است. الف( شماتيكي بكشيد كه بكمك يك ميكرو كنترل سيستم را مدلسازي كند ب( تغييري در سيستم ايجاد كنيد كه بتوان اطالعات باغ را در جاي ديگري مشاهده كرد. Computer Computer S S S S ايجاد تاخير در اجراي برنامه: Delay(1000) 1111 ميلي ثانيه يا يك ثانيه 5

6 مثال( برنامه اي بنويسيسد كه بتواند بدون استفاده از دستور Delay تاخير در اجرا ايجاد كند. Int i; for(i=1 ; i<=1000 ; ++i); معايب استفاده از روش فوق: بدست آوردن مدت زمان دقيق تاخير بايد با سعي و خطا بدست آيد. روي رايانه هاي گوناگون زمان تاخير متفاوت خواهد بود تمرين: مثال فوق را بگونه اي تغيير دهيد كه تابعي به نام تاخير فرايند تاخير در اجرا را انجام دهد مقدار تاخير به شكل پارامتر وارد تابع شود: Void Takhir(int n) Int I; for(i=1;i<=n;++i); مثال - 2 قطعه برنامه اي بنويسيد كه با دريافت عدد 1 واژه Copy را نمايش دهد و با عدد 2 واژه Move و با دريافت 1 اجرا پايان يابد: #include stdio.h main() int farman; scanf( %d,&farman); while(farman!=0) If(farman==1) 6

7 printf( Copy ); else If(farman==2) printf( Move ); scanf( %d,&farman); ايجاد ارتباط بين PC و قطعات جانبي: دستور زير در پاسكال : چاپ روي مانيتور چاپ روي چاپگر writeln(a) writeln(lst,a) مثال 3: برنامه اي بنويسيد كه اطالعاتي را از فايل 1.tet بخواند و محتويات آنرا روي مانيتور نمايش دهد. #include stdio.h main() file *fptr; char ch; fptr=fopen( 1.text, r ) while (!feof(fptr)) ch=getc(fptr) printf( %c,ch); Printf( %c,ch); 7

8 fclose(fptr); مثال 4: برنامه اي بنويسيد كه اطالعاتي از كيبورد دريافت و آنها را در فايل 2.txt روي هارد قرار دهد با وارد شدن عدد صفر از كيبورد كار پايان يابد: #include stdio.h main() file *fptr; char ch; fptr=fopen( 2.txt, w ); scanf( %c,ch) while(ch!= 0 ) putc(ch,fptr); scanf( %c,&ch); //while fclose(fptr); //main مثال - 5 برنامه اي بنويسيد كه محتواي فايل 1.txt را بخواند و آنرا در فايل 2.txt قرار دهد. به اين ترتيب يك رونوشت از فايل نخست ايجاد مي كنيم. #include stdio.h main() 8

9 file *fptr 1, *fptr 2; char ch; fptr=fopen( 1.txt, r ); fptr2=fopen( 2.txt, w ); while (!feof(fptr1)) ch=getc(fptr1); putc(ch.fptr2); fclose(fptr1); fclose(fptr2); : Move تركيب كپي و حذف است يعني ابتدا فايل كپي مي گردد و سپس نسخه ابتدايي از بين مي رود. : Rename كپي يك رونوشت با نام جديد از فايل اوليه در همان مسير ايجاد مي شود و نسخه اوليه از بين ميرود. مثال 6: محتواي فايلي را بخواند و آنرا روي چاپگر چاپ كند. فقط قسمت prn در برنامه فوق تغيير مي كند يعني به جاي ريختن داخل فايل روي پورت چاپگر مي ريزد. fptr2=fopen("prn","w"); در پاسكال writeln(a); زبان C درگاه com را به نام Aux مي شناسد. مثال - برنامه اي بنويسيد كه اطالعات را از فايل 1.txt بخواند و به پورت سريال بفرستد. # include "stdio.h" 9

10 main() file *fptr1,fptr2; char ch; fptr1=fopen("1.txt",,"r"); fptr2=fopen("aux",,"w"); while(!efof(fptr1) ch=getc(fptr1); putc(ch,fptr2); fclose(fptr1); fclose(fptr2); اين پورت يك بافر دارد. به كمك اين بافر مي توان مشكل همزمان نبودن ارسال اطالعات به پورت توسط نرم افزار و برداشت اطالعات از پورت توسط وسيله جانبي را حل كرد. تمرين - 1 مثال قبل را به گونه اي تغيير دهيد كه اطالعات از پورت سريال خوانده شود و روي چاپگر چاپ شود. Prn مي نويسيم. در برنامه فوق جاي 1.txt را با Aux تغيير مي دهيم و بجاي 1.txt Progress bar نوار پيشرفت : ابزاري است براي نمايش پيشرفت فرايند يك نرم افزار 11

11 - مثال 2 در برنامه كپي فايل تغييري ايجاد كنيد كه روند پيشرفت فرايند كپي روي مانيتور براي كاربر به شكل progressbar نمايش داده شود. fptr1=fopen("1.txt",,"r"); fptr2=fopen("2.txt",,"w"); در داخل while خط ;(" printf(" اضافه مي گردد. مثال 3- مثال قبل را به گونه اي تغيير دهيد كه درصد پيشرفت فرايند را در هر لحظه روي مانيتور نمايش دهد. T/C*111 T فرمول حجم فايل اوليه = C حجم مقدار اوليه = درصد پيشرفت 1/4*111=25% براي مثال قبل % 1 = 1/4*111 اگر يك كاراكتر كپي شده باشد: # include "stdio.h" main() File *fptr1,fptr2; char ch; int c=0, t = 0 ; fptr 1=fopen("1.txt", "r"); fptr 2=fopen("1.txt", "w"); while(!feof(fptr1)) 11

12 ch=getc(fptr1); ++c; fclose(fptr1); T=0; fptr1=fopen("1.txt","r"); while(!feof(fptr1)) ch=getc(fptr1); putc(ch,fptr2); ++t; printf(' 0'); printf("%f",t/c*100); fclose(fptr1); fclose(fptr2); جدول FAT تاريخ ايجاد فايل سايز فايل نام فايل نوع فايل را دارا مي باشد. روش دوم براي بدست آوردن اندازه فايل اين است كه در هنگام محاسبه C به جاي Ch از يك آرايه استفاده مي كنيم تا عمل خواندن يكبار انجام شود و بعد محتواي آرايه را داخل فايل دوم مي ريزيم. برآورد يا پيش بيني مانده انجام يك فرايند نرم افزاري : 12

13 زمان مانده / حجم فايل مانده = زمان گذشته / حجم فايل كپي شده t / time=c t / x x = ( c t ) + time / t تمرين - 2 فايلي در حال كپي شدن است حجم اين فايل 2mb است. 500kb از فايل كپي شده است و 5 دقيقه زمان گذشته است. چقدر طول مي كشد تا فرايند كپي به پايان برسد = * 5/500=15.48 X= (2*1000 kbyte 500kyte)*5 /500kbyte زمان آينده 15=5/500*1500=X 15+5=20 = X+time زمان كل = t/time = c/time =c*time/t زمان كل نكته - 1 اين فرمول براي مشخص كردن درصد مانده است. نكته - 2 براي محاسبه time قبل از حلقه Get time مي كنيم و در هر بار كپي كردن در حلقه دوباره Get time مي كنيم و تفاوت درون حلقه و پيش از حلقه مقدار زمان بر حسب ثانيه است. نكته - 3 هر چقدر سرعت كپي يا دانلود يكنواخت تر باشد فرمول محاسبه زمان دقيق تر خواهد بود. مثال 4- برنامه نمايش درصد در فرايند كپي را به گونه اي تغيير دهيد كه به ازاي هر %11 پيشرفت يك مربع نمايش دهد. while (!feof(fptr1))

14 ++ t ; Printf( %f,t/c*100); If((t/c*100)%10==0) Printf( ); گرافيك در طراحي سيستم : محيط متني محيط گرافيكي در محيط گرافيكي به علت بيشتر بودن و ريز بودن نقاط نوراني PIXEL( ) تصوير نمايش داده شده كيفيت بيشتري دارد. كوچكترين عضو صفحه نمايش پيكسل است. براي توليد رنگهاي مختلف از تركيب رنگهاي اصلي ( قرمز آبي و زرد ) استفاده مي شود. = 611 *511= نقطه تعدادنقاط = 11"*11" =121" سطح مانيتور بر حسب اينچ مربع دستور (x,y) : goto xy goto xy(100,200) با اين دستور مي توان مكان نما را در يك مختصات مشخص قرار داد. دستور : pixel 14

15 pixel(150,300) نمايش يك نقطه نوراني است. كه مي تواند زرد قرمز يا سبز باشد. Picture cell = piccell = pixel مثال : به كمك دستور pixel از مختصات (100,200) يك خط تا مختصات (150,200) for (x=100;x<150;++x) pixel(x,200); (100,300)b كشيده شود. for(y=200;y<=300;++y) pixel(100,y); for(i=0;i<200;++i) pixel(i,i); تمرين : مثال قبل را طوري تغيير دهيد كه يك خط عمودي از نقطه (100,200)A تا نقطه تمرين - 2 خروجي برنامه زير چيست = نيمساز چارك اول را مي كشد. 45=1 a=tagα=1 arctg شيب خط براي بيشتر كردن شيب خط بايد ظرايب (i,i) را تغيير داد. line(x1,y1,x2,y2) دستور : line rectangle(x1,y1,x2,y2) دستور كشيدن مستطيل : X,y x,y Bar(x1,y1,x2,y2) دستور كشيدن مستطيل توپر : 15

16 X,y x,y circle(x,y,r) دستور كشيدن دايره : X,y r 51 (100,200) تمرين - 3 قطعه برنامه اي بنويسيد كه يك دايره توپر به مختصات مركز و شعاع بكشد. )راهنمايي: از تعدادي دايره هم مركز به شعاع هاي گوناگون استفاده مي كنيم. ) for(r=0,r<=50,++r) Circle(100,200,r); متحرك سازي در گرافيك: مثال - 4 دايره اي با مركز (100,200) و شعاع 51 را حركت دهيد تا مركز آن (300,100) شود. for(x=100;x<=300;++x) Circle(x,200,50); در اين برنامه دايره هاي قبلي باقي مي ماند. 16

17 نكته در مثال 4 آثار دايره اي قبلي باقي مي ماند براي پاك كردن آنها مي توانيمپيش از كشيدن دايره جديد دايره قبلي را پاك كنيم. يعني يك دايره با رنگ زمينه )معموال مشكي( روي آن بكشيم مثال - 5 تغيير مثال 4 با از بين بردن آثار اليه هاي قبلي پاك كننده For(x=100;x<=300;++1); رنگ مشكي Color(0); پاك كننده Circle(x-1,200,50); رنگ سفيد Color(1); دايره جديد Circle(x,200,50); (200,150) (0,100) تمرين 4- مستطيلي با چپ باالي و راست داريم اين مستطيل را از چپ مانيتور حركت دهيد به سمت راست هدايت كنيد و از راست مانيتور خارج كنيد. for(x==0,x<=640;++x) Rectancle(x,100,x+200,150); تمرين - 5 تمرين 4 را به گونه اي تغيير دهيد كه سمت راست مانيتور از حركت سمت راست مستطيل به بيرون جلوگيري كند. for(x==0,x<=10000,++x) Rectangle(x%640,100,(x+200)%640,150); ساخت ربات مسيرياب )دنبال كننده خط( ساختار هر ربات داراي 3 بخش اصلي است : مكانيكي )چرخ يا بازو - موتور - جعبه دنده - تسمه - زنجير - بدنه - باطري - و فرمان( الكترونيكي ( ميكرو كنترلر - باتري - برد مسي - فنرها - ترانزيستور - led يا lcd سوييچ - سيم - كريستال(

18 3- نرم افزار ( برنامه و الگوريتم ) ترانزيستور : ترانزيستور اكثرا قطعه اي سه پايه است كه براي كنترل ولتاژ يا جريان از آن استفاده مي كند.كار آن اينگونه است كه يكي از پايه ها براي كنترل است و دوپايه ديگر براي ورودي و خروجي. 18

19 رله : رله نوعي كليد الكتريكي سريع يا بيدرنگ است كه با هدايت يك مدار الكتريكي ديگر باز و بسته ميشود. روش كنترل باز و بسته شدن اين كليد الكتريكي به صورتهاي مختلف مكانيكي حرارتي مغناطيسي الكترو استاتيك و... مي باشد. رله را ژوزف هانري در سال 1۸35 ميالدي اختراع كرد. از آنجا كه رله ميتواند جرياني قوي تر از جريان ورودي را هدايت كند به معني وسيعتر ميتوان آن را نوعي تقويت كننده نيز دانست. در گذشته رلهها معموال با سيمپ چي ساخته ميشد و از جريان برق براي توليد ميدان مغناطيسي و باز و بسته كردن مدار سود ميبرد. امروزه بسياري از رلهها به صورت حالت جامد ساخته ميشوند و اجزاي متحرك ندارند. حسگرها : يك تشخيص دهنده الكترونيكي است كه در پاسخ به يك ورودي كم فيزيكي مشخص )حركت نور گرما رطوبت و... ) كه ميتواند تشخيص خود را به يك سيگنال الكتريكي تبديل كند تشكيل شده است كه از انواع زير تشكيل شده است : 5- دود گاز آهن 6- نور 7- فشار 1- رطوبت 2- گرما و دما 3- لرزش و ضربه 4- PH ۸ -سرعت 9- صدا 11- تراز 19

20 ساختار ربات مسير ياب : S1 S2 S3 M1 M حركت به جلو اين ربات يك خط مشكي را دنبال مي كند. اين رباط داراي سه سنسور است و روي زمينه خط مشكي حركت مي كند. براي حركت از دو متور استفاده مي شود. برنامه نويسي ربات مسيرياب : 21

21 while (1) If (PA1 == 1 ) && (PA 2 == 1 ) && (PA 3 == 1 ) PB1 = 1; PB2 =1; If (PA 1 == 1 ) && (PA 2 == 1 ) && (PA 3 == 0 ) PB1 = 0; PB2 =1; If (PA2 == 0 ) && (PA 3 == 0 ) && (PA4 == 0 ) PB0 = 0; PB1 =0; كار با وقفه ها : تغيير محل مكان نما بدون استفاده از دستورهاي گرافيكي #include "stdio.h" #include "dos.h" #include "conio.h" viod move to xy(int x, intt y) union REGS regs; 21

22 regs.h.ah=2; regs.h.dl=x; regs.h.bh=0; int 86(0x10,&regs,&regs) main() clrscr(); movetoxy(35,10); printf("hi\"); مثال : 2 فعال كردن Cursor روي نمايشگر #include "stdio.h" #include " dos.h" #include "conho.h" void cursor-on (void) unio REGS r; r.x ax=1 Int 86(0x23,&r,&r); gets(0); main() 22

23 clrscr(); cursor-on; مثال : برنامه اي بنويسيد كه در مسير جاري يك پوشه با نام دلخواه كاربر ايجاد كند. #include<dir.h> #include<stdio.h> main() int state; char p[30]; scanf("%s",p); State = mkdir(p); If(state = = 0) printf("folder is moked"); else printf("error in making"); تمرين : برنامه اي بنويسيد كه پوشه مورد نظر كاربر را از درايور جاري پاك كند. #include<dir.h> #include<stdio.h> main() int state; char??[30]; scanf("%s",p); 23

24 If(stste==0) printf("folder is removed"); else printf("error in removing"); مثال : با اين فرض كه دكمه" " كيبورد كد اسكي 79 داشته باشد برنامه اي بنويسيد كه تعدادفشار دادن اين دكمه توسط كاربر را شمارش كند و نمايش دهد. با Enter كار را پايان دهد. #include<stdio.h> #include<conio.h> main() int i=0,c=0; c=getch(); While(c!=13) If(c==79) ++i; c=getch() printf("%d",i); انجام محاسبات رياضي با استفاده از عمليات جمع و تفريق : 24

25 در ماشين هاي ساده فقط مدار جمع كننده يا مدار جمع و تفريق كننده بسته شده است. برنامه نويس مي تواند با برنامه نويسي و استفاده از مدار جمع يا مدار جمع و تفريق عملگرهاي ضرب و تقسيم و محاسبات توان و جذر را برنامه نويسي كند. پس براي دستيابي به آن نياز به برنامه هاي ديگر نيست. مثال : 4 به كمك عملگر جمع عملگر ضرب را بدست آوري. int zarb(int a,int b) int I,z=0; for(i=1;i<=b,++i) a*b=a+a+a.. +a z=z+a; return(z); تمرين : قطعه برنامه اي بنويسيد كه عددي را دريافت كند و فاكتوريل آن را بدست آورد در اين روند نبايد از عملگر ستاره يا ضرب استفاده شود. int factor(int a) int I,f=1; for(i=1;i<=a;++1) f=zarb(f,i); return(f); مثال : 5 برنامه اي بنويسيد كه عددي را دريافت كند و قدرمطلق آن را برگرداند. mitlagh(int a) if(a<0) return(- a); 25

26 مثال : 6 برنامه اي بنويسيد كه خارج قسمت تقسيم صحيح a و b را بدست آورد. int taghsim(int a, int b) int c,i=1; c=motlagh(a=b); while(e>=b) i=i+1; a=c; c=motlag(a-b); return(i); مثال : برنامه اي بنويسيد كد اسكي كد فشار داده شده توسط كاربر را نشان دهد. #include "stdio.h" #include "conio.h" main() int c; c=getch(); printf("%d",c); 26

27 محاسبات رياضي : مثال : 2 به كمك تابع ضرب كه كه پيشتر طراحي شده است تابع توان را بسازيد. int tavan(int a, int b) int t=1, I; for (i=1;i<=b;++i) t=zarb(t,b); return(t); مثال : 3 محاسبه جذر يك عدد با دقت 01/. If x>3 x / 2 چون نمي توان عدد دقيق را در زمان كم محاسبه كرد و نياز نيست هميشه دقيق باشد شرط مي گذاريم تا آنرا مشخص a i * i < 0.01 كنيم دقت تا حد 1011 float jasr (int a) int i = 0; while (i <= taghsim (a,2)) if (a zarb (i,i)< 0.01) return (i); Break; else 27

28 i = i ; تمرين : به كمك تابع تقسيم توان و مطلق برنامه اي بنويسيد كه ريشه سوم يك عدد را با دقت 1011 بدست آورد. تنها تغيير در شرط if برنامه قبل است If ( motlagh ( a tavan ( i,3 ))(0.01) مثال : 4 برنامه اي بنويسيد كه ريشه n ام را بدست آورد. float sinos(int a) float s = 0; s = a - taghsim (tavan (a,3),3) + taghsim(a,5),5) - taghsim(tavan(a,7),7); return(s); فرمول تغيير مبدا مختصات به نقطه α و : β قديم β-y) A(x α, جديد A(x,y) تمرين : 4 نقطه c به مختصات شود. (100,400)c كه در سيستم قديم است در سيستم جديد به چه مختصاتي تبديل مي C(-220,-140) - 220= =

29 نمونه سوال امتحاني: سوال - 1 كاربرد برنامه سازي سيستم را توضيح دهيد و يك مثال عنوان كنيد. جواب : هدف ما ارتباط با سخت افزارها و مديريت آنهاست. برنامه اي كه بتواند نوشته روي اسنو برد را به نمايش در آورد. سيستم برنامه كنترل كننده دماي هوا برنامه رباط برنامه آسانسور خلبان خودرو انژكتور خودرو سوال - 2 حداقل قطعات الزم براي اجراي يك برنامه سيستم چيست 4- دستگاه -3 ميكروپروسسور 2- حافظه RAM يا ROM منبع تغذيه)باطري يا آداپتور( جواب : -1 بوق موتور 5- يك دستگاه خروجي LCD يا LED ورودي)كيبورد سنسور... ) سوال - 3 كاربرد پورتهاي پشت كيس چيست پورتها را نام ببريد. 2- پورت LPT يا پارالل موازي ( 25 سوزن( 3- پورت COM يا سريال يا ( RS232 جواب : -1 پورت USB 9 پين( پورتها مي توانند data به كامپيوتر وارد يا از آن خارج كنند. پورت usb عالوه بر data تامين كننده برق است. 200kb 4mb سوال 4- يك فايل در حال كپي شدن است. اگر حجم فايل باشد و تا كنون آن كپي شده باشد درصد پيشرفت مرحله كپي چقدر است. * 111 مقدار كل فايل / مقدار كپي شده = درصد پيشرفت كپي = 211 / 4196 * 111 = جواب : 4/۸۸ سوال - 5 اگر فايل در حال كپي شدن در مدت 11 دقيقه 200 kbyt كپي شده باشد الف - سرعت كپي شدن بر حسب كيلو بيت بر ثانيه چقدر است. ب - اگر ۸11 كيلوبايت از فايل باقي مانده باشد چقدر طول مي كشد تا فرايند كپي كامل شود. زمان / حجم فايل كپي شده = سرعت كپي فايل = ۸ / 3 6 * ۸/ 2 61= * 11 / bit k bit / sec = 200 k * 8 سرعت = 2066 Kbit/sec به دو روش قابل حل است : 29

30 دقيقه = / X 800 kbyte / 200 kbyte = 800*8 / 600 = 600 / byte = 800k زمان = سرعت انتقال / حجم فايل مانده دقيقه = sec sec = 800 * 3 = زمان / kbit تعداد = kbit/sec سرعت سوال - 6 در زمان دانلود يا آپلود شدن فايل يا كپي شدن آن پيام هايي مبني بر زمان باقيمانده تا پايان كار نمايش داده مي شود اين عدد بطور دائم تغيير مي كند و نوسان باال و پايين دارد. دليل قانع كننده اي براي اين نوسان بيان كنيد. جواب : ممكن است cpu در هنگام فرايند با برنامه هاي ديگري مشغول باشد و يا مشكالت سرعت در هارد ديسك RAM يا خطوط ارتباطي داشته باشد. اين رخداد ها باعث كم و زياد شدن سرعت كپي يا انتقال مي شود و سيستك كه زمان باقيمانده را بر اساس سرعت متوسط پيش بيني مي كند پيش بيني اش دچار نوسان مي شود. زيرا سرعت متوسط نوسان دارد. سوال - 7 كاربرد نوار پيشرفت يا progress bar چيست جواب : هر زمان كه انجام كاري در سيستم زمانبر باشد سرعت روند انجام كار باقيمانده را توسط يك نوار افقي در حال رشد به كاربر نشان ميدهيد. در سيستم هاي ارزان تر به جاي نوار از ساعت شني يا نمايش تايمر استفاده مي كنيم. كاربرد include در برنامه نويسي چيست ( در برخي زبانها uses مي باشد( سوال - 8 جواب : به مرور زمان برنامه نويسان يك زبان يا Language كمبودهاي آن زبان را تشخيص مي دهند و با دستور هاي ساده دستورهاي پيچيده تر را مي سازند. برنامه نويسان خوش فكر اين دستورهاي جديد را در فايلهاي جداگانه اي قرار مي دهند و براي آن فايل نام مناسب در نظر مي گيرند. ( براي مثال )stdio.h در آينده اين برنامه نويس يا برنامه نويسان ديگر مي توانند به كمك include يا uses دستورهاي جديد را به برنامه خود اضافه كنند و از آن دستورها استفاده نمايند. نكته : استفاده از include ممكن است باعث كند شدن برنامه شود يا حجم برنامه را افزايش دهد زيرا پرش از برنامه اصلي به دستور موجود در و بازگشت از آن زمانبر است همچنين ممكن است طراح برنامه اي فايل بهينه header include نويسي نكرده باشد. سوال چرا در طراحي سيستم هاي كامپيوتري بخشي از فرمان ها به طور سخت افزاري بسته مي شوند ( طراحي مي - 9 شوند( و ديگر فرمانها نرم افزاري جواب : در طراحي يك سيستم به طور معمول دستورهاي پركاربرد و پايه اي به شكل سخت افزاري طراحي مي شوند و روي مدار قرار مي گيرند. اين اين دستورها بسيار سريع اجرا مي شوند. اما هر دستور كمي به حجم مدار مي افزايد پس نمي توان 31

31 همه دستورها را به اين شكل طراحي كرد زيرا باعث افزايش حچم سخت افزار و توليد گرماي غير قابل كنترل مي شود. در طراحي هاي ديگر دستورهاي غير پايه اي بطور نرم افزاري با دستورهاي پايه اي سخت افزاري طراحي مي شوند. يعني از كنار هم قرار گرفتن چند دستور سخت افزاري يك دستور نرم افزاري بوجود مي آيد. اين روند كمي باعث كندي اجراي برنامه مي شود اما هزينه طراحي سخت افزار و نگهداري آن را كم مي كند. براي مثال ضرب با جمع هاي متوالي ساخته مي شود. سوال - 11 براي فشرده سازي )zip( يك فايل متني ايده مناسب پيدا كنيد. )پيشنهادي( متن زيپ شده جدول كمكي I am student شرح كد 1 am student I live in Tehran I 1 1 live in 2 Tehran is metropolis Tehran 2 2 is metropolis 4۸ بايت 3۸ بايت اين الگوريتم در متن اصلي واژگان يا جمله هاي تكراري را پيدا مي كند و براي هر يك كد در نظر مي گيرد واژه جواب : تكراري و كدش در جدول كمكي قرار مي گيرد و بجاي هر واژه تكراري نيز كد آن قرار مي گيرد تا متن zip شده حاصل شود. حجم متن zip شده به اضافه حجم جدول كمكي بايد كمتر از حجم متن اصلي باشد. در زمان باز ردن zip كه به آن unzip مي گويند با جدول كمكي معادل هر كد پيدا شده و واژه مناسب آن در متن جديد قرار مي گيرد تا متن اوليه بدست آيد از اين روند براي رمز گذاري نيز مي توان استفاده كرد. 31