NGÔN NGỮ LẬP TRÌNH FORTRAN VÀ ỨNG DỤNG TRONG KHÍ TƯỢNG THỦY VĂN part 4 pptx

12 457 0
NGÔN NGỮ LẬP TRÌNH FORTRAN VÀ ỨNG DỤNG TRONG KHÍ TƯỢNG THỦY VĂN part 4 pptx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

36 ID = D3 (I) D3 (I) = D3 (K) D3 (K) = ID D = TB (I) TB (I) = TB (K) TB (K) = D I = I + 1 IF (I .LT. N) GO TO 2 C In tiêu đề danh sách lên màn hình PRINT 100 100 FORMAT (21X , 'BANG DIEM' // , 1X , 'TT' , 7X, * 'HO TEN' ,9X , 'D1 D2 D3 TB XEP LOAI' /) C In từng sinh viên theo danh sách 60 FORMAT (1X, I2, 1X, A20, I3, I3, I3, F5.1, 1X, 'GIOI') 50 FORMAT (1X, I2, 1X, A20, I3, I3, I3, F5.1, 1X, 'KHA') 40 FORMAT (1X, I2, 1X, A20, I3, I3, I3, F5.1, 1X, * 'TRUNG BINH') I = 1 3 IF (TB (I) .LT. 9.0) THEN IF (TB (I) .LT. 6.0) THEN PRINT 40 , I , TEN (I) , D1 (I) , D2 (I) , D3 (I) , TB (I) ELSE PRINT 50 , I , TEN (I) , D1 (I) , D2 (I) , D3 (I) , TB (I) END IF ELSE PRINT 60 , I , TEN (I) , D1 (I) , D2 (I) , D3 (I) , TB (I) END IF I = I + 1 IF (I. LE. N) GO TO 3 STOP END Thí dụ 6: Viết chương trình tính tích phân xác định: ∫ = b a xxI sin 2 theo công thức hình thang với sai số − = ba , ;0001,0 ε cho trước. Gợi ý: Ở bước xấp xỉ đầu, xem số hình thang con 1 = n , tích phân bằng )( )( 5,0 1 abyyS ba −+= . Bước xấp xỉ sau tăng số hình thang con n thêm 1 và tích phân bằng (hình 4.3) ∑ −+= ++ n i iiii xxyyS )( )( 5,0 112 Tiếp tục tăng n đến khi ε <− S 21 S . a 37 ax = 1 bx n = 2 x 1 y 2 y )(xfy = Hình 4.3. Minh họa sơ đồ tính gần đúng tích phân xác định theo phương pháp hình thang EPSIL = 0.0001 A = 0.0 B = 3.141593 S1 = 0.5 * (A ** 2 * SIN (A) + B ** 2 * SIN (B)) * (B−A) SOHINH = 2.0 7 DX = (B−A) / SOHINH HINH = 1.0 X1 = A Y1 = X1 ** 2 * SIN (X1) S2 = 0.0 5 X2 = X1 + DX Y2 = X2 ** 2 * SIN (X2) S2 = S2 + 0.5*(Y1 + Y2) * DX IF (HINH .LT. SOHINH) THEN HINH = HINH + 1.0 X1 = X2 Y1 = Y2 GOTO 5 END IF IF (ABS (S2−S1) .GT. EPSIL) THEN SOHINH = SOHINH + 1.0 S1 = S2 GOTO 7 END IF PRINT 3 , S2 3 FORMAT (1X , 'TICH PHAN BANG', F15.4) END Thí dụ 7: Vòng lặp để tính tổng chuỗi. Bình phương của sin của góc x tính theo công thức chuỗi như sau: ∑ ∞ = −+ − =−+−= 1 21216543 22 !)2( 2)1( !6 2 !4 2 sin n nnn n xxx xx . Hãy viết chương trình đọc vào một góc x bằng độ, đổi ra rađian, tính và in ra bảng so sánh kết quả tính x 2 sin theo công thức này với những số số hạng chuỗi n lẻ từ 1 đến 15. Thấy rằng số hạng đầu khi 1=n là 2 x , mỗi số hạng tiếp sau bằng số hạng trước nhân với )12 2 2 − − n(n x . Trong thí dụ này, ta ứng dụng phương pháp chia khối bài toán và chi tiết hoá từng khối như đã trình bày trong mục 4.1 để xây dựng thuật giải và diễn đạt thuật giải đó bằng lưu đồ, sau đó dẫn chương trình Fortran. Thấy rằng bài toán có thể chia thành ba khối sau: Khối 1: Nhập giá trị góc x . Khối 2: In tiêu đề của bảng kết quả. 38 Khối 3: Tính giá trị x 2 sin theo công thức chuỗi và in ra kết quả khảo sát với số số hạng chuỗi từ 1 đến 15. Bây giờ ta phân tích chi tiết từng khối để dẫn lưu đồ thực hiện trong mỗi khối. Thấy rằng khối 1 có thể chi tiết hoá thành ba bước con: Vì công thức khai triển chuỗi trên đây hội tụ nhanh đối với những góc x nhỏ, do đó nếu x nằm trong khoảng: 18090 ≤ < x ta thay bằng góc x − 180 , nếu x nằm trong khoảng: 270180 ≤ < x ta thay bằng góc 180 − x , nếu x nằm trong khoảng: 360270 ≤ < x ta thay bằng góc 360 − x . Sau đó đổi x thành rađian (hình 4.4). Read X X > 270 F X = X − 360 X >180 X =X − 180 T T F X = 180 − X X > 90 T F X = X*3.1415 / 180 Khèi 1 ↓ ← ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ← ↓ Hình 4.4. Lưu đồ khối 1 (thí dụ 7) In tiªu ®Ò b¶ng In tiªu ®Ò cét Khèi 2 ↓ Hình 4.5. Lưu đồ khối 2 (thí dụ 7) 39 Ta thấy khối 2 chỉ gồm hai việc tuần tự là in dòng tiêu đề của bảng khảo sát, in các tiêu đề đầu bảng (hình 4.5). S = 0 N = 1 THEM = X 2 S = S + THEM N lÎ In N, S, sin 2 X T F N = N + 1 THEM = THEM *2 * X 2 / (N* (2N−1) N>15 T F ↓ ↓ ↓ ← ↓ ↓ Khèi 3 Hình 4.6. Lưu đồ khối 3 (thí dụ 7) Khối 3 là phức tạp nhất cần được chi tiết hoá một cách tối đa. Ta thấy khối này gồm các bước cụ thể sau: • Gán 0 cho biến S (giá trị khởi tạo của x 2 sin cần tính). • Gán 1 cho N (bắt đầu xét số hạng thứ nhất). • Gán 2 x cho biến THEM (giá trị của số hạng thứ nhất). • Chừng nào 15 ≤ N thực hiện tuần tự 4 bước sau: ♦ Cộng số hạng (THEM) vào biến S. ♦ Nếu N lẻ in giá trị xSN 2 sin , , (tính theo hàm chuẩn). ♦ Tăng thêm 1 đơn vị cho N . ♦ Tính lại biến THEM bằng cách nhân chính nó với )12 2 2 − − N(N X . Giả trình này tương đương với lưu đồ khối trên hình 4.6. Như vậy, ta đã chi tiết hoá tất cả các bước trong ba khối dưới dạng các lưu đồ. Công việc còn lại đơn giản là gắn cơ học ba lưu đồ lại ta được lưu đồ chung của toàn thuật toán. Từ đó dễ dàng chuyển sang chương trình Fortran dưới đây: PRINT * , ' HAY CHO MOT GOC BANG DO' READ *, X IF (X .GT. 90.0) THEN IF (X .GT. 270.0) THEN X = X − 360.0 ELSE IF (X .GT. 180.0) THEN X = X − 180.0 ELSE X = 180.0 − X END IF END IF 40 X = X * 3.141593 / 180.0 PRINT 2 2 FORMAT (1X, 35H KHAO SAT CONG THUC BINH * PHUONG SIN // , 1X , 2H N, 17H THEO CONG THUC, * 17H THEO HAM CHUAN) S = 0. N = 1 THEM = X ** 2 5 S = S + THEM IF (MOD (N , 2) .EQ. 1) PRINT 4 , N , S , SIN (X) ** 2 4 FORMAT (1X , I2 , 2F17.7) N = N + 1 THEM = − THEM * 2.0 * X**2 / (N * (2 * N −1)) IF (N .LE. 15) GO TO 5 END Thí dụ 8: Nội suy tuyến tính chuỗi số liệu quan trắc. Giả sử có những số liệu quan trắc về nhiệt độ nước biển tại các tầng sâu ở điểm có tọa độ 120 o KĐ-20 o VB được cho trong bảng 4.3. Lập chương trình nhập những số liệu này và nội suy giá trị nhiệt độ cho một độ sâu bất kỳ nhập từ bàn phím, thông báo lên màn hình kết quả nội suy dưới dạng như sau: DO SAU = M NHIET DO = DO C Phân tích bài toán này, ta thấy có thể chia nó thành ba khối: 1) Nhập từ bàn phím một giá trị độ sâu tại đó cần nội suy nhiệt độ; 2) Nhập số liệu về độ sâu và nhiệt độ vào máy tính; 3) Nội suy giá trị nhiệt độ tại độ sâu cần tìm và in kết quả lên màn hình. Khối thứ nhất rất đơn giản và quen thuộc. Để thực hiện khối thứ hai ta tổ chức một vòng lặp để tuần tự nhập độ sâu và nhiệt độ tại các điểm nút (xem lưu đồ của khối 2 trên hình 4.7). Bảng 4.3. Phân bố nhiệt độ nước biển ( o C) theo độ sâu (m) Độ sâu 0 5 10 20 30 40 50 60 Nhiệt độ 24,31 24,26 24,20 24,18 24,13 24,05 23,98 23,89 Độ sâu 70 80 90 100 120 140 160 180 Nhiệt độ 23,87 23,57 23,14 22,74 21,31 20,03 18,49 17,58 Độ sâu 200 220 240 260 280 300 350 400 Nhiệt độ 16,66 15,61 14,73 13,97 13,47 12,93 11,40 10,18 Độ sâu 500 600 700 800 900 1000 1200 1400 Nhiệt độ 9,39 8,56 8,49 7,83 7,27 6,71 6,16 5,44 Hình 4.7. Lưu đồ khối 2 (thí dụ 8) - nhập chuỗi độ sâu và nhiệt độ N = 32 K = 1 K = K + 1 K > N T ↓ ↓ ↓ Khèi 2 § äc H (K) §äc T (K) → F 41 Bây giờ ta cụ thể hóa thêm khối thứ 3 và sau đó dẫn chương trình Fortran hoàn chỉnh của bài toán này. Như đã thấy, các giá trị quan trắc nhiệt độ được cho chỉ tại 32 độ sâu gọi là 32 điểm nút. Muốn nội suy giá trị nhiệt độ tại độ sâu bất kỳ ta cần tìm xem độ sâu đó nằm giữa hai nút nào. Gọi độ sâu cần nội suy nhiệt độ là 0 h . Giả sử độ sâu này nằm giữa các độ sâu nút i h và 1+i h , tức thỏa mãn bất đẳng thức kép: 10 + ≤≤ ii hhh , trong đó i có thể biến thiên từ 1 đến 31. Như vậy, để tìm i , ta phải giả sử 1=i và kiểm tra bất đẳng thức kép trên đây. Nếu bất đẳng thức không thỏa mãn, thì ta tăng i lên một đơn vị và tiếp tục cho tới khi bất đẳng thức thỏa mãn. I = 1 T0 = T(I) + (T(I +1)-T(I)) × (H0 - H(I)) / (H(I +1)-H(I)) H (I +1) ≥ H0 ≥ H (I) T ↓ ↓ → Khèi 3 I = I + 1 ↓ ↓ In H0, T0 F Hình 4.8. Lưu đồ khối 3 (thí dụ 8) - nội suy giá trị nhiệt độ và in kết quả Khi tìm được i , giá trị 0 t cần nội suy có thể tính theo công thức nội suy tuyến tính như sau: ii iii i hh hhtt tt − − − += + + 1 01 0 )()( . Tất cả những điều vừa phân tích được thể hiện trên lưu đồ khối ở hình 4.8. Dưới đây là chương trình của bài toán INTEGER N, I, K REAL H0, T0, H (40), T (40) C In lời nhắc và nhập độ sâu cần nội suy nhiệt độ PRINT * , ' NHAP DO SAU XAC DINH NHIET DO' READ *, H0 C In lời nhắc và nhập 32 cặp giá trị độ sâu và nhiệt độ N = 32 K = 1 5 PRINT *, ‘ NHAP DO SAU VA NHIET DO TANG ‘, K READ *, H(K), T(K) K = K +1 IF (K .GT. N) GOTO 4 GOTO 5 C Nội suy giá trị nhiệt độ tại độ sâu H0 4 I = N - 1 IF (H0 .GT. H(N)) GOTO 1 I = 1 2 IF (H0 .GE. H (I) .AND. H0 .LE. H (I+1)) GOTO 1 I = I + 1 42 GOTO 2 1 T0 = T(I) + (T(I+1)-T (I))*(H0-H(I)) / (H(I+1)-H(I)) PRINT 3, H0 PRINT 6, T0 3 FORMAT (1X, ‘DO SAU = ‘, F6.1, ‘ M’) 6 FORMAT (1X,’NHIET DO = ‘, F5.1, ’ DO C’) END Qua thí dụ ở mục 4.1.3 và những thí dụ ở chương này ta thấy việc áp dụng quy trình 5 bước giải bài toán và chiến lược chia khối và chi tiết hoá từng khối để phát triển thuật giải là một công cụ lập trình rất hiệu quả. Bài toán dù lớn, có cấu trúc phức tạp cũng trở nên sáng tỏ, trực quan. Từ thời điểm này sinh viên cần rèn luyện cho mình thói quen áp dụng phương pháp trên ngay cả với những bài tập đơn giản cũng như với những bài toán tương đối phức tạp khi thiết kế thuật giải. Còn chọn công cụ giả trình hay lưu đồ là tuỳ thích. Bài tập 1. Hãy thể hiện bằng giả trình hoặc lưu đồ thuật toán sắp xếp các phần tử của mảng một chiều theo thứ tự giảm dần. 2. Cho các giá trị: .TRUE.DONE 1I 2.1B 2.2A = =−= = Xác định giá trị của các biểu thức lôgic sau đây: 1) A .LT. B 2) A − B .GE. 6.5 3) I .NE. 5 4) A + B .GE. B 5) I .LE. I −5 6) .NOT. (A .EQ. 2 * B) 7) (A .LT. 10.0) .AND. (B .GT. 5.0) 8) (ABS (I) .GT. 2) .OR. DONE 9) A .LT. B .NEQV. DONE 3. Viết chương trình tính giá trị của y theo công thức ⎩ ⎨ ⎧ > ≤ = ,0 khi ;0 khi 3 2 xx xx y với x cho trước. 4. Viết chương trình đọc từ bàn phím một trị số nhiệt độ Celsius, liệt kê trên màn hình ba phương án chuyển đổi: sang độ Fahrenheit, Kelvin và Rankin. Theo người dùng chỉ định phương án chuyển đổi mà in ra nhiệt độ đã cho và kết quả chuyển đổi kèm các ký hiệu nhiệt độ tương ứng. Các công thức chuyển đổi như sau: KR CF RF 5 9 F32 5 9 R67,459 TT TT TT = += −= o o 5. Viết chương trình tính tích phân ∫ = 15 1 )( dxxyI với hàm )(xy cho dưới dạng bảng các giá trị thực nghiệm như trong bảng 4.4. Bảng 4.4 x 1,0 2,1 3,0 3,9 4,8 6,2 7,1 7,8 y 3,3 4,7 7,3 8,7 11,3 12,7 15,3 16,7 x 9,4 10,1 11,3 12,1 13,5 13,9 15,0 y 19,3 20,7 23,3 24,7 27,3 28,7 31,3 6. Viết chương trình cho phép đọc vào từ bàn phím một trị số của x và xác định trị số của hàm y bằng cách nội suy tuyến tính theo bảng giá trị 43 thực nghiệm (thí dụ bảng 4.4). 7. Hệ số nhớt phân tử ( 11 −− ⋅⋅ scmg ) của nước biển phụ thuộc vào nhiệt độ t (°) và độ muối S (%o) theo bảng 4.5. Viết chương trình nội suy tuyến tính bảng này cho một cặp trị số bất kỳ của o t và S . 8. Viết chương trình tính số π theo công thức khai triển chuỗi sau đây với sai số không quá 0,0001: 9 1 7 1 5 1 3 1 1 4 +−+−= π Bảng 4.5 Độ muối 0° 5° 10° 15° 20° 25° 30° 0 17,94 15,19 13,10 11,45 10,09 8,95 8,00 5 18,06 15,28 13,20 11,54 10,18 9,08 8,09 10 18,18 15,39 13,28 11,68 10,27 9,18 8,17 15 18,30 15,53 13,41 11,77 10,40 9,26 8,27 20 18,41 15,66 13,57 11,90 10,47 9,35 8,34 25 18,53 15,79 13,73 12,03 10,58 9,48 8,43 30 18,64 15,93 13,84 12,12 10,68 9,58 8,52 35 18,83 16,07 14,00 12,23 10,82 9,67 8,59 9. Viết chương trình cho phép liên tục nhập từ bàn phím hai số nguyên bất kỳ, tìm và in lên màn hình ước số chung lớn nhất của những số đó dưới dạng thông báo: USCLN CUA CAC SO: 36 VA 24 BANG 12 và kết thúc khi nào người dùng nhập vào hai số bằng nhau hoặc một trong hai số bằng 1. 10. Lập lưu đồ thuật giải để giả i gần đúng phương trình )(xfx = bằng phương pháp lặp Siedel. Xấp xỉ ban đầu 0 x và sai số cho phép ε được cho trước. Nếu tìm được nghiệm với độ chính xác đã cho thì in giá trị nghiệm kèm theo số bước lặp, còn nếu sau 100 lần lặp mà chưa nhận được nghiệm thì thông báo lên màn hình dòng chữ 'KHONG TIM DUOC NGHIEM'. (Gợi ý: Theo phương pháp lặp Seidel, người ta thế giá trị 0 x tuỳ chọn vào biểu thức )(xf ở vế phải của phương trình )(xfx = để tính ra giá trị − 1 x gọi là xấp xỉ bậc 1, sau đó kiểm tra nếu khác nhau giữa 1 x và 0 x lớn hơn sai số cho phép ε thì giá trị 1 x lại được thế vào vế phải và tiếp tục tính 2 x (xấp xỉ bậc 2) , quá trình này tiếp diễn cho đến khi chênh lệch giữa hai bước xấp xỉ liền nhau không lớn hơn ε thì người ta chấp nhận giá trị xấp xỉ cuối cùng làm nghiệm của phương trình )(xfx = . 44 Chương 5 - Cấu trúc lặp với lệnh DO Trong chương 4 đã xét sự điều khiển được thực hiện thông qua những lệnh cho phép chương trình chọn những nhánh khác nhau để thực hiện. Đồng thời, ta cũng đã một số lần sử dụng kết hợp lệnh IF lôgic và lệnh chuyển điều khiển vô điều kiện GOTO để tổ chức những vòng lặp dạng: n IF (Biểu thức lôgic) THEN Lệnh 1 Lệnh 2 . . . Lệnh m GOTO n END IF Cấu trúc này gọi là vòng lặp có điều kiện (While Loop): Khi và chừng nào biểu thức lôgic trong lệnh IF có giá trị .TRUE. thì nhóm lệnh từ lệnh 1 đến lệnh m lần lượt thực hiện, nhưng lệnh GOTO ở cuối luôn luôn chuyển điều khiển lên nhãn n và hình thành vòng lặp. Vòng lặp này có những đặc điểm sau: 1) Trường hợp biểu thức lôgic có giá trị .FALSE. ngay từ đầu, thì quá trình lặp sẽ không xảy ra; 2) Trong nhóm lệnh từ lệnh 1 đến lệnh m bên trong vòng lặp nhất thiết phải có một lệnh nào đó làm thay đổi giá trị của biểu thức lôgic thành .FALSE., vậy số lần lặp phụ thuộc vào giá trị khởi đầu của biểu thức lôgic và sự biến đổi giá trị của nó bên trong chính vòng lặp. Trong bài này ta xét một cấu trúc lặp khác mà điều kiện và số lần lặp được xác định ngay từ khi bắt đầu quá trình lặp với việ c sử dụng vòng lặp DO (DO Loop). Trong chương tiếp sau sẽ xét một tính năng quan trọng của vòng lặp DO, gọi là vòng lặp ẩn, để tổ chức nhập, xuất các biến có chỉ số rất hay gặp trong thực tiễn. 5.1. Vòng lặp DO 5.1.1. Cú pháp của lệnh DO và vòng lặp DO Dạng tổng quát của lệnh DO như sau: DO inc , lim , iniindn = trong đó hằng n là nhãn của lệnh kết thúc của vòng lặp, − ind là một biến số được dùng như là chỉ số đếm vòng lặp, − ini giá trị đầu gán cho chỉ số đếm, − lim giá trị cuối dùng để xác định khi nào vòng lặp DO kết thúc và −inc gia số, giá trị được cộng vào chỉ số đếm mỗi lần vòng lặp thực hiện. Những giá trị đầu, giá trị cuối và gia số gọi là các tham số của vòng lặp. Nếu trong lệnh DO không ghi gia số thì ngầm định là 1. Khi giá trị của chỉ số đếm lớn hơn giá trị cuối thì điều khiển được chuyển cho lệnh đứng sau lệnh kết thúc vòng lặp. Lệ nh kết thúc vòng lặp thường dùng là lệnh CONTINUE, có dạng tổng quát là n CONTINUE trong đó nhãn n phù hợp với nhãn mà lệnh DO ở trên đã chỉ định. Vậy dạng tổng quát của vòng lặp DO có thể viết như sau: 45 DO incliminiindn , , = Lệnh 1 . . . Lệnh m n CONTINUE Ta lấy thí dụ giải bài toán tính tổng của 50 số nguyên dương đầu tiên ∑ = ++++= 50 1 5049 . . . 21 i i để minh họa vòng lặp DO và so sánh nó với vòng lặp While mà ta đã xét ở bài trước: Vòng lặp DO Vòng lặp While SUM = 0.0 SUM = 0.0 DO 10 NUM = 1, 50 NUM = 1 SUM = SUM + NUM 10 IF (NUM .LE. 50) THEN 10 CONTINUE SUM = SUM + NUM NUM = NUM + 1 GO TO 10 END IF Trong vòng lặp DO trên đây chỉ số đếm NUM được khởi xướng bằng 1. Vòng tiếp tục lặp cho đến khi giá trị của NUM lớn hơn 50. Vì tham số thứ ba bỏ qua nên NUM tự động tăng lên 1 ở cuối mỗi lần lặp. Ta thấy rằng vòng lặp DO viết ngắn gọn hơn vòng lặp While, nhưng cả hai tính cùng một giá trị của biến SUM. Tuy nhiên, trong vòng lặp While ở mỗi lần lặp biểu thức lôgic luôn phải được ước lượng lại vì mỗi lần biến NUM được thay bởi giá trị mới Trong khi đó ở vòng lặp DO số lần lặp đã được tính trước trong lệnh DO. Đó là sự khác nhau cơ bản của hai loại vòng lặp. Người ta cũng có thể dùng cú pháp sau đây cho vòng lặp DO: DO inciniind , , lim = Lệnh 1 . . . Lệnh m END DO 5.1.2. Những quy tắc cấu trúc và thực hiện vòng lặp DO 1) Chỉ số đếm phải là một biến số, biến đó có thể là kiểu nguyên hoặc thực, nhưng không thể là biến có chỉ số. 2) Các tham số của vòng DO có thể là hằng, biến hay biểu thức nguyên hoặc thực. Gia số có thể là số dương, số âm, nhưng không thể bằng không. 3) Vòng DO có thể dùng bất kỳ lệnh thự c hiện nào không phải là một lệnh chuyển điều khiển, lệnh IF hay một lệnh DO khác làm lệnh cuối vòng. Lệnh CONTINUE là một lệnh thực hiện chuyên dùng làm lệnh cuối vòng; mặc dù có thể dùng những lệnh khác, nhưng nói chung nên dùng lệnh CONTINUE để chỉ cuối vòng lặp một cách tường minh. 4) Sự kiểm tra kết thúc lặp thực hiện ở đầu vòng lặp. Nếu giá trị đầu của ch ỉ số đếm lớn hơn giá trị cuối và gia số là số dương thì sự lặp không diễn ra, các lệnh bên trong vòng lặp bị bỏ qua và điều khiển chuyển tới lệnh đứng sau lệnh cuối cùng của vòng lặp. 5) Không được thay đổi giá trị của chỉ số đếm bằng một lệnh nào khác bên trong vòng DO trong khi thực hiện vòng lặp. [...]... DO độc lập nhau có thể dùng cùng chỉ số đếm, thậm chí khi chúng cùng nằm trong một vòng DO ngoài cho biến này sẽ nhận các giá trị 1, 2, , 11 tương ứng với x = 0; 0,1; 0,2; ; 1 Khi đó x = 0,1 (i − 1) 4) Khi một vòng DO lồng bên trong một vòng DO khác, thì vòng DO trong thực hiện trọn vẹn từng lần lặp ở vòng DO ngoài DO 17 I = 1, 11 X = 0.1 * (I − 1) Y = SIN (X) PRINT 10 , X, Y 10 FORMAT (20X, F4.2, 10X,... theo thuật giải biểu diễn bởi giả trình sau: 1) với i từ 1 đến 10 nhập bi 2) bmax ← b1 3) với i từ 2 đến 10 nếu bi > bmax thì bmax ← bi 4) in bmax Từ giả trình này dễ dàng chuyển thành chương trình Fortran dưới đây: REAL B(10) DO 2 I = 1, 10 READ *, B (I) 2 CONTINUE BMAX = B (1) DO 3 I = 2, 10 IF (BMAX LT B (I)) BMAX = B (I) 3 CONTINUE PRINT *, ' B MAX = ' , BMAX END 46 Thí dụ 11: Tổ chức vòng lặp với... cắt bỏ thập phân của thương số Nếu giá trị này âm thì sự lặp không xảy ra 5.1.3 Thí dụ ứng dụng vòng lặp DO Thí dụ 9: Lập vòng lặp bằng lệnh DO Lập bảng giá trị của đa thức 3 t 2 + 4, 5 trên đoạn t từ 1 đến 10 với bước Δ t = 1 PRINT * , ' POLYNOMIAL MODEL' PRINT * PRINT * , 'TIME POLYNOMIAL' POLY = 3 * REAL (I) ** 2 + 4. 5 PRINT 10 , I , POLY 10 FORMAT (1X, I2, 8X, F6.2) 15 CONTINUE END Thí dụ 10: Tìm... While để giữ tính cấu trúc của chương trình) 9) Thực hiện xong vòng lặp, chỉ số đếm chứa một giá trị vượt quá giá trị cuối 10) Bao giờ cũng đi vào vòng lặp thông qua lệnh DO để vòng lặp được khởi xướng một cách đúng đắn Không bao giờ được dùng lệnh GO TO chuyển từ bên ngoài vào bên trong vòng DO 11) Số lần lặp có thể tính bằng công thức ⎡ lim -ini ⎢ inc ⎣ ⎤ ⎥ +1 ⎦ trong đó dấu ngoặc vuông chỉ sự cắt... E10.3) 17 CONTINUE END Hãy lưu ý rằng ở đây ta đã tránh sử dụng vòng lặp DO với các tham số thực như: DO 15 X = 0.0 , 1.0 , 0.1 để phòng ngừa hiện tượng cắt trong máy tính Giả sử rằng giá trị 0.1 được lưu như một giá trị hơi nhỏ hơn 0.1 trong hệ máy tính đang dùng, mỗi lần thêm 0.1 cho chỉ số đếm, máy có thể thêm ít hơn theo dự định Ngoài ra, trong trường hợp này ta có thể thực hiện lặp quá mất một lần... không chính xác bằng 1.0 5.2 Vòng DO lồng nhau Vòng DO có thể được lồng trong một vòng DO khác, cũng giống như cấu trúc IF lồng trong cấu trúc IF khác Khi tổ chức các vòng DO lồng hãy tuân thủ những quy tắc sau đây: 1) Vòng DO lồng bên trong không thể dùng chính chỉ số đếm cùng với vòng DO ngoài chứa nó 2) Vòng DO lồng phải kết thúc bên trong vòng DO ngoài 5) Mặc dù các vòng DO lồng có thể dùng cùng một... vòng DO ngoài 5) Mặc dù các vòng DO lồng có thể dùng cùng một dòng lệnh cuối CONTINUE, nhưng ta nên kết thúc mỗi vòng bằng một lệnh CONTINUE riêng biệt để làm sáng rõ chương trình Dưới đây dẫn một số thí dụ về các vòng DO đúng và các vòng DO sai: a) Những vòng DO đúng: DO 15 I = 1, 5 DO 10 J = 1, 8 DO 5 K = 2, 10, 2 5 CONTINUE 10 CONTINUE 15 CONTINUE DO 15 I = 1, 5 DO 10 K = 1, 8 10 CONTINUE DO 5... vòng DO sai: DO 15 I = 1, 5 DO 10 J = 1, 8 DO 5 K = 2, 10, 2 10 CONTINUE 5 CONTINUE 15 CONTINUE DO 20 J = 1, 5 DO 10 J = 1, 8 10 CONTINUE DO 15 K = 2, 10, 2 DO 15 K = 2, 10, 2 15 CONTINUE 20 CONTINUE 47 . 15,53 13 ,41 11,77 10 ,40 9,26 8,27 20 18 ,41 15,66 13,57 11,90 10 ,47 9,35 8, 34 25 18,53 15,79 13,73 12,03 10,58 9 ,48 8 ,43 30 18, 64 15,93 13, 84 12,12 10,68 9,58 8,52 35 18,83 16,07 14, 00 12,23. thực nghiệm như trong bảng 4. 4. Bảng 4. 4 x 1,0 2,1 3,0 3,9 4, 8 6,2 7,1 7,8 y 3,3 4, 7 7,3 8,7 11,3 12,7 15,3 16,7 x 9 ,4 10,1 11,3 12,1 13,5 13,9 15,0 y 19,3 20,7 23,3 24, 7 27,3 28,7 31,3. 24, 18 24, 13 24, 05 23,98 23,89 Độ sâu 70 80 90 100 120 140 160 180 Nhiệt độ 23,87 23,57 23, 14 22, 74 21,31 20,03 18 ,49 17,58 Độ sâu 200 220 240 260 280 300 350 40 0 Nhiệt độ 16,66 15,61 14, 73

Ngày đăng: 23/07/2014, 21:20

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan