1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu Một số bài tập lập trình Pascal docx

5 1,3K 27

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 69,5 KB

Nội dung

Một số bài tập lập trình PascalVấn đề 1: Cấu trúc điều khiển Bài toán số 1.1: Tính tổng của các số tự nhiên từ 1 đến N.. Output: S, là tổng của các số từ 1 đến N Hướng dẫn: Bài toán được

Trang 1

Một số bài tập lập trình Pascal

Vấn đề 1: Cấu trúc điều khiển

Bài toán số 1.1: Tính tổng của các số tự nhiên từ 1 đến N.

S = 1 + 2 + … + N

Ví dụ : N = 5, S = 1 + 2 + 3 + 4 + 5 = 15 Yêu cầu: Input: N, là số tự nhiên bất kỳ

Output: S, là tổng của các số từ 1 đến N Hướng dẫn:

Bài toán được thực hiện qua 3 bước cụ thể như sau:

- Thông báo nhập liệu, và nhập dữ liệu vào cho N

- Tiến hành tính tổng S:

o Khởi gán giá trị ban đầu cho tổng S

o Tiến hành tính tổng, cộng dồn với các giá trị của i vào S (với i được lặp từ 1 cho đến N)

- Xuất kết quả của tổng S ra màn hình

Chương trình:

Program TinhTong;

Uses crt;

Var S,i,n:Integer; // Khai bao bien su dung

BEGIN

Write( ‘ Nhap so n:’ ); // Thong bao nhap lieu Readln( n ); // Nhap gtri N, (voi &N la lay d/c bien N) S: = 0; // Khoi gan gia tri ban dau cho S

For i:=1 to n do // Lap voi moi i co gia tri tu 1 den N

S:=S + i; // Tinh tong cong don i vao S Writeln( ‘Tong = ’, S); // Xuat ket qua tong S ra man hinh Readln;

END

Các phiên bản khác nhau của bài toán là:

⊕ Tính tổng (với giả sử N là số lẻ)

⊕ Tính tổng các số tự nhiên lẻ nhỏ hơn hoặc bằng N

⊕ Tính tổng các số tự nhiên chia hết cho 5 như 5, 10, 15, 20, 25, 30….N (N chia hết cho 5)

Hướng dẫn: - Điều chỉnh bước lặp cho phù hợp

- Trước khi cộng dồn giá trị của i vào tổng S, phải kiểm tra điều kiện giá trị của i có thỏa mãn điều kiện bài toán hay không

Cụ thể là:

⊕ For i:= 1 to n do // Lap voi moi i co gia tri tu 1 den N

S:= S + i / (i+1); // Tinh tong cong don i/(i+1) vao S

(Luu y, truong hop nay bien S phai duoc khai bao kieu du lieu la so thuc Real )

⊕ For i:=1 to n do // Lap voi moi i co gia tri tu 1 den N

if ( i mod 2 == 1) // Kiem tra i co’ phai la so le hay khong

S := S + i; // Dung ==> Tinh tong cong don i vao S

⊕ for i:=1 to n do // Lap voi moi i co gia tri tu 1 den N

if ( i % 5 == 0) // Kiem tra i co’ phai la 5, 10, 15… hay khong

Trang 2

S := S + i; // Dung ==>Tinh tong cong don i vao S

Trang 3

Bài toán số 1.2: Kiểm tra số N có phải là số nguyên tố hay không.

Ví dụ: N = 19 Kết quả là: 19 la so nguyen to

N = 33 Kết quả là: 33 khong phai la so nguyen to

Yêu cầu: Input: N, là số tự nhiên bất kỳ.

Output: Trả lời “N la so nguyen to”

hoặc “N khong phai la so nguyen to” tùy theo N

Lưu ý: Số nguyên tố là số chỉ có thể chia hết cho 1 và chính nó ( N ).

Ngược lại, N là không phải là số nguyên ==> N chia hết cho một số trong khoảng từ 2 đến (N-1)

Hướng dẫn:

Bài toán được thực hiện qua 3 bước cụ thể như sau:

- Thông báo nhập liệu, và nhập dữ liệu vào cho N

- Tiến hành kiểm tra N có phải là số nguyên tố hay không:

- Xuất câu trả lời “N la so nguyen to” hoặc “N khong phai la so nguyen to” tùy theo giá trị của biến

Chương trình:

Program SNT;

Uses crt;

Var n , i :Integer; // Khai bao bien su dung

BEGIN

Write(‘Nhap vao mot so:’); // Thong bao nhap lieu Readln(n); // Nhap gtri N, (voi &N la lay d/c bien N)

i := round( sqrt(n) );

If( n mod i <> 0) then // Xuat cau tra loi cuoi cung

Writeln(‘ N la so nguyen to’) Else

Writeln(‘ N khong la so nguyen to’);

Readln;

END

Bài toán số 1.3: Tìm USCLN(a, b) va BSCNN(a, b)

Ví dụ: USCLN(18, 24) = 4 và BSCNN(18, 24) = 72

Yêu cầu: Input: a, b là 2 số tự nhiên.

Output: USCLN và BSCNN của a và b

Một số lưu ý:

- Nếu i là ước số của a và b thì a và b đồng thời chia hết cho i

- Luôn luôn có tối thiểu một USCLN của a và b là 1

- Nếu i là USCLN thì i là ước số nhỏ hơn cả a lẫn b và gần a, b nhất

Như vậy, nếu sử dụng một vòng lặp để kiểm tra a,b có đồng thời chia hết cho i hay không thì i là USCLN khi:

+ i là USC (a, b cùng chia hết cho i) cuối cùng nếu i lặp từ 1 đến a (hoặc b)

+ i là USC (a, b cùng chia hết cho i) đầu tiên nếu lặp từ a (hoặc b) quay về 1

- BSCNN(a, b) = a * b / (USCLN(a, b)

Hướng dẫn:

Bài toán được thực hiện qua 3 bước cụ thể như sau:

- Thông báo nhập liệu, và nhập dữ liệu vào cho a và b

- Tiến hành tính USCLN(a, b):

Sử dụng vòng lặp for, lặp từ a lùi về 1

Kiểm tra nếu a, b đều chia hết cho i thì gọi lệnh break để dừng vòng lặp

==> i là USC đầu tiên gần a, b nhất ==>USCLN

- Xuất kết quả của USCLN(a, b) , BSCNN (a, b) ra màn hình

Chương trình:

Trang 4

Program USCLN;

Use crt;

Var a , b :integer; // Khai bao bien su dung

Begin

Write(‘Nhap vao so a:’); // Thong bao nhap lieu

Readln(a); // Nhap gtri a (voi &a, la lay d/c bien a,)

Write(‘Nhap vao so b:’); // Thong bao nhap lieu

Readln(b); // Nhap gtri b (voi &b, la lay d/c bien b,)

For i:=a downto 1 do

If ((a mod i = 0) and (b mod i = 0)) then // Kiem tra a, b co chia het

Break;

Writeln(‘USCLN (‘,a,’,’,b,’):’, i); // Xuat ket qua USCLN(a, b)

Writeln(‘BSCNN (‘,a,’,’,b,’):’, a*b div i); // Xuat ket qua USCLN(a, b)

Readln;

End

Bài toán số 1.4: Nhập vào một số tự nhiên N Hãy tính tổng các chữ số của nó.

Ví dụ: N = 1682 Tong cac chu so cua N la: 17 ( = 1 + 6 + 8 + 2 )

Yêu cầu: Input: N là số nguyên bất kỳ, N có khả năng là số lớn

Output: S, la tổng các chữ số của N

Hướng dẫn:

- Gán tổng S với giá trị ban đầu là 0

- Sử dụng để lấy từng chữ số của số tự nhiên N bằng cách:

Lặp trong khi mà N còn > 0 thì

+ Gán k là chữ số cuối cùng của N

+ Tiến hành cắt chữ số cuối cùng của N đi bằng việc lấy N chia cho 10

+ Cộng dồn S: = S + k Lặp lại cho đến khi N = 0 thì dừng

Chương trình:

Program tong;

Uses crt;

Var n , s , k: integer; // Khai bao bien su dung

Begin

Write(‘ Nhap N:’); // Thong bao nhap lieu

Readln(N ); // Nhap gtri cho N

S := 0;

While ( N <> 0 ) do // Lap trong khi N con ≠ 0

Begin

k := N mod 10; // Lay chu so hang don vi o cuoi cung

N := N div 10; // Cat chu so hang don vi da duoc lay ra

S := S + k; // Tinh tong cong don vao S

End;

Writeln( ‘Tong cac chu so cua ’,N,’ la :’, S); // Xuat ket qua

Readln;

End

Bài toán số 1.5: Cho 14/03/2003 là một ngày trong năm Hãy xác định xem thử ngày này là này thứ bao

nhiêu của năm đó

Ví dụ: Ngày nhập vào 14/03/2003, Kết quả: Ngay thu 73 cua nam 2003

Yêu cầu : - Input: 3 số ngay, thang, nam

- Output: So thu tu cua ngay

Trang 5

Hướng dẫn:

- Khởi gán stt là 0

- Với ví dụ trên, tính tổng cộng dồn số ngày của các tháng trước tháng 03 (cụ thể là tháng 01, tháng 02) vào stt Sử dụng câu lệnh rẽ nhánh case để biết số ngày của các tháng

- Bổ sung thêm số ngày của tháng hiện tại (ngay 14) vào stt

Giải quyết bài toán với ngôn ngữ C

- Khai báo các thư viện sử dụng

- Định nghĩa hàm main( ) là hàm chính của chương trình có mục tiêu là giải quyết bài toán với 3 bước trên:

+ Khai báo biến sử dụng: ngay, thang, nam, stt + Thông báo nhập liệu và nhập giá trị cho các biến ngay, thang, nam + Khởi gán stt = 0

+ Lặp cộng dồn số ngày của các tháng mà nhỏ hơn thang

- Sử dụng case để xác định số ngày trong tháng

- Bổ sung số ngày vào stt + Bổ sung số ngày của tháng hiện tại vào stt + Thông báo kết quả

Chương trình:

Program ngaythangnam;

Uses crt;

Var ngay,thang,nam,i,stt:integer; // Khai bao bien su dung

Begin

Write(‘Nhap ngay, thang, nam:’); // Thong bao nhap lieu

Readln(ngay, thang, nam); // Nhap gtri cho ngay, thang, nam

stt := 0;

For i := 1 to thang do // Lap voi cac i nho hon thang da nhap vao)

case thang of

1,3,5,7,8,10,12 : stt := stt + 31;

4,6,9,11: stt := stt + 30;

2 : stt := stt + 28;

Else stt := stt + ngay;

end;

Writeln(‘Ngay thu ‘, stt, nam); // Xuat ket qua

Readln;

End

Bài toán ngược: Có số thứ tự của ngày trong năm, hãy xác định nhày đó là ngày nào.

Ví dụ: Nhập stt = 84 thì kết quả là 25/04

Hướng dẫn: Làm theo chiều ngược lại

- Giả sử ban đầu xuất phát với thang là 1 Nếu stt lớn hơn số ngày cua tháng (thang ) thì tiến hành:

o thang tăng lên 1

o stt được gán bằng stt trừ đi số ngày của tháng đó

- Lặp lại quá trình trên cho đến khi stt nhỏ hơn hoặc bằng số ngày trong tháng

Ngày đăng: 27/01/2014, 14:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w