-
پاسخ : آموزش Pascal
فایل های متن ، فایل های داده و فایل های خروجی:
یک فایل متن مجموعه ای از کاراکتر ها است که تحت یک نام روی دیسک ذخیره می شود . می توانید کلیه داده هایی که توسط برنامه مورد پردازش قرار می گیرند را قبل از اجرای برنامه ، در یک فایل متن ذخیره کنید . سپس به برنامه دستور خواندن داده ها را از فایل متن به جای صفحه کلید بدهید .
فایل داده:
یک فایل داده (یا فایل ورودی ) فایلی است که شامل اطلاعات ورودی برنامه است یک فایل داده می تواند از نوع متن دودویی باشد .
مزایای فایل داده ها :
یکی از مزایای فایل های داده این است که می توان آن ها را با استفاده از ویراستار برنامه(یا واژه پرداز)بازیابی کرد و قبل از اینکه فایل ، توسط برنامه پردازش شود خطاهای آن را اصلاح کرد . مزیت دیگر آنها این است که می توانند چندین بار توسط برنامه خوانده شوند .این خاصیت ،اشکال زدایی را آسان می کند. همچنین می توان نتایج برنامه را به جای صفحه کلید در یک متن ،نوشت .
ساختار اطلاعات در یک فایل متن:
یک فایل متن می تواند توسط یک ویراستار ،ایجاد و ذخیره شود هر کاراکتری که تایپ می شود به طور موقت در حافظه اصلی قرار می گیرد و روی صفحه ، نمایش داده می شود . وقتی فایلی ذخیره می کنید ، اطلاعات روی صفحه نمایش ، به صورت رشته ای از کاراکتر ها روی دیسک ذخیره می شوند .
ساختار منطقی یک فایل متن:
از نظر منطقی فایل متن شامل خطوطی از کاراکتر ها است که این خطوط توسط کاراکتر< 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 )
-
پاسخ : آموزش Pascal
نامهاي داخلي و خارجي فايل:
براي اینکه پاسكال قادر به بازيابي يك فايل ذخيره شده روي ديسك باشد ، بايد نام دايركتوري ديسك كه فايل در آنجا قرار مي گيرد را داشته باشيد.
رويه 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 باشد ،خطا است.
-
پاسخ : آموزش Pascal
استفاده از فایل های متن:
اگر برنامه خروجی خود را به جای صفحه نمایش روی دیسک بنویسد ، برنامه دیگری می تواند از این خروجی به عنوان یک فایل داده استفاده کند . در حقیقت دو برنامه از طریق یک فایل دیسک با یک دیگر ارتباط برقرار می کنند.
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 .
-
پاسخ : آموزش Pascal
مثال 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 .
-
پاسخ : آموزش Pascal
سلام اباجی خانوم برو تو بحث شش وزیر و حرکت اسب و اینا{thumbs down}
-
پاسخ : آموزش Pascal
-
پاسخ : آموزش Pascal
تو درس طراحي الگوريتم هم فكر كنم باشه ها چون يادمه من ديدم ;)
ممنون از مجتبي عزيز @};-
-
پاسخ : آموزش Pascal
ممنون از ابجی با اطلاعات مفیدشون
منتظر ادامه اموزش مفیدتون هستیم.
-
پاسخ : آموزش پاسکال
آموزش پاسکال
زبان پاسكال يكي از زبانهاي برنامه سازي است كه ويژگيهاي آموزشي آن بسيار بالاست يعني زبان خوبي براي آموزش برنامه نويسي منظم و دقيق است.قابليت خوانايي و درك برنامه هاي اين زبان بالاست وميتوان برنامه هايي نوشت كه احتمال خطاهاي آنها بسيار اندك باشد علتش اين است كه يك زبان ساختار يافته (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;
-
پاسخ : آموزش پاسکال
نكته : دستورالعمل قبل از 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.
Forum Modifications By
Marco Mamdouh