Câu 1: Ta có lưu đồ sau:
Câu 2:
Đáp án:
- t=0.2wk=(0.2, 0.6, 1.3, 2.15)sum=2.15
- t=0.3wk=(0.3, 0.65, 1.325, 2.1625)sum=2.1625
- t=0.4wk=(0.4, 0.7, 1.35, 2.175)sum=2.175
- t=0.5wk=(0.5, 0.75, 1.375, 2.1875)sum=2.1875
Câu 3:
Chương trình sai:
1 PROGRAM Noi suy Lagrange
2 IMPLICIT NONE
3 INTEGER::j,n
4 REAL::i,P,xnhap
5 PRINT*,'Moi ban nhap bac cua da thuc noi suy ='
6 READ*,n
7 REAL, ALLOCATABLE::x(:),y(:)
8 Do i=0,n
9 PRINT*,'moi ban nhap x_',i,'='
10 READ*,x(i)
11 PRINT*,'moi ban nhap y_',i,'='
12 READ*,y(i)
13 END DO
14 PRINT*,'Moi ban nhap diem x ma ban muon xac dinh gia tri ham'
15 READ*,xnhap
16 P=0
17 DO i=0,n
18 L=1.
19 DO j=0,n
20 IF i/=j THEN
21 L=L*(xnhap-x(j))/(x(i)-x(j))
22 END IF
23 END DO
24 P=P+L*y(i)
25 END DO
26 PRINT*, 'y(',xnhap,')=', P
27 END PROGRAM
Lỗi 1: Dòng 1: "PROGRAM Noi suy Lagrange", Tên chương trình không được chứa dấu cách.
Sửa: Program NoisuyLagrange
Lỗi 2: Dòng 4: "REAL::i,P,xnhap", Biến i là biến đếm, phải là kiểu nguyên chứ không phải là kiểu thực.
Sửa: Đưa biến i lên khai báo ở dòng 3 chung với các biến kiểu nguyên: "INTEGER::j,n,i"
Lỗi 3: Dòng 7: "REAL, ALLOCATABLE::x(:),y(:)", Phần khai báo biến phải nằm trong phần khai báo chứ không thể nằm ở phần thân chương trình.
Sửa: Đưa dòng 7 lên ngay sau dòng 4.
Lỗi 4: Biến x, y là biến mảng động, phải được gán giá trị cho số phần tử của mảng.
Sửa: Thêm vào ngay sau dòng 6 của chương trình dòng lệnh sau: Allocate(x(0:n),y(0:n))
Lỗi 5: Biến L chưa được khai báo biến.
Sửa: Khai báo thêm vào dòng 4: REAL::P,xnhap, L
Lỗi 6: Dòng 20:"IF i/=j THEN", trong cú pháp câu lệnh IF thì điều kiện phải được đặt ở trong dấu ().
Sửa: IF (i/=j) THEN
Sau đây là chương trình đã chỉnh sửa hoàn chỉnh:
1 PROGRAM NoisuyLagrange
2 IMPLICIT NONE
3 INTEGER::j,n,i
4 REAL::P,xnhap,L
5 REAL, ALLOCATABLE::x(:),y(:)
6 PRINT*,'Moi ban nhap bac cua da thuc noi suy ='
7 READ*,n
8 ALLOCATE(x(0:n),y(0:n))
9 Do i=0,n
10 PRINT*,'moi ban nhap x_',i,'='
11 READ*,x(i)
12 PRINT*,'moi ban nhap y_',i,'='
13 READ*,y(i)
14 END DO
15 PRINT*,'Moi ban nhap diem x ma ban muon xac dinh gia tri ham'
16 READ*,xnhap
17 P=0
18 DO i=0,n
19 L=1.
20 DO j=0,n
21 IF (i/=j) THEN
22 L=L*(xnhap-x(j))/(x(i)-x(j))
23 END IF
24 END DO
25 P=P+L*y(i)
26 END DO
27 PRINT*, 'y(',xnhap,')=', P
Read more