توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : آموزشی آموزش پاسکال
آبجی
27th October 2009, 01:18 PM
اجزاء تشکيل دهنده کامپيوتر عبارتند از :
1.سخت افزار
2.نرم افزار
• سخت افزار
خروجی<============== پردازش<===============ورودی
كامپيوترهاي امروزي معمولاً از قطعات زير تشكيل ميشوند:
دستگاههاي ورودي
حافظههاي جانبي
حافظههاي اصلي
واحد پردازشگر مركزي
دستگاههاي خروجي
• نرم افزار:
نرمافزار يكي از بخشهاي اساسي كامپيوتر به شمار ميآيد، كه در واقع سختافزار را بكار ميگيرد. بعبارت ديگر رابط بين كاربر و سختافزار را نرمافزار مينامند. نرمافزار در حقيقت روح و جان يك كامپيوتر است، كه به سختافزار هويت ميبخشد.
زبانهاي برنامهنويسي :
نرمافزارها توسط زبانهاي برنامهنويسي نوشته ميشوند. زبانهاي برنامهنويسي، يك سيستم ارتباطي هستند كه توسط آنها ميتوان دستورات لازم را به ماشين انتقال داد.
هرزبان برنامهنويسي به مجموعهأي از علايم، قواعد و دستورالعملها گفته ميشود كه امكان ارتباط با كامپيوتر را جهت بيان كاري يا حل مسئلهاي فراهم ميكند.
در حالت كلي زبانهاي برنامهنويسي را به سه دسته زير تقسيمبندي ميكنند:
1.زبانهاي سطح بالا
2.زبانهاي سطح پايين
3.زبانهاي سطح مياني
زبان Pascal
این زبان توسط پروفسور نيكلاس ويژت در انستيتو فني فدرال سوئيس در در اواخر سال 1960 و اوايل 1970 مطرح گرديد و به افتخار بلز پاسكال دانشمند فرانسوي قرن هفدهم ميلادي، پاسكال نامگذاري شده است.پاسکال یک زبان سطح بالا است.
اجزاي تشکيلدهنده يک برنامه:
1.کلمات ذخيرهشده ( Reserved Words )
2.شناسهها ( identifier )
کلمات ذخيرهشده ( Reserved Words )
کلمات ذخيره شده، کلماتي هستند که مترجم زبان آنها را ميشناسد و معناي خاصي براي زبان دارند. مترجم زبان به محض مشاهده اين کلمات اعمال خاصي را انجام ميدهد. هر زبان داراي تعداد مشخصي کلمات ذخيره شده ميباشد و اين تعداد قابل افزايش توسط برنامهنويس نيست.
بعضی از کلمات ذخیره شده در پاسکال عبارت است از :
And,file,goto,var, while,unit,until,program,procedure,..
شناسهها ( identifier )
شناسه در پاسکال براي نامگذاري ثابتها، تايپها، پروسيجروها، توابع، ميدانهاي يک رکورد، برنامه و همچنين يونيت مورد استفاده قرار ميگيرد.
در حالت کلي دو نوع شناسه وجود دارد :
1.id هاي استاندارد: اين نوع id ها از قبل در زبان پاسکال تعريف شدهاند و در برنامهها، معناي خاصي دارند .
2.Id هاي غيراستاندارد: اين نوع id ها بوسيله کاربر بطور مجزا تعريف ميشوند و اصطلاحاً به آنها userdefined گفته ميشود.
ساختار برنامه در زبان پاسکال :
اجزاء اصلي يک برنامه به زبان پاسکال بصورت زير ميباشد:
1. عنوان برنامه
2.قسمت تعاريف برنامه
3.قسمت دستور العملها
قسمت تعاريف برنامه:
1.اعلان ثابتها Constant Declaration
2.اعلان انواع Type Declaration
3.اعلان متغيرها Declaration Variable
4.اعلان برچسبها Declaration Label
درحالت کلي ميتوان شکل يک برنامه در زبان پاسکال را بصورت زير بيان کرد:
1.استفاده از کلمه ذخيره شده Program و اسم برنامه ( که ميتواند بکار برده نشود )
2.قسمت تعاريف شناسهها
3.بلوک اصلي برنامه که با Begin شروع و به End همراه نقطه ( . ) ختم ميشود.
4.هر دستور در پاسکال به ( ; ) ختم ميشود.
فرم کلی برنامه در پاسکال:
; نام program
; تعریف ثابت Const
; تعریف متغیرVar
;تعریف نوع Type
BRGIN
; دستورات برنامه
END; متغيرها (Variables)
متغير، محلي از حافظه است که داراي نوع و اسم ميباشد. نوع متغير همان نوع داده بوده و اسم متغير از قواعد اسمگذاري شناسه تبعيت ميکند.
انواع دادهها ( data types ):
1.دادههاي ساده (Simple data type)
.2دادههاي ساختيافته ( ( Structural Data Types
3. دادههاي اشارهگر (Pointer Data Types)
آبجی
27th October 2009, 01:19 PM
دادههاي ساده (Simple data type)
1.انواع صحیح شامل اعداد بدون ممیز است متداولترین انواع صحیح را در شكل زير ببينيد:
2.اعداد اعشاری: شامل اعداد با نقطه ممیز است متداولترین آن در شكل زير ببينيد::
3.:Char این نوع داده که به آن کاراکتری می گویند حداکثر می تواند یک کاراکتر را در خود نگه دارد و اندازه آن یک بایت از حافظه را اشغال می کند.
4.نوع String:
این نوع داده برای ذخیره رشته ها مثل اسامی افراد به کار می رود حداکثر طول آن 255 کاراکتر است در ضمن برای هر رشته باید طول آن را مشخص کنیم در غیر این صورت طول آن را به طور پیش فرض 80 در نظر می گیرد.
5.نوع Boolean:
این نوع داده که داده های بولی خوانده می شود مقادیر این نوع داده های بولی دارای دو ارزش درستی یا نادرستی است که در پاسکال با 0و1 نمایش می دهند 0 به معنای نادرستی و1 به معنای درستی است.
2.انواع دادههاي ساختيافته عبارتند از:
• آرايهها
• رکوردها
• مجموعهها
• فايلها
3. دادههاي اشارهگر (Pointer Data Types)
ممکن است در نوشتن برنامه، نوع دادههاي بحث شده در بالا به دلايل مختلف از جمله مشخص نبودن تعداد وروديهاي مسئله و غيره مشخص نباشد لذا نياز به متغيرهايي هست که بتوانند آدرس متغيرهاي ديگر را در خود نگه دارند، اين نوع دادهها، دادههاي اشارهگر نام دارند.
• در پاسکال براي معرفي متغيرها بصورت زير عمل ميکنند:
Var
; نوع متغير: اسم متغير
• براي تعريف يک ثابت بصورت زيرعمل ميکنيم :
; مقدار ثابت = اسم متغير Const
شکل کلي يک دستور جايگزيني در پاسکال بصورت زير است:
عبارت محاسباتي = : اسم شناسه
عبارت قياسي يا
عبارت منطقي
افزودن توضيحات به برنامه (Comment):
افزودن مطلب توضيحي در درون خود برنامه عملي پسنديده و مطلوب است بدين ترتيب که بعد از مدتي امکان فراموشي کار با برنامه از بين ميرود و در کل ميتوان گفت که نوشتن توضيحات در برنامه خوانايي آن را بالا ميبرد.
در پاسکال توضيحات بين دو آکولاد محصور ميشوند.
{ This is comment }
{ This program written by A. Pascal }
قبل از این که شروع به نوشتن یک برنامه کنیم ابتدا باید دستورات ورودی و خروجی را در پاسکال یاد بگیریم :
خروجي با دستور Write :
اين دستور براي نوشتن اطلاعات در خروجي بکار ميرود. اطلاعات خروجي ميتوانند ثابتهاي عددي، مقادير متغيرها، عبارات و غيره باشند. شکل دستور در حالت کلي بصورت زير است:
(....... و متغير2 و متغير1 )write
يا (....... و' عبارت 2' و'عبارت1 ')
يا (....... و ثابت 2 وثابت 1 )
مثال:
Var
A , B: integer ;
Ch: char ;
R: Real ;
Begin
A: = 10 ; B: = 15 ;
Ch: = ' T ' ;
R: = 12.25
Write ( ' A = ' , A, ' B = ' , B ) ;
Write ( ' ch = ' , ch , ' R= ' , R ) ;
Write ( ' sum of A and B = ' , A + B ) ;
End. { end of program}
بعد از اجراي برنامه فوق در خروجي خواهيم داشت:
A = 10 B = 15 ch = TR = 1.2250000000 e + 01 sum of A and
B = 25
خروجي با دستور Writeln :
اين دستور همانند دستور Write عمل ميکند با اين تفاوت که بعد از اجرا، کنترل را به ابتداي سطر بعد منتقل ميکند در نتيجه موجب چاپ دادههاي بعدي در ابتداي سطر بعد ميشود.
خروجي برنامه بالا بصورت زير ميباشد:
A = 10 B = 15
Ch = T R = 1.225000000 e + 01
Sum of A and B = 25
خروجي فرمتبندي شده:
اگر بخواهيم اطلاعات با فاصله هاي مشخص يا در مکان مشخصي در صفحه نمايش قرار گيرند، بايد فرمت چاپ را در دستورات بيان شده مشخص کنيم.
آبجی
27th October 2009, 01:19 PM
طريقه تعيين فرمت چاپ براي اعداد صحيح :
( طول ميدان: داده صحيح ) Writeln يا Write
در تعريف طول ميدان براي متغيرها يا دادههايي از نوع صحيح به نکات زير توجه کنيد:
1.اگر طول ميدان از طول ارقام عدد صحيح بيشتر تعريف شود، عدد در منتهياليه سمت راست ميدان نوشته ميشود.
.2اگر طول ميدان از طول ارقام عدد صحيح کمتر تعريف شود، طول ميدان به اندازه تعداد ارقام در نظر گرفته ميشود و طول ميدان تعريف شده بياثر خواهد بود.
مثال:
X:= 3200 ;
A: = 12 ;
B: = 217 ;
Write ( X:3 , A:5 , B:5 ) ;
خروجی: 217 دوتا فاصله 12 سه تافاصله 3200
طول ميدان اعداد اعشاري :
براي نمايش اعداد اعشاري بصورت دلخواه، مي توان با تعريف طول ميدان و تعداد ارقام اعشاري، عدد مزبور را نمايش داد.
: در حالت کلي طول ميدان را ميتوان به صورت زير تعريف کرد:
( تعداد ارقام بعد از مميز: طول ميدان: متغير اعشاري) Writeln يا Write
در تعريف فرمت براي اعداد اعشاري به نکات زير بايد توجه کرد:
.1 اگر طول ميدان بزرگتر از تعداد ارقام عدد ذکر شود، عدد در منتهي اليه سمت راست ميدان چاپ ميشود.
2.اگر فقط طول ميدان ذکر شود، عدد به صورت نماد علمي در طول ميدان مشخص شده
چاپ می شود .از آنجائي که براي نمايش اعداد در نماد علمي حداقل 8 محل مورد نياز است، لذا هنگامي که تنها طول ميدان ذکر شده باشد، اگر از 8 رقم کمتر باشد، حداقل 8 رقم در نظر گرفته ميشود.
3.هنگامي که طول ميدان همراه با تعداد ارقام بعد از مميز ذکر شود، اگر طول ميدان کوچکتر از مقدار عدد باشد، پاسکال تنها طول ميدان را به اندازهاي که مورد نياز است تصحيح کرده و آنرا برابر اندازه واقعي که عدد در آن قرار ميگيرد، اصلاح ميکند.
4.اگر تعداد ارقام بعد از مميز زياد باشد و تعداد ارقام بعد از مميز ذکر شده در طول ميدان کمتر از تعداد ارقام اعشاري عدد باشد، تعداد ارقام اعشار مطابق درخواست برنامهنويس نشان داده خواهد شد و رقم آخر اعشار آن نسبت به عدد بعدي گرد ميشود.
طول ميدان کاراکترها و رشتهها :
براي نمايش رشتهها و کاراکترهاي با طول ميدان بصورت زير عمل ميکنيم.
(طول ميدان: متغير يا عبارت رشتهاي يا کاراکتري) Writeln يا Write
در توربو پاسکال، کليه موارد گفته شده در مورد اعداد صحيح براي رشتهها نيز صادق است.
ورودي با Readln , Read
از اين دستورات براي خواندن داده ها و اختصاص آنها به متغيرها استفاده ميشود. در خواندن داده ها به دو موضوع بايد دقت شود:
1- منبع دادهها يعني دستگاه ورودي که از آن دادهها خوانده ميشود.
2- متغيري که دادههاي خوانده شده در آن قرار ميگيرد.
شکل کلي دستور ورودي Read بصورت زير ميباشد:
;( ..... و متغير 2 و متغير 1Read (
اين دستور عمل خواندن دادهها و ذخيره آنها در متغيرها را انجام ميدهد و پس از اتمام عمل خواندن کنترل را براي خواندن و نوشتنهاي بعدي. در همان خط نگه ميدارد
شکل کلي دستور ورودي ReadLN بصورت زير ميباشد:
;( ..... و متغير 2 و متغير 1ReadLN (
اين دستور عمل خواندن دادهها و ذخيره آنها در متغيرها را انجام ميدهد و پس از اتمام عمل خواندن کنترل را براي خواندن و نوشتنهاي بعدي به خط بعد می رود.
تا به ما قادر شدیم که یک برنامه کامل را بنویسیم حال چند مثال را حل می کنیم:
1.برنامه ای بنویسید که محتویات دو عدد را عوض کند؟
program Example_1 ( input , output ) ;
Var
first , second , temp: integer Begin
Writeln ;
Writeln ( 'Please Enter two numbers ' ) ;
Readln ( first , second ) ;
Temp: = first ;
First: = second ;
Second: = temp ;
Write ( ' first = ' , first , ' second = ': 10 , second ) ;
End. { end of program }
خروجي برنامه بالا به صورت زير ميباشد:
Please Enter two numbers
15 17
First = 17 second = 15
2.برنامه ای بنویسید که حقوق پایه و تعداد فرزندان یک کارگر را از ورودی گرفته و مبلغ حقوق وی را بر اساس فرمول زیر محاسبه کند؟
10* تعداد فرزندان+ حقوق پایه= حقوق کل
program TEST( input , output ) ;
Var
CHILD:BYTE
:LONGINT SALARY
: integer ; KOL
Begin
Writeln ; Writeln ( 'Please Enter salary an number of child);
Readln ( salary, child ) ;
Kol:=salary+child*10;
Writeln ('kol is',kol);
End. { end of program }
آبجی
27th October 2009, 01:20 PM
عملگر ها:
انواع عملگر ها عبارت است از:
1.عملگرهای رابطه ای
2.عملگرهای منطقی
3.عملگر های محاسباتی
عملگرهای رابطه ای:
آن دسته از عبارات منطقی که عمل مقایسه را انجام می دهند یکی از اشکال زیر را دارند:
Variable relational-operator Variable
Variable relational-operator constant
عملگر های رابطه ای به شرح زیرند:
> کوچکتر
< بزرگتر
<= بزرگتر مساوی
= > کوچکتر مساوی
<> نامساوی
= مساوی
نکته: دو عملوند یا داده ای که با هم مقایسه می شوند اغلب یا دو متغیر هستند یا یک متغیر و یک ثابت هستند. نوع داده ی عملوند های یک عملگر رابطه ای باید یکسان باشد.
عملگرهای منطقی:
با استفاده از عملگر های منطقی not , or , and می توان عبارات منطقی پیچیده تری ایجاد نمود .
مثال :
(x < y ) or (y > 5)
متغیر های منطقی در واقع عبارات منطقی هستند . بنابر این از آنها می توان به عنوان عملگر های منطقی استفاده نمود .
مثال
:(X and (not y
جداول درستی :
عملگر Andو OR:
عملوند2 OR عملوند 1 عملوند2 and عملوند 1
عملوند2
عملوند 1
True True
True
true
True false
False
True
False True
true
false
False False
False
False
عملگر Not:
عملوند 1 not
عملوند 1
false
true
True
false
تقدم عملگرها ترتیب ارزیابی را مشخص می کند.جدول تقدم عملگرها عبارتند از :
عملگر
Not
* / div mod and
+ - or
< <= = <> >= >
دستورات کنترلی:
1.دستور IF:
در پاسکال یک ساختار انتخابی ابتدایی شامل دستور IF است که در دستور همراه یک عبارت منطقی قرار می گیرد .دستور IF مشخص می کند که در یک حالت خاص ، کدام مجموعه از دستورات باید اجرا شوند.
دستور if یک انتخابی:
If condition then
Statement-
دستور if دو انتخابی:
If condition then
Statement1
Else Statement2
مثال: برنامه ای بنویسید که تعداد فرزندان و حقوق پایه و رتبه یک کارگر را از ورودی دریافت کرده و حقوق کلی او را بر اساس فرمول زیر حساب کند؟
کسریها - مزایا + بیمه = حقوق کل
5*رتبه+1000* تعداد فرزندان =مزایا
مالیات+بیمه=کسریها
بیشتر
کمتر یا مساوی 2
تعداد فرزند
تعداد فرزندان
1000
بیمه
هر چیزی دیگر
0تا 20
رتبه
حقوق پایه
حقوق پایه*100/10
مالیات
Program salary_kol;
uses wincrt;
Var
Salary:longint;
kasry,bimeh,mazaya,kol,net:real;
Num,grade:integer;
Begin
Writeln('Enter salary and grade and number of child');
Readln(salary,grade,num);
If num<=2 then
Bimeh:=100
Else
Bimeh:=num*500;
If (grade>0) and (grade<=20) then
begin
Net:=20/100*salary;
Mazaya:=num*1000+grade*50 ;
Kasry:=bimeh+net;
Kol:= salary+mazaya-kasry;
End
Else
If (grade>20)then
begin
Net:=20/100*salary;
Mazaya:=num*1000+grade*50 ;
Kasry:=bimeh+net;
Kol:= salary+mazaya-kasry;
End;
Writeln('salary kol is:',kol);
Readln;
End.
دستور case:
برای انتخاب یک حالت از چندین گزینه ، در پاسکال علاوه بر دستور if ،دستور دیگری به نام case وجود دارد. Case میتواند تعدادی شرط را بگیرد و انتخاب کند.
مقادیری را که دستور case می پذیردORDINAL است .مقادیری که دارای ORDINAL هستند دارای ترکیب نیستند و همچنین قابل شمارش هستند مثل :integer,character,byte,boolean,longint,…پسstr ing,real,… نمی توانند ORDINAL باشند.دستور case دارای begin نمی باشد.
Case selector of
Label : statement ;
Label : statement ;
.
.
.
.
.
label : statement
end [case]
مثال:
case N of
1,2 : begin
write (‘1,2,’) ;
writeln( ‘buckle my shoe’)
end ; {1,2}
3 , 4 :writeln (‘ 3,4 , shut the door ‘) ;
5 , 6 :writeln (‘ 5 , 6 , oick up sticks’)
end {case}
عبارت otherwise یا else برای دستور :case
چنانچه انتخاب کننده case یک مقدار غیر قابل انتظار داشته باشد می توان از این عبارت برای نمایش پیغام خطا یا عمل تصحیح استفاده نمود.در دستور case بعد، در صورتی که مقدار غیر منتظره ای در DayNumber ذخیره شود، عبارت otherwise پیغام خطای invalid day number را نمایش می دهد.
{compute gross pay for a particular day }
case DayNumber of
1, 7 : Gross := Hours * 1.5 * dailyRate ;
2, 3 , 4 , 5 , 6 : Gross := Hours * DailyRate ;
otherwise
writeln (‘ invalid day number . ‘)
end {case}
مثال:برنامه ای بنویسید که دو عدد را از ورودی دریافت کرده وچنانچه عدد اول در بازه 0 تا 5 بود توان دوم عدد دوم را چاپ کند اگر 68 بود ضرب آن دو عدد را نمایش دهد در غیر اینصورت مقادیر مجاز را چاپ کند؟
Program case_of;
Uses wincrt;
Var a,b:integer;
Begin
Writeln('enter tow number');
Readln(a,b);
Case a of
0..5:Writeln('sqrt(b):',b*b);
68:writeln('a*b:',a*b)
Else
writeln('Enter 0..5 or 68');
End;{case}
Readln;
End.
آبجی
27th October 2009, 01:21 PM
حلقه ها:
1.حلقه FOR:
حلقه for برای تعداد تکرار 0 یا بیشتر و در ضمن برای تعداد تکرار معین به کار می رود .
شکل کلی دستور for به صورت زیر است:
Do مقدار نهایی To} مقدار شروع =: متغیرfor
Downto
To زمانی به کار میرود که مقدار اولیه از مقدار نهایی کمتر باشد.
downTo زمانی به کار میرود که مقدار اولیه از مقدار نهایی بیشتر باشد.
مثال:برنامه ای بنویسید که مجموع مضارب 5 بین 0 تا 100 را حساب کند؟
Program zarb;
Uses wincrt;
Var I,sum:integer;
Begin
Sum:=0;
For i:=1 to 20 do
Begin
Sum:=sum+i*5;
End;
Writeln('sum is:',sum);
End.
مثال:برنامه ای بنویسید که تعداد مضارب 5و7 را در بازه [231,846] چاپ کند؟
Program number;
Uses wincrt;
Var I,s,k:integer;
Begin
S:=0;
K:=0;
For i:=846 downto 231 do
Begin
If I mod 7=0 then
S:=s+1;
If I mod 5=0 then
K:=k+1;
End;
Writeln('7=',s);
Writeln('5=',k);
End.
حلقه های for می توانند علاوه بر نوع integer ، از انواع دیگر ترتیبی نیز استفاده کنند . در مثال زیر ، از متغییر char استفاده شده است.
مثال :
For nextch := ‘ A’ to ‘Z’ do Write (nextch );
2.حلقه while:
ساده ترین دستور کنترل حلقه دستور While می باشند. دستوراتی که تکرار می شوند بدنه حلقه نام دارند و بعد از کلمهdo قرار می گیرند. بدنه حلقه یک دستور مرکب است که بین begin و end محصور شده است.
حلقه While یک حلقه با تکرار 0 یا بیشتر و تعداد تکرار در آن نامعین است.
شکل آن بصورت زیر است:
Do شرطWhile
begin
دستورات
End;
مثال:برنامه ای بنویسید که تعدادی از اسامی را از ورودی دریافت کند و سپس بگوید اسم 'ali' چند بار تکرار شده است؟(آخرین اسم end باشد)
Program repeat_ali;
Uses wincrt;
Var s:integer;
Name:string;
Begin
S:=0;
Writeln('Enter names ');
Readln(name);
While name<>'end' do
Begin
Readln(name);
If name='ali' then
S:=s+1;
End;
Writeln('ali repeat:',s);
End.
3.حلقه Repeat:
دستور repeat یک حلقه شرطی را مشخص می کند که تا وقتی که شرط آن درست بشود ، حلقه تکرار می گردد (یعنی این حلقه تا زمانی اجرا می شود که شرط آن نا درست باشد و به محض درست بودن شرط حلقه دیگر اجرا نمی شود ).
Repeat
loop-body
Until termination-condition
حلقه شرطی دستور repeat ، یک حلقه repeat – until نامیده می شود. توجه داشته باشید که چون کلمات repeat و until بدنه حلقه را محصور می کنند نیازی به کلمات begin و end نیست . این نوع حلقه حداقل یکبار تکرار می شود.
مثال:
Repeat
write (‘Enter a digit >’);
read (ch)
Until (‘0’ <= ch) and (ch <= ‘9’)
حلقه های لانه ای:
همانند دستور if حلقه ها را می توان درون یک دیگر قرار داد .حلقه های لانه ای شامل یک حلقه خارجی یا بیرونی و یک یا چند حلقه درونی است . هر بار که حلقه بیرونی تکرار می شود حلقه های درونی نیزاجرا می شوند و عبارت کنترل حلقه در آنها مجدد ارزیابی می شود وتمام تکرارهای الزامی انجام می شوند .
مثال:
Program m_n;
Uses wincrt;
Var
I , j : integer ;
Begin
Writeln (‘I’ :12 , ‘j’ :5);
For I:=1 to 3 do
Begin
Writeln (‘outer’ :5,I :7 );
For j:= 1 to I do
Writeln (‘inner’ :7 , I :5 , j:5)
End;
End.
دستورات break,continue:
Break: این دستور در داخل حلقه ها بکار رفته و باعث خروج از داخلی ترین حلقه شده و دستور بعد از آن حلقه اجرا شود.
Continue: این دستور نیز مانند break در درون حلقه ها بکار رفته و باعث می شود کنترل برنامه به ابتدای حلقه باز گردد.
دستورات halt,exit:
Halt پرس و جویی است که باعث خروج کامل از برنامه و بازگشت به سیستم عامل می گردد.
Exit پرس و جویی است که باعث خروج از زیر برنامه می شود و چنانچه در قسمت اصلی برنامه به کار رود مانند halt عمل می کند.
دستور goto
این دستور کنترل را به خط دلخواه می برد نحوه استفاده آن با اینصورت است که از یک برچسب در جلوی آن استفاده می شود کنترل برنامه زمانی که به آن رسید به برچسب مورد نظر پرش می کند.
برچسبها نیز می بایست در ابتدای برنامه تعریف شوند .تعریف آن به صورت زیر است.
; نام برچسبLABEL
تعریفی از پارامتر ها:
پارامترها خطوط ارتباطی بین برنامه اصلی و پیمانه های آن هستند . پارامترها باعث می شوند که توابع و رویه ها روانتر عمل کنند زیرا آنها به یک پیمانه این قابلیت را می دهند که با هر بار فراخوانی ، داده های مختلفی را مورد پردازش قرار دهد. در بخش بعدی خواهید دید که چگونه برنامه نویسان برای ارسال اطلاعات بین برنامه اصلی و پیمانه ها و یا ارسال اطلاعات بین پایانه ها ، از پارامتر استفاده می کنند.
پارامتر های واقعی و صوری:
هر دستور فرا خوانی رویه ، دو قسمت دارد :نام رویه و لیست پا رامترهای واقعی .برای مثال ، رویه Line را در نظر بگیرید که از یک نقطه روی صفحه به نقطه دیگر خطی رسم میکند . دستور فراخوانی آن شامل نام رویه یعنی line و لیست پارامتر های واقعی یا ((x1,y1,x2,y2 می باشد.
Line ( X1 , Y1 , X2 , Y2 )
در هر بار فراخوانی این رویه ،برنامه نویس چهار متغیر یا چهار عدد را که مختصات دو نقطه را نشان می دهند، در آن قرار می دهد. چون با هر بار فراخوانی line، مختصات نقاط می توانند تغییر کنند ، باید آنها را در قسمت تعاریف رویه نشان دهیم . برای اینکار، از نامهای ساختگی که اصطلاحا" به آنها، پارامترهای صوری می گوییم ،استفاده می کنیم.
Procedure Line ( XStart , YStart , XEnd , YEnd : Integer ) ;
رویه line تا وقتی فراخوانی نشود ، نمی داند که چه داده ای دریافت خواهد کرد. برنامه فراخوان،اطلاعات مورد نیاز line را از طریق پارامتر های واقعی به رویه ارسال می کند و هر پارامتر واقعی با پارامتر صوری متناظر با آن جفت می شود .
پارامتر واقعی پارامتر صوری
X1 <-------------------Xstart
Y1 <------------------- Ystart
X2 <---------------------Xend
Y2 <-------------------- Yend
آبجی
27th October 2009, 01:21 PM
ناحیه داده های رویه:
هر بار که رویه ای فراخوانی می شود ،ناحیه ای از حافظه برای ذخیره داده های رویه اختصاص می یابد . ناحیه داده های رویه شامل سلولهایی از حافظه است که برای ذخیره پارامتر های صوری و متغیرهای محلی یا ثابتهایی که در رویه تعریف می شوند ،می باشد. هر گاه که رویه ای پایان می یابد ناحیه داده های مربوط به آن پاک می شود .
انواع پارامتر های صوری:
پارامتر های صوری به دو دسته تقسیم می شوند:
1.پارامتر های مقدار
2.پارامتر های متغیر
پارامتر های مقدار ، اطلاعاتی که به رویه فرستاده می شود را در یافت می کند.
پارامتر متغیر ، محتوی یک پارامتر واقعی را تغییر داده و آن را به عنوان نتیجه حاصل از رویه بر می گر داند.
مثال: رویه ComputerSumAve چهار پارامتر دارد : دو پارامتر برای ورودی (Num1,Num2) و دو پارامتر برای خروجی (Average,Sum) .رویه ComputerSumAve مجموع و میانگین دو عدد را محاسبه می کند ولی آنها را نمایش نمی دهد.
Procedure computesumave (num1, num 2, {input}: real ;
Var sum , Average {output}: real ) ;
begin { computeSumAve }
sum := num1 + num2 ;
average := sum / 2.0
end ;{ ComputeSumAve }
دستور فراخوانی :
ComputerSumAve( x , y , total , Mean )
قواعد تناظر لیست پارامتر ها:
• تناظر میان پارامتر های واقعی و صوری از روی موقعیت آنها در لیست پارامتر ها تعیین می شود.این لیستها باید هم اندازه باشند ولی اسامی پارامتر ها ی واقعی و صوری متناظر می توانند با هم متفاوت باشند.
• در مورد پارامتر های متغیر ، نوع پارامتر های واقعی و صوری باید با یک دیگر یکسان باشند.در مورد پارامترهای مقدار ، نوع داده پارامتر واقعی باید با نوع پارامتر صوری متناظرش سازگار باشد.
• در مورد پارامتر های متغیر ، پارامتر های واقعی باید یک متغیر باشد ولی برای پارامتر های مقدار یک پارامتر واقعی می تواند ، متغیر ، ثابت یا یک عبارت باشد.
زیر برنامه ها:
1.پروسی جر((Procedure:
یک نوع از زیر برنامه ها در پاسکال پروسی جر است که بصورت پردازه، رویه ، روال و غیره نیز ترجمه شده است.
فرم کلی پرو سی جر بصورت زیر است:
;(پارامتر های پروسی جر)نام پروسی جرP rocedure
[ type
Const
Var
Label ]
Begin
دستورات پروسی جر
End;
با یک مثال نحوه صدا زدن رویه ها را شرح می دهیم.
مثال:برنامه ای با پروسی جر بنویسد که طول و عرض مستطیلی را گرفته و محیط آن را حساب کند؟
Program environment;
Uses wincrt ;
Procedure rectangle ( a,b:integer;var k:integer ) ;
Begin
K:=2*( a+b ) ;
End;
Var
X,y,p:integer ;
Begin
Readln( x,y ) ;
Rectangle( x,y,p ) ;
Writeln( p ) ;
End.
تعریف رویه با کلمه کلیدی procedure آغاز می شود بعد از آن یک نام اختیاری که این نام از قواعد نامگذاری متغییرها پیروی می کند آورده می شود. پارامتر های رویه در درون پرانتز ها نوشته می شوند. در رویه بین آرگومان ها سمی کالن(; ) قرار می گیرد ولی هنگام صدا زدن بین آرگو مان ها کاما (, )قرار می گیرد.
رویه میتواند هیچ، یک یا چند خروجی داشته باشد.
نکته:هنگام صدا زدن رویه نمی توان از عبارات محاسباتی، عبارات مقایسه ای، دستور write و یا مقدار دهی به کار برد.
P:=rectangle( x,y,p ) ;
Write( rectangle(x,y,p ) ) ;
.......If rectangle( x,y,p ) >20 then
P:= rectangle(x,y,p )* 2+6 ;
همه عبارات بالا دارای خطای کامپایلری است.
اعلان forward:
در حالت معمولی قبل از صدا زدن یک زیر برنام،آن روال باید در قسمت بالاتر تعریف شود.اگر در یک برنامه یک زیر برنامه قبل از تعریف شدنش صدا زده شود می بایست از کلمه کلیدی forwad استفاده شود تا خطا گرفته نشود.
Procedure add1( i:integer );forward ;
Procedure add2( m:integer ) ;
Begin
Add1( m ) ;
End ;
Procedure add1 ;
Begin
Writeln( i+10 ) ;
End ;
Begin
Add2( 7 ) ;
End.
2.تابع((Function :
توابع مانند رویه ها ، پیمانه های مستقلی هستند . با این تفاوت که رویه ها می توانند هر تعداد خروجی داشته باشند در حالی که توابع فقط یک خروجی دارد. با نوشتن اسم تابع در یک عبارت می توان یک تابع از پیش تعریف شده را فراخوانی کرد.
توابع استاندارد:
نوع داده خروجی آرگومان تابع
با نوع آرگومان یکسان است real یا integer Abs (x)
Real real یا integer Arctan(x)
Real real یا integer Cos(x)
Real real یا integer Exp(x)
Real real یا integer Ln(x)
integer real Round(x)
با نوع آرگومان یکسان است real یا integer Sin(x)
Real real یا integer Sqr(x)
Real real یا integer Sqrt(x)
integer real Trunc(x)
توابع تعریف شده توسط کاربر:
برای تعریف توابع خاص خودمان ، تعریف تابع را بنویسید و آن را در قسمت تعریف برنامه فراخوان قرار دهید. تابع، خروجی خود را توسط پارامترهایش ارائه نمی کند.
1) عنوان تابع با کلمه رزرو شده Function بجای Procedure شروع می شود:
;نوع خروجی:(پارامتر های ورودی)نام تابعFunction
2) تمام پارامترهای تابع باید از نوع پارامتر مقدار باشند.
3) نوع داده نتیجه تابع در انتهای عنوان تابع و بعد از لیست پارامترهای صوری قرار می گیرد.
4) در بدنه تابع، خروجی تابع با نسبت دادن مقدار به نام تابع مشخص می شود.
آخرین داده ای که به نام تابع نسبت داده می شود به عنوان نتیجه تابع
بر می گردد.
نحوه نوشتن تابع:
;نوع خروجی تابع: (پارامتر های تابع)نام تابع function
[ type
Const
Var
Label ]
Begin
دستورات تابع
End ;
فراخوانی تابع:
;(Z : = Exponent ( X , Y
آبجی
27th October 2009, 01:22 PM
توابع بازگشتی:
توابع بازگشتی دارای دو ویژگی اصلی می باشند:
1.خودش را صدا می زند.
2.یک شر برای اتمام فراخوانی ها وجود دارد.
نکته: در پاسکال هم توابع و هم رویه ها را می توان بصورت بازگشتی تعریف نمود.
مثال:برنامه ای بنویسد که یک عدد را از ورودی دریافت کرده و به کمک تابع بازگشتی و غیر بازگشتی فاکتوریل آن را حساب کند؟
Program factorial ;
Uses wincrt ;
Var x:integer ;
Function fact1 ( n:integer ):integer ;
Var I,f:integer ;
Begin
F:=1 ;
For i:=1 to n do
F:=f*I ;
Fact1:=f ;
End;
Function fact2( n:integer ):integer ;
Begin
If n<=1 then
Fact2:=1
Else
=n*fact2( n-1) ;:Fact2
End;
Begin
Readln( x ) ;
Writeln( fact1(x) ) ;
Writeln( fact2(x) ) ;
End .
مثال:تابع بازگشتی بنویسد که a*b را محاسبه کند؟
a+a*(b-1) if b>1
a if b=1
Function multiply( a,b:integer ):integer ;
Begin
If b=1 then
Multiply:=a
Else
Multiply:=a+multiply( a,(b-1) ) ;
End ;
مثال:در برنامه زیر خروجی f(3,6) چند است؟
Function f( m,n:integer ):integer ;
Begin
If (m=1) or(n=0) or(m=n) then
F:=1
Else
F:=f(m-1,n)+f( m-1,n-1 )
End;
خروجی این تابع برابر 4 است.
این هم یک مثال جالب:
برنامه ای بنویسید که رشته ای را به یک تابع فرستاده و معکوس رشته را توسط نام تابع برگرداند.همچنین به کمک پرامتر مرجع حروف کوچک رشته ورودی را تبدیل به حروف بزرگ کرده و رشته معادل را برگرداند؟
Program reverse ;
Uses wincrt ;
Var s,p,t:string ;
Function fstr( s:string;var p:string ):string ;
Var I,len:byte; c:char; t:string ;
Begin
Len:=ord( s[0] ) ;
For i:=1 to len do
Begin
If (s>='a')and(s<='z') then
P:=char(ord( s)-32 ) )
Else
P:=s ;
T:=s[len-i+1] ;
End;{if}
T[0]:=s[0] ;
P[0]:=s[0] ;
Fstr:=t ;
End ;
Begin
Readln(s) ;
T:=fstr( s,p ) ;
Writeln( s,' ',p,' ',t ) ;
End.
زیر برنامه های استاندارد رشته ای:
1.تابع concat:
این تابع برای الحاق رشته ها استفاده می شود.
خروجی Concat( 'ali','reza' ) ; ---àalireza
2.پردازه str:
با این پردازه می توان عددی(صحیح یا اعشاری )را به رشته معادل تبدیل کرد. Str( n:integer;var s:string ) ;
Str( n:real;var s:string ) ;
مثال:
Begin
R:=13 ;
Str(r,a) ;
A:=a+'ali' ;
خروجی Writeln(a ) ; -à 13ali
End.
3.پردازه val:
با این پردازه برعکس str ارزش عددی یک رشته حاوی ارقام بدست می آید.
Val( s:string;var x:integer ) ;
Val( s:string;var x:real ) ;
4.تابع pos:
با این تابع می توان دریافت یک حرف یا یک رشته در چه مکانی از رشته دیگر است.
Poc( sub,s:string ):byte ;
3 <---- Writeln( pos('jid','majid') ) ;
5.تابع copy:
برای بدست آوردن قسمتی از یک رشته از تابع copy استفاده می شود.
Copy( s:string;start,len:integer ):string ;
Writeln( copy('alireza';4,3) ) ; ---à rez
6.تابع upcase:
این تابع یک کاراکتر را از ورودی گرفته و آن را تبدیل به حرف بزرگ می کند.
Upcase (c:char ):char ;
Writeln( upcase('a') ) ;---àA
7.پردازه insert:
این پردازه برای درج رشته ای در داخل رشته دیگر استفاده می شود:
Insert( s1:string;s2:string;index:integer ) ;
S:='hello reza' ;
Insert( 'ali',s,7 ) ;
Writeln( s ) ;
خروجی hello alireza:
Index شماره مکان درج در رشته s2 را مشخص می کند.
8.پردازه delete:
با این پردازه می توان بخشی از یک رشته را حذف کرد.
Delete( var s:string;start,len:integer ) ;
پارامتر len تعداد کاراکتر حذف شده از رشته s و پارامتر start موقعیت حذف را تعیین می کند.
S:='alireza' ;
Delete( s,4,3 ) ; ----àalia
حال یک سری نکات مهم را بیان می کنیم:
نکته 1:هنگام تعریف توابع بین پارامترهای (; ) قرار می گیرد ولی هنگام صدا زدن تابع بین آرگومان ها (, ) قرار می گیرد.
2.تابع ممکن است ورودی نداشته باشد بنابراین از گذاشتن پرانتز باید خودداری کرد. Function example:integer ;
3.نوع برگشتی تابع می تواند از نوع های ساده( real,integer,char ... ) ،رشته و شمارشی باشد. ولی از نوع آرایه،مجموعه وفایل نمی توانند باشد.
4.درون عبارات محاسباتی،دستور write و مقایسه ای می توان آن را صدا زد.
5.رویه ممکن است ورودی و خروجی نداشته باشد در این صورت از پرانتز نباید استفاده کرد.procedure example ;
6.دستورات readln و writeln در واقع رویه های از پیش تعریف شده اند.
7. دستورات INC و DEC در واقع رویه های از پیش تعریف شده،با فرم کلی زیر می باشند:
Procedure inc( var x[;n:logint] ) ;
Procedure dec( var x[;n:logint] ) ;
8. دستورات halt و exit در واقع رویه های از پیش تعریف شده،با فرم کلی زیر می باشند:
:word) ] ; کد خروجیProcedure halt[ (
Procedure exit ;
9.تعداد آرگو مان های فرستاده شده به تابع یا رویه باید برابر باشد، همچنین نوع آرگو مان های متناظر نیز باید یکسان باشد.
10.نام پارامترها کاملا اختیاری است و می تواند همنام آرگو مان ها باشد.
11.درون یک زیر برنامه نمی توان متغیری محلی همنام با پارامتر ها تعریف کرد.در این حالت خطای کامپایلری رخ می دهد.
12.ترکیب const و var غیر مجاز بوده و خطا دارد.
آبجی
27th October 2009, 01:23 PM
حوزه عمل شناسه ها:
در یک برنامه پاسکال ، هر شناسه ، دامنه ای دارد که حوزه عمل آن شناسه نامیده می شود.منظور از دامنه شناسه ، بخشی از برنامه است که شناسه در آن تعریف می شود.یک شناسه تنها توسط دستوری که در حوزه عملش قرار دارد می تواند مورد مراجعه و بازیابی قرار گیرد. شناسه ممکن است محلی یا سراسری باشد.
قانون شماره 1 حوزه عمل : حوزه های محلی یا سراسری
شناسه که در برنامه اصلی تعریف شده دارای حوزه عمل سراسری است و می توان در هر جای برنامه به آن مراجعه کرد.شناسه ای که درون پیمانه تعریف می شود دارای حوزه عمل محلی است و فقط توسط آن پیماته یا هر پیمانه دیگری که آن را تعریف کرده می تواند مورد دستیابی قرار گیرد. بنابر این وقتی رویه ای در برنامه اصلی تعریف می شود ، دارای حوزه عمل سراسری است و لیست پارامترهای پارامترهای صوری آن بخشی از بلاک رویه است و در نتیجه دارای حوزه عمل محلی است.
آرایه:
آرایه یک نوع ساختمان داده است که تعدادی داده هم نوع در آن ذخیره می شوند. با استفاده از آرایه می توانیم برای مجموعه ای از داده ها ، نام یک متغیر ( مثلا Scores ) را بکار بریم. علاوه بر این می توانیم به تک تک عناصر موجود در آرایه مراجعه کنیم.
در پاسکال یک آرایه در محل های پشت سر هم از حافظه اصلی ذخیره می شود. هر عنصر آرایه در یک سلول از حافظه قرار می گیرد. بعضی از اعمال نظیر ارسال کردن آرایه به عنوان پارامتر به یک رویه را می توان انجام داد. همچنین می توان داده های ذخیره شده در آرایه را بازیابی کرده و مثل متغیر های ساده ، آنها را مورد پردازش قرار داد.
تعریف نوع آرایه ها:
شکل استفاده:
Type
Array type = array [ subscript type] of element type ;
مثال:
Type
SmallArray = array [1. . 5] of char ;
85 67 33 95 88
اندیس های آرایه:
برای پردازش داده های ذخیره شده در یک آرایه، باید بتوانیم عناصر آن را بازیابی کنیم. برای انجام چنین کاری باید نام آرایه را همراه با یک اندیس ( که گاهی اوقات شاخص نامیده می شود) به کار بریم. اندیس آرایه که میان یک جفت کروشه قرار می گیرد، عنصر خاصی از آرایه را برای پردازش انتخاب می کند.
مثال:
اگر متغیر X از نوع RealArray باشد :
Type
RealArray = array [1 . . 8] of Real ; { array type declaration }
Var
X : RealArray ; { Allocate storage for array X . }
برای مراجعه به اولین عضو آرایه ، از X[1] (بصورت X اندیس 1 خوانده شود)، برای مراجعه به دومین عنصر از از X[2] و برای مراجعه به هشتمین عنصر از X[8] استفاده می کنیم.
خواندن و نمایش دادن یک آرایه:
داده ها باید بصورت عنصر در داخل آرایه قرار گیرند و در موقع نمایش دادن نیز باید آنها را بصورت عنصر به عنصر چاپ کرد. با توجه به تعاریف :
Const
Maxitems = 8 ;
Type
IndexRange = 1 . . MaxItems ;
RealArray = array [ IndexRange ] of Real ;
Var
X : RealArray ; { array of data }
I : IndexRange ; { loop-control variable }
For I : = 1 to MaxItems do
Read ( X ) ;
مثال:برنامه جدولی از تفاضل ها
Program table;
Uses wincrt;
Const
MaxItems = 8 ; { number of data items }
Type
IndexRange = 1 . . MaxItems ;
RwalArray = array [IndexRange] of Real ;
Var
X : RealArray ; { array of data }
I : IndexRange ; { loop-control variable }
Average , { average value of data }
Sum : Real ; { sum of the data }
Begin { ShowDiff }
{ Enter the data . }
Write ( ‘Enter’ , MaxItems : 1, ‘ numbers> ‘ ) ;
For I : =1 to MaxItems do
Read ( X ) ;
{ Compute the average value . }
Sum : = 0.0 ;
For I := 1 to MaxItems do
Sum := Sum + X[1]; { Add each element to sum. }
Average := Sum / MaxItems ; { Get average value . }
Writeln ( ‘The average value is ‘ , Average : 3 : 1 ) ; Writeln ;
{ Display the difference between each item and the average . }
WriteLn ( ‘ Table of difference between X and average’ ) ;
WriteLn ( ‘I’ :4 , ‘X’ :8 , ‘Difference’ : 14 ) ;
For I := 1 to MaxItems do
WritLn ( I :4, X :8:1, X _ Average :14:1 )
End . { ShowDiff }
اجرای برنامه جدولی از تفاضل ها:
Enter 8 numbers > 16.0 12.0 6.0 8.0 2.5 12.0 14.0 -54.5
The average value is 2.0
Table
I X Difference
1 16.0 14.0
2 12.0 10.0
3 6.0 4.0
4 8.0 6.0
5 2.5 0.5
6 12.0 10.0
7 14.0 12.0
8 -54.5 -56.5
پارامترهای آرایه مقدار یا متغیر:
وقتی آرایه ای بصورت یک پارامتر متغیر به رویه ارسال می شود، پاسگال آدرس اولین عنصر آرایه واقعی را به ناحیه داده های رویه ارسال می کند. از آنجا که عناصر آرایه در سلول های مجاور هم از حافظه ذخیره می شوند، می توان به کل داده های آرایه دستیابی داشت.
رویه مستقیما با آرایه واقعی کار می کند.وقتی آرایه ای بصورت یک پارامتر مقدار به رویه ارسال می شود، هنگام فراخوانی رویه، یک نسخه محلی از آرایه ایجاد می شود. بنابراین آرایه محلی طوری مقدار می گیرد که حاوی همان مقادیری باشد که در ارایه واقعی وجود دارند. رویه با آرایه محلی کار می کند و تغییراتی که در محتویات آرایه محلی اعمال می شود، روی آرایه واقعی تاثیر نمی گذارد.
مقایسه دو آرایه:
Function SameArray (A , B : TestArray ) : Boolean ;
Var
I : Integer ; { array subscript }
Begin
I := 1 ; { Start with first pair . }
{ Test corresponding elements of arrays A and B . }
while (I < MaxSize) and (A = B) do
{ invariant :
1 <= I <= MaxSize and
A = B for all prior values of I
}
I := I + 1 ; { Advance to next pair . }
SamArray := (A) = B) { Define result . }
End ; { SameArray }
رویه برای مرتب کردن عناصر آرایه:
Procedure SelectSort (var Scores {input / output} : ScoreArray ;
ClassLength { input } : Integer) ;
Ver
Fill , { index of element to contaion next smallest score }
IndexofMin: Integer ;
Begin {SelectSort}
For fill := 1 to ClassLength-1 do
Begin
IndexOfMin := FindMin( Scores, Fill, ClassLength ) ;
{ Exchange elements at Fill and IndexofMin . }
if IndexOfMin <> Fill then
Switch ( Scores[IndexOfMin], Scores[Fill] )
End { for Fill }
End ; { SelectSort }
آرایه فشرده:
استفاده از یک آرایه فشرده شده برای یک رشته به پاسکال این امکان را می دهد که در هر سلول حافظه کامپیوتر بیش از یک کاراکتر ذخیره شود. علاوه بر این استفاده از آرایه های فشرده شده باعث می شود که اعمال روی آرایه های فشرده شده برای پردازش رشته به سادگی انجام شود.
آبجی
27th October 2009, 01:23 PM
تعریف آرایه های فشرده:
شکل استفاده :
type string type = packed array [1 . . size] of char ;
مثال:
type string10 = packed array [1 . . 10] of char ;
تذکر :
نوع اندیس برای string type باید از1 شروع شود.
تذکر:
هنگام نمایش یک متغیر رشته ای ، می توان از یک قالب مشخص استفاده کرد.
دستورات :
Write ( ‘Hello’ , FirstName :4 ) ;
writeLn ( ‘ ! Good to see you .’ )
Hello A.C. ! Good to see you .
کاراکتر های یک رشته درست مثل هر متغیر از نوع char می توانند مورد استفاده قرار گیرند.
مثال 1 :
در صورتی که FirstName حاوی رشته ‘A.C. Jones’ باشد،
دستورات
FirstName [1] := ‘D’ ;
FirstName [6] := ‘B ;’
محتویاتFirstName را به ‘D.C. Bones’ تغییر می دهند.
تذکر:
یک عنصر رشته ای برای یک پارامتر متغیر از نوع Char نمی تواند ارسال شود. ولی یک کاراکتر مستقیما می تواند به عنوان عنصری ازیک متغیر رشته ای خوانده شود.
دستور :
Read ( FirstName [1] )
اولین کاراکتر موجود در رشته FirstName را با کاراکتر داده خوانده شده جایگزین می کند.
مثال :
برنامه نوشتن نامه فرم :
Const
StringLength = 40
Type
StringType = packed array [1 . . StringLength] of Char ;
Var
BodyFile , { input – body of letter }
Letter : Text ; { output – completed letter file }
begin { FormLetter }
Reset ( BodyFile ) ;
Rewrite ( Letter ) ;
WriteLn (Output , ‘writing job application letter .’ ) ;
Preamble ( Letter ) ;
WriteBody ( BodyFile, Letter ) ;
WriteLn ( Output, ‘Letter copied to output file .’ )
End . { FormLetter }
آرایه های دو بعدی:
آرایه های دو بعدی متداول ترین آرایه های چند بعدی هستند که معمولا اطلاعات را به شکل جدول ذخیره می کنند. مثلا نقشه صندلی های یک کلاس، آرایه دو بعدی است که در هر محل ان ردیف و شماره صندلی یک دانشجو قرار می گیرد.
آرایه های چند بعدی:
شکل استفاده :
Type
Multidim = array [ subscript1 , subscript2 , . . . , subscriptn ]
Of element type ;
Type
Multidim = array [subscrip1] of array [ subscript2 ] . . .
Of array [subscript n] of element type ;
پردازش آرایه ها:
دو روش برای دستیابی به عناصر یک آرایه یک بعدی داریم:
1.دستیابی تصادفی
2.دستیابی ترتیبی
برای هر یک از آرایه دو بعدی یا یک جدول، سه روش دستیابی داریم:
1.دستیابی تصادفی
2.دستیابی سطر یه سطر
3.دستیابی ستون به ستون
روش دستیابی سطر به سطر یک آرایه:
For row_subscript . . . do . } { Specify the row
For column_subscript . } . . . do { Access each column of row
Process Table { row_subscript , column_subscript }
روش دستیابی ستون به ستون یک آرایه:
For column_subscript . . . do [Specify the column]
.] For row_subscript . . . Do [Access each row of column
Process Table [ row_subscript , column_subscrip]
مقدار اولیه دادن به یک آرایه:
رویه، Initialize به هر عضو از پارامتر آرایه خود یعنی Sales مقدار اولیه Invalue را می دهد. این رویه به عناصر آرایه به روش سطر به سطر دستیابی می کند.
Procedure Initialize (var Sales { output } : SalesArray ;
InValue { input } : Real ; )
var
NextPerson : Pepole ; { Row subscript }
NextQuarter : Quarter ; { Column subscript }
Begin { Initialize }
For NextPerson : = 1 to NumberSalesPeopel do
For NextQuarter := Fall to Summer do
Sales[NextPerson, NextQuarter] := InValue
End ; { Initialize }
آرایه سه بعدی:
پاسکال تعداد ابعاد ممکن برای یک آرایه را محدود نمی کند، ولی بیشتر آرایه های با ابعاد دو و سه متداولتر هستند.
آبجی
27th October 2009, 01:24 PM
حال چند مثال جالب را حل می کنیم:
مثال1:
برنامه ای بنویسید که نمره ریاضی تعدادی از دانشجو را در آرایه ای ذخیره کند.سپس بیشترین و کمترین نمره و محل آن را در آرایه چاپ کند؟
Progam min_max ;
Uses wincrt ;
Var a:array [1..100] of real ;
Max,min:real ;
I, locmax,locmin,n:integer ;
Begin
Write ( 'please enter number of students:' ) ;
Readln ( n ) ;
For i:= 1 to n do
Readln ( a ) ;
Max:= a[0] ; min:= a[0] ;
Locmax:=1 ; locmin:=1 ;
For i:=2 to n do
Begin
If ( a>max ) then
Begin
Max:=a ; locmax:=I ;
End ;
If a
Begin
Min:=a ; locmin:=I ;
End ;
End ;
Writeln ( 'max=',max,'position=' , locmax ) ;
Writeln ( 'min=',min,'position=' , locmin ) ;
End .
مثال2: هشت عدد را خوانده و در آرایه ای ذخیره کنید.سپس به روش حبابی آن را به صورت صعودی مرتب کرده و چاپ کنید؟
Program bubble_sort ;
Uses wincrt ;
Const n:=8 ;
Var
A:array [1..n] of integer ;
I,j,temp:integer ;
Begin
Write ( 'please enter 8 integer numbers:' ) ;
For i:=1 to n do
Readln ( a ) ;
For j:=1 to n-1 do
For i:=1 to n-j do
If a>a then
Begin
Temp:=a ;
A:=a ;
A:=temp ;
End ;
Writeln ( 'sorted numbers:' ) ;
For i:= 1 to n do
Writeln ( 'a[',I,']=',a ) ;
End .
مثال3: هشت عدد را خوانده و در آرایه ای ذخیره کنید.سپس به روش انتخابی آن را به صورت صعودی مرتب کرده و چاپ کنید؟
Program selection_sort ;
Uses wincrt ;
Const n:=8 ;
Var
x:array [1..n] of integer ;
I,j,min,index :integer ;
Begin
Write ( 'please enter 8 integer numbers:' ) ;
For i:=1 to n do
Readln ( a ) ;
For j:=1 to n-1 do
Begin
Min:=x ; index:=I ;
For j:=i+1 to n do
If x[j]
Begin
Min:=x[j] ;
Index:=j ;
End ;
X[index]:=x[I] ;
X[I]:=min ;
End;
Writeln ( 'sorted numbers:' ) ;
For i:= 1 to n do
Writeln ( 'a[',I,']=',a[I] ) ;
End .
مثال 4 :فرض کنید آرایه x با n خانه از قبل مرتب باشد. متغیر k حاوی کلیدی است که می خواهیم دنبال آن بگردیم. متغیر های low,high,mid از نوع صحیح می باشند. تکه برنامه زیر آرایه x را جهت یافتن k جستجو می کند . (جستجوی دودویی)
Low:=1 ; high:=n ;
While low<=high do
Begin
Mid:=( low+high ) div 2 ;
If k
High:=mid-1
Else
If k>x[mid] then
Low:=mid+1
Else
Begin
Write( 'the number',k,'exist in array ' ) ;
Halt ;
End ;
End ;
Write( 'the number',k,'not exist in array ' ) ;
نکته:در روش ججستجوی دودویی ، در بدترین حالت با [ logn ]+1عمل مقایسه می توانیم کلید را پیدا کنیم.
آبجی
27th October 2009, 01:25 PM
فایل های متن ، فایل های داده و فایل های خروجی:
یک فایل متن مجموعه ای از کاراکتر ها است که تحت یک نام روی دیسک ذخیره می شود . می توانید کلیه داده هایی که توسط برنامه مورد پردازش قرار می گیرند را قبل از اجرای برنامه ، در یک فایل متن ذخیره کنید . سپس به برنامه دستور خواندن داده ها را از فایل متن به جای صفحه کلید بدهید .
فایل داده:
یک فایل داده (یا فایل ورودی ) فایلی است که شامل اطلاعات ورودی برنامه است یک فایل داده می تواند از نوع متن دودویی باشد .
مزایای فایل داده ها :
یکی از مزایای فایل های داده این است که می توان آن ها را با استفاده از ویراستار برنامه(یا واژه پرداز)بازیابی کرد و قبل از اینکه فایل ، توسط برنامه پردازش شود خطاهای آن را اصلاح کرد . مزیت دیگر آنها این است که می توانند چندین بار توسط برنامه خوانده شوند .این خاصیت ،اشکال زدایی را آسان می کند. همچنین می توان نتایج برنامه را به جای صفحه کلید در یک متن ،نوشت .
ساختار اطلاعات در یک فایل متن:
یک فایل متن می تواند توسط یک ویراستار ،ایجاد و ذخیره شود هر کاراکتری که تایپ می شود به طور موقت در حافظه اصلی قرار می گیرد و روی صفحه ، نمایش داده می شود . وقتی فایلی ذخیره می کنید ، اطلاعات روی صفحه نمایش ، به صورت رشته ای از کاراکتر ها روی دیسک ذخیره می شوند .
ساختار منطقی یک فایل متن:
از نظر منطقی فایل متن شامل خطوطی از کاراکتر ها است که این خطوط توسط کاراکتر< eoln> از یکدیگر جدا می شوند . با استفاده از یک ویراستار یا یک فرمان سیستم عامل (نظیر فرمان زیر ) می توان یک فایل متن را روی صفحه نمایش مشاهده کرد.
> type filename
خواندن اطلاعات از فایل متن:
می توان از رویه readln برای خواندن داده از یک فایل متن استفاده کرد. برنامه ای در نظر بگیرید که شامل تعریف متغیرهای زیر است :
Var
Salary : real ; { input – a salary }
First . last ; char; { input – initials }
Separator : char ; { input – blank between salary and first }
Mydata :Text ; { a text file used as data file }
عبارت :
Readln ( mydata, Salary, Separator, First, last )
رویه :read
رویه ورودی دیگر ، رویه read است که کار آن نیز خواندن اطلاعات از صفحه کلید یا فایل است . بر خلاف readln ، رویه read تنها کاراکتر های داده ای که در لیست ورودی اش مشخص شده را می خواند.
مثال :
دستورات :
Read ( mydata , salary ); { read salary from mydata. }
Read ( mydata , separator ) { read the balank character }
Read ( mydata , first , last ) { read initials from mydata }
Readln ( mydata ) { skip past < eoln > character in mydata. }
نتیجه یکسانی با دستور زیر دارند.
Readln ( mydata , salary , separator , first , last )
نوشتن نتایج در فایل متن :
برای نوشتن نتایج در فایل های متن از رویه های write و writeln استفاده می کنیم .این رویه ها درست مانند همان رویه های چاپ نتایج روی صفحه نمایش هستند اگر اولین پارامتر در فراخوانی write یا writeln ، متغیری از نوع text باشد خروجی به جای صفحه نمایش به فایل فرستاده می شود .
رويه هاي write , writeln:
شكل استفاده :
Write ( outfile , output list )
Writeln ( outfile , output list )
مثال :
Write ( myresult , salary )
Writeln ( myresult , hours : 3 :1 , ‘ s’ , salary :4 :2 )
نامهاي داخلي و خارجي فايل:
براي اینکه پاسكال قادر به بازيابي يك فايل ذخيره شده روي ديسك باشد ، بايد نام دايركتوري ديسك كه فايل در آنجا قرار مي گيرد را داشته باشيد.
رويه Reset:
شكل استفاده :
Reset ( infile )
مثال :
Reset ( mydata )
فايل mydata را به عنوان ورودي برنامه آماده مي كندو نشانگر موقعيت فايل نيز به ابتداي فايل منتقل مي شود. نشانگر موقعيت فايل همواره به كاراكتر بعدي كه قرار است پردازش شود ، اشاره مي كند.بعد از عمل reset ، كاراكتري كه خوانده مي شود ، اولين كاراكتر فايل است.
نکته :
عمل reset قبل از اينكه كاراكتري از فايل mydataخوانده شود ، انجام مي گيرد و اگر فايل mydata قبلاروي ديسك ذخيره نشده باشد ، اين عمل ناموفق است ، براي خواندن و پردازش فايل در بار دوم و در همان برنامه ، عمل reset بايد انجام شود.
رويه rewrite:
شكل استفاده :
Rewrite ( outfile )
مثال :
Rewrite( outdata )
فايل outdata را براي خروجي آماده مي كند .اين فايل در ابتدا خالي است.كليه داده هايي كه قبلا در فايل outdata ذخيره شده اند، از بين مي روند.
تست انتهاي فايل : تابع EOF:
شكل استفاده :
EOF( filename )
مثال :
EOF( infile )
تمام فايل ها به طور اتوماتيك با كاراكتر< eof > خاتمه مي يابند.و تابع از پیش ساخته شده EOF در پاسكال (مخفف ENDOF FILE ׂ( تست مي كند كه آيا كاراكتر بعدي فايل eof است يا خير؟
نکته :
در صورتي كه كليه كاراكتر هاي فايل infile پردازش شده باشند (يعني كاراكتر بعدي ، كاراكتر < eof > باشد)، true را بر مي گرداند و اگر هنوز کاراکتر هایی برای خواندن وجود داشته باشند false را بر می گرداند .
تست انتهای خط : تابع EOLN :
شكل استفاده :
EOLN( filename )
مثال :
EOLN ( infile )
پاسکال تابعی به نام EOLN ( END OF LINE )دارد که قادر به تشخیص کاراکتر < eoln > است. در صورتی که کاراکتر بعدی < eoln > باشد , تابع EOLN مقدار true و در غیر این صورت false را بر می گرداند.
نکته :
1.اگر کاراکتر بعدی فایل , < eoln > باشد ,نتیجه تابع true و در غیر این صورت false خواهد بود .
2.اگر file name حذف شود ,فایل سیستم input (صفحه کلید ) ، فایل ورودی است. در پاسکال استاندارد , فراخوانی تابع EOLN در صورتی که EOF( filename ) ، True باشد ،خطا است.
آبجی
27th October 2009, 01:25 PM
استفاده از فایل های متن:
اگر برنامه خروجی خود را به جای صفحه نمایش روی دیسک بنویسد ، برنامه دیگری می تواند از این خروجی به عنوان یک فایل داده استفاده کند . در حقیقت دو برنامه از طریق یک فایل دیسک با یک دیگر ارتباط برقرار می کنند.
Assign( ):
این تابع شناسه فایل را به فایل خارجی منسوب می کند در اگر فایل وجود نداشته باشد آن را می سازد.
نحوه کاربرد:
Assign( my_file,external_name ) ;
بستن فایل=close ( )
این تابع برای بستن فایل می باشد.
نکته:
1.اگر قبل از خاتمه برنامه تمامی فایل ها را نبندید ،هیچ کدام از اعمالی که بر فایل اعمال نموده اید ،اجرا نخواهد شد.
2.قبل از این که بتوانید بین عملیات ها سوئیچ کنید، باید فایل را ببندید، به عنوان نمونه ،بعد از نوشتن اقلامی در فایل، باید آن را ببندید و مجددا قبل
ازخواندن اقلام دوباره آن را باز کنید.
نحوه کاربرد:
Close( file_name ) ;
دستیابی تصادفی به فایل ها-seek( ):
پاسکال روشی را برای دستیابی به فایل ها ارائه می کند که به آن دستیابی تصادفی می گویند. دستیابی تصادفی اجازه می دهد تا قلم داده خاصی از فایل را که می خواهید پردازش کنید، با مشخص کردن موقعیت آن، انتخاب کنید.
نحوه کاربرد:
Seek( file_name,position_number ) ;
حال چند مثال جالب از فایل ها را حل میکنیم:
مثال1.برنامه ای بنویسید که نام،تاریخ تولد، شماره تلفن فردی را گرفته و در فایلی ذخیره کند؟
Program file_ex ;
Uses wincrt ;
Type rec_type=record
Name:string ;
Date_of_brith:string ;
Telephone_number:string ;
End ;
Var
My_file:file of rec_type ;
Rec_var: rec_type ;
Ch:char ;
Begin
Clrscr ;
Assign( my_file,'file_1.dat' ) ;
Rewrite ( my_file ) ;
Repeat
Write( 'enter a name:' ) ;
Readln( rec_var.name ) ;
Write( 'enter a date of brith:' );
Readln( rec_var.date_of_brith ) ;
Write( 'enter a telephone number:' ) ;
Readln( rec_var.telephone_number ) ;
Write( my_file,rec_var ) ;
Write( 'continue? Reply y/n: ' ) ;
Readln( ch ) ;
Until ( ch='n') or(ch='N') ;
Close( my_file ) ;
End .
مثال 2. برنامه بالا را برای افزودن رکورد جدید تغییر دهید؟
Program file_ex ;
Uses wincrt ;
Type rec_type=record
Name:string ;
Date_of_brith:string ;
Telephone_number:string ;
End ;
Var
My_file:file of rec_type ;
Rec_var: rec_type ;
Ch:char ;
Begin
Clrscr ;
Assign( my_file,'file_1.dat' ) ;
Reset ( my_file ) ;
Seek( my_file,filesize( my_file) ) ;
Write( 'enter a name:' ) ;
Readln( rec_var.name ) ;
Write( 'enter a date of brith:' );
Readln( rec_var.date_of_brith ) ;
Write( 'enter a telephone number:' ) ;
Readln( rec_var.telephone_number ) ;
Write( my_file,rec_var ) ;
Close( my_file ) ;
End .
مثال3. برنامه ای کامل برای جستجوی قلم داده ای خاص در درون فایل بنویسید؟
Program file_ex ;
Uses wincrt ;
Type rec_type=record
Name:string ;
Date_of_brith:string ;
Telephone_number:string ;
End ;
Var
My_file:file of rec_type ;
Rec_var: rec_type ;
Sought_name: string ;
Found:Boolean ;
Found_ind, counter:integer ;
Begin
Clrscr ;
Assign( my_file,'file_1.dat' ) ;
Reset ( my_file ) ;
Counter:=0 ;
Write( 'enter a name to be Found :' ) ;
Readln (Sought_name ) ;
Repeat
Seek( my_file,counter) ;
Read(my_file,rec_var ) ;
Found:=rec_var.name= Sought_name ;
If Found then
آبجی
9th December 2009, 10:36 AM
این زبان توسط پروفسور نيكلاس ويژت در انستيتو فني فدرال سوئيس در در اواخر سال 1960 و اوايل 1970 مطرح گرديد و به افتخار بلز پاسكال دانشمند فرانسوي قرن هفدهم ميلادي، پاسكال نامگذاري شده است.پاسکال یک زبان سطح بالا است.
اجزاء تشکيل دهنده کامپيوتر عبارتند از :
1.سخت افزار
2.نرم افزار
• سخت افزار
خروجی<============== پردازش<===============ورودی
كامپيوترهاي امروزي معمولاً از قطعات زير تشكيل ميشوند:
دستگاههاي ورودي
حافظههاي جانبي
حافظههاي اصلي
واحد پردازشگر مركزي
دستگاههاي خروجي
• نرم افزار:
نرمافزار يكي از بخشهاي اساسي كامپيوتر به شمار ميآيد، كه در واقع سختافزار را بكار ميگيرد. بعبارت ديگر رابط بين كاربر و سختافزار را نرمافزار مينامند. نرمافزار در حقيقت روح و جان يك كامپيوتر است، كه به سختافزار هويت ميبخشد.
زبانهاي برنامهنويسي :
نرمافزارها توسط زبانهاي برنامهنويسي نوشته ميشوند. زبانهاي برنامهنويسي، يك سيستم ارتباطي هستند كه توسط آنها ميتوان دستورات لازم را به ماشين انتقال داد.
هرزبان برنامهنويسي به مجموعهأي از علايم، قواعد و دستورالعملها گفته ميشود كه امكان ارتباط با كامپيوتر را جهت بيان كاري يا حل مسئلهاي فراهم ميكند.
در حالت كلي زبانهاي برنامهنويسي را به سه دسته زير تقسيمبندي ميكنند:
1.زبانهاي سطح بالا
2.زبانهاي سطح پايين
3.زبانهاي سطح مياني
زبان Pascal
این زبان توسط پروفسور نيكلاس ويژت در انستيتو فني فدرال سوئيس در در اواخر سال 1960 و اوايل 1970 مطرح گرديد و به افتخار بلز پاسكال دانشمند فرانسوي قرن هفدهم ميلادي، پاسكال نامگذاري شده است.پاسکال یک زبان سطح بالا است.
اجزاي تشکيلدهنده يک برنامه:
1.کلمات ذخيرهشده ( Reserved Words )
2.شناسهها ( identifier )
آبجی
9th December 2009, 10:45 AM
کلمات ذخيرهشده ( Reserved Words )
کلمات ذخيره شده، کلماتي هستند که مترجم زبان آنها را ميشناسد و معناي خاصي براي زبان دارند. مترجم زبان به محض مشاهده اين کلمات اعمال خاصي را انجام ميدهد. هر زبان داراي تعداد مشخصي کلمات ذخيره شده ميباشد و اين تعداد قابل افزايش توسط برنامهنويس نيست.
بعضی از کلمات ذخیره شده در پاسکال عبارت است از :
And,file,goto,var, while,unit,until,program,procedure,..
شناسهها ( identifier )
شناسه در پاسکال براي نامگذاري ثابتها، تايپها، پروسيجروها، توابع، ميدانهاي يک رکورد، برنامه و همچنين يونيت مورد استفاده قرار ميگيرد.
در حالت کلي دو نوع شناسه وجود دارد :
1.id هاي استاندارد: اين نوع id ها از قبل در زبان پاسکال تعريف شدهاند و در برنامهها، معناي خاصي دارند .
2.Id هاي غيراستاندارد: اين نوع id ها بوسيله کاربر بطور مجزا تعريف ميشوند و اصطلاحاً به آنها userdefined گفته ميشود.
ساختار برنامه در زبان پاسکال :
اجزاء اصلي يک برنامه به زبان پاسکال بصورت زير ميباشد:
1. عنوان برنامه
2.قسمت تعاريف برنامه
3.قسمت دستور العملها
قسمت تعاريف برنامه:
1.اعلان ثابتها Constant Declaration
2.اعلان انواع Type Declaration
3.اعلان متغيرها Declaration Variable
4.اعلان برچسبها Declaration Label
درحالت کلي ميتوان شکل يک برنامه در زبان پاسکال را بصورت زير بيان کرد:
1.استفاده از کلمه ذخيره شده Program و اسم برنامه ( که ميتواند بکار برده نشود )
2.قسمت تعاريف شناسهها
3.بلوک اصلي برنامه که با Begin شروع و به End همراه نقطه ( . ) ختم ميشود.
4.هر دستور در پاسکال به ( ; ) ختم ميشود.
فرم کلی برنامه در پاسکال:
; نام program
; تعریف ثابت Const
; تعریف متغیرVar
;تعریف نوع Type
BRGIN
; دستورات برنامه
END; متغيرها (Variables)
متغير، محلي از حافظه است که داراي نوع و اسم ميباشد. نوع متغير همان نوع داده بوده و اسم متغير از قواعد اسمگذاري شناسه تبعيت ميکند.
انواع دادهها ( data types ):
1.دادههاي ساده (Simple data type)
.2دادههاي ساختيافته ( ( Structural Data Types
3. دادههاي اشارهگر (Pointer Data Types)
دادههاي ساده (Simple data type)
1.انواع صحیح شامل اعداد بدون ممیز است متداولترین انواع صحیح را در شكل زير ببينيد:
2.اعداد اعشاری: شامل اعداد با نقطه ممیز است متداولترین آن در شكل زير ببينيد::
3.:Char این نوع داده که به آن کاراکتری می گویند حداکثر می تواند یک کاراکتر را در خود نگه دارد و اندازه آن یک بایت از حافظه را اشغال می کند.
4.نوع String:
این نوع داده برای ذخیره رشته ها مثل اسامی افراد به کار می رود حداکثر طول آن 255 کاراکتر است در ضمن برای هر رشته باید طول آن را مشخص کنیم در غیر این صورت طول آن را به طور پیش فرض 80 در نظر می گیرد.
5.نوع Boolean:
این نوع داده که داده های بولی خوانده می شود مقادیر این نوع داده های بولی دارای دو ارزش درستی یا نادرستی است که در پاسکال با 0و1 نمایش می دهند 0 به معنای نادرستی و1 به معنای درستی است.
آبجی
9th December 2009, 10:46 AM
2.انواع دادههاي ساختيافته عبارتند از:
• آرايهها
• رکوردها
• مجموعهها
• فايلها
3. دادههاي اشارهگر (Pointer Data Types)
ممکن است در نوشتن برنامه، نوع دادههاي بحث شده در بالا به دلايل مختلف از جمله مشخص نبودن تعداد وروديهاي مسئله و غيره مشخص نباشد لذا نياز به متغيرهايي هست که بتوانند آدرس متغيرهاي ديگر را در خود نگه دارند، اين نوع دادهها، دادههاي اشارهگر نام دارند.
• در پاسکال براي معرفي متغيرها بصورت زير عمل ميکنند:
Var
; نوع متغير: اسم متغير
• براي تعريف يک ثابت بصورت زيرعمل ميکنيم :
; مقدار ثابت = اسم متغير Const
شکل کلي يک دستور جايگزيني در پاسکال بصورت زير است:
عبارت محاسباتي = : اسم شناسه
عبارت قياسي يا
عبارت منطقي
افزودن توضيحات به برنامه (Comment):
افزودن مطلب توضيحي در درون خود برنامه عملي پسنديده و مطلوب است بدين ترتيب که بعد از مدتي امکان فراموشي کار با برنامه از بين ميرود و در کل ميتوان گفت که نوشتن توضيحات در برنامه خوانايي آن را بالا ميبرد.
در پاسکال توضيحات بين دو آکولاد محصور ميشوند.
{ This is comment }
{ This program written by A. Pascal }
قبل از این که شروع به نوشتن یک برنامه کنیم ابتدا باید دستورات ورودی و خروجی را در پاسکال یاد بگیریم :
خروجي با دستور Write :
اين دستور براي نوشتن اطلاعات در خروجي بکار ميرود. اطلاعات خروجي ميتوانند ثابتهاي عددي، مقادير متغيرها، عبارات و غيره باشند. شکل دستور در حالت کلي بصورت زير است:
(....... و متغير2 و متغير1 )write
يا (....... و' عبارت 2' و'عبارت1 ')
يا (....... و ثابت 2 وثابت 1 )
مثال:
Var
A , B: integer ;
Ch: char ;
R: Real ;
Begin
A: = 10 ; B: = 15 ;
Ch: = ' T ' ;
R: = 12.25
Write ( ' A = ' , A, ' B = ' , B ) ;
Write ( ' ch = ' , ch , ' R= ' , R ) ;
Write ( ' sum of A and B = ' , A + B ) ;
End. { end of program}
بعد از اجراي برنامه فوق در خروجي خواهيم داشت:
A = 10 B = 15 ch = TR = 1.2250000000 e + 01 sum of A and
B = 25
خروجي با دستور Writeln :
اين دستور همانند دستور Write عمل ميکند با اين تفاوت که بعد از اجرا، کنترل را به ابتداي سطر بعد منتقل ميکند در نتيجه موجب چاپ دادههاي بعدي در ابتداي سطر بعد ميشود.
خروجي برنامه بالا بصورت زير ميباشد:
A = 10 B = 15
Ch = T R = 1.225000000 e + 01
Sum of A and B = 25
خروجي فرمتبندي شده:
اگر بخواهيم اطلاعات با فاصله هاي مشخص يا در مکان مشخصي در صفحه نمايش قرار گيرند، بايد فرمت چاپ را در دستورات بيان شده مشخص کنيم.
طريقه تعيين فرمت چاپ براي اعداد صحيح :
( طول ميدان: داده صحيح ) Writeln يا Write
در تعريف طول ميدان براي متغيرها يا دادههايي از نوع صحيح به نکات زير توجه کنيد:
1.اگر طول ميدان از طول ارقام عدد صحيح بيشتر تعريف شود، عدد در منتهياليه سمت راست ميدان نوشته ميشود.
.2اگر طول ميدان از طول ارقام عدد صحيح کمتر تعريف شود، طول ميدان به اندازه تعداد ارقام در نظر گرفته ميشود و طول ميدان تعريف شده بياثر خواهد بود.
مثال:
X:= 3200 ;
A: = 12 ;
B: = 217 ;
Write ( X:3 , A:5 , B:5 ) ;
خروجی: 217 دوتا فاصله 12 سه تافاصله 3200
آبجی
9th December 2009, 10:46 AM
طول ميدان اعداد اعشاري :
براي نمايش اعداد اعشاري بصورت دلخواه، مي توان با تعريف طول ميدان و تعداد ارقام اعشاري، عدد مزبور را نمايش داد.
: در حالت کلي طول ميدان را ميتوان به صورت زير تعريف کرد:
( تعداد ارقام بعد از مميز: طول ميدان: متغير اعشاري) Writeln يا Write
در تعريف فرمت براي اعداد اعشاري به نکات زير بايد توجه کرد:
.1 اگر طول ميدان بزرگتر از تعداد ارقام عدد ذکر شود، عدد در منتهي اليه سمت راست ميدان چاپ ميشود.
2.اگر فقط طول ميدان ذکر شود، عدد به صورت نماد علمي در طول ميدان مشخص شده
چاپ می شود .از آنجائي که براي نمايش اعداد در نماد علمي حداقل 8 محل مورد نياز است، لذا هنگامي که تنها طول ميدان ذکر شده باشد، اگر از 8 رقم کمتر باشد، حداقل 8 رقم در نظر گرفته ميشود.
3.هنگامي که طول ميدان همراه با تعداد ارقام بعد از مميز ذکر شود، اگر طول ميدان کوچکتر از مقدار عدد باشد، پاسکال تنها طول ميدان را به اندازهاي که مورد نياز است تصحيح کرده و آنرا برابر اندازه واقعي که عدد در آن قرار ميگيرد، اصلاح ميکند.
4.اگر تعداد ارقام بعد از مميز زياد باشد و تعداد ارقام بعد از مميز ذکر شده در طول ميدان کمتر از تعداد ارقام اعشاري عدد باشد، تعداد ارقام اعشار مطابق درخواست برنامهنويس نشان داده خواهد شد و رقم آخر اعشار آن نسبت به عدد بعدي گرد ميشود.
طول ميدان کاراکترها و رشتهها :
براي نمايش رشتهها و کاراکترهاي با طول ميدان بصورت زير عمل ميکنيم.
(طول ميدان: متغير يا عبارت رشتهاي يا کاراکتري) Writeln يا Write
در توربو پاسکال، کليه موارد گفته شده در مورد اعداد صحيح براي رشتهها نيز صادق است.
ورودي با Readln , Read
از اين دستورات براي خواندن داده ها و اختصاص آنها به متغيرها استفاده ميشود. در خواندن داده ها به دو موضوع بايد دقت شود:
1- منبع دادهها يعني دستگاه ورودي که از آن دادهها خوانده ميشود.
2- متغيري که دادههاي خوانده شده در آن قرار ميگيرد.
شکل کلي دستور ورودي Read بصورت زير ميباشد:
;( ..... و متغير 2 و متغير 1Read (
اين دستور عمل خواندن دادهها و ذخيره آنها در متغيرها را انجام ميدهد و پس از اتمام عمل خواندن کنترل را براي خواندن و نوشتنهاي بعدي. در همان خط نگه ميدارد
شکل کلي دستور ورودي ReadLN بصورت زير ميباشد:
;( ..... و متغير 2 و متغير 1ReadLN (
اين دستور عمل خواندن دادهها و ذخيره آنها در متغيرها را انجام ميدهد و پس از اتمام عمل خواندن کنترل را براي خواندن و نوشتنهاي بعدي به خط بعد می رود.
تا به ما قادر شدیم که یک برنامه کامل را بنویسیم حال چند مثال را حل می کنیم:
1.برنامه ای بنویسید که محتویات دو عدد را عوض کند؟
program Example_1 ( input , output ) ;
Var
first , second , temp: integer Begin
Writeln ;
Writeln ( 'Please Enter two numbers ' ) ;
Readln ( first , second ) ;
Temp: = first ;
First: = second ;
Second: = temp ;
Write ( ' first = ' , first , ' second = ': 10 , second ) ;
End. { end of program }
خروجي برنامه بالا به صورت زير ميباشد:
Please Enter two numbers
15 17
First = 17 second = 15
2.برنامه ای بنویسید که حقوق پایه و تعداد فرزندان یک کارگر را از ورودی گرفته و مبلغ حقوق وی را بر اساس فرمول زیر محاسبه کند؟
10* تعداد فرزندان+ حقوق پایه= حقوق کل
program TEST( input , output ) ;
Var
CHILD:BYTE
:LONGINT SALARY
: integer ; KOL
Begin
Writeln ; Writeln ( 'Please Enter salary an number of child);
Readln ( salary, child ) ;
Kol:=salary+child*10;
Writeln ('kol is',kol);
End. { end of program }
در درس بعدی انواع عمگرها ،دستورات شرطی،دستور case ،حلقه ها را خواهم گفت در ضمن این مطالب هر هفته آپدیت می شود.
عملگر ها:
انواع عملگر ها عبارت است از:
1.عملگرهای رابطه ای
2.عملگرهای منطقی
3.عملگر های محاسباتی
عملگرهای رابطه ای:
آن دسته از عبارات منطقی که عمل مقایسه را انجام می دهند یکی از اشکال زیر را دارند:
Variable relational-operator Variable
Variable relational-operator constant
عملگر های رابطه ای به شرح زیرند:
> کوچکتر
< بزرگتر
<= بزرگتر مساوی
= > کوچکتر مساوی
<> نامساوی
= مساوی
نکته: دو عملوند یا داده ای که با هم مقایسه می شوند اغلب یا دو متغیر هستند یا یک متغیر و یک ثابت هستند. نوع داده ی عملوند های یک عملگر رابطه ای باید یکسان باشد.
عملگرهای منطقی:
با استفاده از عملگر های منطقی not , or , and می توان عبارات منطقی پیچیده تری ایجاد نمود .
مثال :
(x < y ) or (y > 5)
متغیر های منطقی در واقع عبارات منطقی هستند . بنابر این از آنها می توان به عنوان عملگر های منطقی استفاده نمود .
مثال
:(X and (not y
آبجی
9th December 2009, 10:47 AM
جداول درستی :
عملگر Andو OR:
عملوند2 OR عملوند 1 عملوند2 and عملوند 1
عملوند2
عملوند 1
True True
True
true
True false
False
True
False True
true
false
False False
False
False
عملگر Not:
عملوند 1 not
عملوند 1
false
true
True
false
تقدم عملگرها ترتیب ارزیابی را مشخص می کند.جدول تقدم عملگرها عبارتند از :
عملگر
Not
* / div mod and
+ - or
< <= = <> >= >
دستورات کنترلی:
1.دستور IF:
در پاسکال یک ساختار انتخابی ابتدایی شامل دستور IF است که در دستور همراه یک عبارت منطقی قرار می گیرد .دستور IF مشخص می کند که در یک حالت خاص ، کدام مجموعه از دستورات باید اجرا شوند.
دستور if یک انتخابی:
If condition then
Statement-
دستور if دو انتخابی:
If condition then
Statement1
Else Statement2
مثال: برنامه ای بنویسید که تعداد فرزندان و حقوق پایه و رتبه یک کارگر را از ورودی دریافت کرده و حقوق کلی او را بر اساس فرمول زیر حساب کند؟
کسریها - مزایا + بیمه = حقوق کل
5*رتبه+1000* تعداد فرزندان =مزایا
مالیات+بیمه=کسریها
بیشتر
کمتر یا مساوی 2
تعداد فرزند
تعداد فرزندان
1000
بیمه
هر چیزی دیگر
0تا 20
رتبه
حقوق پایه
حقوق پایه*100/10
مالیات
Program salary_kol;
uses wincrt;
Var
Salary:longint;
kasry,bimeh,mazaya,kol,net:real;
Num,grade:integer;
Begin
Writeln('Enter salary and grade and number of child');
Readln(salary,grade,num);
If num<=2 then
Bimeh:=100
Else
Bimeh:=num*500;
If (grade>0) and (grade<=20) then
begin
Net:=20/100*salary;
Mazaya:=num*1000+grade*50 ;
Kasry:=bimeh+net;
Kol:= salary+mazaya-kasry;
End
Else
If (grade>20)then
begin
Net:=20/100*salary;
Mazaya:=num*1000+grade*50 ;
Kasry:=bimeh+net;
Kol:= salary+mazaya-kasry;
End;
Writeln('salary kol is:',kol);
Readln;
End.
دستور case:
برای انتخاب یک حالت از چندین گزینه ، در پاسکال علاوه بر دستور if ،دستور دیگری به نام case وجود دارد. Case میتواند تعدادی شرط را بگیرد و انتخاب کند.
آبجی
9th December 2009, 10:49 AM
مقادیری را که دستور case می پذیردORDINAL است .مقادیری که دارای ORDINAL هستند دارای ترکیب نیستند و همچنین قابل شمارش هستند مثل :integer,character,byte,boolean,longint,…پسstr ing,real,… نمی توانند ORDINAL باشند.دستور case دارای begin نمی باشد.
Case selector of
Label : statement ;
Label : statement ;
.
.
.
.
.
label : statement
end [case]
مثال:
case N of
1,2 : begin
write (‘1,2,’) ;
writeln( ‘buckle my shoe’)
end ; {1,2}
3 , 4 :writeln (‘ 3,4 , shut the door ‘) ;
5 , 6 :writeln (‘ 5 , 6 , oick up sticks’)
end {case}
عبارت otherwise یا else برای دستور :case
چنانچه انتخاب کننده case یک مقدار غیر قابل انتظار داشته باشد می توان از این عبارت برای نمایش پیغام خطا یا عمل تصحیح استفاده نمود.در دستور case بعد، در صورتی که مقدار غیر منتظره ای در DayNumber ذخیره شود، عبارت otherwise پیغام خطای invalid day number را نمایش می دهد.
{compute gross pay for a particular day }
case DayNumber of
1, 7 : Gross := Hours * 1.5 * dailyRate ;
2, 3 , 4 , 5 , 6 : Gross := Hours * DailyRate ;
otherwise
writeln (‘ invalid day number . ‘)
end {case}
مثال:برنامه ای بنویسید که دو عدد را از ورودی دریافت کرده وچنانچه عدد اول در بازه 0 تا 5 بود توان دوم عدد دوم را چاپ کند اگر 68 بود ضرب آن دو عدد را نمایش دهد در غیر اینصورت مقادیر مجاز را چاپ کند؟
Program case_of;
Uses wincrt;
Var a,b:integer;
Begin
Writeln('enter tow number');
Readln(a,b);
Case a of
0..5:Writeln('sqrt(b):',b*b);
68:writeln('a*b:',a*b)
Else
writeln('Enter 0..5 or 68');
End;{case}
Readln;
End.
آبجی
9th December 2009, 10:50 AM
حلقه ها:
1.حلقه FOR:
حلقه for برای تعداد تکرار 0 یا بیشتر و در ضمن برای تعداد تکرار معین به کار می رود .
شکل کلی دستور for به صورت زیر است:
Do مقدار نهایی To} مقدار شروع =: متغیرfor
Downto
To زمانی به کار میرود که مقدار اولیه از مقدار نهایی کمتر باشد.
downTo زمانی به کار میرود که مقدار اولیه از مقدار نهایی بیشتر باشد.
مثال:برنامه ای بنویسید که مجموع مضارب 5 بین 0 تا 100 را حساب کند؟
Program zarb;
Uses wincrt;
Var I,sum:integer;
Begin
Sum:=0;
For i:=1 to 20 do
Begin
Sum:=sum+i*5;
End;
Writeln('sum is:',sum);
End.
مثال:برنامه ای بنویسید که تعداد مضارب 5و7 را در بازه [231,846] چاپ کند؟
Program number;
Uses wincrt;
Var I,s,k:integer;
Begin
S:=0;
K:=0;
For i:=846 downto 231 do
Begin
If I mod 7=0 then
S:=s+1;
If I mod 5=0 then
K:=k+1;
End;
Writeln('7=',s);
Writeln('5=',k);
End.
حلقه های for می توانند علاوه بر نوع integer ، از انواع دیگر ترتیبی نیز استفاده کنند . در مثال زیر ، از متغییر char استفاده شده است.
مثال :
For nextch := ‘ A’ to ‘Z’ do Write (nextch );
2.حلقه while:
ساده ترین دستور کنترل حلقه دستور While می باشند. دستوراتی که تکرار می شوند بدنه حلقه نام دارند و بعد از کلمهdo قرار می گیرند. بدنه حلقه یک دستور مرکب است که بین begin و end محصور شده است.
حلقه While یک حلقه با تکرار 0 یا بیشتر و تعداد تکرار در آن نامعین است.
شکل آن بصورت زیر است:
Do شرطWhile
begin
دستورات
End;
مثال:برنامه ای بنویسید که تعدادی از اسامی را از ورودی دریافت کند و سپس بگوید اسم 'ali' چند بار تکرار شده است؟(آخرین اسم end باشد)
Program repeat_ali;
Uses wincrt;
Var s:integer;
Name:string;
Begin
S:=0;
Writeln('Enter names ');
Readln(name);
While name<>'end' do
Begin
Readln(name);
If name='ali' then
S:=s+1;
End;
Writeln('ali repeat:',s);
End.
3.حلقه Repeat:
دستور repeat یک حلقه شرطی را مشخص می کند که تا وقتی که شرط آن درست بشود ، حلقه تکرار می گردد (یعنی این حلقه تا زمانی اجرا می شود که شرط آن نا درست باشد و به محض درست بودن شرط حلقه دیگر اجرا نمی شود ).
Repeat
loop-body
Until termination-condition
حلقه شرطی دستور repeat ، یک حلقه repeat – until نامیده می شود. توجه داشته باشید که چون کلمات repeat و until بدنه حلقه را محصور می کنند نیازی به کلمات begin و end نیست . این نوع حلقه حداقل یکبار تکرار می شود.
مثال:
Repeat
write (‘Enter a digit >’);
read (ch)
Until (‘0’ <= ch) and (ch <= ‘9’)
حلقه های لانه ای:
همانند دستور if حلقه ها را می توان درون یک دیگر قرار داد .حلقه های لانه ای شامل یک حلقه خارجی یا بیرونی و یک یا چند حلقه درونی است . هر بار که حلقه بیرونی تکرار می شود حلقه های درونی نیزاجرا می شوند و عبارت کنترل حلقه در آنها مجدد ارزیابی می شود وتمام تکرارهای الزامی انجام می شوند .
مثال:
Program m_n;
Uses wincrt;
Var
I , j : integer ;
Begin
Writeln (‘I’ :12 , ‘j’ :5);
For I:=1 to 3 do
Begin
Writeln (‘outer’ :5,I :7 );
For j:= 1 to I do
Writeln (‘inner’ :7 , I :5 , j:5)
End;
End.
دستورات break,continue:
Break: این دستور در داخل حلقه ها بکار رفته و باعث خروج از داخلی ترین حلقه شده و دستور بعد از آن حلقه اجرا شود.
Continue: این دستور نیز مانند break در درون حلقه ها بکار رفته و باعث می شود کنترل برنامه به ابتدای حلقه باز گردد.
دستورات halt,exit:
Halt پرس و جویی است که باعث خروج کامل از برنامه و بازگشت به سیستم عامل می گردد.
Exit پرس و جویی است که باعث خروج از زیر برنامه می شود و چنانچه در قسمت اصلی برنامه به کار رود مانند halt عمل می کند.
آبجی
9th December 2009, 10:50 AM
دستور goto
این دستور کنترل را به خط دلخواه می برد نحوه استفاده آن با اینصورت است که از یک برچسب در جلوی آن استفاده می شود کنترل برنامه زمانی که به آن رسید به برچسب مورد نظر پرش می کند.
برچسبها نیز می بایست در ابتدای برنامه تعریف شوند .تعریف آن به صورت زیر است.
; نام برچسبLABEL
تعریفی از پارامتر ها:
پارامترها خطوط ارتباطی بین برنامه اصلی و پیمانه های آن هستند . پارامترها باعث می شوند که توابع و رویه ها روانتر عمل کنند زیرا آنها به یک پیمانه این قابلیت را می دهند که با هر بار فراخوانی ، داده های مختلفی را مورد پردازش قرار دهد. در بخش بعدی خواهید دید که چگونه برنامه نویسان برای ارسال اطلاعات بین برنامه اصلی و پیمانه ها و یا ارسال اطلاعات بین پایانه ها ، از پارامتر استفاده می کنند.
پارامتر های واقعی و صوری:
هر دستور فرا خوانی رویه ، دو قسمت دارد :نام رویه و لیست پا رامترهای واقعی .برای مثال ، رویه Line را در نظر بگیرید که از یک نقطه روی صفحه به نقطه دیگر خطی رسم میکند . دستور فراخوانی آن شامل نام رویه یعنی line و لیست پارامتر های واقعی یا ((x1,y1,x2,y2 می باشد.
Line ( X1 , Y1 , X2 , Y2 )
در هر بار فراخوانی این رویه ،برنامه نویس چهار متغیر یا چهار عدد را که مختصات دو نقطه را نشان می دهند، در آن قرار می دهد. چون با هر بار فراخوانی line، مختصات نقاط می توانند تغییر کنند ، باید آنها را در قسمت تعاریف رویه نشان دهیم . برای اینکار، از نامهای ساختگی که اصطلاحا" به آنها، پارامترهای صوری می گوییم ،استفاده می کنیم.
Procedure Line ( XStart , YStart , XEnd , YEnd : Integer ) ;
رویه line تا وقتی فراخوانی نشود ، نمی داند که چه داده ای دریافت خواهد کرد. برنامه فراخوان،اطلاعات مورد نیاز line را از طریق پارامتر های واقعی به رویه ارسال می کند و هر پارامتر واقعی با پارامتر صوری متناظر با آن جفت می شود .
پارامتر واقعی پارامتر صوری
X1 <-------------------Xstart
Y1 <------------------- Ystart
X2 <---------------------Xend
Y2 <-------------------- Yend
ناحیه داده های رویه:
هر بار که رویه ای فراخوانی می شود ،ناحیه ای از حافظه برای ذخیره داده های رویه اختصاص می یابد . ناحیه داده های رویه شامل سلولهایی از حافظه است که برای ذخیره پارامتر های صوری و متغیرهای محلی یا ثابتهایی که در رویه تعریف می شوند ،می باشد. هر گاه که رویه ای پایان می یابد ناحیه داده های مربوط به آن پاک می شود .
انواع پارامتر های صوری:
پارامتر های صوری به دو دسته تقسیم می شوند:
1.پارامتر های مقدار
2.پارامتر های متغیر
پارامتر های مقدار ، اطلاعاتی که به رویه فرستاده می شود را در یافت می کند.
پارامتر متغیر ، محتوی یک پارامتر واقعی را تغییر داده و آن را به عنوان نتیجه حاصل از رویه بر می گر داند.
مثال: رویه ComputerSumAve چهار پارامتر دارد : دو پارامتر برای ورودی (Num1,Num2) و دو پارامتر برای خروجی (Average,Sum) .رویه ComputerSumAve مجموع و میانگین دو عدد را محاسبه می کند ولی آنها را نمایش نمی دهد.
Procedure computesumave (num1, num 2, {input}: real ;
Var sum , Average {output}: real ) ;
begin { computeSumAve }
sum := num1 + num2 ;
average := sum / 2.0
end ;{ ComputeSumAve }
آبجی
9th December 2009, 10:50 AM
دستور فراخوانی :
ComputerSumAve( x , y , total , Mean )
قواعد تناظر لیست پارامتر ها:
• تناظر میان پارامتر های واقعی و صوری از روی موقعیت آنها در لیست پارامتر ها تعیین می شود.این لیستها باید هم اندازه باشند ولی اسامی پارامتر ها ی واقعی و صوری متناظر می توانند با هم متفاوت باشند.
• در مورد پارامتر های متغیر ، نوع پارامتر های واقعی و صوری باید با یک دیگر یکسان باشند.در مورد پارامترهای مقدار ، نوع داده پارامتر واقعی باید با نوع پارامتر صوری متناظرش سازگار باشد.
• در مورد پارامتر های متغیر ، پارامتر های واقعی باید یک متغیر باشد ولی برای پارامتر های مقدار یک پارامتر واقعی می تواند ، متغیر ، ثابت یا یک عبارت باشد.
زیر برنامه ها:
1.پروسی جر((Procedure:
یک نوع از زیر برنامه ها در پاسکال پروسی جر است که بصورت پردازه، رویه ، روال و غیره نیز ترجمه شده است.
فرم کلی پرو سی جر بصورت زیر است:
;(پارامتر های پروسی جر)نام پروسی جرP rocedure
[ type
Const
Var
Label ]
Begin
دستورات پروسی جر
End;
با یک مثال نحوه صدا زدن رویه ها را شرح می دهیم.
مثال:برنامه ای با پروسی جر بنویسد که طول و عرض مستطیلی را گرفته و محیط آن را حساب کند؟
Program environment;
Uses wincrt ;
Procedure rectangle ( a,b:integer;var k:integer ) ;
Begin
K:=2*( a+b ) ;
End;
Var
X,y,p:integer ;
Begin
Readln( x,y ) ;
Rectangle( x,y,p ) ;
Writeln( p ) ;
End.
تعریف رویه با کلمه کلیدی procedure آغاز می شود بعد از آن یک نام اختیاری که این نام از قواعد نامگذاری متغییرها پیروی می کند آورده می شود. پارامتر های رویه در درون پرانتز ها نوشته می شوند. در رویه بین آرگومان ها سمی کالن(; ) قرار می گیرد ولی هنگام صدا زدن بین آرگو مان ها کاما (, )قرار می گیرد.
رویه میتواند هیچ، یک یا چند خروجی داشته باشد.
نکته:هنگام صدا زدن رویه نمی توان از عبارات محاسباتی، عبارات مقایسه ای، دستور write و یا مقدار دهی به کار برد.
P:=rectangle( x,y,p ) ;
Write( rectangle(x,y,p ) ) ;
.......If rectangle( x,y,p ) >20 then
P:= rectangle(x,y,p )* 2+6 ;
همه عبارات بالا دارای خطای کامپایلری است.
اعلان forward:
در حالت معمولی قبل از صدا زدن یک زیر برنام،آن روال باید در قسمت بالاتر تعریف شود.اگر در یک برنامه یک زیر برنامه قبل از تعریف شدنش صدا زده شود می بایست از کلمه کلیدی forwad استفاده شود تا خطا گرفته نشود.
Procedure add1( i:integer );forward ;
Procedure add2( m:integer ) ;
Begin
Add1( m ) ;
End ;
Procedure add1 ;
Begin
Writeln( i+10 ) ;
End ;
Begin
Add2( 7 ) ;
End.
2.تابع((Function :
توابع مانند رویه ها ، پیمانه های مستقلی هستند . با این تفاوت که رویه ها می توانند هر تعداد خروجی داشته باشند در حالی که توابع فقط یک خروجی دارد. با نوشتن اسم تابع در یک عبارت می توان یک تابع از پیش تعریف شده را فراخوانی کرد.
توابع استاندارد:
نوع داده خروجی آرگومان تابع
با نوع آرگومان یکسان است real یا integer Abs (x)
Real real یا integer Arctan(x)
Real real یا integer Cos(x)
Real real یا integer Exp(x)
Real real یا integer Ln(x)
integer real Round(x)
با نوع آرگومان یکسان است real یا integer Sin(x)
Real real یا integer Sqr(x)
Real real یا integer Sqrt(x)
integer real Trunc(x)
آبجی
9th December 2009, 10:58 AM
توابع تعریف شده توسط کاربر:
برای تعریف توابع خاص خودمان ، تعریف تابع را بنویسید و آن را در قسمت تعریف برنامه فراخوان قرار دهید. تابع، خروجی خود را توسط پارامترهایش ارائه نمی کند.
1) عنوان تابع با کلمه رزرو شده Function بجای Procedure شروع می شود:
;نوع خروجی:(پارامتر های ورودی)نام تابعFunction
2) تمام پارامترهای تابع باید از نوع پارامتر مقدار باشند.
3) نوع داده نتیجه تابع در انتهای عنوان تابع و بعد از لیست پارامترهای صوری قرار می گیرد.
4) در بدنه تابع، خروجی تابع با نسبت دادن مقدار به نام تابع مشخص می شود.
آخرین داده ای که به نام تابع نسبت داده می شود به عنوان نتیجه تابع
بر می گردد.
نحوه نوشتن تابع:
;نوع خروجی تابع: (پارامتر های تابع)نام تابع function
[ type
Const
Var
Label ]
Begin
دستورات تابع
End ;
فراخوانی تابع:
;(Z : = Exponent ( X , Y
توابع بازگشتی:
توابع بازگشتی دارای دو ویژگی اصلی می باشند:
1.خودش را صدا می زند.
2.یک شر برای اتمام فراخوانی ها وجود دارد.
نکته: در پاسکال هم توابع و هم رویه ها را می توان بصورت بازگشتی تعریف نمود.
مثال:برنامه ای بنویسد که یک عدد را از ورودی دریافت کرده و به کمک تابع بازگشتی و غیر بازگشتی فاکتوریل آن را حساب کند؟
Program factorial ;
Uses wincrt ;
Var x:integer ;
Function fact1 ( n:integer ):integer ;
Var I,f:integer ;
Begin
F:=1 ;
For i:=1 to n do
F:=f*I ;
Fact1:=f ;
End;
Function fact2( n:integer ):integer ;
Begin
If n<=1 then
Fact2:=1
Else
=n*fact2( n-1) ;:Fact2
End;
Begin
Readln( x ) ;
Writeln( fact1(x) ) ;
Writeln( fact2(x) ) ;
End .
مثال:تابع بازگشتی بنویسد که a*b را محاسبه کند؟
a+a*(b-1) if b>1
a if b=1
Function multiply( a,b:integer ):integer ;
Begin
If b=1 then
Multiply:=a
Else
Multiply:=a+multiply( a,(b-1) ) ;
End ;
مثال:در برنامه زیر خروجی f(3,6) چند است؟
Function f( m,n:integer ):integer ;
Begin
If (m=1) or(n=0) or(m=n) then
F:=1
Else
F:=f(m-1,n)+f( m-1,n-1 )
End;
خروجی این تابع برابر 4 است.
آبجی
9th December 2009, 11:02 AM
این هم یک مثال جالب:
برنامه ای بنویسید که رشته ای را به یک تابع فرستاده و معکوس رشته را توسط نام تابع برگرداند.همچنین به کمک پرامتر مرجع حروف کوچک رشته ورودی را تبدیل به حروف بزرگ کرده و رشته معادل را برگرداند؟
Program reverse ;
Uses wincrt ;
Var s,p,t:string ;
Function fstr( s:string;var p:string ):string ;
Var I,len:byte; c:char; t:string ;
Begin
Len:=ord( s[0] ) ;
For i:=1 to len do
Begin
If (s[i]>='a')and(s[i]<='z') then
P[i]:=char(ord( s[i])-32 ) )
Else
P[i]:=s[i] ;
T[i]:=s[len-i+1] ;
End;{if}
T[0]:=s[0] ;
P[0]:=s[0] ;
Fstr:=t ;
End ;
Begin
Readln(s) ;
T:=fstr( s,p ) ;
Writeln( s,' ',p,' ',t ) ;
End.
زیر برنامه های استاندارد رشته ای:
1.تابع concat:
این تابع برای الحاق رشته ها استفاده می شود.
خروجی Concat( 'ali','reza' ) ; ---àalireza
2.پردازه str:
با این پردازه می توان عددی(صحیح یا اعشاری )را به رشته معادل تبدیل کرد. Str( n:integer;var s:string ) ;
Str( n:real;var s:string ) ;
مثال:
Begin
R:=13 ;
Str(r,a) ;
A:=a+'ali' ;
خروجی Writeln(a ) ; -à 13ali
End.
3.پردازه val:
با این پردازه برعکس str ارزش عددی یک رشته حاوی ارقام بدست می آید.
Val( s:string;var x:integer ) ;
Val( s:string;var x:real ) ;
4.تابع pos:
با این تابع می توان دریافت یک حرف یا یک رشته در چه مکانی از رشته دیگر است.
Poc( sub,s:string ):byte ;
3 <---- Writeln( pos('jid','majid') ) ;
5.تابع copy:
برای بدست آوردن قسمتی از یک رشته از تابع copy استفاده می شود.
Copy( s:string;start,len:integer ):string ;
Writeln( copy('alireza';4,3) ) ; ---à rez
آبجی
9th December 2009, 11:04 AM
6.تابع upcase:
این تابع یک کاراکتر را از ورودی گرفته و آن را تبدیل به حرف بزرگ می کند.
Upcase (c:char ):char ;
Writeln( upcase('a') ) ;---àA
7.پردازه insert:
این پردازه برای درج رشته ای در داخل رشته دیگر استفاده می شود:
Insert( s1:string;s2:string;index:integer ) ;
S:='hello reza' ;
Insert( 'ali',s,7 ) ;
Writeln( s ) ;
خروجی hello alireza:
Index شماره مکان درج در رشته s2 را مشخص می کند.
8.پردازه delete:
با این پردازه می توان بخشی از یک رشته را حذف کرد.
Delete( var s:string;start,len:integer ) ;
پارامتر len تعداد کاراکتر حذف شده از رشته s و پارامتر start موقعیت حذف را تعیین می کند.
S:='alireza' ;
Delete( s,4,3 ) ; ----àalia
حال یک سری نکات مهم را بیان می کنیم:
نکته 1:هنگام تعریف توابع بین پارامترهای (; ) قرار می گیرد ولی هنگام صدا زدن تابع بین آرگومان ها (, ) قرار می گیرد.
2.تابع ممکن است ورودی نداشته باشد بنابراین از گذاشتن پرانتز باید خودداری کرد. Function example:integer ;
3.نوع برگشتی تابع می تواند از نوع های ساده( real,integer,char ... ) ،رشته و شمارشی باشد. ولی از نوع آرایه،مجموعه وفایل نمی توانند باشد.
4.درون عبارات محاسباتی،دستور write و مقایسه ای می توان آن را صدا زد.
5.رویه ممکن است ورودی و خروجی نداشته باشد در این صورت از پرانتز نباید استفاده کرد.procedure example ;
6.دستورات readln و writeln در واقع رویه های از پیش تعریف شده اند.
7. دستورات INC و DEC در واقع رویه های از پیش تعریف شده،با فرم کلی زیر می باشند:
Procedure inc( var x[;n:logint] ) ;
Procedure dec( var x[;n:logint] ) ;
8. دستورات halt و exit در واقع رویه های از پیش تعریف شده،با فرم کلی زیر می باشند:
:word) ] ; کد خروجیProcedure halt[ (
Procedure exit ;
9.تعداد آرگو مان های فرستاده شده به تابع یا رویه باید برابر باشد، همچنین نوع آرگو مان های متناظر نیز باید یکسان باشد.
10.نام پارامترها کاملا اختیاری است و می تواند همنام آرگو مان ها باشد.
11.درون یک زیر برنامه نمی توان متغیری محلی همنام با پارامتر ها تعریف کرد.در این حالت خطای کامپایلری رخ می دهد.
12.ترکیب const و var غیر مجاز بوده و خطا دارد.
آبجی
9th December 2009, 11:05 AM
حوزه عمل شناسه ها:
در یک برنامه پاسکال ، هر شناسه ، دامنه ای دارد که حوزه عمل آن شناسه نامیده می شود.منظور از دامنه شناسه ، بخشی از برنامه است که شناسه در آن تعریف می شود.یک شناسه تنها توسط دستوری که در حوزه عملش قرار دارد می تواند مورد مراجعه و بازیابی قرار گیرد. شناسه ممکن است محلی یا سراسری باشد.
قانون شماره 1 حوزه عمل : حوزه های محلی یا سراسری
شناسه که در برنامه اصلی تعریف شده دارای حوزه عمل سراسری است و می توان در هر جای برنامه به آن مراجعه کرد.شناسه ای که درون پیمانه تعریف می شود دارای حوزه عمل محلی است و فقط توسط آن پیماته یا هر پیمانه دیگری که آن را تعریف کرده می تواند مورد دستیابی قرار گیرد. بنابر این وقتی رویه ای در برنامه اصلی تعریف می شود ، دارای حوزه عمل سراسری است و لیست پارامترهای پارامترهای صوری آن بخشی از بلاک رویه است و در نتیجه دارای حوزه عمل محلی است.
آرایه:
آرایه یک نوع ساختمان داده است که تعدادی داده هم نوع در آن ذخیره می شوند. با استفاده از آرایه می توانیم برای مجموعه ای از داده ها ، نام یک متغیر ( مثلا Scores ) را بکار بریم. علاوه بر این می توانیم به تک تک عناصر موجود در آرایه مراجعه کنیم.
در پاسکال یک آرایه در محل های پشت سر هم از حافظه اصلی ذخیره می شود. هر عنصر آرایه در یک سلول از حافظه قرار می گیرد. بعضی از اعمال نظیر ارسال کردن آرایه به عنوان پارامتر به یک رویه را می توان انجام داد. همچنین می توان داده های ذخیره شده در آرایه را بازیابی کرده و مثل متغیر های ساده ، آنها را مورد پردازش قرار داد.
تعریف نوع آرایه ها:
شکل استفاده:
Type
Array type = array [ subscript type] of element type ;
مثال:
Type
SmallArray = array [1. . 5] of char ;
85 67 33 95 88
اندیس های آرایه:
برای پردازش داده های ذخیره شده در یک آرایه، باید بتوانیم عناصر آن را بازیابی کنیم. برای انجام چنین کاری باید نام آرایه را همراه با یک اندیس ( که گاهی اوقات شاخص نامیده می شود) به کار بریم. اندیس آرایه که میان یک جفت کروشه قرار می گیرد، عنصر خاصی از آرایه را برای پردازش انتخاب می کند.
مثال:
اگر متغیر X از نوع RealArray باشد :
Type
RealArray = array [1 . . 8] of Real ; { array type declaration }
Var
X : RealArray ; { Allocate storage for array X . }
برای مراجعه به اولین عضو آرایه ، از X[1] (بصورت X اندیس 1 خوانده شود)، برای مراجعه به دومین عنصر از از X[2] و برای مراجعه به هشتمین عنصر از X[8] استفاده می کنیم.
خواندن و نمایش دادن یک آرایه:
داده ها باید بصورت عنصر در داخل آرایه قرار گیرند و در موقع نمایش دادن نیز باید آنها را بصورت عنصر به عنصر چاپ کرد. با توجه به تعاریف :
Const
Maxitems = 8 ;
Type
IndexRange = 1 . . MaxItems ;
RealArray = array [ IndexRange ] of Real ;
Var
X : RealArray ; { array of data }
I : IndexRange ; { loop-control variable }
For I : = 1 to MaxItems do
Read ( X[I] ) ;
آبجی
9th December 2009, 11:05 AM
مثال:برنامه جدولی از تفاضل ها
Program table;
Uses wincrt;
Const
MaxItems = 8 ; { number of data items }
Type
IndexRange = 1 . . MaxItems ;
RwalArray = array [IndexRange] of Real ;
Var
X : RealArray ; { array of data }
I : IndexRange ; { loop-control variable }
Average , { average value of data }
Sum : Real ; { sum of the data }
Begin { ShowDiff }
{ Enter the data . }
Write ( ‘Enter’ , MaxItems : 1, ‘ numbers> ‘ ) ;
For I : =1 to MaxItems do
Read ( X[I] ) ;
{ Compute the average value . }
Sum : = 0.0 ;
For I := 1 to MaxItems do
Sum := Sum + X[1]; { Add each element to sum. }
Average := Sum / MaxItems ; { Get average value . }
Writeln ( ‘The average value is ‘ , Average : 3 : 1 ) ; Writeln ;
{ Display the difference between each item and the average . }
WriteLn ( ‘ Table of difference between X[I] and average’ ) ;
WriteLn ( ‘I’ :4 , ‘X[I]’ :8 , ‘Difference’ : 14 ) ;
For I := 1 to MaxItems do
WritLn ( I :4, X[I] :8:1, X[I] _ Average :14:1 )
End . { ShowDiff }
اجرای برنامه جدولی از تفاضل ها:
Enter 8 numbers > 16.0 12.0 6.0 8.0 2.5 12.0 14.0 -54.5
The average value is 2.0
Table
I X[I] Difference
1 16.0 14.0
2 12.0 10.0
3 6.0 4.0
4 8.0 6.0
5 2.5 0.5
6 12.0 10.0
7 14.0 12.0
8 -54.5 -56.5
پارامترهای آرایه مقدار یا متغیر:
وقتی آرایه ای بصورت یک پارامتر متغیر به رویه ارسال می شود، پاسگال آدرس اولین عنصر آرایه واقعی را به ناحیه داده های رویه ارسال می کند. از آنجا که عناصر آرایه در سلول های مجاور هم از حافظه ذخیره می شوند، می توان به کل داده های آرایه دستیابی داشت.
رویه مستقیما با آرایه واقعی کار می کند.وقتی آرایه ای بصورت یک پارامتر مقدار به رویه ارسال می شود، هنگام فراخوانی رویه، یک نسخه محلی از آرایه ایجاد می شود. بنابراین آرایه محلی طوری مقدار می گیرد که حاوی همان مقادیری باشد که در ارایه واقعی وجود دارند. رویه با آرایه محلی کار می کند و تغییراتی که در محتویات آرایه محلی اعمال می شود، روی آرایه واقعی تاثیر نمی گذارد.
آبجی
9th December 2009, 11:05 AM
مقایسه دو آرایه:
Function SameArray (A , B : TestArray ) : Boolean ;
Var
I : Integer ; { array subscript }
Begin
I := 1 ; { Start with first pair . }
{ Test corresponding elements of arrays A and B . }
while (I < MaxSize) and (A[I] = B[I]) do
{ invariant :
1 <= I <= MaxSize and
A[I] = B[I] for all prior values of I
}
I := I + 1 ; { Advance to next pair . }
SamArray := (A[I]) = B[I]) { Define result . }
End ; { SameArray }
رویه برای مرتب کردن عناصر آرایه:
Procedure SelectSort (var Scores {input / output} : ScoreArray ;
ClassLength { input } : Integer) ;
Ver
Fill , { index of element to contaion next smallest score }
IndexofMin: Integer ;
Begin {SelectSort}
For fill := 1 to ClassLength-1 do
Begin
IndexOfMin := FindMin( Scores, Fill, ClassLength ) ;
{ Exchange elements at Fill and IndexofMin . }
if IndexOfMin <> Fill then
Switch ( Scores[IndexOfMin], Scores[Fill] )
End { for Fill }
End ; { SelectSort }
آرایه فشرده:
استفاده از یک آرایه فشرده شده برای یک رشته به پاسکال این امکان را می دهد که در هر سلول حافظه کامپیوتر بیش از یک کاراکتر ذخیره شود. علاوه بر این استفاده از آرایه های فشرده شده باعث می شود که اعمال روی آرایه های فشرده شده برای پردازش رشته به سادگی انجام شود.
تعریف آرایه های فشرده:
شکل استفاده :
type string type = packed array [1 . . size] of char ;
مثال:
type string10 = packed array [1 . . 10] of char ;
تذکر :
نوع اندیس برای string type باید از1 شروع شود.
تذکر:
هنگام نمایش یک متغیر رشته ای ، می توان از یک قالب مشخص استفاده کرد.
دستورات :
Write ( ‘Hello’ , FirstName :4 ) ;
writeLn ( ‘ ! Good to see you .’ )
Hello A.C. ! Good to see you .
آبجی
9th December 2009, 11:05 AM
کاراکتر های یک رشته درست مثل هر متغیر از نوع char می توانند مورد استفاده قرار گیرند.
مثال 1 :
در صورتی که FirstName حاوی رشته ‘A.C. Jones’ باشد،
دستورات
FirstName [1] := ‘D’ ;
FirstName [6] := ‘B ;’
محتویاتFirstName را به ‘D.C. Bones’ تغییر می دهند.
تذکر:
یک عنصر رشته ای برای یک پارامتر متغیر از نوع Char نمی تواند ارسال شود. ولی یک کاراکتر مستقیما می تواند به عنوان عنصری ازیک متغیر رشته ای خوانده شود.
دستور :
Read ( FirstName [1] )
اولین کاراکتر موجود در رشته FirstName را با کاراکتر داده خوانده شده جایگزین می کند.
مثال :
برنامه نوشتن نامه فرم :
Const
StringLength = 40
Type
StringType = packed array [1 . . StringLength] of Char ;
Var
BodyFile , { input – body of letter }
Letter : Text ; { output – completed letter file }
begin { FormLetter }
Reset ( BodyFile ) ;
Rewrite ( Letter ) ;
WriteLn (Output , ‘writing job application letter .’ ) ;
Preamble ( Letter ) ;
WriteBody ( BodyFile, Letter ) ;
WriteLn ( Output, ‘Letter copied to output file .’ )
End . { FormLetter }
آرایه های دو بعدی:
آرایه های دو بعدی متداول ترین آرایه های چند بعدی هستند که معمولا اطلاعات را به شکل جدول ذخیره می کنند. مثلا نقشه صندلی های یک کلاس، آرایه دو بعدی است که در هر محل ان ردیف و شماره صندلی یک دانشجو قرار می گیرد.
آبجی
9th December 2009, 11:06 AM
آرایه های چند بعدی:
شکل استفاده :
Type
Multidim = array [ subscript1 , subscript2 , . . . , subscriptn ]
Of element type ;
Type
Multidim = array [subscrip1] of array [ subscript2 ] . . .
Of array [subscript n] of element type ;
پردازش آرایه ها:
دو روش برای دستیابی به عناصر یک آرایه یک بعدی داریم:
1.دستیابی تصادفی
2.دستیابی ترتیبی
برای هر یک از آرایه دو بعدی یا یک جدول، سه روش دستیابی داریم:
1.دستیابی تصادفی
2.دستیابی سطر یه سطر
3.دستیابی ستون به ستون
روش دستیابی سطر به سطر یک آرایه:
For row_subscript . . . do . } { Specify the row
For column_subscript . } . . . do { Access each column of row
Process Table { row_subscript , column_subscript }
روش دستیابی ستون به ستون یک آرایه:
For column_subscript . . . do [Specify the column]
.] For row_subscript . . . Do [Access each row of column
Process Table [ row_subscript , column_subscrip]
مقدار اولیه دادن به یک آرایه:
رویه، Initialize به هر عضو از پارامتر آرایه خود یعنی Sales مقدار اولیه Invalue را می دهد. این رویه به عناصر آرایه به روش سطر به سطر دستیابی می کند.
Procedure Initialize (var Sales { output } : SalesArray ;
InValue { input } : Real ; )
var
NextPerson : Pepole ; { Row subscript }
NextQuarter : Quarter ; { Column subscript }
Begin { Initialize }
For NextPerson : = 1 to NumberSalesPeopel do
For NextQuarter := Fall to Summer do
Sales[NextPerson, NextQuarter] := InValue
End ; { Initialize }
آرایه سه بعدی:
پاسکال تعداد ابعاد ممکن برای یک آرایه را محدود نمی کند، ولی بیشتر آرایه های با ابعاد دو و سه متداولتر هستند.
آبجی
9th December 2009, 11:06 AM
حال چند مثال جالب را حل می کنیم:
مثال1:
برنامه ای بنویسید که نمره ریاضی تعدادی از دانشجو را در آرایه ای ذخیره کند.سپس بیشترین و کمترین نمره و محل آن را در آرایه چاپ کند؟
Progam min_max ;
Uses wincrt ;
Var a:array [1..100] of real ;
Max,min:real ;
I, locmax,locmin,n:integer ;
Begin
Write ( 'please enter number of students:' ) ;
Readln ( n ) ;
For i:= 1 to n do
Readln ( a[i] ) ;
Max:= a[0] ; min:= a[0] ;
Locmax:=1 ; locmin:=1 ;
For i:=2 to n do
Begin
If ( a[i]>max ) then
Begin
Max:=a[i] ; locmax:=I ;
End ;
If a[i]
Begin
Min:=a[i] ; locmin:=I ;
End ;
End ;
Writeln ( 'max=',max,'position=' , locmax ) ;
Writeln ( 'min=',min,'position=' , locmin ) ;
End .
مثال2: هشت عدد را خوانده و در آرایه ای ذخیره کنید.سپس به روش حبابی آن را به صورت صعودی مرتب کرده و چاپ کنید؟
Program bubble_sort ;
Uses wincrt ;
Const n:=8 ;
Var
A:array [1..n] of integer ;
I,j,temp:integer ;
Begin
Write ( 'please enter 8 integer numbers:' ) ;
For i:=1 to n do
Readln ( a[i] ) ;
For j:=1 to n-1 do
For i:=1 to n-j do
If a[i]>a[i+1] then
Begin
Temp:=a[i] ;
A[i]:=a[i+1] ;
A[i+1]:=temp ;
End ;
Writeln ( 'sorted numbers:' ) ;
For i:= 1 to n do
Writeln ( 'a[',I,']=',a[i] ) ;
End .
مثال3: هشت عدد را خوانده و در آرایه ای ذخیره کنید.سپس به روش انتخابی آن را به صورت صعودی مرتب کرده و چاپ کنید؟
Program selection_sort ;
Uses wincrt ;
Const n:=8 ;
Var
x:array [1..n] of integer ;
I,j,min,index :integer ;
Begin
Write ( 'please enter 8 integer numbers:' ) ;
For i:=1 to n do
Readln ( a[i] ) ;
For j:=1 to n-1 do
Begin
Min:=x[i] ; index:=I ;
For j:=i+1 to n do
If x[j]
Begin
Min:=x[j] ;
Index:=j ;
End ;
X[index]:=x[i] ;
X[i]:=min ;
End;
Writeln ( 'sorted numbers:' ) ;
For i:= 1 to n do
Writeln ( 'a[',I,']=',a[i] ) ;
End .
مثال 4 :فرض کنید آرایه x با n خانه از قبل مرتب باشد. متغیر k حاوی کلیدی است که می خواهیم دنبال آن بگردیم. متغیر های low,high,mid از نوع صحیح می باشند. تکه برنامه زیر آرایه x را جهت یافتن k جستجو می کند . (جستجوی دودویی)
Low:=1 ; high:=n ;
While low<=high do
Begin
Mid:=( low+high ) div 2 ;
If k
High:=mid-1
Else
If k>x[mid] then
Low:=mid+1
Else
Begin
Write( 'the number',k,'exist in array ' ) ;
Halt ;
End ;
End ;
Write( 'the number',k,'not exist in array ' ) ;
نکته:در روش ججستجوی دودویی ، در بدترین حالت با [ logn ]+1عمل مقایسه می توانیم کلید را پیدا کنیم.
آبجی
9th December 2009, 11:06 AM
فایل های متن ، فایل های داده و فایل های خروجی:
یک فایل متن مجموعه ای از کاراکتر ها است که تحت یک نام روی دیسک ذخیره می شود . می توانید کلیه داده هایی که توسط برنامه مورد پردازش قرار می گیرند را قبل از اجرای برنامه ، در یک فایل متن ذخیره کنید . سپس به برنامه دستور خواندن داده ها را از فایل متن به جای صفحه کلید بدهید .
فایل داده:
یک فایل داده (یا فایل ورودی ) فایلی است که شامل اطلاعات ورودی برنامه است یک فایل داده می تواند از نوع متن دودویی باشد .
مزایای فایل داده ها :
یکی از مزایای فایل های داده این است که می توان آن ها را با استفاده از ویراستار برنامه(یا واژه پرداز)بازیابی کرد و قبل از اینکه فایل ، توسط برنامه پردازش شود خطاهای آن را اصلاح کرد . مزیت دیگر آنها این است که می توانند چندین بار توسط برنامه خوانده شوند .این خاصیت ،اشکال زدایی را آسان می کند. همچنین می توان نتایج برنامه را به جای صفحه کلید در یک متن ،نوشت .
ساختار اطلاعات در یک فایل متن:
یک فایل متن می تواند توسط یک ویراستار ،ایجاد و ذخیره شود هر کاراکتری که تایپ می شود به طور موقت در حافظه اصلی قرار می گیرد و روی صفحه ، نمایش داده می شود . وقتی فایلی ذخیره می کنید ، اطلاعات روی صفحه نمایش ، به صورت رشته ای از کاراکتر ها روی دیسک ذخیره می شوند .
ساختار منطقی یک فایل متن:
از نظر منطقی فایل متن شامل خطوطی از کاراکتر ها است که این خطوط توسط کاراکتر< eoln> از یکدیگر جدا می شوند . با استفاده از یک ویراستار یا یک فرمان سیستم عامل (نظیر فرمان زیر ) می توان یک فایل متن را روی صفحه نمایش مشاهده کرد.
> type filename
خواندن اطلاعات از فایل متن:
می توان از رویه readln برای خواندن داده از یک فایل متن استفاده کرد. برنامه ای در نظر بگیرید که شامل تعریف متغیرهای زیر است :
Var
Salary : real ; { input – a salary }
First . last ; char; { input – initials }
Separator : char ; { input – blank between salary and first }
Mydata :Text ; { a text file used as data file }
عبارت :
Readln ( mydata, Salary, Separator, First, last )
رویه :read
رویه ورودی دیگر ، رویه read است که کار آن نیز خواندن اطلاعات از صفحه کلید یا فایل است . بر خلاف readln ، رویه read تنها کاراکتر های داده ای که در لیست ورودی اش مشخص شده را می خواند.
مثال :
دستورات :
Read ( mydata , salary ); { read salary from mydata. }
Read ( mydata , separator ) { read the balank character }
Read ( mydata , first , last ) { read initials from mydata }
Readln ( mydata ) { skip past < eoln > character in mydata. }
نتیجه یکسانی با دستور زیر دارند.
Readln ( mydata , salary , separator , first , last )
نوشتن نتایج در فایل متن :
برای نوشتن نتایج در فایل های متن از رویه های write و writeln استفاده می کنیم .این رویه ها درست مانند همان رویه های چاپ نتایج روی صفحه نمایش هستند اگر اولین پارامتر در فراخوانی write یا writeln ، متغیری از نوع text باشد خروجی به جای صفحه نمایش به فایل فرستاده می شود .
رويه هاي write , writeln:
شكل استفاده :
Write ( outfile , output list )
Writeln ( outfile , output list )
مثال :
Write ( myresult , salary )
Writeln ( myresult , hours : 3 :1 , ‘ s’ , salary :4 :2 )
آبجی
9th December 2009, 11:07 AM
نامهاي داخلي و خارجي فايل:
براي اینکه پاسكال قادر به بازيابي يك فايل ذخيره شده روي ديسك باشد ، بايد نام دايركتوري ديسك كه فايل در آنجا قرار مي گيرد را داشته باشيد.
رويه Reset:
شكل استفاده :
Reset ( infile )
مثال :
Reset ( mydata )
فايل mydata را به عنوان ورودي برنامه آماده مي كندو نشانگر موقعيت فايل نيز به ابتداي فايل منتقل مي شود. نشانگر موقعيت فايل همواره به كاراكتر بعدي كه قرار است پردازش شود ، اشاره مي كند.بعد از عمل reset ، كاراكتري كه خوانده مي شود ، اولين كاراكتر فايل است.
نکته :
عمل reset قبل از اينكه كاراكتري از فايل mydataخوانده شود ، انجام مي گيرد و اگر فايل mydata قبلاروي ديسك ذخيره نشده باشد ، اين عمل ناموفق است ، براي خواندن و پردازش فايل در بار دوم و در همان برنامه ، عمل reset بايد انجام شود.
رويه rewrite:
شكل استفاده :
Rewrite ( outfile )
مثال :
Rewrite( outdata )
فايل outdata را براي خروجي آماده مي كند .اين فايل در ابتدا خالي است.كليه داده هايي كه قبلا در فايل outdata ذخيره شده اند، از بين مي روند.
تست انتهاي فايل : تابع EOF:
شكل استفاده :
EOF( filename )
مثال :
EOF( infile )
تمام فايل ها به طور اتوماتيك با كاراكتر< eof > خاتمه مي يابند.و تابع از پیش ساخته شده EOF در پاسكال (مخفف ENDOF FILE ׂ( تست مي كند كه آيا كاراكتر بعدي فايل eof است يا خير؟
نکته :
در صورتي كه كليه كاراكتر هاي فايل infile پردازش شده باشند (يعني كاراكتر بعدي ، كاراكتر < eof > باشد)، true را بر مي گرداند و اگر هنوز کاراکتر هایی برای خواندن وجود داشته باشند false را بر می گرداند .
تست انتهای خط : تابع EOLN :
شكل استفاده :
EOLN( filename )
مثال :
EOLN ( infile )
پاسکال تابعی به نام EOLN ( END OF LINE )دارد که قادر به تشخیص کاراکتر < eoln > است. در صورتی که کاراکتر بعدی < eoln > باشد , تابع EOLN مقدار true و در غیر این صورت false را بر می گرداند.
نکته :
1.اگر کاراکتر بعدی فایل , < eoln > باشد ,نتیجه تابع true و در غیر این صورت false خواهد بود .
2.اگر file name حذف شود ,فایل سیستم input (صفحه کلید ) ، فایل ورودی است. در پاسکال استاندارد , فراخوانی تابع EOLN در صورتی که EOF( filename ) ، True باشد ،خطا است.
آبجی
9th December 2009, 11:07 AM
استفاده از فایل های متن:
اگر برنامه خروجی خود را به جای صفحه نمایش روی دیسک بنویسد ، برنامه دیگری می تواند از این خروجی به عنوان یک فایل داده استفاده کند . در حقیقت دو برنامه از طریق یک فایل دیسک با یک دیگر ارتباط برقرار می کنند.
Assign( ):
این تابع شناسه فایل را به فایل خارجی منسوب می کند در اگر فایل وجود نداشته باشد آن را می سازد.
نحوه کاربرد:
Assign( my_file,external_name ) ;
بستن فایل=close ( )
این تابع برای بستن فایل می باشد.
نکته:
1.اگر قبل از خاتمه برنامه تمامی فایل ها را نبندید ،هیچ کدام از اعمالی که بر فایل اعمال نموده اید ،اجرا نخواهد شد.
2.قبل از این که بتوانید بین عملیات ها سوئیچ کنید، باید فایل را ببندید، به عنوان نمونه ،بعد از نوشتن اقلامی در فایل، باید آن را ببندید و مجددا قبل
ازخواندن اقلام دوباره آن را باز کنید.
نحوه کاربرد:
Close( file_name ) ;
دستیابی تصادفی به فایل ها-seek( ):
پاسکال روشی را برای دستیابی به فایل ها ارائه می کند که به آن دستیابی تصادفی می گویند. دستیابی تصادفی اجازه می دهد تا قلم داده خاصی از فایل را که می خواهید پردازش کنید، با مشخص کردن موقعیت آن، انتخاب کنید.
نحوه کاربرد:
Seek( file_name,position_number ) ;
حال چند مثال جالب از فایل ها را حل میکنیم:
مثال1.برنامه ای بنویسید که نام،تاریخ تولد، شماره تلفن فردی را گرفته و در فایلی ذخیره کند؟
Program file_ex ;
Uses wincrt ;
Type rec_type=record
Name:string ;
Date_of_brith:string ;
Telephone_number:string ;
End ;
Var
My_file:file of rec_type ;
Rec_var: rec_type ;
Ch:char ;
Begin
Clrscr ;
Assign( my_file,'file_1.dat' ) ;
Rewrite ( my_file ) ;
Repeat
Write( 'enter a name:' ) ;
Readln( rec_var.name ) ;
Write( 'enter a date of brith:' );
Readln( rec_var.date_of_brith ) ;
Write( 'enter a telephone number:' ) ;
Readln( rec_var.telephone_number ) ;
Write( my_file,rec_var ) ;
Write( 'continue? Reply y/n: ' ) ;
Readln( ch ) ;
Until ( ch='n') or(ch='N') ;
Close( my_file ) ;
End .
مثال 2. برنامه بالا را برای افزودن رکورد جدید تغییر دهید؟
Program file_ex ;
Uses wincrt ;
Type rec_type=record
Name:string ;
Date_of_brith:string ;
Telephone_number:string ;
End ;
Var
My_file:file of rec_type ;
Rec_var: rec_type ;
Ch:char ;
Begin
Clrscr ;
Assign( my_file,'file_1.dat' ) ;
Reset ( my_file ) ;
Seek( my_file,filesize( my_file) ) ;
Write( 'enter a name:' ) ;
Readln( rec_var.name ) ;
Write( 'enter a date of brith:' );
Readln( rec_var.date_of_brith ) ;
Write( 'enter a telephone number:' ) ;
Readln( rec_var.telephone_number ) ;
Write( my_file,rec_var ) ;
Close( my_file ) ;
End .
مثال3. برنامه ای کامل برای جستجوی قلم داده ای خاص در درون فایل بنویسید؟
Program file_ex ;
Uses wincrt ;
Type rec_type=record
Name:string ;
Date_of_brith:string ;
Telephone_number:string ;
End ;
Var
My_file:file of rec_type ;
Rec_var: rec_type ;
Sought_name: string ;
Found:Boolean ;
Found_ind, counter:integer ;
Begin
Clrscr ;
Assign( my_file,'file_1.dat' ) ;
Reset ( my_file ) ;
Counter:=0 ;
Write( 'enter a name to be Found :' ) ;
Readln (Sought_name ) ;
Repeat
Seek( my_file,counter) ;
Read(my_file,rec_var ) ;
Found:=rec_var.name= Sought_name ;
If Found then
Begin
Found_ind:=counter ;
End ;
Counter:=counter+1 ;
Until (Found or eof(my_file) ) ;
If Found then
Begin
Seek( my_file, Found_ind) ;
Read(my_file,rec_var ) ;
Writeln( rec_var.name ) ;
Writeln( rec_var.date_of_brith ) ;
Writeln( rec_var.telephone_number ) ;
End
Else
Writeln( 'name is not found.' ) ;
Close( my_file ) ;
End .
آبجی
9th December 2009, 11:08 AM
مثال 4.برنامه ای بنویسید که نام یک فرد را گرفته در صورتی که نام مورد نظر در فایل وجود داشته باشد به ویرایش اطلاعات بپردازد؟
Program file_ex ;
Uses wincrt ;
Type rec_type=record
Name:string ;
Date_of_brith:string ;
Telephone_number:string ;
End ;
Var
My_file:file of rec_type ;
Rec_var: rec_type ;
Sought_name: string ;
Found:Boolean ;
Found_ind, counter:integer ;
Begin
Clrscr ;
Assign( my_file,'file_1.dat' ) ;
Reset ( my_file ) ;
Counter:=0 ;
Write( 'enter a name to be Found :' ) ;
Readln (Sought_name ) ;
Repeat
Seek( my_file,counter) ;
Read(my_file,rec_var ) ;
Found:=rec_var.name= Sought_name ;
If Found then
Begin
Found_ind:=counter ;
End ;
Counter:=counter+1 ;
Until (Found or eof(my_file) ) ;
If Found then
Begin
Seek( my_file, Found_ind) ;
Read(my_file,rec_var ) ;
Writeln( 'enter new name:' ) ;
readln( rec_var.name ) ;
Writeln( 'enter new date of brith:' ) ;
readln( rec_var.date_of_brith ) ;
Writeln( 'enter new telephone number:' ) ;
Readln ( rec_var.telephone_number ) ;
Write( my_file,rec_var ) ;
End
Else
Writeln( 'name is not found.' ) ;
Close( my_file ) ;
End .
بانوثریا
15th December 2009, 03:08 PM
سلام اباجی خانوم برو تو بحث شش وزیر و حرکت اسب و اینا{thumbs down}
moji5
15th December 2009, 04:04 PM
برنامه n وزیر در ++c (http://njavan.com/forum/showthread.php?t=30272)
آبجی
15th December 2009, 04:20 PM
تو درس طراحي الگوريتم هم فكر كنم باشه ها چون يادمه من ديدم ;)
ممنون از مجتبي عزيز @};-
moji5
15th December 2009, 04:34 PM
ممنون از ابجی با اطلاعات مفیدشون
منتظر ادامه اموزش مفیدتون هستیم.
uody
3rd April 2011, 12:09 AM
آموزش پاسکال
زبان پاسكال يكي از زبانهاي برنامه سازي است كه ويژگيهاي آموزشي آن بسيار بالاست يعني زبان خوبي براي آموزش برنامه نويسي منظم و دقيق است.قابليت خوانايي و درك برنامه هاي اين زبان بالاست وميتوان برنامه هايي نوشت كه احتمال خطاهاي آنها بسيار اندك باشد علتش اين است كه يك زبان ساختار يافته (structed) است .
ساختار كلي برنامه چيست؟
1-تعريف
2-به وسيله procedure و functionقسمتهاي تكراري را از بين ببريم
3-بدنه
فرم كلي پاسكال:
اسم Program
; تعريف ثابت const
; تعريف نوع type
; تعريف متغيرها var
)پارامترها ) نام procedure
begin
____
____
____
end ;
; ( پارامترها ) نام نوع تابع function
begin
____
____
____
end ;
begin
____
____
____
end .
متغير : محلي است كه داراي يك اسم مي باشد و مي توان مقداري را در آن ذخيره كرد
انواع متغيرها در پاسكال:
Integer :انواع عددي صحيح شامل اعداد بدون نقطه مميز است
نوع مقاديري كه مي پذيرند طول(بايت)
byte 0 تا 255 1
Shortint 128- تا 127 1
integer 32768- تا 32767 2
Word 0 تا 65535 2
Longint 2147483648- تا 2147483647 4
اعداد اعشاري:
انواع عددي اعشاري شامل اعدادي با نقطه مميز است
نوع مقاديري كه ميپذيرند ارقام با معني طول(بايت)
single 1.5e-45 تا3.4e38 7 تا 8 4
real 2.9e-39 تا 1.7e38 11 تا 12 6
Double 5.0e-324تا 1.7e308 15 تا 16 8
extended 1.9e-4951تا 1.1e493 19 تا 20 10
انواع داده هاي اعشاري
-Char :
نوع داده كاراكتري كه با كلمه char مشخص مي شود ميتواند يك كاراكتر را در خود نگهداري كند بنابراين كاراكترها در يك بايت از حافظه كامپيوتر ذخيره مي شوند
String - :
اين نوع داده ها براي ذخيره رشته ها مثل اسامي افراد به كار مي رود و با كلمه كليدي string مشخص ي گردد
براي هر رشته بايد طول معلوم كنيم اگر طولي تعريف نشود به طور پيش فرض 80 در نظر گرفته ميشود(مقدار طول حداكثر 255 است)
- Boolean :
نوع ديگري از داده ها در پاسكال وجود دارند كه داده هاي بولي خوانده مي شوند مقادير بولي داراي دو ارزش درستي يا نادرستي اند كه در پاسكال با صفر و يك نمايش داده مي شوند صفر به معني نادرستي و يك به معني درستي به كار ميرود اين نوع داده ها با كلمه Boolean تعريف ميشوند.
دستورات ورودي در پاسكال:
دستور Readlnبراي خواندن اطلاعات از ورودي به كار ميرود.
فرمت آن به صورت مقابل است:
(اسامي متغيرها)read/ln
اسامي متغيرها بايد با كاما از يكديگر جدا شوند..
براي چاپ اطلاعات در خروجي از دستور write/ln استفاده ميكنيم.
فرمت آن به صورت مقابل است:
' يك پيام '
( متغير ) write/ln
عبارت محاسباتي
انتساب متغيرها:
مقدار ثابت
( متغير )=: متغير
عبارت محاسباتي
مثال : برنامه اي بنويسيد كه دو عدد را از ورودي دريافت و حاصلجمع آن دو را چاپ كند .
Program add;
Var
a,b:integer;
begin
writeln('enter 2 num');
readln(a,b);
c:=a+b;
writeln('result is =',c);
end.
تكليف : چرا برنامه بايد ادب داشته باشد ؟
مثال : برنامه اي بنويسيد كه حقوق پايه وتعداد فرزندان يك كارگر را از ورودي دريافت و مبلغ حقوق وي را بر اساس فرمول زير حساب كنيد.
10*تعداد فرزندان + حقوق پايه =حقوق كل
Program test;
Var
Salary:longint;
Child:byte;
kole:integer
Begin
Writeln('enter salary and number of child);
Readln(salary,child);
Kole := salary + child *10
Writeln('kole is ',kole);
END.
اولويت عملگرها:
/ *
- +
شرط:
then شرط if
Begin
____
____
____
end
else
begin
____
____
____
end;
uody
3rd April 2011, 12:11 AM
نكته : دستورالعمل قبل از IF سمي كالن نمي گيرد
عناصر شرط:
< > <= >= = <>
اپراتورها :
AND OR NOT XOR
NOT A
1 0
0 1
XOR OR AND B A
0 1 1 1 1
1 1 0 0 1
1 1 0 1 0
0 0 0 0 0
مثال : برنامه اي بنويسيد كه با دريافت دو عدد بزرگترين آنها را چاپ كند.
Program test;
Var
a,b:integer;
if a>b then
begin
writeln(a);
end
else
writeln(b);
end.
مثال : برنامه اي بنويسيد كه با دريافت سه عدد به عنوان ضرايب y=ax2+bx+c معادله درجه دو را حل كند(اين برنامه را با يك If بنويسيد).
Var
A,b,c:integer;
D,x1,x2:real;
Begin
Writeln('enter a,b,c');
Readln(a,b,c);
D:=b*b-4*a*c;
If (d >=0 ) then
Begin
X1:=(-b+sqrt(d))/2*a);
X1:=(-b-sqrt(d))/2*a);
مثال : برنامه اي بنويسيد كه تعداد فرزندان وحقوق پايه و رتبه يك كارگر را از ورودي دريافت و حقوق كل وي را بر اساس فرمول زير حساب كند.
كسريها - مزايا +بيمه = حقوق كل
5*رتبه +1000* تعداد فرزند = مزايا
ماليات + بيمه = كسريها
بيشتر كمتر يا مساوي 2 تعداد فرزند
تعداد فرزندان 1000 بيمه
هر چيزي ديگر 20 تا 0 رتبه
حقوق پايه حقوق پايه*100/10 ماليات
begin
writeln('enter salary and grade and number of child');
readln(salary ,num,grade);
if num<=2 then
bimeh:=100
else
bimeh :=num*500;
if (grade>=0) and (grade<=20)then
net := 10/100*salary
else
if grade >20 then
begin
net:=20/100*salary;
mazaya:=num*1000+grade*50;
kasry:=bimeh+net;
kol :=salary + mazaya-kasry;
end;
writeln(kol);
end.
تكليف : در يك تركيب شيميايي 4 عنصر شركت دارند مقدار مجاز براي تهيه ماده اي به نام asxd به اين صورت است.
A 0 ~ 50
S 0.5 ~ 0.83
X 81 ~ 92 or 824 ~ 901
D -100 ~ 100
با دريافت مقادير a,s,x,d از ورودي به ما بگويد كه آيا مي توان اين ماده را توليد كرد يا نه ؟
Begin
Num:=0;
Writeln('please enter a s x d');
Readln(a,s,x,d);
If (a>0) and(a<50) then
Num:=num+1;
If (s>0.5)and (s<0.83) then
Num:=num+1;
If ((x>81)and(x<92))or ((x>824)and(x<901))then
Num:=num+1;
If (d>-100) and (d<100) then
Num:=num+1;
If num=4 then
Writeln('yes can')
Else
Writeln('you can not');
End.
uody
3rd April 2011, 01:45 AM
تكليف : برنامه اي بنويسيد كه با دريافت سه عدد و با فرض اينكه عدد دوم وتر ميباشد به ما بگوييد كه آيا اين سه عدد تشكيل يك مثلث قايم الزاويه مي دهد يا خير؟
CASE:
CASE ميتواند تعداداي شرط را بگيرد و انتخاب كند.
مقاديري كه دستور CASE ميپذيرد ORDINAL است مقاديري كهORDINAL هستند داراي تركيب نيستند و همچنين قابل شمارش هم هستند مثل INTEGER,CHARACTER,BYTE,BOOLEAN,LONGINT,…
پسREAL,STRING ORDINAL<---- نيستند
CASE تنها دستوري است كه BEGIN ندارد ولي END دارد
مقدارها ميتوانند شامل يك مقدار يا چند مقدار كه از يكديگر با كاما جدا شده اند باشند و يا يگ سري شمارشي باشند مثل:
1:------
1,10,28:------
1..100,150..243:---------
'A'..'Z':---------
Of متغير Case
Begin : مقدار1
-------
-------
End;
Begin : مقدار2
-------
-------
End;
Begin :Else
-------
-------
End;
End.
مثال : برنامه اي بنويسيد كه يك عدد را از ورودي دريافت ( (0<=x<3وتلفظ آنها را چاپ كند.
BEGIN
READLN(X);
CASE X OF
0:WRITELN('ZERO');
1:WRITELN('ONE');
2:WRITELN('TWO')
ELSE
WRITELN('ERROR');
END;
END.
مثال : برنامه اي بنويسيد كه دو عدد را از ورودي دريافت و چنانچه عدد اول در بازه 0 تا 5 بود توان دوم عدد دوم را چاپ كند چنانچه 68 بود حاصلضرب دو عدد را چاپ كند و در غير اينصورت مقادير مجاز را چاپ كند.
BEGIN
WRITELN('ENTER TWO NUMBER');
READLN(A,B);
CASE A OF
0..5 :WRITELN(B*B);
68:WRITELN(A*B)
ELSE
WRITELN('ENTER 0..5 OR 68');
END;
END.
- معادل برنامه بالا با دستور If :
Begin
Writeln('enter 2 number');
Readln(a,b);
If (a>=0)and(a<=5) then
Writeln(b*b)
Else
If a=68 then
Writeln(a*b)
Else
Writeln('enter 0..5 or68');
End.
تكليف : روشي براي تلفظ اعداد پيدا كنيد.
حلقه تكرار :
1- تعداد معين
2- تعداد معين
Do مقدار نهايي to { مقدار شروع=: متغير for
downto
begin
___
___
___
end;
توجه مهم : در برخي از حلقه ها دستورات داخل حلقه به متغير حلقه مرتبط مي باشند و در برخي موارد هيچگونه ارتباطي وجود ندارد.
حلقه for براي تعداد تكرار معين به كار ميرود
Downto : در مواردي به كار ميرود كه مقدار اوليه از مقدار نهايي بيشتر باشد
uody
3rd April 2011, 01:49 AM
مثال : برنامه اي بنويسيد كه توان دوم اعداد 100 تا 200 را چاپ كند.
Begin
For i:=100 to 200 do
Begin
Writeln(i*i);
End;
End.
نكته : اجازه نداريد مقدار متغير حلقه را در داخل بدنه عوض كنيد .
مثال : برنامه اي بنويسيد كه حاصلجمع اعداد 100..1 را چاپ كند.
Begin
Sum:=0;
For i:=1 to 10 do
Begin
Sum:=sum+i
End;
Write(sum);
End.
مثال : برنامه اي بنويسيد كه حاصلجمع مضارب 5 بين 0 تا 100را به دست آورد.
Begin
Sum:=0;
For I:=1 to 20 do
Begin
Sum:=sum+i*5;
End;
Writeln(sum);
End.
مثال : برنامه اي بنويسيد كه دو عدد را از ورودي دريافت و اعداد ما بين اين دو عدد را چاپ كند (aBegin
Writeln('enter a,b');
Readln(a,b);
For I:= a to b do
Writeln(i);
End.
مثال : برنامه اي بنويسيد كه با يك حلقه for اعداد بين100..1 و738..353و 950..940 را چاپ كند
Begin
For i:=1 to 950 do
Begin
If ( i>=1) and (i<=100) then
Writeln(i);
If (i>353) and (i<=738) then
Writeln(i);
If (i>=940) and (i<=950) then
Writeln(i);
End;
End.
معادل برنامه بالا با استفاده از دستور case :
Begin
For i:=1 to 950 do
Case I of
1..100,353..738,940..950: writeln(i);
end;
end.
باقيمانده mod
مثال :
X mod y
مثال : برنامه اي بنويسيد كه مضارب 7 بين 1 تا 100 را چاپ كند
Begin
For i:= 1 to 100 do
Begin
If I mod 7 = 0 then
Writeln(i);
End;
End.
مثال : برنامه اي بنويسيد كه تعداد مضارب 5و7 را در بازه 231~846 چاپ كند.
Begin
K:=0;
C:=0;
For i:=846 downto 231 do
Begin
If I mod 5 = 0 then
C:=c+1;
If I mod 7 = 0 then
K:=k+1;
End;
Writeln('5=',c,'7=',k);
End;
End.
مثال : برنامه اي بنويسيد كه حقوق پايه وتعداد فرزندان 100 كارگر را از ورودي دريافت و مبلغ حقوق آنها را بر اساس فرمول زير حساب كند0
1000*تعداد فرزند + حقوق پايه = حقوق كل
Begin
For i:=1 to 100 do
Begin
Writeln('enter salary and number of children');
readln(salary,num);
kol := salary + num * 1000;
writeln(kol);
end;
end.
مثال : برنامه اي بنويسيد كه 100 عدد را از ورودي دريافت و ميانگين و حاصلجمع آنها را به ما بدهد.
Begin
Sum:=0;
For i:= 1 to 100 do
Begin
Writeln('enter num');
Readln(num);
Sum:=sum+num;
End;
Ave:=ave/100;
Writeln(sum,ave);
End.
uody
3rd April 2011, 01:50 AM
تعداد تكرار نامعين :
Do شرط while
begin
___
___
___
end;
مثال : برنامه اي بنويسيد كه اعداد 100..1 را چاپ كند
Begin
I:=1;
While i<=100 do
Begin
Write(i);
I:=i+1;
End;
مثال : برنامه اي بنويسيد كه تعدادي اسم را از ورودي دريافت و به ما بگويد چند بار اسم ali تكرار شده است(آخرين اسم end است).
Var
S:integer;
St:string;
Begin
Read(st);
While st<> 'end' do
Begin
If st='ali' then
S:=s+1;
Read(st);
End;write(s);
End.
مثال : برنامه اي بنويسيد كه تعدادي عدد كه آخرين آنها صفر است را از ورودي دريافت و حاصلجمع آنها را چاپ كند.
Begin
Readln(num);
T:=1;
While num<>0 do
Begin
Sum:=sum+num;
Readln(num);
T:=t+1;
End;
Writeln('s=',s,'average',s/t);
End;
تكليف : براي دانش آموزان يك كلاس برنامه اي بنويسيد كه نام آنها به همراه تعداد نمرات و سپس نمرات آنها را به فرم زير از ورودي دريافت كند.تعداد دانش آموزان كلاس نامعين است ولي آخرين نفر نامش end است .برنامه ميبايستي پس از دريافت هر يك از اطلاعات پيامي به شكل زير چاپ كند.
Average: Sum: Ali Name:
3
18
20
13.5
program test;
var
name:string[10];
ave,sum,nomreh:real;
num,i:integer;
begin
writeln('enter name ' );
readln(name);
while name <> 'end' do
begin
writeln('enter num:');
readln(num);
for i:=1 to num do
begin
writeln('enter nomreh: ');
readln(nomreh);
sum:=sum+nomreh;
end;
ave:=sum/num;
writeln('name:',name,'sum:',sum,'ave:',ave);
writeln('enter name ');
readln(name);
end;
end.
تكليف : ميخواهيم براي برنامه هاي خود يك منو تهيه كنيم اين منو شامل موارد زير است
1) load
2) save
3) edit
4) exit
please select a number :
program test;
var
num:integer;
begin
writeln(' 1) load');
writeln(' 2) save');
writeln(' 3) edit');
writeln(' 4) exit');
writeln(please select a number : ');
readln(num);
while num<>4 do
begin
case num of
1:writeln('loading');
2:writeln('saving');
3:writeln('editing');
end;
end;
end.
مثال : برنامه اي بنويسيد كه دو عدد را از ورودي دريافت و طبق جدول زير نسبت به مقدار آن واكنش نشان دهد
3 2 1 a
B+...+3+2+1 1..b b..1 واكنش
Begin
Writeln (' enter a,b :');
Readln(a,b);
Case a of
1:begin
for i:=1 to b do
write(i);
end;
2:begin
or I;=b downto 1 do
write(i);
end;
3:begin
sum:=0;
for i:=1 to b do
sum:=sum+I;
write(sum);
end;
end.
uody
3rd April 2011, 01:51 AM
آرايه ها :
آرايه ها به عناصري اتلاق ميشود كه با يك نام تعدادي محل از حافظه را كنترل كند براي تشخيص محلها از انديس استفاده ميشود
انواع آرايه ها :
1- آرايه هاي يك بعدي
2- عناصر دو بعدي
3- آرايه هاي سه بعدي
تعريف آرايه ها :
var
نوع of ]انديس پايان..انديس شروع: array [ نام آرايه
نوع متغير آرايه : متغير آرايه
خواندن آرايه :
مثال : برنامه اي بنويسيد كه نمرات 100 دانش آموز را از ورودي دريافت و در يك آرايه بريزد.
Var
A:array[1..100] of real;
Begin
For i:=1 to 100 do
Readln(a[i ]);
مثال : برنامه اي بنويسيد كه نمرات 100 دانش آموز را از ورودي دريافت و 50 تاي اول را چاپ كند سپس تعداد نمرات 20 را مشخص كند.
Var
A:array[1..100] of real;
Begin
For I;=1 to 100 do
Writeln('enter no(',I,')');
Readln(a[ i]);
For i:=1 to 50 do
Writeln(a [ i]);
S:=0;
For i:=1 to 100 do
If i:=1 to 100 do
If a[ i]=20 then
S:=s+1;
Writeln(s);
End.
پيدا كردن max,min
عنصر اول =min
حلقه براي گردش در آرايه
Min < عنصر فعلي if
عنصر فعلي min :=
Write(min);
مثال : برنامه اي بنويسيد كه با دريافت نمرات 100 دانش آموز بالاترين و پايين ترين نمره را در بين اين 100 نفر پيدا كند.
Var
A:array[1..100] of real;
I:integer;
Begin
For i:=1 to 100 do
Readln(a[ i ] );
Min:=a[1];
Max:=a[1];
For i:=2 to 100 do
Begin
If a[1]< min then
Min:=a[ i];
If a[ i]>max then
Max := a[i ];
End;
Writeln('max is :',max,'min is :',min);
End.
مثال : برنامه اي بنويسيد كه با دريافت 100 اسم به ما بگويد تعداد تكرار اسم ali چند بار است وآيا اسم hassan بيشتر ذكر شده يا اسم reza ؟
Var
A:array [1..100] of string;
Begin
For i:=1 to 100 do
Readln(a[ i ]);
Ali:=0;
Reza:=0;
Hassan:=0;
For i:=1 to 100 do
Begin
If a[ i]='ali' then
Ali:=ali+1;
If a[ i]='reza' then
Reza:=reza+1;
If a[ i]='hassan' then
Hassan:=hassan+1;
Endd
Writeln(ali is :',ali);
If reza>hassan then
Writeln('reza')
Else
Writeln('hassan');
End.
مثال : برنامه اي بنويسيد كه با دريافت نام و نمره 100 دانش آموز تنبل ترين فرد كلاس را مشخص كند.
Var
Name:array[1..100] of string;
No:array[1..100] of real;
Begin
For i:=1 to 100 do
Begin
Readln(name[ i]);
Readln(no[ i]);
End;
Min:=no[1];
Namemin:=name[1];
For i:=2 to 100 do begin
If no[ i]
Begin
Min:=no[ i];
Namemin:=name[ i];
Writeln(namemin);
End.
آرايه هاي دو بعدي:
وقتي از آرايه دوبعدي استفاده ميكنيم بايد از دو حقه for استفاده كنيم.
مثال : برنامه اي بنويسيد كه نمرات 4 كلاس كه هر يك 20 دانش آموز دارد را از ورودي دريافت وتنبل ترين فرد را در اين 4 كلاس مشخص كند.
Var
A:array[1..20,1..4] of real;
Begin
For i:=1 to 4 do
Begin
For j:=1 to 20 do
Readln(a[j, i]);
End;
Min:=a[1,1];
For i:=1 to 4 do
For j:=1 to 20 do
If a[j,i]< min then
Min:=a[j,i];
Writeln(min);
End.
مثال : در يك آرايه 100*20دوهزار كاراكتر نگهداري ميشود برنامه اي بنويسيد كه تعداد تكرار حرف A را با a مقايسه كند و همچنين به ما بگويد آيا كاراكتر z در اين ماتريس وجود دارد ؟
Var
A:array[1..20,1..100] of character;
Bool:Boolean;
B,b1:integer;
Begin
For i:=1 to 100 do
For j:=1 to 20 do
If a[I,j]='A' then
B:=b+1;
If a[I,j]='a' then
B1:=b1+1;
If a[I,j]='z' then
Bool:=true;
End;
If b>b1 then writeln('A>a');
If bIf b=b1 then writeln('A=a');
If true then writeln('''z''exist');
End.
تكليف : ميخواهيم نام و نمره تعدادي دانش آموز يك كلاس را از ورودي دريافت كنيم و مشخص كنيم كه تنبل ترين و زرنگ ترين فرد كلاس كيست.چند نفر نمره زير 10 گرفتند؟نام كساني كه نمره آنها در بازه 17 تا 15 مي باشد ب همراه نمره آنها چاپ شود آخرين نفر نامش end است حداكثر تعداد دانش آموزان 100 نفر است.
Var
a:array [1..100] of string ;
b:array[1..100] of real;
begin
i:=1;
read(a[ i]);
while a[ i]<>'end' do begin
readln(b[ i]);
i:=i+1;
readln(a[ i]);
end;
j:=i-1;
min:=a[1];
max:=a[1];
for i:= 2 to j do
begin
if b[ i] >max then
begin
max:=b[ i];
name:a[ i];
end;
end
writeln(name);
count:=0;
for i:=1 to j do
if b[i ]<=10 then
count:=count+1;
writeln(count);
for i:=1 to j do
if (b[ i]<17) and (b[ i]>15) then
write(b[ i],a[ i]);
end.
تكليف : برنامه اي بنويسيد كه حاصل اين عبارت را حساب كند.
i/i!=1/1!+2/2!+3/3!+4/4!+5/5!
N!= 1*2*3*4*…*n
Begin
Sum:=0;
For n:=1 to 5 do
Begin
For m:=1 to n do
F:=f*m;
Sum:=sum+n/f;
End;
Writeln(sum);
End.
تكليف : برنامه اي بنويسيد كه نمرات 80 دانش آموز را كه در چهار كلاس دسته بنده شده اند را از ورودي دريافت كند سپس به سوالات زير جواب دهد.
1- معدل هر يك از كلاسها
2- نمره تنبل ترين و زرنگترين شخص در هر كلاس به طور جداگانه
Var
A:array [1..4,1..20] of real;
Begin
For i:=1 to 4 do
For j:=1 to 20 do
Begin
Writeln('please enter nomreh');
Readln(a[I,j]);
End;
For i:=1 to 4 do
Begin
Sum:=0 ;
For j:=1 to 20 do
Begin
Sum:=a[I,j]+sum;
End;
Writeln(sum/20,'average of this class');
End;
For i:=1 to 4 do
Begin
Max :=a[1,1];
Min:=a[1,1];
For j:=2 to 20 do
Begin
If a[I,j]>max then
Max :=a[I,j];
End;
Writeln(I,min,max);
End;
End.
uody
3rd April 2011, 01:53 AM
- String :
String آرايه اي از كاراكترهاست .اغلب لازم است كاراكترهايي در رشته موجود درج شوندو يا كاراكترهايي به جاي بخشي از رشته نوشته شوند , زيررشته اي در رشته جستجو گردد و يا دو رشته با هم الحاق شوند.
رشته تهي : طول رشته ثابت نيست و با داداه هايي كه در آن ذخيره شده است مشخص مي گردد.كاراكترهايي كه در رشته قرار مي گيرد از حداكثر طولي كه براي آن تعيين ميشود بيشتر نخواهد بود. اگر name رشته كاراكتري باشد دستور زير name را به رشته تهي تبديل ميكند:
Name:='';
تبديل رشته به اعداد :
در پاسكال زير برنامه هايي وجود دارند كه به آساني ميتوانند رشته ها را پردازش كنند. زيربرنامه val رشته عددي را گرفته به مقدار عددي تبديل ميكند.
رشته عددي رشته اي است كه حاوي كاراترهاي '0' تا '9' و نقطه مميز باشد مثل '12.5' و'13.5' زيربرنامه val به صورت زير به كار ميرود.
Val (st,number,error)
St رشته اي است كه بايد به عدد تبديل شود و number متغيري است كه رشته تبديل شده به عدد در آن قرار ميگيرد. چنانچه در رشته st كاراكتر نا معتبري (كاراكترهاي غير از( '0' تا '9' و'.' ) , محل وجود آن كاراكتر در پارامتر error قرار ميگيرد. اگر error برابر با صفر باشد معنايش اينست كه كاراكتر نا معتبري وجود ندارد. اگر number از نوع صحيح باشد st به مقدار صحيح و اگر number از نوع اعشاري باشد st به مقدار اعشاري تبديل ميشود .
مثال زير را در نظر بگيريد:
Var st :string;
Num,e:integer;
St:='352';
Val (st,num,e);
مقدار 352 در متغير num ومقدار صفر در متغير e قرار ميگيرد اكنون دستورات زير را در نظر بگيريد :
St:='35#'2;
Val (st,num,e);
با اجراي دستور val به دليل وجود كاراكتر' # ' كه كاراكتر نامعتبري در اعداد است عدد 2 در متغير e قرار ميگيرد و معنايش اينست كه كاراكتر شماره 2 ( شماره گذاري از صفر شروع ميشود) نامعتبر است و عمل تبديل صورت نميگيرد و مقدار num تعريف نشده است.
تبديل عدد به رشته :
براي تبديل مقدار عددي به رشته عددي از زيربرنامهstr استفادهميشود و به صورت زير به كار ميرود:
Str (number : format,numstring)
با اين دستور مقداري كه در number قرار دارد به رشته اي به طول format تبديل ميشود و در رشته numstring قرار ميگيرد . دستورات زير را در نظر بگيريد:
Var x:integer;
St:string;
X=352;
Str(x:5,st);
با اجراي اين دستور مقدار 352 به رشته '352' تبديل شده در st قرار ميگيرد
دستورات زير را در نظر بگيريد:
Var y1,y2:real;
St1,st2 : string;
Y1:=352.768
Y2:=476.395
Str(y1:7:2,st1);
Str(y2:3:1,st2);
با اجراي دستور str اول مقدار 352.768 به رشته '352.768' تبديل ميشود و در st1 قرار ميگيرد و با اجراي دستورstr دوم مقدار 476.395 به رشته '476.395'تبديل ميشود و در st2 قرار ميگيرد.
جدا كردن زيررشته اي از رشته:
زيررشته بخشي از رشته است و براي جدا كردن زيررشته از رشته از تابع copy استفاده ميشودتابع copy به صورت زير به كار ميرود.
Copy (source,index,size)
S:='I am learning pascal ';
S1:=copy(s,15,6);
دستور copy باعث ميگردد تا با شروع از محل 15 تعداد 6 كاراكتر از رشته s استخراج شود و در s1 قرار گيرد. بنابراين محتويات رشته s1 برابر است با 'pascal'.
الحاق رشته ها :
منظور از الحاق رشته ها اتصال رشته ها به يكديگر است به عنوان مثال اگرs1:='ab' و s2:='cde' الحاق دو رشته (s1,s2) به صورت 'abcde' خواهد بود براي الحاق رشته ها از تابع concat استفاده ميشود:
(اسامي رشته ها)concat
دستورات زير را در نظر بگيريد:
S1:='pascal';
S2:='is a ;
S3:='language';
S4:=concat(s1,s2,s3);
با اجراي اين دستور s3 به انتهاي s2 متصل ميشود و رشته نتيجه به انتهاي s1 متصل ميگردد و در نتيجه رشته s4 عبارت است از'pascal is a language': . اگر طول رشته حاصل بيش از 255 باشد بقيه كاراكترها حذف ميشوند.
جستجوي رشته اي در رشته ديگر:
براي اين كار از تابع pos استفاده ميشود كاربرذ اين تابع به صورت زير است:
Pos(s1,s2)
S1 رشته اي است كه بايد در s2 وجود داشته باشد محل اولين وقوع آن برگردانده ميشود و گر نه مقدار صفر برگردانده ميشود دستورات زير را در نظر بگيريد:
S1:='learning'
S2:='I am learning pascal';
S3:='english'
X:=pos(s1,s2)
y:=pos(s3,s2)
چون رشته s1 در s2 وجود دارد دستور pos اول مقدار 6 را در x قرار ميدهد و معنايش اين است كه رشته 'learning' در محل 6 رشته s2 وجود ندارد مقدار صفر در y قرار ميگيرد.
محاسبه طول رشته :
براي محاسبه طول رشته از تابع length به صورت زير استفاده ميشود:
(رشته)length
دستورات زير را در نظر بگيريد:
S1:='xymn'
X:=length(s1)
چون طول رشته s1 برابر 4 است مقدار x برابر 4 خواهد بود.
حذف و درج زيررشته:
زير رشته اي را ميتوان از رشته اي حذف كرد و يا زيررشته اي را ميتوان در رشته اي درج كرد براي حذف زير رشته از زيربرنامه ها به صورت زير به كار ميروند:
Delete(source,index,size)
Insert(pattern,destination,index)
در زيربرنامه delete زيررشته اي به طول size با شروع از محل index از رشته source حذف ميشود و در زيربرنامه insert زيررشته pattern با شروع از محل index در رشته destination درج ميشوددستورات زير را در نظر بگيريد:
S1:=pas***cal
Delete(s1,4,3)
S2:='paal';
S3:='sc';
Insert(s3,s2,);
دستور delete باعث ميشود تا با شروع از محل 4 رشته s1 حذف شده و رشته s1 به pascalتبديل شود دستور insert موجب ميشود تا رشته s3 در s2 درج شود و در نتيجه رشته s2 به 'pascal' تبديل شود.
مثال : برنامه اي بنويسيد كه يك اسم را از ورودي دريافت و آنرا بر عكس چاپ كند
Readln(name);
For i:=length(name) downto 1 do
Write (name[ i])
مثال : برنامه اي بنويسيد كه كه يك نام را از ورودي دريافت و به ما بگويد كه آيا اين نام با حرف a شروع ميشود يا خير؟
Readln(name);
If name[1]='a' then
Writeln('ok')
Else
Writeln('not ok');
مثال : برنامه اي بنويسيد كه يك نام را از ورودي دريافت و حروف آنرا يك در ميان چاپ كند.
Readln(name);
For i:=1 to length(name) do
If I mod 2 = 0 then
Writeln(name[ i]);
روش ديگر:''
For i:=1 to int(length(name)/2) do
Writeln(name[ i*2]);
مثال : برنامه اي بنويسيد كه يك رشته را از ورودي دريافت و متقارن بودن آنرا چك كند.
1 2 3 4 5 5 4 3 2 1
var
N:string;
Begin
Readln(n);
For i:=1 to int(length(n)/2) do
Begin
If n[i ] <> n[length(n) -i+1] then
K:=0;
End;
If k=1 then
Writeln ('ok')
Else
Writeln('no');
End.
مثال : برنامه اي بنويسيد كه تعداد حروف a موجود در يك رشته ورودي را بشمارد.
Var st:string;
Begin
Readln(st);
C:=0;
For i:=1 to length(st) do
If st[ i]='a' then ?if st[ i] in ['a','A'] then
C:=c+1;
Writeln©
مثال : برنامه اي بنويسيد كه تعداد اسامي alireza موجود در رشته را بشمارد.
Begin
Readln(st);
C:=0;
While pos('alireza',st) <> 0 do
Begin
C:=c+1;
J:=pos('alireza',st);
Delete(st,pos('ali',st),3);
End;
Write ( c );
End.
مثال : برنامه اي بنويسيد كه دو رشته را از ورودي دريافت و بعد از كاراكترمساوي كه در رشته اول وجود دارد رشته دوم را چاپ كند.
Readln(st,st1);
J:=pos('=',st);
Writeln(copy ((st,1 j) , st1, copy (st,j+1,100));
تكليف : برنامه اي بنويسيد كه با دريافت سه حرف و قرار دادن آنها در يك آرايه سه تايي كليه تركيبات ممكن را كه سه حرف تركيباتشان به هم نخورد چاپ كند.
W a x
A x w
W a x
مثال : برنامه اي بنويسيد كه يك رشته را از ورودي دريافت و كليه كلمات موجود در آن را بشمارد.
Readln(st);
S:=0;
St:=st+' '
While pos(' ',st) <> 0 do
Begin
S;=s+1;
Delete(st,1,pos(' ',st));
While st[1]=' 'do
Delet (st,1,1);
End;
End.
تكليف : برنامه اي بنويسيد كه 100 رسته را از ورودي دريافت و در يك آرايه به طول 100 از نوع string بريزيد و به سؤالات زير جواب دهد.
1- تعداد كل كلمات
1- تعداد كل حروف
2- تعداد حروف صدا دار
uody
3rd April 2011, 01:54 AM
ذخيره اطلاعات :
Log file : فايلي است كه تمام تغييرات مربوط به يك محيط را ثبت ميكند
فايلها :
1- متني text
2- ركوردي typed
3-بدون نوع
4-untyped
معرفي فايلهاي متني :
Var
Text : نام فايل
نسبت دادن فايل :
; ('نام خارجي ,'نام فايل ) assign
مثال :
Assign(f,'c:\a1.dat.ddd');
باز كردن جهت خواندن
;( نام فايل)reset
باز كردن جهت نوشتن
; ( نام فايل)rewrite
) ___,نام فايل)readln
) ___,نام فايل)writeln
) نام فايل)close
تا close انجام نشود data ذخيره نميشود .
نكته بسيار مهم : در هر يك از مسائلي كه در مورد فايلها مطرح ميشود مي بايستي به نحوي از يكي از تكنيكهاي نگهداري اطلاعات در حافظه اصلي استفاده نمود اين تكنيكها ممكن است استفاده از متغيرها و آرايه ها و ماتريسها و ودرختهاو...استفاده نمود ولي تنها با دو عمل خواندن و نوشتن به روي فايل كار انجام ميشود
Update : ميخوانيم ولي دوباره ميريزيم سر جاش
Append : بهش يك چيزي اضافه ميكنيم
نكته : عمل rewrite باعث ميگردد چنانچه فايل وجود نداشته باشد ايجاد و چنانچه وجود دارد اطلاعاتش به طور كامل پاك شود.
مثال : برنامه اي بنويسيد كه100 اسم را از ورودي دريافت و آنها را در يك فايل به نام a1.dat))بنويسد.
Var
F:text;a:string;
Begin
Assign(f,'a1.dat');
Rewrite(f);
For i:=1 to 100 do
Readln(a);
Writeln(f,a);
End;
Close(f);
End.
مثال : برنامه اي بنويسيد كه فايل a1.dat را خوانده و به ما بگويد چند بار اسم ali تكرار شده است؟
Var
A:text;
B:string;
Begin
Assign(a,'a1.dat');
Reset(a);
Sum:=0;
For i:=1 to 00 do
Begin
Readln(a,b);
If b='ali' then
Sum:=sum+1;
End;
Close(a,b);
End;
مثال : برنامه اي بنويسيد كه تعدادي اسم را كه آخرين آنها end است از ورودي دريافت و در يك فايل به نام aa.dat بريزد آنگاه فايل را بسته و قسمتهاي زير را به طور جداگانه انجام دهد.
1- تعداد حسنها بيستر است يا علي ها
2- چند اسم وجود دارد كه با حرف 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:=1;
A:=1;
Z:=1;
Reset(f);
While not eof (f) do
Begin
Readln(f,name);
If name='ali' then
A:=a+1;
If name ='hassan' then
H:=h+1;
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+1;
End;
Close(f);
Writeln('sum of z is :'z);
End.
تكليف : برنامه اي بنويسيد كه تعدادي نام را از ورودي دريافت و در يك فايل بريزد سپس فايل تشكيل شده را باز كرده و از روي اين فايل دو فايل ديگر تشكيل دهيد كه در يكي از آنها اسامي كه بين a تا z قرار گرفته اند ريخته و در فايل دوم كليه اسامي كه از v تا z هستند را بريزد.
Program test;
Var
Name : string;
F,f1,f2:text;
Begin
Assign(f,'a.dat');
Rewrite(f);
Writeln('enter a name ');
Readln(name);
While length(name)>0 do
Begin
Writeln(f,name);
Writeln('enter a name');
Readln(name);
End;
Close(f);
Reset(f);
Assign(f1,'a1.dat');
Assign(f2,'a2.dat');
Rewrite(f1);
Rewrite(f2);
While not eof (f) do
begin
Readln(f,name);
Case name[1] of
'a'..'u':writeln(f1,name);
'v'..'z':writeln(f2,name);
end;
end;
close(f2);
close(f1);
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.
منبع:freedownload.ir
استفاده از تمامی مطالب سایت تنها با ذکر منبع آن به نام سایت علمی نخبگان جوان و ذکر آدرس سایت مجاز است
استفاده از نام و برند نخبگان جوان به هر نحو توسط سایر سایت ها ممنوع بوده و پیگرد قانونی دارد
vBulletin® v4.2.5, Copyright ©2000-2025, Jelsoft Enterprises Ltd.