اسلایدهای فصل ششم

Download Report

Transcript اسلایدهای فصل ششم

‫عملیات با رشتهها‬
‫موسوی ندوشنی‬
‫ویراست ‪1389‬‬
‫‪1‬‬
‫دانشگاه صنعت اب و برق‬
‫توابع کتابخانهای‬
‫‪ ‬تابع )‪Len(s‬‬
‫• آرگومان آن رشته است‪.‬‬
‫• خروجی عددی است که طول رشته را نشان میدهد‪.‬‬
‫‪ ‬مثال‪:‬‬
‫‪ Character(Len=15) :: str‬‬
‫‪ i=Len(str) ! returns 15‬‬
‫‪2‬‬
‫دانشگاه صنعت اب و برق‬
‫دنباله توابع کتابخانهای‬
‫‪ ‬تابع ‪Trim‬‬
‫• آرگومان آن رشته است‪.‬‬
‫• خروجی همان رشته ورودی است با این تفاوت که فواصل‬
‫خالی راست حذف میشود‪.‬‬
‫‪ ‬مثال‪:‬‬
‫)'‪ Print*, Trim('Fortran90‬‬
‫‪ Ans: Fortran90‬‬
‫‪3‬‬
‫دانشگاه صنعت اب و برق‬
‫دنباله توابع کتابخانهای‬
‫‪ ‬تابع )‪Len_trim(s‬‬
‫• آرگومان آن رشته است‪.‬‬
‫• خروجی عددی است که طول رشته را (بدون احتساب فواصل‬
‫خالی راست آن) نشان میدهد‪.‬‬
‫‪ ‬مثال‪:‬‬
‫‪ INTEGER :: L1, L2‬‬
‫‪ L1 = LEN_TRIM ('GOODDAY') ! returns 9‬‬
‫‪ L2 = LEN_TRIM ('') ! returns 0‬‬
‫‪4‬‬
‫دانشگاه صنعت اب و برق‬
‫دنباله توابع کتابخانهای‬
‫‪ ‬تابع ‪AdjustL‬‬
‫• آرگومان آن رشته است‪.‬‬
‫• خروجی همان رشته ورودی است با این تفاوت که فواصل خالی‬
‫چپ به راست منتقل میشود‪.‬‬
‫‪ ‬مثال‬
‫)'‪ print*, AdjustL('Fortran 90‬‬
‫‪ Ans: Fortran90‬‬
‫‪ ‬اکنون میتوان با تابع ‪ Trim‬فواصل خالی جلوی رشته را‬
‫حذف نمود‪.‬‬
‫))'‪ Print*, Trim(AdjustL('Fortran 90‬‬
‫‪ Ans: Fortran90‬‬
‫‪5‬‬
‫دانشگاه صنعت اب و برق‬
‫دنباله توابع کتابخانهای‬
‫‪ ‬تابع ‪AdjustR‬‬
‫• آرگومان آن رشته است‪.‬‬
‫• خروجی همان رشته ورودی است با این تفاوت که فواصل‬
‫خالی راست به چپ منتقل میشود‪.‬‬
‫‪ ‬مثال‪:‬‬
‫)'‪ print*, AdjustR('Fortran90‬‬
‫‪ Ans: Fortran90‬‬
‫‪6‬‬
‫دانشگاه صنعت اب و برق‬
‫دنباله توابع کتابخانهای‬
‫‪ ‬تابع ‪verify‬‬
‫‪ ‬این تابع دارای دو آرگومان رشتهای است‪ .‬اگر کلیه کاراکترهای آرگومان‬
‫اول در آرگومان دوم موجود باشد‪ ،‬خروجی تابع صفر است‪ .‬مثال‪:‬‬
‫‪ print*, verify('banana', 'abn') ! return 0‬‬
‫‪ print*, verify('banana','cabn') ! return 0‬‬
‫‪ ‬اگر از چپ به راست‪ ،‬اولین کاراکتر آرگومان اول در بین کاراکترهای‬
‫آرگومان دوم وجود نداشته باشد‪ .‬محل آن کاراکتر در آرگومان اول توسط‬
‫تابع فوق مشخص میشود‪ .‬مثال‪:‬‬
‫‪ print*, verify('fbanana','cabn') ! return 1‬‬
‫‪ print*, verify('bafnana','cabn') ! return 3‬‬
‫‪ print*, verify('bafneana','cabn') ! return 3‬‬
‫‪ print*, verify('bafneafna','cabn') ! return 3‬‬
‫‪ print*, verify('banAna','cabn') ! return 4‬‬
‫‪7‬‬
‫دانشگاه صنعت اب و برق‬
‫دنباله توابع کتابخانهای‬
‫‪ ‬تابع ‪scan‬‬
‫‪ ‬اگر از چپ به راست‪ ،‬اولین کاراکتر آرگومان اول در‬
‫بین کاراکترهای آرگومان دوم موجود باشد‪ .‬محل آن‬
‫کاراکتر در آرگومان اول توسط تابع فوق مشخص‬
‫میشود‪ .‬مثال‪:‬‬
‫‪print*, scan('banana','cabn') ! return 1‬‬
‫‪print*, scan('banana','can') ! return 2‬‬
‫‪print*, scan('fortran', 'tr') ! return 3‬‬
‫‪print*, scan('fortran', 'gha') ! return 6‬‬
‫‪print*, scan('fortran', 'ghA') ! return 0‬‬
‫‪8‬‬
‫دانشگاه صنعت اب و برق‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫‪‬‬
‫فایلهای داخلی‬
‫‪ ‬تاکنون شما چگونگی کار با دادههای عددی و کاراکتری را‬
‫آموختهاید‪ .‬اکنون به این مساله پرداخته میشود که چگونه‬
‫میتوان دادههای عددی را به دادههای کاراکتری و یا بالعکس‬
‫تبدیل نمود‪ .‬مکانیزمی که در فرترن این کار را انجام میدهد‪،‬‬
‫فایلهای داخلی نامیده میشود‪.‬‬
‫‪ ‬برای دستور ‪ Read‬به صورت عمل میشود‪.‬‬
‫‪ Read(buffer, format) arg1, arg2, ...‬‬
‫‪ ‬که در آن ‪buffer‬کاراکتر ورودی است و به جای شماره‬
‫پرونده (فایل) قرار میگیرد و ‪ format‬نیز قالبی برای‬
‫خواندن است و ‪ arg1,arg2‬نیز مانند متغیرهایی هستند که‬
‫مقادیرشان از ‪buffer‬خوانده میشود‪.‬‬
‫‪9‬‬
‫دانشگاه صنعت اب و برق‬
‫دنباله فایلهای داخلی‬
‫‪ ‬فرم عمومی دستور ‪Write‬از فایل داخلی به صورت‬
‫زیر است‪.‬‬
‫… ‪ Write(buffer, format) arg1, arg2,‬‬
‫‪ ‬که در آن ‪ buffer‬کاراکتر خروجی است و به جای‬
‫شماره پرونده (فایل) قرار میگیرد و ‪ format‬نیز قالبی‬
‫برای نوشتن است و ‪ arg1,arg2‬نیز مانند متغیرهایی‬
‫هستند که مقادیرشان روی ‪ buffer‬نوشته میشود‪.‬‬
‫‪10‬‬
‫دانشگاه صنعت اب و برق‬
‫مثال فایلهای داخلی‬
 implicit none
 Character(Len=5) :: text ='135.4'
 Character(Len=10) :: str ='_567',
string
 Real :: value
 integer :: val
 Print '(A\)', 'Enter the integer
value:'
 Read*, val
 Read(text,*) value
 value=2.*value
 Print*, value
 Write(string, '(I10)') val
 Print*, string // str
 End
1234 ‫ ورودی برنامه عدد‬
‫است و خروجی به صورت‬
.‫زیر است‬
 270.8000
 1234_567
‫دانشگاه صنعت اب و برق‬
11