تبليغاتX
گروه کامپیوتر دانشگاه پیام نور بوشهر

حجم فایل 1.56 MB

برای دانلود کلیک کنید

نوشته شده توسط ابراهیم صحافی زاده در ساعت 11:51 | لینک  | 

در الکترونیک و کامپیوتر، فلیپ فلاپ یک نوع مدار دیجیتال است که می تواند به عنوان یک بیت حافظه عمل کند. یک فلیپ فلاپ می تواند شامل دو سیگنال ورودی صفر یا یک در پایه ورودی باشد. ضمنا یک فلیپ فلاپ دارای یک پایه زمانی(clock) و یک خروجی(out put) و دو پایه set و reset می باشد.

بعضی از فلیپ فلاپ ها شامل یک پایه clear می باشند که خروجی را دوباره راه اندازی(reset)می کنند. (در واقع فیلیپ فلاپ ها یکی از انواع مدارات مجتمع (Ic) هستند که برای کار به اتصالات تغذیه و زمین نیاز دارند.)
تغییرات پالسهای ورودی که منظور همان صفر و یک دیجیتال می باشند، به همراه پایه clock سبب تغییرات در خروجی می شوند. (عملا هر تغییری در وضعیت خروجی، به طور همزمان وابسته به تغییرات پالس در پایهclock است. مشخصات آیسی های فلیپ فلاپ ها مثلا پایه های ورودی، خروجی و بقیه پایه ها توسط کارخانه های سازنده در دفترچه هایی تحت عنوان دیتاشیت(data sheet) قرار می گیرند.)


فلیپ فلاپ ها انواع متفاوتی دارند که این انواع مختلف عبارتند از:

  • فلیپ فلاپ SR
  • فلیپ فلاپ JK
  • فلیپ فلاپ T
  • فلیپ فلاپ D 

فلیپ فلاپ SR

فلیپ فلاپ SR یک المان فیزیکی است که می تواند به عنوان یک عنصر تاخیر دهنده به کار گرفته شود. این المان فیزیکی دارای دو ورودی به نام های R و S می باشد و دو خروجی دارد که یکی متمم دیگری است.
طرز کار این فلیپ فلاپ در جدول صحت به این شکل است که وقتی عملکرد مدار را بررسی می کنیم اگر S=1 و R=0 باشد، اصطلاحا می گویند مدار set است یعنی خروجی آن 1 شده است. اگر پس از آن S=0 شود، مدار در وضعیت set باقی می ماند ولی اگر R=1 شود اصطلاحا می گویند مدار Reset شده است یعنی خروجی در این لحظه صفر است، و اگر در این لحظه R=0 شود مدار در حالت Reset باقی می ماند. بنابراین R=0 و S=0 در خروجی نشان می دهد که کدامیک از S یا R آخرین بار برابر 1 بوده است. یعنی مدار آخرین وضعیت غیر صفر ورودی را به خاطر سپرده است. مطابق جدول کارنو اگر R و S همزمان در حالت 1 قرار گیرند مدار در حالت نامشخص خواهد بود. به این خاطر مدارهای دارای فلیپ فلاپ SR را طوری طراحی می کنند که هیچ گاه ورودی های S و R همزمان برابر 1 نشود.
این مورد محدودیتی برای فلیپ فلاپ SR است، که در فلیپ فلاپ JK این نقص برطرف شده است.

flip-flop
مدار داخلی یک فلیپ فلاپ SR با استفاده از گیت NOR


فلیپ فلاپ JK

این عنصر تاخیر دهنده دارای دو ورودی به نام J و K می باشد و دو خروجی آن یکی متمم دیگری است و در آن محدودیت فلیپ فلاپ SR را رفع کرده اند و دو ورودی J=1 و 1=K برای این مدار قابل قبول است.
در این فلیپ فلاپ همانند نوع SR ورودی تمام صفر یعنی J=0 و K=0 تاثیری در حالت خروجی فلیپ فلاپ ندارد و همان حالت قبلی حفظ می شود. ولی اگر J=1 و 1=K باشد یک ورودی قابل قبول است که باعث تغییر حالت در مقدار خروجی می شود.

flip-flop
مدار داخلی یک فلیپ فلاپ JK

 

فلیپ فلاپ T

این عنصر تاخیر دهنده دارای یک ورودی به نام T است و دو خروجی به صورت Y و متمم آن دارد.
چنانچه T=1 شود باعث تغییر در خروجی می شود یعنی اگر خروجی صفر باشد مقدار آن یک می شود و برعکس اگر خروجی یک باشد مقدار آن صفر می شود. این فلیپ فلاپ را به این خاطر فلیپ فلاپ جهشی نیز می نامند.
فلیپ فلاپ T همانند فلیپ فلاپ JK است که دو ورودی آن از یک متغیر مقدار می گیرد یعنی یا هر دو J و K مقدار صفر و یا هر دو مقدار یک دارند. به این ترتیب در مواقعی که یک است، ایجاد جهش می کند.

flip-flop
مدار داخلی یک فلیپ فلاپ T


فلیپ فلاپ D

این مدار تاخیر دهنده شبیه به یک عنصر تاخیر دهنده ساعت عمل می کند به این ترتیب که هر ورودی که به آن می دهیم در یک فاصله زمانی مشخص بعدا همان ورودی را به صورت خروجی دریافت می کنیم.
از این رو این فلیپ فلاپ را فلیپ فلاپ تاخیر (Delay) می نامند. این فلیپ فلاپ یک ورودی به نام D دارد.

flip-flop
مدار داخلی یک فلیپ فلاپ D

منبع : سایت دانشنامه

نوشته شده توسط ابراهیم صحافی زاده در ساعت 20:42 | لینک  | 

۱- جدول درستي عبارات زير را رسم نماييد.

الف) (xy+z)(y+xz)

ب) (A’+B)(B’+C)

ج) y’z+wxy’+wxz’+w’x’z

 

2- عبارات زير را با استفاده از مباني جبر بولي ساده نماييد.

الف) xy+ xy’

ب) (x+y)(x+y’)

ج) xyz+x’y+xyz’

د) (A+B)’(A’+B’)’

 

3- صحت عبارات زير را با استفاده از قواعد جبر بول ساده نماييد.

الف) B'Y'+BY'+B'Y=B'+Y'

ب) B+Y+A=YA'+A+BY'

ج) BY+B'+Y'A'+Y'A=1

د) Z+ZW=ZW+W

ه) B+Y'+A=B'Y'+BY+BY'+YA

 

4- عبارات زير را ساده نماييد.

الف) ZW'+ZWD'

ب) (Z'W'+Z'+W')(Z'W+ZD+WD)

ج) (B+Y)'(B'+Y')

د) B'(YA+YA')+B(AC'+AC)

ه) Z'W+ZWD+ZWD'

 

5- صحت عبارت زير را با استفاده از قوانين جبر بولي و نيز روش جدول درستي ثابت نماييد.

(x'+y')(y'+z')(x+z')=(x'+y')(x+z')

 

6- معكوس عبارات زير را محاسبه نماييد.

الف) DB' + D'B

ب) (B'A'+D)(B+A'+D)(B+A'D')

ج) D'B(A'Y'+AY)+DB'(A'+W')(A+Y)

د) (A+E)B'Y+D

 

7-  براي تابع داده شده F= xy’z+x’y’z+w’xy+wx’y+wxy

الف) جدول درستي رسم نماييد.

ب) مدار آنرا رسم نماييد.

ج) با استفاده از قواعد جبر بول ساده نماييد.

د) جدول درستي تابع ساده شده را رسم نماييد و نشان دهيد كه عملكرد آن مانند تابع F مي باشد.

ه) مدار تابع ساده شده را رسم نماييد. چه تعداد گيت كاهش داده شده است؟

 

8- براي تابع داده شده F = xy’z + x’y’z + xyz

الف) جدول درستي رسم نماييد.

ب) مدار معادل اين تابع را بدون ساده سازي و تنها با استفاده از گيتهاي دو ورودي رسم نماييد.

ج) تابع را با استفاده از قوانين جبر بول ساده نماييد.

د) مدار معادل تابع بدست آمده در بخش ج را تنها با استفاده از گيتهاي دو ورودي رسم نماييد.

د) مدار معادل تابع بدست آمده در بخش ج را تنها با استفاده از گيتهاي دو ورودي NAND رسم نماييد.

 

9- معكوس عبارات زير را بدست آوريد.

الف) xy’+x’y

ب) (AB’+C)D’+E

ج)  (x+y’+z)(x’+z’)(x+y)

 

10 - اعمال منطقي مي‌توانند بر مجموعه اي از بيتها انجام شوند. در اين حالت عمل منطقي بر روي هر دو بيت متناظر جداگانه انجام مي شود. براي مثال براي رشته چهار بيتي  1101 ، نتيجه عمل NOT برابر با 0010 خواهد بود. حال براي دو مقدار 8 بيتي A=10101101 و B=10001110 ، حاصل اعمال منطقي زير را بدست آوريد.

الف) A AND B

ب) A OR B

ج) A XOR B

د) NOT B

 

11- مداري داراي پنج سويچ مي باشد. هر زمان كه مقدار دو سويچ ابتدايي و يا دو سويچ انتهايي مخالف مقدار سويچ وسطي باشد، خروجي اين مدار برابر يك خواهد شد.

الف) جدول درستي اين مدار را رسم كنيد.

ب) تابع اين مدار برابر با حاصلجمع چه مينترمهايي مي باشد.

ج) ساده شده اين مدار را با استفاده از گيتهاي NAND طراحي نماييد.

12- جدول درستي تابع   F = AC xor (BC')' را رسم نماييد و شكل استاندارد آنرا به صورت جمع حاصلضربها بنويسيد.

 

13- تابع زير را به صورت جمع مينترمها و ضرب ماكسترمها بنويسيد.

F(A,B,C,D)=B’D+A’D+BD

 

۱۴- توابع زير را به شكل فرم متعارف حاصلجمع مينترمها بنويسيد.

الف)F=xy+x’y’z’+x’yz’

ب) F=x’y’+yz+x’yz’

ج) F=A’B+BC’+B’C’

۱۵- 

16- توابع داده شده در سوال قبل را به شكل متعارف حاصلضرب ماكسترمها بنويسيد.

 

17- توابع داده شده را به شكل متعارف حاصلضرب ماكسترمها بنويسيد.

الف) (X+Y')(X'+W)(W+Y)

ب) (A+B+D)(A+C'+D')(A'+B')

ج) (B'A'+D)(B+A'+D)(B+A'D')

 

18- عبارات زير را به صورت جمع حاصلضربها تبديل نماييد.

الف) (D+B'A+A'Y)(B+EF)

ب) (D'+B'A)(B+A'D')

ج) (B'+A')D'(D'+B)+D

 

23- براي تابع داده شده f(A, B, C, D) = m(0, 3, 4, 7, 9, 11, 12, 13)

الف) عبارت بولي برابر با شكل متعارف مينترمي اين تابع را بنويسيد.

ب) اين تابع را به شكل متعارفي ماكسترم بنويسيد.

ج) اين تابع را به صورت استاندارد حاصلجمع حاصلضربها ساده نماييد.

 

24- براي تابع داده شده f(X, Y, Z) = XY + YZ + X'Z

الف) اين تابع را به صورت متعارف مينترمي تبديل نماييد.

ب) اين تابع را به صورت متعارف ماكسترمي تبديل نماييد.

 

25- عبارت بولي زير را در يك جدول سه متغيره كارنو نمايش دهيد.

 الف) F (x,y,z) = Σ(0,2,6,7)

ب) F(A,B,C) = Σ (0,2,3,4,6)

 

26-  عبارات بولي زير را در يك جدول چهار متغيره كارنو نمايش دهيد..

الف) w’z + xz + x’y + wx’z

ب) wxy + yz + xy’z + x’y

 منبع وب سایت مجید عسکر زاده

نوشته شده توسط ابراهیم صحافی زاده در ساعت 10:36 | لینک  | 

1. عبارت بولي زير را با استفاده از نقشه سه متغيره ساده كنيد.

الف) F (x,y,z) = Σ(0,2,6,7)

ب) F(A,B,C) = Σ (0,2,3,4,6)

 

2-  توابع زير را با استفاده از جدول كارنو سه متغيره ساده نماييد.

الف)  F (x,y,z) = Σ(1,2,5,7)

ب)  F(A,B,C) = Σ (1,2,4,5,7)

 

3- عبارات بولي زير را با استفاده جدول چهار متغيره ساده نماييد.

الف) w’z + xz + x’y + wx’z

ب) wxy + yz + xy’z + x’y

 

4- توابع F داده شده را ساده نماييد. حالات بي اهميت با d مشخص شده اند.

الف) F(x,y,z) = Σ (0,1,2,4,5), d(x,y,z) = Σ (3,6,7)

ب) F(A,B,C,D) = Σ (1,3,5,7,9,15), d(A,B,C,D) = Σ (4,6,12,13)

 

5-  تابع زير را با توجه به حالات بي اهميت آنها، پس از ساده سازي، تنها با استفاده از دو گيت OR و يك گيت AND طراحي نماييد.

     F(A,B,C,D) = Σ (0,1,9,11)

d(A,B,C,D) = Σ (2,8,10,14,15)

 

6-  با استفاده از جدول كارنو، تابع زير را ساده و مدار آنرا رسم نماييد.

F(A, B, C, D) = C’D’+A’C’+AC’D

7-  با استفاده از جدول كارنو توابع زير را ساده نماييد.

الف) F=xy+x’y’z’+x’yz’

ب) F=x’y’+yz+x’yz’

ج) F=A’B+BC’+B’C’

 

8-  با استفاده از جدول كارنو توابع زير را ساده نماييد.

الف) F(A,B,C,D)=A’B’C’D’+AC’D’+B’CD’+A’BCD+BC’D

ب) F(w,x,y,z)=x’z+w’xy’+w(x’y+xy’)

ج) F(w,x,y,z)=w’z+xz+x’y+wx’z

د) F(A,B,C,D)=B’D+A’BC’+AB’C+ABC’

ه) F(A,B,C,D)=AB’C+B’C’D’+BCD+ACD’+A’B’C+A’BC’D

و) F(w,x,y,z)=wxy+yz+xy’z+x’y

 

 

 

13-                     توابع زير را با توجه به حالات بي اهميت آنها با استفاده از جدول كارنو به صورت SOP ساده نماييد. مقدار تابع بدست آمده را در هر يك از حالات بي اهميت مشخص نماييد.

الف)  F(x,y,z) = Σ (0,1,2,4,5), d(x,y,z) = Σ (3,6,7)

ب)  F(A,B,C,D) = Σ (1,3,5,7,9,15), d(A,B,C,D) = Σ (4,6,12,13)

 

 منبع وب سایت مجید عسکر زاده

نوشته شده توسط ابراهیم صحافی زاده در ساعت 10:34 | لینک  | 

1-به مجموعه اي از دستورالعمل ها كه با ترتيب معين و مشخص اجرا شده و موجب حل مساله اي گردند . . . . . مي گويند.

الف)فلوچارت                     ب)جملات شرطي                     ج)الگوريتم                  د)هيچكدام

2-الگوريتم زير چه عملي را انجام مي دهد؟

1-شروع

2-I=10

3-I  را چاپ كن

4-I=I+2

5-اگر I<=98 است ، سپس به مرحله 3 برو

6-پايان

الف)چاپ اعداد زوج دو رقمي                                     ب)چاپ اعداد فرد دو رقمي

ج)چاپ اعدادي كه بر 3 بخش پذيرند                            د)هيچكدام

3-در الگوريتم زير به جاي خط شماره 4 ،كدام گزينه را بايد قرار داد تا مجموع زير را در S ذخيره كند؟

S=1+2+3+…+99

1-شروع

2-S=0

3-I=1

4-؟

5-I=I+2

6-اگر I<=99 است ، سپس به مرحله 4 برو.

7-S را چاپ كن.

8- پايان

الف)S=I                     ب)I=S                       ج)I=S+I                      د)S=S+I

4-كداميك از موارد زير از ويژگيهاي الگوريتم محسوب نمي شود؟

الف)رعايت ترتيب                ب)خاتمه پذير بودن

ج)ارايه جزئيات كافي                       د)ارايه فرمولهاي پيچيده

 

۴-الگوريتم زير چه عملي را انجام مي دهد؟

1-شروع

2-x را دريافت كن

3- اگر x<0 است ، سپس xß-x

4-x  را چاپ كن

5-پايان

الف)محاسبه قدرمطلق x                                          ب)قرينه اعداد مثبت

ج)جزء صحيح x                                                      د)الگوريتم هيچ عملي انجام مي دهد

نوشته شده توسط ابراهیم صحافی زاده در ساعت 9:6 | لینک  | 

1-برنامه ای بنویسید که توابع strcmp و strcat را پیاده سازی کند.

توضیح:

تابع strcmp  به این گونه عمل می کند که با دریافت دو رشته، از کاراکتر اول هر کدام شروع می کند و با هم مقایسه می کند. در صورت رسیدن به اولین اختلاف، تفاوت کاراکتر رشته اول و رشته دوم را بر می گرداند. که اگر صفر باشد یعنی دو رشته با هم مساوی هستند، اگر مثبت باشد رشته اول بزرگتر است در غیر این صورت رشته دوم بزرگتر است. تابع strcat با دریافت دو رشته از ورودی رشته دوم را به انتهای رشته اول می افزاید.

۲- برنامه ای بنویسید که توابع strcpy  و strchr را پیاده سازی کند.

توضیح:

تابع strcpy به این گونه عمل می کند که با دریافت دورشته، رشته دوم را در رشته اول کپی می کند.

تابع strchr با گرفتن یک رشته و یک کاراکتر، کاراکتر را در رشته جستجو می کند، اگر کاراکتر در رشته باشد آدرس اولین وقوع آن در رشته بر گردانده می شود.

3-تابعی بنویسید که تابع  stelen را پیاده سازی کند.

توضیح : تابع strlen با دریاقت یک رشته طول آنرا محاسبه می کند.

۴- -برنامه ای بنویسید که یک رشته حداکثربه طول 12 راکه شامل ارقام مبنای شانزده یعنی بین 0-9 ، a-f و A-F هستند را دریافت کند مقدار دهدهی آنرا چاپ کند.

توضیح:

به عنوان مثال با دریافت "a6B" ، مقدار 2619 را برگرداند.

ملزومات برنامه:

۵-برنامه ا ی بنویسید که رشته ای را از ورودی خوانده، تمام کاراکترهای تکراری را از رشته حذف کند.

توضیح:

به عنوان مثال اگر "this is a test" این را دریافت کرد بعد از اجرای برنامه این خروجی را نمایش دهد."this ae"

۶-برنامه ای بنویسید که مقدار N را از ورودی خوانده و تمام اعداد اول قبل از آنرا  چاپ کند.

توضیح:

اعداد اول اعدادی هستند که فقط به خودشان و یک بخش پذیرند.

نوشته شده توسط ابراهیم صحافی زاده در ساعت 11:58 | لینک  | 

دستورات زير را در نظر بگيريد:

Var y۱,y۲:real;
St۱,st۲ : string;
Y۱:=۳۵۲.۷۶۸
Y۲:=۴۷۶.۳۹۵
Str(y۱:۷:۲,st۱);
Str(y۲:۳:۱,st۲);

با اجراي دستور str اول مقدار ۳۵۲.۷۶۸ به رشته ‘۳۵۲.۷۶۸′ تبديل ميشود و در st۱ قرار ميگيرد و با اجراي دستورstr دوم مقدار ۴۷۶.۳۹۵ به رشته ‘۴۷۶.۳۹۵′تبديل ميشود و در st۲ قرار ميگيرد.
جدا كردن زيررشته اي از رشته:
زيررشته بخشي از رشته است و براي جدا كردن زيررشته از رشته از تابع copy استفاده ميشودتابع copy به صورت زير به كار ميرود.

Copy (source,index,size)
S:=’I am learning pascal ‘;
S۱:=copy(s,۱۵,۶);

دستور copy باعث ميگردد تا با شروع از محل ۱۵ تعداد ۶ كاراكتر از رشته s استخراج شود و در s۱ قرار گيرد. بنابراين محتويات رشته s۱ برابر است با ‘pascal’.
الحاق رشته ها :
منظور از الحاق رشته ها اتصال رشته ها به يكديگر است به عنوان مثال اگرs۱:=’ab’ و s۲:=’cde’ الحاق دو رشته (s۱,s۲) به صورت ‘abcde’ خواهد بود براي الحاق رشته ها از تابع concat استفاده ميشود:
(اسامي رشته ها)concat
دستورات زير را در نظر بگيريد:

S۱:=’pascal’;
S۲:=’is a ;
S۳:=’language’;
S۴:=concat(s۱,s۲,s۳);

با اجراي اين دستور s۳ به انتهاي s۲ متصل ميشود و رشته نتيجه به انتهاي s۱ متصل ميگردد و در نتيجه رشته s۴ عبارت است از’pascal is a language’: . اگر طول رشته حاصل بيش از ۲۵۵ باشد بقيه كاراكترها حذف ميشوند.
جستجوي رشته اي در رشته ديگر:
براي اين كار از تابع pos استفاده ميشود كاربرذ اين تابع به صورت زير است:

Pos(s۱,s۲)

S۱ رشته اي است كه بايد در s۲ وجود داشته باشد محل اولين وقوع آن برگردانده ميشود و گر نه مقدار صفر برگردانده ميشود دستورات زير را در نظر بگيريد:

S۱:=’learning’
S۲:=’I am learning pascal’;
S۳:=’english’
X:=pos(s۱,s۲)
y:=pos(s۳,s۲)

چون رشته s۱ در s۲ وجود دارد دستور pos اول مقدار ۶ را در x قرار ميدهد و معنايش اين است كه رشته ‘learning’ در محل ۶ رشته s۲ وجود ندارد مقدار صفر در y قرار ميگيرد.
محاسبه طول رشته :
براي محاسبه طول رشته از تابع length به صورت زير استفاده ميشود:
(رشته)length
دستورات زير را در نظر بگيريد:

S۱:=’xymn’
X:=length(s۱)

چون طول رشته s۱ برابر ۴ است مقدار x برابر ۴ خواهد بود.
حذف و درج زيررشته:
زير رشته اي را ميتوان از رشته اي حذف كرد و يا زيررشته اي را ميتوان در رشته اي درج كرد براي حذف زير رشته از زيربرنامه ها به صورت زير به كار ميروند:

Delete(source,index,size)
Insert(pattern,destination,index)

در زيربرنامه delete زيررشته اي به طول size با شروع از محل index از رشته source حذف ميشود و در زيربرنامه insert زيررشته pattern با شروع از محل index در رشته destination درج ميشوددستورات زير را در نظر بگيريد:

S۱:=pas***cal
Delete(s۱,۴,۳)
S۲:=’paal’;
S۳:=’sc’;
Insert(s۳,s۲,);

دستور delete باعث ميشود تا با شروع از محل ۴ رشته s۱ حذف شده و رشته s۱ به pascalتبديل شود دستور insert موجب ميشود تا رشته s۳ در s۲ درج شود و در نتيجه رشته s۲ به ‘pascal’ تبديل شود.
مثال : برنامه اي بنويسيد كه يك اسم را از ورودي دريافت و آنرا بر عكس چاپ كند

Readln(name);
For i:=length(name) downto ۱ do
Write (name[i])

مثال : برنامه اي بنويسيد كه كه يك نام را از ورودي دريافت و به ما بگويد كه آيا اين نام با حرف a شروع ميشود يا خير؟

Readln(name);
If name[۱]=’a’ then
Writeln(’ok’)
Else
Writeln(’not ok’);

مثال : برنامه اي بنويسيد كه يك نام را از ورودي دريافت و حروف آنرا يك در ميان چاپ كند.

Readln(name);
For i:=۱ to length(name) do
If I mod ۲ = ۰ then
Writeln(name[i]);

روش ديگر:”

For i:=۱ to int(length(name)/۲) do
Writeln(name[i*۲]);

مثال : برنامه اي بنويسيد كه يك رشته را از ورودي دريافت و متقارن بودن آنرا چك كند.
۱ ۲ ۳ ۴ ۵ ۵ ۴ ۳ ۲ ۱

var
N:string;
Begin
Readln(n);
For i:=۱ to int(length(n)/۲) do
Begin
If n[i] <> n[length(n)-i+۱] then
K:=۰;
End;
If k=۱ then
Writeln (’ok’)
Else
Writeln(’no’);
End.

مثال : برنامه اي بنويسيد كه تعداد حروف a موجود در يك رشته ورودي را بشمارد.

Var st:string;
Begin
Readln(st);
C:=۰;
For i:=۱ to length(st) do
If st[i]=’a’ then ?if st[i] in [’a',’A'] then
C:=c+۱;
Writeln(c)

مثال : برنامه اي بنويسيد كه تعداد اسامي alireza موجود در رشته را بشمارد.

Begin
Readln(st);
C:=۰;
While pos(’alireza’,st) <> ۰ do
Begin
C:=c+۱;
J:=pos(’alireza’,st);
Delete(st,pos(’ali’,st),۳);
End;
Write ( c );
End.

مثال : برنامه اي بنويسيد كه دو رشته را از ورودي دريافت و بعد از كاراكترمساوي كه در رشته اول وجود دارد رشته دوم را چاپ كند.

Readln(st,st۱);
J:=pos(’=',st);
Writeln(copy ((st,۱ j) , st۱, copy (st,j+۱,۱۰۰));

تكليف : برنامه اي بنويسيد كه با دريافت سه حرف و قرار دادن آنها در يك آرايه سه تايي كليه تركيبات ممكن را كه سه حرف تركيباتشان به هم نخورد چاپ كند.
W a x
A x w
W a x
مثال : برنامه اي بنويسيد كه يك رشته را از ورودي دريافت و كليه كلمات موجود در آن را بشمارد.

Readln(st);
S:=۰;
St:=st+’ ‘
While pos(’ ‘,st) <> ۰ do
Begin
S;=s+۱;
Delete(st,۱,pos(’ ‘,st));
While st[۱]=’ ‘do
Delet (st,۱,۱);
End;
End.

تكليف : برنامه اي بنويسيد كه ۱۰۰ رسته را از ورودي دريافت و در يك آرايه به طول ۱۰۰ از نوع string بريزيد و به سؤالات زير جواب دهد.
۱- تعداد كل كلمات
۱- تعداد كل حروف
۲- تعداد حروف صدا دار

ذخيره اطلاعات :
Log file : فايلي است كه تمام تغييرات مربوط به يك محيط را ثبت ميكند
فايلها :
۱- متني text
۲- ركوردي typed
۳-بدون نوع
۴-untyped

معرفي فايلهاي متني :
Var

Text : نام فايل

نسبت دادن فايل :

; (’نام خارجي ,’نام فايل ) assign

مثال :

Assign(f,’c:\a۱.dat.ddd’);

باز كردن جهت خواندن

;( نام فايل)reset

باز كردن جهت نوشتن

; ( نام فايل)rewrite
) ___,نام فايل)readln
) ___,نام فايل)writeln
) نام فايل)close

تا close انجام نشود data ذخيره نميشود .
نكته بسيار مهم : در هر يك از مسائلي كه در مورد فايلها مطرح ميشود مي بايستي به نحوي از يكي از تكنيكهاي نگهداري اطلاعات در حافظه اصلي استفاده نمود اين تكنيكها ممكن است استفاده از متغيرها و آرايه ها و ماتريسها و ودرختهاو…استفاده نمود ولي تنها با دو عمل خواندن و نوشتن به روي فايل كار انجام ميشود
Update : ميخوانيم ولي دوباره ميريزيم سر جاش
Append : بهش يك چيزي اضافه ميكنيم
نكته : عمل rewrite باعث ميگردد چنانچه فايل وجود نداشته باشد ايجاد و چنانچه وجود دارد اطلاعاتش به طور كامل پاك شود.
مثال : برنامه اي بنويسيد كه۱۰۰ اسم را از ورودي دريافت و آنها را در يك فايل به نام a۱.dat))بنويسد.

Var
F:text;a:string;
Begin
Assign(f,’a۱.dat’);
Rewrite(f);
For i:=۱ to ۱۰۰ do
Readln(a);
Writeln(f,a);
End;
Close(f);
End.

مثال : برنامه اي بنويسيد كه فايل a۱.dat را خوانده و به ما بگويد چند بار اسم ali تكرار شده است؟

Var
A:text;
B:string;
Begin
Assign(a,’a۱.dat’);
Reset(a);
Sum:=۰;
For i:=۱ to ۰۰ do
Begin
Readln(a,b);
If b=’ali’ then
Sum:=sum+۱;
End;
Close(a,b);
End;

مثال : برنامه اي بنويسيد كه تعدادي اسم را كه آخرين آنها end است از ورودي دريافت و در يك فايل به نام aa.dat بريزد آنگاه فايل را بسته و قسمتهاي زير را به طور جداگانه انجام دهد.
۱- تعداد حسنها بيستر است يا علي ها
۲- چند اسم وجود دارد كه با حرف z شروع ميشود.

Var
f:text;
Name:string;
Begin
Assign(f,’aa.dat’);
Rewrite(f);
Readln(name);
While name<> ‘end’ do
Begin
Writeln(f,name);
Readln(name);
End;
Close(f);
H:=۱;
A:=۱;
Z:=۱;
Reset(f);
While not eof (f) do
Begin
Readln(f,name);
If name=’ali’ then
A:=a+۱;
If name =’hassan’ then
H:=h+۱;
End;
Close(a);
If h>a then writeln(’h>a’);
If h
If h=a then writeln(’h=a’);
End;
Close(f);
Reset(f);
While not eof (f) do
Begin
Readln(f,name);
If name[i]=’z’ then
Z;=z+۱;
End;
Close(f);
Writeln(’sum of z is :’z);
End.

تكليف : برنامه اي بنويسيد كه تعدادي نام را از ورودي دريافت و در يك فايل بريزد سپس فايل تشكيل شده را باز كرده و از روي اين فايل دو فايل ديگر تشكيل دهيد كه در يكي از آنها اسامي كه بين a تا z قرار گرفته اند ريخته و در فايل دوم كليه اسامي كه از v تا z هستند را بريزد.

Program test;
Var
Name : string;
F,f۱,f۲:text;
Begin
Assign(f,’a.dat’);
Rewrite(f);
Writeln(’enter a name ‘);
Readln(name);
While length(name)>۰ do
Begin
Writeln(f,name);
Writeln(’enter a name’);
Readln(name);
End;
Close(f);
Reset(f);
Assign(f۱,’a۱.dat’);
Assign(f۲,’a۲.dat’);
Rewrite(f۱);
Rewrite(f۲);
While not eof (f) do
begin
Readln(f,name);
Case name[۱] of
‘a’..’u':writeln(f۱,name);
‘v’..’z':writeln(f۲,name);
end;
end;
close(f۲);
close(f۱);
close(f);
end.

تكليف : برنامه اي بنويسيد كه نام دو فايل را از ورودي دريافت و از اطلاعات داخل اين دو فايل فايل سومي تشكيل دهد كه حاصل تركيب دو فايل قبل باشد.

var
h,f,g:text;
a:string;
begin

writeln(’enter first filename’) ;
readln(a);
assign(h,a);
writeln(’enter second filename’) ;
readln(a);
assign(f,a);
reset(h);
reset(f);
assign(g,’out.dat’);
rewrite(g);
while not eof(h) do
begin
readln(h,a);
writeln(g,a);
end;
while not eof(f) do
begin
readln(f,a);
writeln(g,a);
end;
close(f);
close(h);
close(g);
End.

تكليف :برنامه اي بنويسيد كه در ضمن عمل merge دو فايل مرتب شده را با يكديگر تركيب و يك فايل مرتب شده به دست آوريم.

منبع : http://www.webschools.ir/

نوشته شده توسط ابراهیم صحافی زاده در ساعت 21:38 | لینک  | 

جهت دانلود فایل آموزشی رشنال رز کلیک کنید
نوشته شده توسط ابراهیم صحافی زاده در ساعت 10:28 | لینک  | 

براي نوشتن كدهاي آزمايشي اين بخش كارهاي زير را انجام بدهيد:

  1. دلفي را اجرا كنيد.

  2. اگر پروژه جديدي به طور خودكار باز نشد، File|New Project را از منوي دلفي انتخاب كنيد.

  3. Project|Options|Linker را انتخاب كنيد، كادر مكالمه Generate Consol Application را انتخاب كنيد، و سپس OK را به وسيله ماوس انتخاب كنيد. اين كار براي دلفي مشخص مي كند برنامه اي كه ايجاد مي كنيد، يك برنامه پنجره دار نيست، بلكه برنامه اي از نوع «پنجرهDos » است.

  4. View|Project Source را انتخاب كنيد، متن اصلي پروژه در پنجره ويراستار قابل رويت خواهد بود. اگر چه اين متن عموماً ويرايش نمي شود، اما در اين حالت بايد اين متن را با متن خودتان جايگزين كنيد. اين يك روش آسان براي ايجاد يك برنامه است 

  5. زمانيكه برنامه را اجرا مي كنيد، حاصل آن در پنجره خودش ظاهر مي شود. براي بستن پنجره خروجي، Alt+F4 را فشار دهيد، يا x را از گوشه بالايي پنجره خروجي انتخاب كنيد.

  6. نكته اي كه در اينجا وجود دارد. زماني كه متن قديمي را با متن برنامه خود جايگزين مي كنيد، پروژه را ابتدا با نام جديدي ذخيره كنيد، و يا خط Program پروژه را تغيير ندهيد.

كنترل جريان برنامه:

دلفي دو ساختار براي كنترل جريان برنامه دارد كه به تفصيل به آنها مي پردازيم.

دستور If...Then...Else

اين دستور از اساسي ترين دستورات شرطي مي با شد كه اين امكان را به برنامه نويس مي دهد كه پرسشي را مطرح كرده و بر اساس پاسخ آن كار يا عمل درخواستي را انجام دهد. مثالي در اين رابطه:

 

program IfDemo;

uses Forms;

var  UserInput : Integer;

begin

Write('How old are you ? ');

ReadLn(UserInput);

If (UseerInput < 1) or (UserInput > 130) Then

WriteLn('You are not telling the truth.')

Else

WriteLn('Being ', UserInput, 'yers old is great!');

WriteLn('Press Enter to Exit program');

ReadLn {To keep the window from closing until you press Enter}

end {InDemo}

در برنامه فوق عبارت بين If...Then در صورتي كه عدد ورودي توسط كاربر كوچكتر از 1 يا بزركتر از 130 باشد برابرTrue شده در نتيجه كد نوشته شده بين  Then...Else اجرا مي شود. در غير اين صورت عبارت بعد از Else اجرا مي شود. 

درصورتي كه بخواهيم بيش از يك دستور را بين Then...Else و يا بعد ازElse قرار دهيم بايد از يك بلاك استفاده كنيم

بلاك:

مجموعه اي از دستورات كه بين Begin...End واقع مي شوند.

دستور Case...of

همانند دستور If...Then مي باشد ولي با اين تفاوت كه بجاي دو حالت True و False چند حالت را بررسي مي كند. براي تشريح اي ساختار به مثال زير توجه كنيد.

program CaseDemo;

Uses Forms;

var UserIn : Char;

begin

Write('Type in character followed dy the Enter key: ');

ReadLn(UserIn);

Case UserIn of

'a'    :WriteLn('That is a Small a');

'z','Z':WriteLn('That is a small or capital z')

else

WriteLn('That is a character other than an a, z, or Z.')

end;

WriteLn('Press Enter to exit program');

ReadLn {To keep the window from closing until you press Enter}

end {CaseDemo}

در مثال فوق در صورتي كه مقدار بين Case...of برابر با هر يك از ثابتهاي قبل از علامت (:) باشد، دستور يا بلاك دستورات بعد از علامت (:) اجرا مي شود. همچنين، توجه به اين امر كه يك دستور end در پايان به عنوان پايان بخش دستور Case قرار مي گيرد نيز بسيار مهم است. در ضمن قسمت else نيز در اين ساختار اختياري بوده و مي تواند حذف شود. 

منبع : http://www.prdev.com/

نوشته شده توسط ابراهیم صحافی زاده در ساعت 10:5 | لینک  | 

یک آرایه مجموعه ای از متغیر های هم نام است که در آن هر متغیر با یک شماره مشخص می شود.
آرایه های با طول ثابت (
Static Arrays)

مثلا در برنامه ای می خواهیم معدل بیست درس را محاسبه کنیم. یک راه این است که از بیست متغیر با نام های متفاوت استفاده کنیم! اما راه بهتری نیز وجود دارد. از یک آرایه که شامل بیست متغیر است استفاده می کنیم. در متغیرهای آرایه ای، یک نام برای کل مجموعه انتخاب می کنند و هر متغیر را با یک شماره مشخص می کنند. در این مثال متغیر های آرایه با اعداد صفر تا نوزده شماره گذاری می شوند، توسط یک حلقه for می توان اعداد صفر تا نوزده را تولید کرد. به همین سادگی.

برای تعریف کردن یک آرایه باید از الگوی زیر پیروی کنیم:

var x : array[index1, ..., indexN] of baseType;

که در الگوی فوق، x نام متغیر آرایه ای، index1 شماره اولین خانه، indexN شماره آخرین خانه و baseType نوع متغیر آرایه ای می باشد.مثلا:

var nomre : array[0..19] of integer;

دستور فوق بیست متغیر از نوع integer می سازد که اولین متغیر nomre[0] و آخرین متغیر   nomre[19] می باشد. برای دسترسی یافتن به هر کدام از متغیر ها، شماره آن متغیر را داخل یک جفت کروشه در مقابل آن می نویسیم. در مثال زیر معدل بیست عدد را با استفاده از آرایه محاسبه می کنیم:

 procedure DoIt;

var
nomre : array[0..19] of integer;
i : integer;
m : real;
begin
nomre[0] := 15;
nomre[1] := 20;
.
.
.
nomre[19] := 19;

m := 0;
for i := 0 to 19 do
m := m + nomre[i];
m := m / 20;
Edit1.Text := FloatToStr(m);
end;

می توانید در صورت نیاز، متغیر های آرایه را با شماره های دیگری شماره گذاری کنید. مثلا:

var x : array[12..46] of string;

دستور فوق، 35 متغیر با نام x ایجاد می کند که با شماره های 12، 13، ... 46 مشخص می شوند.

آرایه های دو بعدی: یک صفحه شطرنجی را در نظر بگیرید که هر خانه آن را می توان با دو عدد طول و عرض شماره گذاری کرد. به همین ترتیب می توان در دلفی نیز یک جدول دو بعدی داشت. برای در مثال زیر یک آرایه دو بعدی تعریف می شود که 10 در 50 می باشد. یعنی به تعدد یک جدول 10 در 50 متغیر دارد.

var s : array[1..10, 1..50] of integer;

در مثال زیر یک آرایه دو بعدی 10 در 10 تعریف می کنیم و هر کدام از خانه های آرایه را با عدد مربوطه جدول ضرب پر می کنیم:

var jadval : array[1..10, 1..10] of integer;
var i, j : integer;
begin
for i := 1 to 10 do
for j := 1 to 10 do
jadval[i, j] := i * j;

for i := 1 to 10 do
for j := 1 to 10 do
form1.Canvas.TextOut(i*20, j*20, inttostr(jadval[i, j]));
end;

آرایه های دو بعدی را به صورت دیگری نیز می توان تعریف نمود، مثلا دستور زیر آرایه دو بعدی آرایه jadval در مثال بالا تعریف می کند:

var jadval : array[1..10] of array[1..10] of integer;

با کمی دقت می توان منطق ساده این دستور را درک کرد!

چند نکته در مورد آرایه های با طول ثابت:

• اگر آرایه های a و b از یک نوع باشند، دستور b := a متغیر های متناظر a را در b کپی می کند.
• طول آرایه های استاتیک را نمی توان تغییر داد.
• می توان خانه های آرایه را با کاراکتر نیز مشخص نمود! مثال:

var x : array['a'..'e'] of integer;
begin
x['a'] := 1;
x['b'] := 2;
x['c'] := x['a'] + x['b']
end;

منبع www.prdev.com

 

نوشته شده توسط ابراهیم صحافی زاده در ساعت 10:44 | لینک  |