Đến nội dung

Hình ảnh

Chương trình con - Pascal


  • Please log in to reply
Chủ đề này có 5 trả lời

#1
Jaliyiah Sophia

Jaliyiah Sophia

    Binh nhất

  • Thành viên
  • 20 Bài viết
Bài 1: lập chương trình tính tam giác PASCAL để tính $C^{n}_{k}$



Bài 2: viết các chương trình con tính diện tích hình tam giác, hình tròn, hình vuông, hình chữ nhật trong 1 chương trình. Sau đó hỏi chọn 1 trong các phương án tính S bằng cách chọn trong bảng chọn lệnh sau:

  • không làm gì hết, trở về màn hình soạn thảo.
  • tính S hình vuông.
  • tính S hình tròn.
  • tính S hình tam giác.
  • tính S hình chữ nhật.


Bài 3: Hãy viết CTrình nhập giá trị cho ma trận vuông cấp n sao cho:

  • Tính tổng các phần tử trên đường chéo chính, chéo phụ.
  • Tính tổng bình phương các số nằm trên hàng chẵn; lẻ.
  • Tính tổng căn bậc 2 các số không âm trên cột chẵn; lẻ.
  • Đếm số phần tử có giá trị trong khoảng [1..5].
  • Viết thủ tục hoán vị phần tử hàng cho phần tử cột của MT đã cho.


Bài 4: Viết chương trình tính $S=\sum\limits_{i=0}^{n}.\dfrac{1+x^{i}}{(i+1)!}$
Trong thời gian BQT 3T fix diễn đàn, mems 3T hãy đăng ký nick mới tại VMF...
3 tháng nữa ra đi...
Em hồn nhiên... em sẽ bình yên...

#2
dehin

dehin

    Chém gió thần!

  • Thành viên
  • 733 Bài viết
Bài 1 có 3 cách:
C1:
Function C(n,k:byte):longint;
Begin
If k=0 then C:=1 else if n=0 then C:=0
Else C:=C(n-1,k-1)+C(n-1,k)
End;
C2:
var C:aray[0..100,0..100] of longintl
Begin

C[0,0]:=0;
For i:=1 to n do C[i,i]:=1;
For i:=1 to n do C[i,0]:=1;
For i:=2 to n do
for j:=1 to i-1 do C[i,j]:=C[i-1,j-1]+C[i-1,j];
Write(C[n,k]);
End.

C3:
Function GT( x: byte):longint;
var S:longint;
t:byte;
Begin
S:=1;
For t:=1 to n do S:=S*i;
GT:=S;
End;
Function C(n,k:byte):longint;
Begin
C:=GT(n)/(GT(k)*GT(n-k))
End;
Nhận xét
C1:Chương trình dễ viết, ngắn gọn, nhưng tốc độ tính toán sẽ chậm do lặp lại tính toán nhiều.
C2: Chương trình dài hơn nhưng tốc độ tính toán nhanh hơn C1 do mỗi C[,j] chỉ tính toán 1 lần.
Song phải cần 1 không gian lớn để lưu trữ dữ liệu.
C3: Chương trình thực hiện nhanh nhất, tiết kiệm bộ nhớ nhất.
Love Lan Anh !

#3
Jaliyiah Sophia

Jaliyiah Sophia

    Binh nhất

  • Thành viên
  • 20 Bài viết

Bài 1 có 3 cách:
C1:
Function C(n,k:byte):longint;
Begin
If k=0 then C:=1 else if n=0 then C:=0
Else C:=C(n-1,k-1)+C(n-1,k)
End;
C2:
var C:aray[0..100,0..100] of longintl
Begin

C[0,0]:=0;
For i:=1 to n do C[i,i]:=1;
For i:=1 to n do C[i,0]:=1;
For i:=2 to n do
for j:=1 to i-1 do C[i,j]:=C[i-1,j-1]+C[i-1,j];
Write(C[n,k]);
End.

C3:
Function GT( x: byte):longint;
var S:longint;
t:byte;
Begin
S:=1;
For t:=1 to n do S:=S*i;
GT:=S;
End;
Function C(n,k:byte):longint;
Begin
C:=GT(n)/(GT(k)*GT(n-k))
End;
Nhận xét
C1:Chương trình dễ viết, ngắn gọn, nhưng tốc độ tính toán sẽ chậm do lặp lại tính toán nhiều.
C2: Chương trình dài hơn nhưng tốc độ tính toán nhanh hơn C1 do mỗi C[,j] chỉ tính toán 1 lần.
Song phải cần 1 không gian lớn để lưu trữ dữ liệu.
C3: Chương trình thực hiện nhanh nhất, tiết kiệm bộ nhớ nhất.

xem lại chỗ đó đi bạn
Trong thời gian BQT 3T fix diễn đàn, mems 3T hãy đăng ký nick mới tại VMF...
3 tháng nữa ra đi...
Em hồn nhiên... em sẽ bình yên...

#4
dehin

dehin

    Chém gió thần!

  • Thành viên
  • 733 Bài viết
xem rồi sao nhỉ bạn.
có gì nói luôn ra cái.
vừa chạy thử trên Pascal xong, ngon lành
Love Lan Anh !

#5
Jaliyiah Sophia

Jaliyiah Sophia

    Binh nhất

  • Thành viên
  • 20 Bài viết
Bài 1 :

Để tính tam giác pascal thì sử dụng cách 2 , nhưng chỉ lưu 2 dòng thôi rồi cập nhật lại , vì kết quả ở dòng i chỉ phụ thuộc vào dòng i-1 :)

Bài 2 :

Sử dụng một biến enter để nhận lệnh cần tính là hình gì, với mỗi hình ta trả về procedure để xử lý cho hình đó. và tính cụ thể ra.
ví dụ :

function getareasquare:longint;
begin
readln(n); // n la canh hinh vuong
exit(n*n);
end;
readln(enter);
if (enter=1) then ans:=getareasquare;

các hình khác tương tự :)

Bài 3:

1.
ans:=0;
for i:=1 to n do inc(ans,a+ans[i][n-i+1]);
dec(ans,a[n div 2 + 1][n div 2 + 1]);
2.
[i]chẵn :

ans=0;
i:=0;
while (i<=n) do
begin
inc(i,2);
for j:=1 to n do
inc(ans,a[i][j](a[i][j]);
end;
[i]lẻ :

ans:=0;
i:=-1;
while (i<=n) do
begin
// tương tự như trên
end;

3.
làm tương tự câu 2, để ý kết quả phải là số real hay là extended.

4.
count:=0;
for i:=1 to n do
for j :=1 to n fo
if (1<=a[i][j]) and (a[i][j]<=5) then
inc(count);

5.
câu này không hiểu lắm, cái hàng nào với cột nào h ?
nếu có 1 hàng x và cột y cố định thì lưu làm 2 mảng rồi ráp vào thôi :)

Bài 4:
gọi g[i] là x^i.
f[i] là i!
g[0]:=1;
for i:=1 to n do g[i]:=g[i-1]*x;
f[0]:=1;
for i:=1 to n+1 do f[i]:=f[i-1]*i;
ans:=0;
for i:=1 to n do
ans:=ans + ((1+g[i])/f[i+1]);
Trong thời gian BQT 3T fix diễn đàn, mems 3T hãy đăng ký nick mới tại VMF...
3 tháng nữa ra đi...
Em hồn nhiên... em sẽ bình yên...

#6
dehin

dehin

    Chém gió thần!

  • Thành viên
  • 733 Bài viết
Để tính $ C_n^k$ thì dùng cách 3 là chương trình chạy hiệu quả nhất.
Do tính trực tiếp: $ C_n^k=\dfrac{n!}{k!(n-k)!}$
Love Lan Anh !




1 người đang xem chủ đề

0 thành viên, 1 khách, 0 thành viên ẩn danh