29 tháng 4, 2014

Tổng hợp các bài tập lập trình trên Turbo Pascal (Phần cuối)


Trong bài viết sau đây sẽ chia sẻ đến bạn tổng hợp các bài tập cơ bản lập trình trên phần mền Turbo Pascal. Hy vọng, nó sẽ giúp ích cho bạn khi mới bắt đầu làm quen với ngôn ngữ lập trình cơ bản. Các bài tập tổng hợp bao gồm: các lệnh nhập xuất đơn giản, các câu lệnh điều khiển, dữ liệu kiểu mảng, chương trình con ... Phần cuối.
 
71. Xây dựng hàm tính n!.

Function Giaithua (n: integer): longint;
Begin
If n = 0 then Giaithua := 1
Else Giaithua := n * Giaithua (n - 1);
End;

72. Xây dựng hàm tính tổng các phần tử có trong mảng 1 chiều gồm n phần tử kiểu số nguyên.

Type mang = array [1 .. 20] of integer;
Function Tong (a: mang; n: integer): longint;
Begin
If n = 1 then Tong := a [n]
Else Tong := a [n] + Tong (a, n - 1);
End;

73. Xây dựng thủ tục xuất ngược mảng 1 chiều gồm n phần tử kiểu số nguyên.

Procedure Xuatnguoc (a: mang; n: integer);
Begin
If n >= 1 then
Begin
Write (a [n], ' ');
Xuatnguoc (a, n - 1);
End;
End;

74. Tạo Unit gồm các chương trình con: nhập 2 số nguyên, tính tổng 2 số nguyên, kiểm tra xem số nguyên thứ 1 có chia hết cho số nguyên thứ 2 không, hoán vị 2 số nguyên. Sau đó viết chương trình để gọi thực hiện Unit này.

Unit Songuyen;
Interface
Procedure Nhap (var a, b: integer);
Function Tong (a, b: integer): longint;
Function Chiahet (a, b: integer): boolean;
Procedure Hoanvi (var a, b: integer);
Implementation
Procedure Nhap (var a, b: integer);
Begin
Write ('Nhap 2 so nguyen: ');
Readln (a, b);
End;
Function Tong (a, b: integer): longint;
Begin
Tong := a + b;
End;
Function Chiahet (a, b: integer): boolean;
Begin
If a mod b = 0 then Chiahet := true
Else Chiahet := false;
End;
Procedure Hoanvi (var a, b: integer);
Var tam: integer;
Begin
tam := a;
a := b;
b := tam;
End;
End.
Program Sudung_Unit;
Uses crt, songuyen;
Var a, b: integer;
Begin
Clrscr;
Nhap (a, b);
Writeln ('Tong 2 so nay la: ', Tong (a, b);
If Chiahet (a, b) = true then
Writeln (a, ' chia het cho ', b)
Else writeln (a, ' khong chia het co ', b);
Writeln ('Truoc khi hoan vi: a = ', a, ' ', 'b = ', b);
Hoanvi (a, b);
Writeln ('Sau khi hoan vi: a = ', a, ' ', 'b = ', b);
Readln;
End.

75. Tạo Unit gồm các chương trình con: nhập mảng 1 chiều gồm n phần tử kiểu số nguyên, xuất mảng, thêm 1 phần tử vào đầu, xóa 1 phần tử ở cuối, kiểm tra mảng có thứ tự tăng dần không.

Unit Mang1chieu;
Interface
Type mang = array [1 .. 20] of integer;
Procedure Nhap (var a: mang; n: integer);
Procedure Xuat (a: mang; n: integer);
Procedure Themdau (var a: mang; var n: integer; x: integer);
Procedure Xoacuoi (var a: mang; var n: integer);
Function Tangdan (n: mang; n: integer): boolean;
Implementation
Procedure Nhap (var a: mang; n: integer);
Var i: integer;
Begin
For i := 1 to n do
Begin
Write ('Nhap a [', i, ']= ');
Readln (a [i]);
End;
End;
Procedure Xuat (a: mang; n: integer);
Var i: integer;
Begin
For i := 1 to n do
Write (a [i], ' ');
End;
Procedure Themdau (var a: mang; var n: integer; x: integer);
Var i: integer;
Begin
For i := n downto 1 do
a [i + 1] := a [i];
a [1] := x;
n := n + 1;
End;
Procedure Xoacuoi (var a: mang; var n: integer);
Begin
a [n] := 0;
n := n - 1;
End;
Function Tangdan (a: mang; n: integer): boolean;
Var i: integer;
Begin
i := 1;
While (i <= n - 1) and (a [i] <= a [i + 1]) do i := i + 1;
If i = n then Tangdan := true
Else Tangdan := false;
End;
End.

76. Xây dựng các chương trình con (không đệ quy) sau:
a. Tính tổng n số nguyên dương đầu tiên.
b. Kiểm tra xem số n có phải là số chính phương không?
c. In ra n số chính phương đầu tiên.
d. Tìm số lớn nhất trong 4 số thực.
e. In ra n phần tử đầu tiên của dãy Fibonaci.
f. Đếm xem có bao nhiêu số nguyên tố trong n số nguyên dương đầu tiên.
g. Tìm bội số chung nhỏ nhất của 2 số nguyên dương.
h. In ra các ước số của số nguyên dương n.
Viết chương trình để mình họa các chương trình đã xây dựng.

a)
Uses crt;
Var n: integer; kq: longint;
Function Tong (n: integer): longint;
Var i: integer; s: longint;
Begin
s := 0;
For i := 1 to n do
s := s + i;
Tong := s;
End;
Begin
Clrscr;
Write ('Nhap n: ');
Readln (n);
kq := Tong (n);
Writeln ('Tong ', n, ' so nguyen duong dau tien la: ', kq);
Readln;
End.

b)
Var n: integer; kq: boolean;
Function scp (n: integer): boolean;
Begin
If frac (sqrt (n)) = 0 then scp := true
Else scp := false;
End;
Begin
Write ('Nhap n = ');
Readln (n);
kq := scp (n);
Writeln ('So chinh phuong la: ', kq);
Readln;
End.

c)
Var n: integer;
Procedure Inscp (n: integer);
Var i, d: integer;
Begin
i := 1;
d := 0;
Repeat
if frac (sqrt (i)) = 0 then
Begin
Write (i, ' ');
d := d + 1;
End;
i := i + 1;
Until d = n;
End;
Begin
Write ('Nhap n = ');
Readln (n);
Inscp (n);
Readln;
End.

d)
Var a, b, c, d: real;
Function Max (a, b, c, d: real): real;
Var t: real;
Begin
If n > b then t := a
Else t := b;
If c > d then t := c
Else t := d;
Max := t;
End;
Begin
Write ('Nhap 4 so a, b, c, d: ');
Readln (a, b, c, d);
Writeln (So lon nhat trong 4 so la: ', Max (a, b, c, d));
Readln;
End.

e)
Var i, n: integer; F, F1, F2: integer;
Procedure Fibo (n :integer);
Var i: integer;
Begin
F1 := 1; F2 := 1
For i := 3 to n do
Begin
F := F1 + F2;
F2 := F1;
F1 := F;
End;
End;
Begin
Write ('Nhap n: ');
Readln (n);
For i := 1 to n do
Write (F, ' ');
Readln;
End.

f)
Var n: integer;
Function Ngto (n: integer): integer;
Var i, d: integer;
Begin
d := 0;
i := 2;
While n mod i <> 0 do i := i + 1;
If i = n then d := d  + 1;
Ngto := d;
End;
Begin
Write ('Nhap n = ');
Readln (n);
Writeln ('Cac so nguyen to la: ', Ngto (n));
Readln;
End.

g) 
Var a, b, kq: integer;
Function bsc (a, b: integer): longint;
Var t: integer;
Begin
If (a * b mod a = 0) and (a * b mod b = 0) then t := b
Else t := a;
bsc := t;
End.
Begin
Write ('Nhap a, b: ');
Readln (a, b);
kq := bsc (a, b);
Writeln ('BSCNN la: ', kq);
Readln;
End.

h)
Var n: integer;
Procedure US (n: integer);
Var i: integer;
Begin
For i := 1 to n do
If n mod i = 0 then write (i, ' ')
End;
Begin
Write ('Nhap n: ')'
Readln (n);
Writeln ('Cac uoc so cua ', n, ' la: ');
US (n);
Readln;
End.

77. Xây dựng các chương trình con (đệ quy) sau:
a. Tính tổng n số nguyên dương đầu tiên.
b. In ra n phần tử đầu tiên của dãy Fibonaci.
c. Tìm bộ số chung nhỏ nhất của 2 số nguyên dương.
d. Tìm ước số chung lớn nhất của 2 số nguyên dương.
e. Xuất mảng 1 chiều.
Viết chương trình để minh họa các chương trình đã xây dựng.

a)
Var a: integer;
Function Tong (n: integer): longint;
Begin
If n = 0 then Tong := 0;
Else If n > 0 then Tong := n + Tong (n - 1);
End;
Begin
Write ('Nhap so nguyen duong: ');
Readln (n);
Writeln ('Tong ', n, ' so nguyen la: ', Tong (n));
Readln;
End.

b)
Var n: integer;
Function Fibo (n: integer): integer;
Begin
If (n = 1) or (n = 2) then Fibo := 1
Else Fibo := Fibo (n - 1) + Fibo (n - 2);
End;
Procedure Xuat (n :integer);
Begin
If n = 1 then write (n, ' ')
Else
Begin
Xuat (n - 1);
Write (Fibo (n));
End;
End;
Begin
Readln (n);
Fibo (n);
Readln;
End.

c)
Var a, b: integer;
Function BSCNN (a, b: integer): integer;
Begin
If a = b then BSCNN := a
Else If a > b then BSCNN := BSCNN (a * b/a)
Else BSCNN := BSCNN (a * b/b);
End;
Begin
Write ('Nhap a, b: ');
Readln (a, b);
BSCNN (a, b);
Readln;
End.

d)
Var a, b: integer;
Function USCLN (a, b: integer): integer;
Begin
If a = b then USCLN := a
Else If a > b then USCLN := USCLN (a - b, b)
Else USCLN := USCLN (a, b - a);
End;
Begin
Write ('Nhap a, b: ');
Readln (a, b);
USCLN (a, b);
Readln;
End.

e)
Type mang = array [1 .. 20] of integer;
Var n, i: integer; a: mang;
Function Xuatmang (i: integer): integer;
Begin
If i = 1 then Xuatmang := a [1]
Else Xuatmang := a [i];
End;
Begin
Repeat
Write ('Nhap phan tu thu: ');
Readln (n);
Until (n > 0) and (n < 21);
For i := 1 to n do
Begin
Write ('Nhap phan tu thu ', i, ': ');
Readln (a [i]);
End;
Writeln ('Mang vua nhap la: ');
For i := 1 to n do
Write (Xuatmang (i) : 4);
Readln;
End.

Chúc bạn thành công!