Fortran - อินพุตเอาต์พุตพื้นฐาน

เราได้เห็นแล้วว่าเราสามารถอ่านข้อมูลจากแป้นพิมพ์โดยใช้ไฟล์ read * และแสดงผลลัพธ์ไปยังหน้าจอโดยใช้ไฟล์ print*คำสั่งตามลำดับ รูปแบบของอินพุต - เอาต์พุตนี้คือfree format I / O และเรียกว่า list-directed อินพุต - เอาต์พุต

I / O แบบง่ายรูปแบบฟรีมีรูปแบบ -

read(*,*) item1, item2, item3...
print *, item1, item2, item3
write(*,*) item1, item2, item3...

อย่างไรก็ตาม I / O ที่จัดรูปแบบจะช่วยให้คุณมีความยืดหยุ่นมากกว่าในการถ่ายโอนข้อมูล

อินพุตเอาต์พุตที่จัดรูปแบบ

อินพุตเอาต์พุตที่จัดรูปแบบมีไวยากรณ์ดังนี้ -

read fmt, variable_list 
print fmt, variable_list 
write fmt, variable_list

ที่ไหน

  • fmt คือข้อกำหนดรูปแบบ

  • รายการตัวแปรคือรายการของตัวแปรที่จะอ่านจากแป้นพิมพ์หรือเขียนบนหน้าจอ

ข้อกำหนดรูปแบบกำหนดวิธีการแสดงข้อมูลที่จัดรูปแบบ ประกอบด้วยสตริงที่มีรายการedit descriptors ในวงเล็บ

อัน edit descriptor ระบุรูปแบบที่แน่นอนเช่นความกว้างตัวเลขหลังจุดทศนิยมเป็นต้นซึ่งจะแสดงอักขระและตัวเลข

ตัวอย่างเช่น

Print "(f6.3)", pi

ตารางต่อไปนี้อธิบายถึงตัวบ่งชี้ -

ตัวบอก คำอธิบาย ตัวอย่าง
ผม

ใช้สำหรับเอาต์พุตจำนวนเต็ม ซึ่งจะอยู่ในรูปแบบ 'rIw.m' โดยที่ความหมายของ r, w และ m ได้รับในตารางด้านล่าง ค่าจำนวนเต็มเป็นค่าที่ถูกต้องในเอลด์ของพวกเขา ถ้าความกว้าง fi eld ไม่ใหญ่พอที่จะรองรับจำนวนเต็มดังนั้น fi eld จะถูกยกด้วยเครื่องหมายดอกจัน

พิมพ์ "(3i5)", i, j, k

ใช้สำหรับเอาต์พุตจำนวนจริง ซึ่งจะอยู่ในรูปแบบ 'rFw.d' โดยที่ความหมายของ r, w และ d แสดงไว้ในตารางด้านล่าง คุณค่าที่แท้จริงเป็นสิ่งที่ถูกต้องในเอลด์ของพวกเขา ถ้าความกว้าง fi eld ไม่ใหญ่พอที่จะรองรับจำนวนจริงเครื่องหมาย fi eld จะขึ้นด้วยเครื่องหมายดอกจัน

พิมพ์ "(f12.3)", pi

ใช้สำหรับเอาต์พุตจริงในสัญกรณ์เอกซ์โพเนนเชียล คำสั่ง descriptor 'E' อยู่ในรูปแบบ 'rEw.d' โดยที่ความหมายของ r, w และ d ได้รับในตารางด้านล่าง คุณค่าที่แท้จริงเป็นสิ่งที่ถูกต้องในเอลด์ของพวกเขา ถ้าความกว้าง fi eld ไม่ใหญ่พอที่จะรองรับจำนวนจริงเครื่องหมาย fi eld จะขึ้นด้วยเครื่องหมายดอกจัน

โปรดทราบว่าในการพิมพ์จำนวนจริงที่มีทศนิยมสามตำแหน่งจำเป็นต้องมีความกว้าง fi eld อย่างน้อยสิบตำแหน่ง หนึ่งสำหรับสัญลักษณ์ของแมนทิสซาสองสำหรับศูนย์สี่สำหรับแมนทิสซาและสองสำหรับเลขชี้กำลังเอง โดยทั่วไป w ≥ d + 7

พิมพ์ "(e10.3)", 123456.0 ให้ '0.123e + 06'
ES

ใช้สำหรับผลลัพธ์จริง (สัญกรณ์วิทยาศาสตร์) ซึ่งจะอยู่ในรูปแบบ 'rESw.d' ซึ่งความหมายของ r, w และ d จะได้รับในตารางด้านล่าง ตัวบ่งชี้ 'E' ที่อธิบายไว้ข้างต้นมีความแตกต่างจากสัญกรณ์ 'Scienti fi c' แบบดั้งเดิมที่รู้จักกันดีเล็กน้อย สัญกรณ์ Scienti fi c มี mantissa อยู่ในช่วง 1.0 ถึง 10.0 ซึ่งแตกต่างจาก E descriptor ซึ่งมี mantissa อยู่ในช่วง 0.1 ถึง 1.0 คุณค่าที่แท้จริงเป็นสิ่งที่ถูกต้องในเอลด์ของพวกเขา ถ้าความกว้าง fi eld ไม่ใหญ่พอที่จะรองรับจำนวนจริงเครื่องหมาย fi eld จะขึ้นด้วยเครื่องหมายดอกจัน นอกจากนี้ความกว้าง fi eld ต้องตรงตามนิพจน์ w ≥ d + 7

พิมพ์ "(es10.3)", 123456.0 ให้ '1.235e + 05'

ใช้สำหรับเอาต์พุตอักขระ ซึ่งจะอยู่ในรูปแบบ 'rAw' โดยที่ความหมายของ r และ w แสดงไว้ในตารางด้านล่าง ประเภทของตัวละครเป็นสิ่งที่ถูกต้องในเอลด์ของพวกเขา หากความกว้าง fi eld ไม่ใหญ่พอที่จะรองรับสตริงอักขระดังนั้น fi eld จะถูกเพิ่มด้วยอักขระ fi rst 'w' ของสตริง

พิมพ์ "(a10)", str
X

ใช้สำหรับเอาต์พุตช่องว่าง ซึ่งจะอยู่ในรูปแบบ 'nX' โดยที่ 'n' คือจำนวนช่องว่างที่ต้องการ

พิมพ์ "(5x, a10)", str
/

Slash descriptor - ใช้เพื่อแทรกบรรทัดว่าง สิ่งนี้จะอยู่ในรูปแบบ '/' และบังคับให้เอาต์พุตข้อมูลถัดไปอยู่ในบรรทัดใหม่

พิมพ์ "(/, 5x, a10)", str

สัญลักษณ์ต่อไปนี้ใช้กับตัวบอกรูปแบบ -

ซีเนียร์ No สัญลักษณ์และคำอธิบาย
1

c

หมายเลขคอลัมน์

2

d

จำนวนหลักทางขวาของตำแหน่งทศนิยมสำหรับอินพุตหรือเอาต์พุตจริง

3

m

จำนวนหลักขั้นต่ำที่จะแสดง

4

n

จำนวนช่องว่างที่จะข้าม

5

r

จำนวนครั้งที่ทำซ้ำ - จำนวนครั้งที่จะใช้ตัวบอกหรือกลุ่มตัวบอก

6

w

ความกว้างของฟิลด์ - จำนวนอักขระที่จะใช้สำหรับอินพุตหรือเอาต์พุต

ตัวอย่าง 1

program printPi

   pi = 3.141592653589793238 
   
   Print "(f6.3)", pi 
   Print "(f10.7)", pi
   Print "(f20.15)", pi 
   Print "(e16.4)", pi/100 
   
end program printPi

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -

3.142
3.1415927
3.141592741012573
0.3142E-01

ตัวอย่าง 2

program printName
implicit none

   character (len = 15) :: first_name
   print *,' Enter your first name.' 
   print *,' Up to 20 characters, please'
   
   read *,first_name 
   print "(1x,a)",first_name
   
end program printName

เมื่อคอมไพล์และรันโค้ดด้านบนจะให้ผลลัพธ์ดังนี้: (สมมติว่าผู้ใช้ป้อนชื่อ Zara)

Enter your first name.
Up to 20 characters, please
Zara

ตัวอย่างที่ 3

program formattedPrint
implicit none

   real :: c = 1.2786456e-9, d = 0.1234567e3 
   integer :: n = 300789, k = 45, i = 2
   character (len=15) :: str="Tutorials Point"
   
   print "(i6)", k 
   print "(i6.3)", k 
   print "(3i10)", n, k, i 
   print "(i10,i3,i5)", n, k, i 
   print "(a15)",str 
   print "(f12.3)", d
   print "(e12.4)", c 
   print '(/,3x,"n = ",i6, 3x, "d = ",f7.4)', n, d
   
end program formattedPrint

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -

45
045
300789 45  2
300789 45  2
Tutorials Point
123.457
0.1279E-08

n = 300789 d = *******

คำชี้แจงรูปแบบ

คำสั่งรูปแบบช่วยให้คุณสามารถผสมและจับคู่อักขระจำนวนเต็มและผลลัพธ์จริงในคำสั่งเดียว ตัวอย่างต่อไปนี้แสดงให้เห็นถึงสิ่งนี้ -

program productDetails 
implicit none 

   character (len = 15) :: name
   integer :: id 
   real :: weight
   name = 'Ardupilot'
   id = 1
   weight = 0.08
   
   print *,' The product details are' 
   
   print 100
   100 format (7x,'Name:', 7x, 'Id:', 1x, 'Weight:')
   
   print 200, name, id, weight 
   200 format(1x, a, 2x, i3, 2x, f5.2) 
   
end program productDetails

เมื่อโค้ดด้านบนถูกคอมไพล์และเรียกใช้งานจะให้ผลลัพธ์ดังนี้ -

The product details are
Name:       Id:    Weight:
Ardupilot   1       0.08