آموزش پاسکال (قسمت چهارم) دستورات زیر را در نظر بگیرید: 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(c) مثال : برنامه ای بنویسید که تعداد اسامی 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- تعداد حروف صدا دار
ذخیره اطلاعات :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. تکلیف :برنامه ای بنویسید که در ضمن عمل merge دو فایل مرتب شده را با یکدیگر ترکیب و یک فایل مرتب شده به دست آوریم. پایان... |