قرآن در کامپیوتر

دانلود نرم افزار های قرآنی یه صورت رایگان

قرآن در کامپیوتر

دانلود نرم افزار های قرآنی یه صورت رایگان

روشهای جستجو

در این پست به شما انواع روش های جستجو آموزش داده می شود. سپس طریقه نوشتن برنامه برای این روش ها کاملا شرح داده خواهد شود و در انتها با دادن نمونه تست ها مربوط به این بخش مطلب به پایان خواهد رسید . برای مطالعه این متن به ادامه مطلب مراجعه کنید .

-------------------------------------------------------

روشهای جستجو:

تعریف لیست:

لیست از تعدادی داده تشکیل شده است که با یکدیگر در خاصیتی مشترک هستندو تعریف لیست بسیار شبیه تعریف مجموعه در ریاضی است با این تفاوت که:

  • در مجموعه(Set) عضو تکراری وجود ندارد اما در لیست ممکن است داده تکراری وجود داشته باشد
  • در مجموعه ترتیب اعضا اهمیت ندارد اما در لیست ترتیب داده ها اهمیت دارد

سئوال) آیا نمرات درس پاسکال می تواند مجموعه باشد؟    اگر نمره تکراری در آنها نباشد می تواند مجموعه باشد

سئوال) آیا لیست روبرو می تواند مجموعه باشد؟ {2 , 7 , 8 , 3 , 2 , 4}    خیر زیرا عضوتکراری دارد

نکته) یک مجموعه می تواند حتما لیست باشد اما یک لیست همیشه یک مجموعه نمی تواند باشد.

نکته)داده های موجود در یک لیست می تواند از چند نوع داده متفاوت باشد مثلا { ali , 14 , 15.5 , 18}   

دقت شود که داده های یک لیست در خاصیتی باید مشترک باشند

نکته) رکورد و آرایه می توانند یک لیست باشند.

ALI

'A'

8.5

5

8

9

13

6

14

19

25

5


جستجودر لیست:

در مواردی می خواهیم یک داده خاصی را در یک لیست پیدا کنیم به این داده کلید می گویند. انواع روش های جستجو در لیست ها وجود دارد که 2 مورد آن بحث خواهد شد.

روش جستجوی خطی(ترتیبی)

در این روش کلید( داده ایی که قرار است جستجو شود) با اولین دادة لیست مقایسه می شود اگر پیدا شد کار به پایان می رسد در غیر این صورت با دومین دادة لیست مقایسه می شود و این کار تا پایان لیست ادامه می یابد.

مثال) اگر کلید 12 باشد در لیست زیر چند عمل مقایسه انجام می شود تا کلید پیدا شود؟ ( به روش خطی)

2

12

17

19

12

7

11

14

13

10


نکته) اگر در لیست چند مورد از کلید باشد به روش خطی جستجو کنیم اولین کلید را پیدا می کند و اندیس (فیلد) لیست را برمی گرداند و کار جستجو تمام می شود. در مثال بالا دو عدد 12 وجود دارد اما اولین 12 که در خانه ششم است پیدا می شود و کار تمام می شود.

نکته) در این روش جستجوی خطی لازم نیست که لیست ما مرتب شده باشد یعنی داده ها در لیست صعودی یا نزولی باشند.

Var    A: Array[1..100] of integer;

          Key , F:integer;  B:Boolean;

Begin

   For   F:=1  to  100 do

        Readln( A[F]);

   Readln(Key);

   B:=False;

   For  F:=1   to   100  do

        IF  A[F] = Key  then

                Begin

                       B:=True;

                        Break;

                 End;

  If   B=False   then

          Writeln(' Not Found ')

   Else

          Wrietln(' Find ' , F);

End.

نکته) در بهترین حالت جستجوی خطی عمل مقایسه یکبار انجام می شود.

در بدترین حالت جستجوی خطی به تعداد خانه های لیست عمل مقایسه انجام

می شود.

بنابراین اگر لیست N تا عنصر داشته باشد N عمل مقایسه انجام می شود.

در حالت متوسط N/2 عمل مقایسه انجام می شود.

سئوال) اگر لیستی دارای 20 عنصر باشد در روش جستجوی خطی در بدترین و

متوسط چند عمل مقایسه انجام می شود؟

نکته) در روش جستجوی خطی لیست می تواند نامرتب باشد. ولی تعداد مقایسه ها

زیاد است و جستجو به کندی صورت می گیرد.

روش جستجوی دودویی ( باینری):

در این روش باید لیست از قبل مرتب باشد. پس این روش مخصوص لیست هایی

است که از قبل مرتب( صعودی یا نزولی) شده اند.

فرض کنید که یک آرایه مرتب صعودی (از کوچک به بزرگ) داریم و می خواهیم کلیدی را در آن به روش باینری جستجو کنیم:

آرایه را از وسط نصف می کنیم و کلید را با عنصر وسط آرایه مقایسه می کنیم که سه حالت ممکن است رخ دهد:

الف) کلید از عنصر وسط بزرگتر باشد( Key > A[C]) : در این حالت با توجه به اینکه لیست مرتب (صعودی) است حتما کلید در نیمه سمت راست است و ما باید نیمه سمت راست را جستجو کنیم و نیمه سمت چپ را جستجو نخواهیم کرد.

نیمه سمت راست

وسط

نیمه سمت چپ

ب) کلید از عنصر وسط لیست کوچکتر است: در این حالت با توجه به اینکه لیست به صورت صعودی مرتب است حتما کلید در نیمه سمت چپ است و باید نیمه سمت چپ را باید جستجو کرد و نیمه سمت را  جستجو نخواهیم کرد.

ج) در بهترین حالت کلید مساوی عنصر وسط لیست باشد. در این حالت کلید پیدا شده است و عمل جستجو متوقف می شود.

اگر هر کدام از حالت های الف یا ب رخ دهد عمل جستجو را در نیمه سمت چپ یا راست ادامه می دهیم. به عبارت دیگر نیمه سمت چپ یا نیمه سمت راست را دوباره از وسط نصف می کنیم و دوباره عمل بالا را روی آن انجام می دهیم.

Var   A:array[1..20] of integer;

  J, Key , C , E , S : integer;    F:Boolean;

Begin

   For   J:= 1  to 20  do

           Readln( A[ J ] )    ;

    Sort(A);  { یک زیربرنامه جهت مرتب سازی }

S:=1 ;    E : =20;

Readln(Key);

F:=False;

While (S< E)  and ( Not  F)  Do

   Begin

         C:= ( S+E) Div 2;

         IF  A[ C]  < Key  then

                S:=C+1

        Ese

         IF  A[C] > Key  then

                 E:=C-1

          Else

         IF      A[C]=Key then

               F:=True;

   End;

IF  F=False then

   Writeln(' Not Found')

Else

    Writeln(' Find in index' , C);

End.

نکته) در بهترین حالت جستجوی دودویی یک عمل مقایسه انجام

می شود و در بدترین حالت جستجوی دودویی یک لیستی که دارای

N عنصر باشد تعداد عمل جستجو [ Log2(N)] +1 است.

مثال) لیستی دارای 18 عنصر است در بدترین حالت و بهترین حالت

جستجوی یک کلید به روش دودویی و خطی چند عمل مقایسه انجام

می شود؟

نکته) جستجوی اطلاعات غیر عددی( رشته یا کاراکتر) دقیقا مانند اطلاعات

عددی است.

نکته) معمولا در حالتهایی که تعداد عناصر لیست زیاد باشد جستجوی

دودویی بسیار بهتر عمل می کند.

سئوال) در جه حالتی جستجوی خطی از جستجوی دودویی سریعتر است؟

سئوال) در روش جستجوی باینری اگر کلید در لیست نباشد چگونه متوجه می شویم که کلید در لیست نیست؟

سئوال) اگر عضو تکراری در لیست باشد و  به روش باینری جستجو کنیم کدام عضو پیدا خواهد شد؟

سئوال)آرایه روبرو را برای کلید 34 به دو روش خطی و باینری جستجو کنید و تعداد مقایسه ها را در هر دو روش بدست آورید؟

20

9

13

34

38

2

12

21

34

19

17

32

15

8

روشهای مرتب سازی لیست:

مرتب سازی: منظور از مرتب سازی داده ها تغییر دادن موقعیت آنها در یک لیست است تا داده ها در لیست به طور منظم صعودی یا نزولی قرار گیرند.

صعودی ç  از کمتر به بیشتر                          2 , 7 , 8  ,9 15 , 18

نزولی ç  از بیشتر به کمتر                        18 , 15 , 9 , 8 , 7 , 2  

درهمه مثالهای زیر فرض شده است که می خواهیم لیست را صعودی کنیم.

روش مرتب سازی حبابی: Bubble Sort

مرحله یا گذر 1) در این روش اولین عدد لیست با دومین عدد لیست مقایسه می شود و اگر ترتیب آنها درست نبود جای آنها را عوض می کنیم.( یعنی اینکه عدد اولی از دومی بزرگتر باشد)

سپس عدد دومی را با عدد سومی مقایسه می کنیم و اگر ترتیب آنها درست نبود جای آنها را عوض می کنیم. و این کار را تا انتهای لیست( فرض بر این است که N تا سلول دارد) ادامه می دهیم. عدد بزرگتر به خانه N ام می رود( مانندیک حباب)

مرحله 2) دوباره از خانه اول شروع می کنیم و خانه اول را با خانه دوم مقایسه می کنیم و اگر ترتیب آنها درست نبود جای آنها را عوض می کنیم و سپس عدد دوم وعدد سوم مقایسه می شوند و ......... و این کارتا خانه N-1 ادامه پیدا می کند

مرحله سوم) مرحله سوم نیز مانند مرحله دوم است با این تفاوت که تا خانه N-2 انجام می شود.

اگر لیست داری N تا سلول باشد N-1 مرحله خواهیم داشت. (مثال صفحه 119 کتاب)

9

13

17

10

18

12

مثال) آرایه روبرو را به روش حبابی مرتب صعودی کنید؟ 

6

5

4

3

2

1

9

13

17

10

18

12

9

13

17

10

18

12

9

13

17

18

10

12

9

13

18

17

10

12

9

18

13

17

10

12

18

9

13

17

10

12

مرحله 1 : 5 عمل مقایسه و چهار جابجایی رخ داده است.

6

5

4

3

2

1

18

9

13

17

10

12

18

9

13

17

12

10

18

9

13

17

12

10

18

9

17

13

12

10

18

17

9

13

12

10

مرحله 2 : چهار عمل مقایسه و سه جابجایی رخ داده است.

6

5

4

3

2

1

18

17

9

13

12

10

18

17

9

13

12

10

18

17

9

13

12

10

18

17

13

9

12

10

مرحله 3 : سه عمل مقایسه و یک عمل جابجایی رخ داده است

6

5

4

3

2

1

18

17

13

9

12

10

18

17

13

9

12

10

18

17

13

12

9

10

مرحله 4 : دو عمل مقایسه و یک جابجایی رخ داده است.

6

5

4

3

2

1

18

17

13

12

9

10

18

17

13

12

10

9

مرحله 5 : یک مقایسه و یک جابجایی رخ داده است.


در این مثال مجموعا 15 عمل مقایسه و 10 عمل جابجایی صورت گرفته است

نکته) بطور کلی در روش مرتب سازی حبابی اگر لیست دارای N تا عنصر

باشد به تعداد N(N-1) / 2 تا مقایسه انجام می شود.

نکته) تعداد جابجایی ها در روش حبابی را دقیقا نمی توان محاسبه کرد  و بستگی به بی نظمی آرایه دارد ولی می توان گفت که حداکثر تعداد عمل جابجایی ها به اندازه تعداد مقایسه ها است یعنی هر مقایسه ایی که انجام می شود یک جابجایی نیز رخ دهد.

اگر آرایه ایی نزولی باشد و بخواهیم آن را به روش حبابی صعودی کنیم تعداد جابجایی ها برابر تعداد مقایسه ها است.

(N-1)+(N-2)+(N-3)+….+2+1 = N*(N-1) /2

سئوال) اگر بخواهیم یک لیست 10 عنصری را به روش حبابی مرتب کنیم چند عمل مقایسه انجام می شود؟

الف) 9                       ب) 15                       ج)50                   د) 45

سئوال) آرایه روبرو را به روش حبابی مرتب نزولی کنید و شکل آرایه در گذر چهارم چگونه است؟

14

10

7

15

13

9

18

12

برنامه ایی بنویسید که یک آرایه 10 عنصری را دریافت کندو به روش حبابی مرتب صعودی کندو چاپ کند؟

Var

    A:Array[1..10] of integer;

   G, B , C:Integer;

Begin

  For  B:=1  To  10 do

       Readln(A[B]);

 For  G:=9   Downto  1  do

    For   B:=1   To   G  Do

        If  A[ B]   > A[B+1]  then

                Begin   { جابجایی {

                        C:=A[B];

                        A[B]:=A[B+1];

                        A[B+1]:=C;

                 End;

For  B:=1  to  10  do

     Writeln(A[B]);

End.


روش مرتب سازی انتخابی: ( Selection)

فرض کنید می خواهیم یک لیست شامل N خانه را به روش انتخابی مرتب کنیم( صعودی):

مرحله یا گذر اول) از ابتدا تا انتهای لیست را جستجو کرده و کوچکترین عدد را پیدا کرده و محل آن را با اولین عنصر لیست عوض می کنیم.

مرحله دوم) از خانه دوم تا انتهای لیست را جستجو کرده و کوچکترین عدد را پیدا کرده و محل آن را با خانه دوم عوض می کنیم.

دقت کنید که در هر مرحله محل واقعی یک از اعداد مشخص می شود.

مرحله سوم) از خانه سوم تا انتهای لیست را جستجوکرده و کوچکترین عدد را پیدا کرده و محل آن را با سومین عنصر لیست عوض می کنیم.

این کار را تا انتهای لیست انجام می دهیم (مثال صفحه 123 کتاب)

اگر لیست دارای N تا عنصر باشد N-1 گذر یا فاز خواهیم داشت و در هر مرحله فقط یک جابجایی رخ می دهد.

9

13

17

10

18

12

سئوال) آرایه روبرو را به روش انتخابی مرتب صعودی کنید؟

12131710189 گذر 1 : 5 مقایسه و یک جابجایی12131718109 گذر 2 : 4 مقایسه و یک جابجایی18131712109 گذر 3 : 3 مقایسه و یک جابجایی18171312109 گذر 4 : 2 مقایسه و یک جابجایی18171312109 گذر 5 : 1 مقایسه و یک جابجایی


در این مثال 15 عمل مقایسه و چهار عمل جابجایی رخ داده است.

همانطور که مشاهده می کنید همین آرایه به روش حبابی 10 عمل جابجایی داشت و به روش انتخابی 4 عمل جابجایی داشت.

نکته) در روش مرتب سازی انتخابی تعداد مقایسه ها برابراست با N ( N-1) /2

(N-1)+(N-2)+(N-3)+….+2+1 = N*(N-1) /2

در روش انتخابی تعداد جابجایی ها همیشه برابر N-1 تا است.

نکته) تعداد مقایسه ها در روش انتخابی و حبابی یکسان است.

نکته) تعداد جابجایی ها در روش انتخابی کمتر از روش حبابی است به همین دلیل روش انتخابی سریعتر از حبابی است.

سئوال) آرایه روبرو را به روش انتخابی مرتب کنید نزولی کنید و گذر چهارم آن را بدست آورید؟

14

10

7

15

13

9

18

12

نکته) مرتب سازی لیست های غیر عددی نظیر رشته ها دقیقا مانند لیست های عددی است.

برنامه ایی بنویسید که یک آرایه 10 عنصری از اعداد را دریافت کندو به روش انتخابی مرتب صعودی کند و چاپ کند.

Var  A:Array [1 .. 10 ] of integer;

     K , L , T,Min , C:  integer;

Begin

   For  K:=1   to   10  do

          Readln( A[K]);

   For  K:=1   Downto   9   do 

         Begin

               Min:=A[K];

                C:=K;

                 For   L:=K+1   To  10  Do

                         IF  A[L] < Min  then

                                 Begin

                                       Min:=A[L];

                                        C:=L;

                                  End;

                     T:=A[K];

                     A[K]:=Min;

                     A[C]:=T;                       

           End;

For  L:=1  To  10  do

   Writeln(A[L);

End.


تست1) اگر آرایه A یک آریه N عنصری مرتب شده نزولی باشد حداکثر چند عمل مقایسه و جابجایی لازم است تا مرتب سازی انتخابی به صورت صعودی در بیاید؟

الف) N(N-1)/2                 ب)N(N+1)/2              ج) Log2(N)+1                      د)  N2

تست2) اگر آرایه S یک آرایه N عنصری باشد در این صورت حداکثر چند عمل جابجایی لازم است تا با مرتب سازی حبابی بتوان آرایه را به صورت صعودی مرتب نمود؟

الف) N+  N-1  + N-2  +….+2+1                       ب) N(N-1)/2                  ج)N(N+1)/2          د) نامشخص است

سئوال) اگر یک آرایه 10 عنصری نامرتب داشته باشیم و بخواهیم در را به روش باینری عمل جستجو را انجام دهیم چند عمل مقایسه انجام می شود؟

تست3) اگرعملیات مرتب سازی حبابی را برای مرتب کردن صعودی آرایه زیر بکار ببریم پس از چند گذر آرایه مرتب می شود؟

5  ,   3 ,  -4   , 204  , 190  , 180

الف) 3                       ب) 4                      ج) 5                      د) 2

تست4) در جستجوی دودویی کدام گزینه صحیح است؟

الف) سرعت جستجو نسبت به خطی کمتر است.                           ج) عنصر مورد جستجو با تک تک عناصر مقایسه می شود

ب) لیست مرتب شده بهتر است                                                 د) لیست حتما باید مرتب باشد   

تست 5)لیستی دارای 1000 عضو است حداکثر چند مقایسه برای پیدا کردن یک آیتم در لیست مورد نظر با روش دودویی لازم است؟

الف) 10                      ب) 11                ج) 500                د)1000

گرافیک در پاسکال:

بطور کلی مانیتور از نظر پاسکال به دو حالت متنی و گرافیکی دیده می شود تا کنون وقتی داده ها و اطلاعات را با دستور Write بر روی مانیتور چاپ می کردیم صفحه مانیتور متنی بود. در حالت عادی مانیتور متنی است و دارای 25 سطر و 80 ستون است که 80*25= 2000 کاراکتر را در خود جای می دهد. در حالت معمولی تنوع رنگ در صفحه متنی 16 رنگ است و اندازه کاراکترها قابل تغییرنیست. کارت های گرافیکی قدیمی فقط قابلیت ایجاد و کنترل صفحه متنی را داشتند. در ادامه انواع کارت گرافیکی ها و قابلیت آنها را ذکر می کنیم.

نام کارت

رنگ سطر ستون

تعداد پیکسل

CGA

320  *  200  * 4

64000

640  *  200   * 4

128000

EGA

640  *  200  * 16

640  *  350  * 16

224000

VGA

هر دو حالت EGA را دارد

640  *   480   * 16

307200

SVGA

تمام حالت کارت های قبلی را دارد

1024  *  768  * 16

برای اینکه در توربوپاسکال بتوانیم از هر کدام از کارت های گرافیکی استفاده کنیم باید درایور(راه انداز) آنها را داشته باشیم. درایورها معمولا فایلی هایی با پسوند BGI  هستند.

مثلا درایور کارتهای گرافیکی VGA و EGA فایل EGAVGA.BGI است که در شاخه BGI پاسکال است. می توانید درایور کارت SVGA را از اینترنت دریافت کنید.این درایورها بوسیله شرکت بورلند طراحی می شوند.

برای اینکه بتوانیم شکل های مختلفی را در صفحه رسم کنید باید ابتدا مانیتور را به وضعیت گرافیکی ببرید یا اصطلاحا به مد گرافیکی بروید. برای این کار از پردازه InitGraph استفاده می کنیم که در یونیت Graph است.

نکته)اکثر پردازه ها و توابع گرافیکی در یونیت Graph وجود دارند و باید آن را در ابتدای برنام Uses کنید.

InitGraph(A  ,  B   ,  S);

A  یک متغیر صحیح است که نوع کارت گرافیکی را مشخص می کند.  B یک متغیر صحیح است که حالت کارت گرافیکی را مشخص می کند و S یک رشته است که مسیر درایور (راه انداز) را مشخص می کند.

معمولا کارت نوع کارت گرافیکی( A) و حالت کارت گرافیکی(B) بصورت شناسه های ثابت تعریف شده اند.

A:=VGA;

B:=VGAHI;

InitGraph(A, B , 'C:\Tp\BGI');

VGA و VGAHI ثابت صحیح از قبل تعرف شده هستند کهVGA=9 و VGAHI=2 است. فایل EGAVGA.BGI نیز در مسیر C:\TP\BGI قرار دارد با این دستور مانیتور به حالت گرافیکی 640 * 480 * 16  می رود.

دستور مثال قبل یک مشکل دارد و آن این است که اگر کارت گرافیک کامپیوتر VGA نباشد خطا رخ می دهد و برنامه متوقف می شود. همچنین ممکن است در مسیر ذکر شده درایور مورد نظر نباشد.

برای حل این مشکل پارامتر اول (A )را صفر یا شناسه ثابت Detect را قرار می دهیم تا خود پاسکال نوع کارت گرافیکی را اتوماتیک تشخیص دهد و در ضمن مسیر درایور را یک رشته تهی قرار می دهیم تا در مسیر جاری درایور جستجو شود.

A:=Detect;

B:=VGAHI;

INITGRAPH(A, B , '');

اگر در هنگام تغییر مد مانیتور به هر علتی خطا رخ دهد تابع GraphResult نتیجه عملکرد آخرین دستور اجرا شدة گرافیکی را بر می گرداند. اگر عمل با موفقیت انجام شود تابه Graphresult عدد صفر را بر می گرداند اما اگر عددی غیر صفر برگرداند به معنای این است که با خطا مواجه شده است که عدد نشان دهنده نوع خطا است.

نکته) شناسه ثابت GrOk همان عدد صفر است.

Uses Graph;

Var  GD , GM:integer;

Begin

    GD:=Detect;

     InitGraph(GD, GM, '');

     If  GraphResult <> GrOk  then

                Writeln(' Error in Grpahic');

……. 

نکته) پردازه InitGraph حداکثر تا کارت VGA را می تواند تشخیص دهد

و کارت بالاتر را بصورت VGA تشخیص می دهد.

نکته) بوسیله توابع GetMaxX و GetMaxY و GetMaxColor می توانید

در هر حالتی که باشید تعداد سطرها و ستون ها و رنگ ها را بدست آورید. مثلا

اگر در حالت 640 * 480 * 16 باشید تابع GetMaxX عدد 639 و تابع

GetMaxY عدد 479 و تابع GetMaxColor عدد 15 را بر می گرداند. این

توابع ورودی ندارند ولی خروجی آنها یک عدد صحیح است.

پروسیجر PutPixel :

با استفاده از این

با استفاده از این پروسیجر می توانید هر پیکسل (نقطه) روی مانیتور را با رنگ دلخواه روشن کنید. دقت کنید که هر نقطه در صفحه نمایش یک مختصات منحصر به فرد دارد

نکته) مختصات پیکسل واقع در گوشه چپ بالای صفحه (0 , 0) است.                   X , Y ,C);    PUTPIXEL(

X و Y وC اعداد صحیح هستند که سطر وستون و رنگ را مشخص می کنند

نکته) پروسیجر CloseGrpah باعث می شود که صفحه نمایشبه حالت متنی برگردد وو درایور موجود در حافظه از حافظه خارج شود. این پروسیجر ورودی  و خروجی ندارد.

نکته) در صفحه حالت گرافیکی علامت چشمک زن وجود ندارد.

نکته) تابع KeyPressed که در یونیت CRT تعریف شده است بافر صفحه کلید را چک می کند هر گاه کلیدی زده شد این تابع True و درغیر صورت False برمی گرداند.

نکته) پروسیجر ClearDevice در یونیت Graph صفحه نمایش گرافیکی را پاک می کند و پروسیجر ClrScr در یونیت Crt صفحه نمایش متنی را پاک می کند.

Uses Graph , Crt;

Var

    GD , GM , Maxx , MaxY , MaxC:Integer;

Begin

   GD:=Detect;

    InitGraph(GD, GM ,'');

    If  GraphResult<> GrOK Then

         Writeln(' Error ')

     Else

      Begin

                ClearDevice;

                Max:=GetMaxX;

                MaxY:=GetMaxY;

                MaxC:=GetMaxColor;

         Repeat

               PutPixel(Random(Maxx) , Random(MaxY) , Random(MaxC));

         Until     KeyPressed;

        CloseGraph;

    End;

End.

این برنامه تا زمانی که یک کلید را فشار ندهید نقاط تصادفی بر

روی مانیتور با رنگ تصادفی روشن می کند.

پروسیجر LINE :

برای رسم خطی که ابتدا و انتهای آن مشخص است از این پروسیجر استفاده می کنیم. مختصات دو سر خط را می دانیم.

Line ( X1 ,  Y1  ,  X2 , Y2);

پروسیجر LineTo:

از آخرین نقطه رسم شده به نقطه دیگری خط رسم می کند.   LINETO(X , Y );

همیشه یک نقطه به عنوان نقطه جاری در صفحه گرافیکی در نظر گرفته می شود و آن نقطه ایی است که آخرین بار آن را روشن کرده ایم و بر روی آن کار کرده ایم در ابتدای کار نقطه (0 , 0) نقطه فعال است.

پروسیجر MoveTo:

این پروسیجر نقطه فعال فعلی را تغییر می دهد. البته نقطه یا خطی رسم نمی شود فقط مختصات جاری را تغییر می دهد.

MoveTo(X, Y);

پروسیجر LINEREL :                                    LINEREL(X ,Y);

اگر نسبت به آخرین نقطه رسم شده مقدار تغییرات افقی و عمودی خط را بدانید برای رسم خط از این پروسیجر می توان استفاده کرد.


پروسیجر SetColor: برای تعیین رنگ خطوط از این پروسیجر استفاده می شود. (صفحه 171کتاب)

SETCOLOR( C);  که C یک عدد صحیح است بین صفر تا 15 و شماره رنگ هادر کتاب وجود دارد.

پروسیجر SETBKColor :

برای تعیین رنگ زمینه از این پروسیجر استفاده می کنیم. دقت کنید که پروسیجر TextBackGround در محیط متنی قابل استفاده است. دو دستور زیر رنگ زمینه را آبی می کنند.

SETBKColor(Blue);

ClearDevice;

پروسیجر SETLINEStyle :

برای تعیین نوع خط ( خط چین یا غیر خط چین) و ضخامت از این پروسیجر استفاده می شود.

SETLINEStyle( Style , Pattern ,  Tickness);

Style نوع خط را مشخص می کند و Pattern  نوع خط چین را مشخص می کند و Tickness ضخامت را مشخص می کند ص 172

نکته) در صفحه متنی اندازه حروف ومتن ها از قبل مشخص شده است قابل تغییر نیست اما در حالت گرافیکی اندازه حروف را می توان تغییر داد و محدودیتی وجود ندارد. در عو ض نمایش یک حرف در صفحه نمایش گرافیکی به کندی صورت می گیرد. نوشته ها در صفحه گرافیکی واقعا متن نیستند و نقشه بیتی( BitMap) هستند.

پروسیجرOutText و OutTextXy : از این  دو پروسیجر جهت نوشتن متن در صفحه گرافیکی استفاده می شود دقت کنید که از دستور Write در حالت گرافیکی نمی توانید استفاده کنید.

OutText(String);    فقط می توان رشته چاپ کرد

OuttextXY( X , Y , String);   یک رشته را در مختصات مشخص شده چاپ می کند

نمی توان یک عدد را چاپ کرد باید به رشته تبدیل کرد و سپس آن را چاپ کرد.

رنگ متن نوشته ها با پروسیجر SetColor تعیین می شود.

اندازه حروف با پروسیجر SetTextStyle تعیین می گردد. ص 174

SetTextStyle(Font , Direction , Size);

همه پارامترها اعداد صحیح هستند. Direction اگر صفر باشد یعنی افقی و اگر یک باشد یعنی عمودی

Size اندازه حروف را مشخصمی کند.

نکته) فونت ها در پاسکال با پسوند Chr در شاخه BGI قرار دارند در واقع هر فونتی یک فایل با پسوند chr دارد.

SetTextStyle(SansseriFont , 1 , 5);

OutText('ALI');

از دو تابع TextWith و TextHeight برای بدست آوردن طول و عرض یک متن استفاده می شود.

البته عرض و طول در واقع تعداد پیکسل اشغال شده برای متن است.    

TextWith(رشته);  عدد صحیح که عرض رشته است

TextHeight(رشته);  عدد صحیح که طول رشته است

خروجی این دو تابع عددی است که نشان دهنده تعداد پیکسل اشغال شده برای متن است که این اعداد با توجه به فونت  و اندازه تعیین شده  بوسیله دستور SetTextStyle است.

پروسیجر Rectangle :

برای رسم یک مستطیل توخالی از این دستور استفاده می شود. با این دستور می توان مربع نیز رسم کرد.

Rectangle ( X1 , Y1 , X2 , Y2);

در پروسیجر Rectangle اگر Y1=Y2 باشد بجای مستطیل خط افقی رسم می کند.

Rectangle(100 , 150 ,  200 , 150);  è  Line(100 , 150 , 200 , 150);

و اگر X1=X2 باشد نیز یک خط عمودی رسم می کند.

رنگ محیط مستطیل بوسیله SetColor مشخص می شود. نوع و شیوه رسم خطوط با دستور SetLineStyle مشخص می شود

پروسیجر Bar :

برای رسم مستطیل توپر از این برنامه استفاده می شود.   Bar(X1 , Y1 , X2 , Y2);

رنگ داخل مستطیل بوسیله پروسیجر SetFillStyle قابل تنظیم است.

SetFillStyle(Pattern , color);

SetfillStyle نحوه رنگ آمیزی و پر و هاشور یا نقطه چین بودن را مشخص می کند.  صفحه179  کتاب

اگر Pattern برابر صفر باشد توخالی محسوب می شود.

پروسیجر Circle :

برارسم دایره از این پروسیجر استفاده می شود.                                       Circle( X , Y , R);

X و  Y مختصات مرکز دایره و R شعاع دایره است

پروسیجر FloodFill :

برای رنگ آمیزی یک محیط بسته از این پروسیجر استفاده می شود. برای اینکه بتوانید از این پروسیجر استفاده کنید باید 1) محیط شکل باید با یک رنگ رسم شده باشد 2) محیط شکل باید بسته باشد.

FloodFill( X , Y , Z);

X و Y مختصات یک نقطه در داخل شکل

Z رنگ دور شکل است.

برای رسم شکل روبرو باید از چه دستوراتی استفاده کرد؟

آیا می توان بدون استفاده از Bar و Rectangle یک مستطیل توپر رسم کرد؟

پروسیجر Ellipse :

برای رسم بیضی یا بخشی از یک بیضی ( کمان) از این پروسیجر استفاده می کنیم.

Ellipse ( X , Y , S , E , H , V);

X و Y مختصات مرکز بیضی است.   S زاویه شروع و E زاویه انتها و H قطر افقی و V قطر عمودی است.


بیضی عمودی

اگر E=360 و S=0 باشد بیضی کامل رسم می شود اگر E=180 باشد نیم بیضی رسم می شود.

اگر H>V باشد بیضی افقی و اگر  H<V باشد بیضی عمودی رسم می شود.

و اگر H=V باشد دایره رسم می شود.

پروسیجر Ellipse بیضی تو خالی رسم می کند برای رسم بیضی توپر از پروسیجر

FillEllipse می توان استفاده کرد و یا Ellipse و FloodFill را باهم استفاده کرد.

سئوال) چگونه می توان یک دایره توپر رسم کرد؟

سئوال ) چگونه می توان یک کمان رسم کرد؟

شکل های روبرو چگونه رسم می شوند؟

                         

تست1) کدام دستور برای پر کردن شکل در گرافیک استفاده می شوند؟

الف) FloodFill               ب)Bar                 ج)SetFillStyle               د)SetBkColor

تست2) برای رسم یک خط عمودی کدام یک از دستورات روبرو را می توان بکار برد؟

الف)Line(5 , 10 , 15 , 25);                                    ب)Line(5 ,  10 , 105 , 10);

ج)Line(10 , 100 , 10 , 150);                                د)Line(20 , 40 , 90 , 85);

تست3) در صورت موجود بودن صفحه گرافیکی دستور لازم برای رسم شکل زیر کدام گزینه است؟

الف)Ellipse(100 , 100 , 0 , 180 , 10 , 30);

ب)Ellipse(100 , 100 , 10 , 190 , 20 ,10);

ج)Ellipse(100, 100 , 0 ,360 , 10 , 5);

د)Ellipse(100, 100 , 0 , 360 , 10 , 20);

نظرات 1 + ارسال نظر
یوسف نیا دوشنبه 14 مرداد‌ماه سال 1387 ساعت 01:40 ب.ظ http://www.mehvar.com

سلام
همانطور که اطلاع دارید برای افزایش بیننده سایت یا وبلاگمان،موتورهای جستجو خیلی مهم هستند. و یکی از روشهای فوق العاده مهم و از همه جالبتر رایگان افزایش امتیاز در موتورهای جستجو ، تبادل لینک بین سایتها و وبلاگهاست.
سایت محور مشتاق تبادل لینک با شماست.
به همین منظور شما می توانید با ثبت لینکتان درhttp://www.mehvar.com/link/register.aspx بطور کاملا رایگان از این مزیت استفاده کنید. همچنین خواهشمندیم متقابلا لینک http://www.mehvar.com
را درسایت یا وبلاگ خود با یکی از عنوانهای :
سایت نیازمندیها
نیازمندیها
آگهی رایگان
فروشگاه اینترنتی
حراجی اینترنتی
لینکستان
قرار دهید. بدون اینکه اجباری در ثبت لینک ما داشته باشید در اولین فرصت و در سریعترن زمان لینکهای ثبت شده را تایید وارادتمان را کامل می کنیم.

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد