Allocatable Array. Modules A packaging method for data and subprograms. Syntax of the form: A packaging method for data and subprograms. Syntax of the.

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
Set is a basic term in Mathematics. There is no precise definition for term “set”, But roughly speaking, a set is a collection of objects, Things or symbols,
Advertisements

Texture การประมวลผลภาพแบบดิจิตอล Ian Thomas
จำนวน สถานะ NUMBER OF STATES. ประเด็นที่ สนใจ The number of distinct states the finite state machine needs in order to recognize a language is related.
รายวิชา ง40206 โครงสร้างข้อมูลและขั้นตอนวิธี
ออโตมาตาจำกัด FINITE AUTOMATA
Asst.Prof. Dr.Surasak Mungsing
Examining the Code.
การสร้าง WebPage ด้วย Java Script Wachirawut Thamviset.
Function ธนวัฒน์ แซ่ เอียบ. What is a function ฟังก์ชันในภาษา C เป็นโปรแกรมที่ถูกออกแบบมาเพื่อ ใช้แก้ปัญหางานใดงานหนึ่งโดยเฉพาะ ฟังก์ชันจะเปลี่ยน input.
Array ธนวัฒน์ แซ่ เอียบ. The concept of array อาเรย์ : กลุ่มของข้อมูลที่มีชนิดเดียวกันและถูก จัดเก็บเรียงลำดับต่อเนื่องกัน ตัวแปร x สามารถจัดเก็บค่ามากกว่า.
การแก้ปัญหาการใช้งาน ADO กับ Database อุทัย เซี่ยงเจ็น สำนักวิชาเทคโนโลยีสารสนเทศ และการสื่อสาร มหาวิทยาลัยนเรศวร วิทยาเขต สารสนเทศพะเยา.
ANSI/ASQ Z1.4 Acceptance Sampling Plans
บทที่ 5 การควบคุมทิศทางการทำงานของโปรแกรม
หน่วยการเรียนรู้ที่ 7 ความรู้เบื้องต้นเกี่ยวกับจำนวนจริง
Names, Scopes and Bindings ธนวัฒน์ แซ่ เอียบ. The Concept of Binding Categories of variables by lifetimes –Static bound to memory cells before execution.
LAB ตัวแปร : Variables ในการเขียนโปรแกรมเราต้องการให้โปรแกรม จดจำค่าต่างๆ ไว้ เช่นเมื่อรับค่าข้อมูลจาก ผู้ใช้ หรือค่าที่ได้จากการคำนวณใดๆ ค่า.
ครูวิชาการสาขาเคมี โรงเรียนมหิดลวิทยานุสรณ์
Chapter 10 Arrays Dept of Computer Engineering Khon Kaen University.
การเขียนโปรแกรมภาษาปาสคาล โดยใช้โครงสร้างหลักทั้ง 3 โครงสร้าง
กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
TEST FOR 3RD GRADERS IN THAILAND: COMPARATIVE STUDY Pimlak Moonpo Valaya Alongkorn Rajabhat University under the Patronage Assoc. Prof. Dr. Maitree Inprasitha.
PHP. Date and Time date(format,timestamp)
หลักการโปรแกรม 1 Lecture 8: การทำซ้ำ (while, do-while)
Eigenvalue & Eigenvector. 1. Get to know: Eigenvalue & Eigenvector 2. Estimation of Eigenvalue & Eigenvector 3. Theorem.
1 exit() and break C++ provides a way to leave a program early (before its natural finish) with the exit() function. The format of exit() is as follows:
MEE 231 Computer Programming สัปดาห์ที่ 6 ภาษา C หลักการของโปรแกรม ชนิดของตัวแปร การดำเนินการ คำสั่งการรับค่าตัวแปร และการแสดงผล.
MTH 261 File Management. File Management File Management จะอธิบายเกี่ยวกับการเขียน ส่วนจัดการแฟ้มข้อมูล เราสามารถที่จะเขียน โปรแกรมเพื่อเรียกใช้แฟ้มข้อมูลที่เรามี
Page : Stability and Statdy-State Error Chapter 3 Design of Discrete-Time control systems Stability and Steady-State Error.
คำสั่งควบคุมการทำงาน
หลักการโปรแกรม อ.ธนากร อุยพานิชย์.
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
อาจารย์อภิพงศ์ ปิงยศ บทที่ 8 : TCP/IP และอินเทอร์เน็ต Part2 สธ313 การสื่อสารข้อมูลและเครือข่ายคอมพิวเตอร์ทางธุรกิจ อาจารย์อภิพงศ์
บทที่ 5 อินพุตและเอาต์พุต
โปรแกรมย่อย อาจารย์สมเกียรติ ช่อเหมือน
The Hypergeometric Distribution
ครูวีรธรรม เทศประสิทธิ์ แผนกวิชาคอมพิวเตอร์ธุรกิจ
พื้นฐานการเขียนแบบทางวิศวกรรม
Chapter 9 ตัวชี้ pointer.
INC 161 , CPE 100 Computer Programming
อาจารย์อภิพงศ์ ปิงยศ บทที่ 7 : TCP/IP และอินเทอร์เน็ต Part2 สธ313 การสื่อสารข้อมูลและเครือข่ายคอมพิวเตอร์ทางธุรกิจ อาจารย์อภิพงศ์
คำอธิบายรายวิชา การเขียนผังงาน รหัสเทียม ตรรกศาสตร์เบื้องต้น การเขียนโปรแกรมคอมพิวเตอร์แบบโครงสร้าง ชนิดตัวแปร ตัวดำเนินการทางตรรกะ ตัวดำเนินการเปรียบเทียบ.
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
หน่วยการเรียนที่ 4 เรื่อง การควบคุมทิศทางการทำงาน
บทที่ 7 การเขียนโปรแกรม แบบวนรอบทำซ้ำ (Loop)
Control Statement เงื่อนไขคำสั่งในโปรแกรม ภาษา C
Asst.Prof. Dr.Surasak Mungsing
Dr.Surasak Mungsing CSE 221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Lecture 04: การวิเคราะห์หาความซับซ้อนด้านเวลา ในรูป.
การเขียนโปรแกรมแบบวนซ้ำ: คำสั่ง while คำสั่ง do….while
Data storage II Introduction to Computer Science ( )
1 E 1 S E M N G Reading & Writing
ผู้ช่วยศาสตราจารย์จุฑาวุฒิ จันทรมาลี
Variable Constant.
Data storage II Introduction to Computer Science ( )
บทที่ 2 ทฤษฎีบทพีทาโกรัส.
บทที่ 7 การประมวลผลอาร์เรย์
2 โครงสร้างข้อมูลแบบสแตก (STACK).
การเขียนโปรแกรมด้วยภาษาไพทอน การเขียนโปรแกรมแบบวนซ้ำ
บทที่ 2 โครงสร้างข้อมูลแบบแถวลำดับหรืออาร์เรย์ (Array)
Chapter 3 : Array.
การจัดบล๊อคและบัฟเฟอร์ (Blocking and Buffering)
Array Sanchai Yeewiyom
Array: One Dimension Programming I 9.
ฟังก์ชันของโปรแกรม Computer Game Programming
การวิเคราะห์โจทย์ปัญหา (Problem Analysis)
4 โครงสร้างข้อมูลแบบลิงค์ลิสต์ (LINKED LIST).
การเขียนโปรแกรมด้วยภาษาไพทอน การเขียนโปรแกรมแบบทางเลือก
การวิเคราะห์และออกแบบขั้นตอนวิธี
Dr.Surasak Mungsing CSE 221/ICT221 การวิเคราะห์และออกแบบขั้นตอนวิธี Lecture 12: เทคนิคการออกแบบขั้นตอนวิธีตอนวิธี Dynamic.
Color Standards A pixel color is represented as a point in 3-D space. Axis may be labeled as independent colors such as R, G, B or may use other independent.
ใบสำเนางานนำเสนอ:

Allocatable Array

Modules A packaging method for data and subprograms. Syntax of the form: A packaging method for data and subprograms. Syntax of the form: module name_of_module data/type declarations contains subroutines and functions acting on data end module

There are four types of program unit in Fortran: There are four types of program unit in Fortran: Main program - should start with a main PROGRAM statement. Main program - should start with a main PROGRAM statement. External procedures (subprograms) - start with SUBROUTINE or FUNCTION statement. External procedures (subprograms) - start with SUBROUTINE or FUNCTION statement. Block data subprograms (now superseded along with common blocks) - starts with BLOCK DATA statement. Block data subprograms (now superseded along with common blocks) - starts with BLOCK DATA statement. Module - starts with MODULE statement. Module - starts with MODULE statement.

The module may contain any combination of: The module may contain any combination of: definitions of constants definitions of constants definitions of derived types (data structures) definitions of derived types (data structures) data storage declarations data storage declarations procedures (subroutines and functions) procedures (subroutines and functions)

1. Example defining constants MODULE trig_consts IMPLICIT NONE DOUBLE PRECISION, PARAMETER :: pi = d0, & rtod = 180.0d0/pi, dtor = pi/180.0d0 END MODULE trig_consts PROGRAM calculate USE trig_consts IMPLICIT NONE WRITE(*,*) SIN(30.0*dtor) END PROGRAM calculate

2. Module Procedures The general structure of a module: The general structure of a module: starts with a data section starts with a data section then has a CONTAINS statement (if any procedures follow) then has a CONTAINS statement (if any procedures follow) any number of module procedures follow any number of module procedures follow

program main program main use name_of_module use name_of_module end program module grid_module implicit none type param_type integer :: iter ! number of iterations real :: precision ! precision required end type type node_type real :: x ! 1d example, easy to extend to 2d real :: u, residual end type

The module may contain any combination of: The module may contain any combination of: definitions of constants definitions of constants definitions of derived types (data structures) definitions of derived types (data structures) data storage declarations data storage declarations procedures (subroutines and functions) procedures (subroutines and functions)

2. Module Procedures The general structure of a module: The general structure of a module: starts with a data section starts with a data section then has a CONTAINS statement (if any procedures follow) then has a CONTAINS statement (if any procedures follow) any number of module procedures follow any number of module procedures follow

Dynamic Storage There are three forms of dynamic array: automatic, allocatable, and pointer array. There are three forms of dynamic array: automatic, allocatable, and pointer array. 1. Automatic Arrays An automatic array is a local array in a procedure which has its size set when the procedure is called: An automatic array is a local array in a procedure which has its size set when the procedure is called: SUBROUTINE smooth(npts, spectrum) IMPLICIT NONE INTEGER, INTENT(IN) :: npts REAL, INTENT(INOUT) :: spectrum REAL :: space(npts), bigger(2*npts) ! automatic arrays

2. Allocatable Arrays Allocatable arrays are more generally useful as their size may be set at any point. Only the rank has to be declared in advance, with a colon marking the each dimension: Allocatable arrays are more generally useful as their size may be set at any point. Only the rank has to be declared in advance, with a colon marking the each dimension: REAL, ALLOCATABLE :: vector(:), matrix(:,:), three_d(:,:,:) REAL, ALLOCATABLE :: vector(:), matrix(:,:), three_d(:,:,:)

Array size allocation เป็นเทคนิคหนึ่งที่ช่วยให้โปรแกรมทำงานได้ อย่างมีประสิทธิภาพ จากที่ทราบกันว่า การใช้ ตัวแปรอาเรย์นั้น ต้องมีการระบุขนาดมิติที่ แน่นอนในส่วนประกาศก่อน จึงจะสามารถใช้ งานได้ สมมติว่าประกาศใช้ตัวแปรอาเรย์ขนาด มิติ 50x3 แต่ในการใช้งานตัวแปรนั้นจริงๆใช้แค่ เพียง 10x3 ทำให้เกิดพื้นที่เหลือที่ไม่สามารถ ใช้ประโยชน์ใดได้เลย แต่ถ้าเราใช้การ allocate แล้ว เราไม่ต้องระบุขนาดมิติอาเรย์ในส่วน ประกาศ แต่จะให้เรากำหนดด้วยตัวเองในส่วน ดำเนินการของโปรแกรมตามความเหมะสมที่เรา จะใช้งานจริงๆ เป็นเทคนิคหนึ่งที่ช่วยให้โปรแกรมทำงานได้ อย่างมีประสิทธิภาพ จากที่ทราบกันว่า การใช้ ตัวแปรอาเรย์นั้น ต้องมีการระบุขนาดมิติที่ แน่นอนในส่วนประกาศก่อน จึงจะสามารถใช้ งานได้ สมมติว่าประกาศใช้ตัวแปรอาเรย์ขนาด มิติ 50x3 แต่ในการใช้งานตัวแปรนั้นจริงๆใช้แค่ เพียง 10x3 ทำให้เกิดพื้นที่เหลือที่ไม่สามารถ ใช้ประโยชน์ใดได้เลย แต่ถ้าเราใช้การ allocate แล้ว เราไม่ต้องระบุขนาดมิติอาเรย์ในส่วน ประกาศ แต่จะให้เรากำหนดด้วยตัวเองในส่วน ดำเนินการของโปรแกรมตามความเหมะสมที่เรา จะใช้งานจริงๆ

การ allocate นั้นจะทำการเขียนคำสั่งที่ส่วนประกาศ ดังนี้ การ allocate นั้นจะทำการเขียนคำสั่งที่ส่วนประกาศ ดังนี้ รูปแบบ ชนิดตัวแปร, ALLOCATABLE, DIMENSION(:[, :,...] ) :: ชื่อตัวแแปร หรือ หรือ ชนิดตัวแปร, ALLOCATABLE :: ชื่อตัวแปร (:[, :,...] ) และทำการเขียนคำสั่งที่ส่วนดำเนินการดังนี้ และทำการเขียนคำสั่งที่ส่วนดำเนินการดังนี้ รูปแบบ ALLOCATE ( ตัวแปรอาเรย์ ( ขนาด มิติ ),STAT= ตัวแปรจำนวนเต็ม ) สมมติว่า เราต้องการกำหนดให้ อาเรย์ yy ซึ่งมีชนิด เป็นจำนวนจริง ให้มีมิติเป็น 3 คูณ 3 สามารถทำได้ ดังนี้ สมมติว่า เราต้องการกำหนดให้ อาเรย์ yy ซึ่งมีชนิด เป็นจำนวนจริง ให้มีมิติเป็น 3 คูณ 3 สามารถทำได้ ดังนี้

REAL, ALLOCATABLE, DIMENSION( :, : ) :: yy INTEGER di,status PRINT *,'enter a dimension of array[eg. 5,4] : ' ! ใส่ค่า 3,3 ALLOCATE ( yy(di,di),STAT=status) ตัวแปรจำนวนเต็มของ STAT นั้น จะเก็บข้อมูลว่า สามารถที่จะทำการ allocate ได้หรือไม่ ถ้าตัวแปร ดังกล่าวมีค่าเท่ากับ 0 แสดงว่าทำการ allocate สำเร็จแต่ถ้าตัวแปรมีค่าเป็นจำนวนบวก แสดงว่า ทำการ alloocate ไม่สำเร็จ ตัวแปรจำนวนเต็มของ STAT นั้น จะเก็บข้อมูลว่า สามารถที่จะทำการ allocate ได้หรือไม่ ถ้าตัวแปร ดังกล่าวมีค่าเท่ากับ 0 แสดงว่าทำการ allocate สำเร็จแต่ถ้าตัวแปรมีค่าเป็นจำนวนบวก แสดงว่า ทำการ alloocate ไม่สำเร็จ

เราสามารถที่จะยกเลิกการทำ allocate ได้ โดยเขียนคำสั่งที่ส่วนดำเนินการดังนี้ เราสามารถที่จะยกเลิกการทำ allocate ได้ โดยเขียนคำสั่งที่ส่วนดำเนินการดังนี้ รูปแบบ DEALLOCATE ( ตัวแปรอาเรย์,STAT= ตัวแปรจำนวนเต็ม ) หลักการพิจารณาก็ใช้แบบเดียวกับกรณีของ allocate ครับ หลักการพิจารณาก็ใช้แบบเดียวกับกรณีของ allocate ครับ

PROGRAM test_array_allocation IMPLICIT NONE INTEGER,ALLOCATABLE,DIMENSION( :, :) :: show INTEGER :: i,j,status,m,n REAL,ALLOCATABLE :: hide( :, : ) PRINT *,'enter two number[eg. 1,1]: ' ! ใส่ค่า 3,2 READ (*,*) i,j ALLOCATE (show(i,j),hide(j,i),STAT=status) show=1hide=10.0 DO m=1,i,1 DO n=1,j,1 PRINT 31,'value in show ',m,':',n,'=',show(m,n) END DO DO m=1,j,1 DO n=1,i,1 DO n=1,i,1 PRINT 33,'value in hide ',m,':',n,'=',hide(m,n) END DO 31 FORMAT (' ',X,A,I2,A,I2,A,I4) 33 FORMAT (' ',X,A,I2,A,I2,A,F5.2) END PROGRAM

จากตัวอย่างด้านบนได้ผล ลัพธ์ดังนี้ จากตัวอย่างด้านบนได้ผล ลัพธ์ดังนี้ enter two number[eg. 1,1]: 2,1 value in show 1: 1= 1 value in show 2: 1= 1 value in hide 1: 1=10.00 value in hide 1: 2=10.00

3. Pointer arrays An allocatable array cannot be passed to a procedure when in an un-allocated state. An allocatable array cannot be passed to a procedure when in an un-allocated state. But this can be done with a pointer array: But this can be done with a pointer array:

REAL, ALLOCATABLE, DIMENSION( :, : ) :: yy INTEGER di,status PRINT *,'enter a dimension of array[eg. 5,4] : ' ! ใส่ค่า 3,3 ALLOCATE ( yy(di,di),STAT=status) ตัวแปรจำนวนเต็มของ STAT นั้น จะเก็บข้อมูลว่า สามารถที่จะทำการ allocate ได้หรือไม่ ถ้าตัวแปร ดังกล่าวมีค่าเท่ากับ 0 แสดงว่าทำการ allocate สำเร็จแต่ถ้าตัวแปรมีค่าเป็นจำนวนบวก แสดงว่า ทำการ alloocate ไม่สำเร็จ ตัวแปรจำนวนเต็มของ STAT นั้น จะเก็บข้อมูลว่า สามารถที่จะทำการ allocate ได้หรือไม่ ถ้าตัวแปร ดังกล่าวมีค่าเท่ากับ 0 แสดงว่าทำการ allocate สำเร็จแต่ถ้าตัวแปรมีค่าเป็นจำนวนบวก แสดงว่า ทำการ alloocate ไม่สำเร็จ

3. Pointer arrays An allocatable array cannot be passed to a procedure when in an un-allocated state. An allocatable array cannot be passed to a procedure when in an un-allocated state. But this can be done with a pointer array: But this can be done with a pointer array:

PROGRAM pdemo IMPLICIT NONE REAL, POINTER :: parray(:) OPEN(UNIT=9, FILE='mydata', STATUS='old') CALL readin(9, parray) WRITE(*,*)'array of ', SIZE(parray), ' points:' WRITE(*,*) parray DEALLOCATE(parray)CONTAINS SUBROUTINE readin(iounit, z) INTEGER, INTENT(IN) :: iounit REAL, POINTER :: z(:) ! cannot use INTENT for pointer INTEGER :: npoints READ(iounit) npoints ! find how many points to read ALLOCATE(z(1:npoints)) ! allocate the space READ(iounit) z ! read the entire array END SUBROUTINE readin END PROGRAM pdemo