[r]
Trang 1BÀI TẬP VÀ LỜI GIẢI PASCAL
Bài 1:
Cho dãy số A=a1,a2,a3, ,an(với a1,a2, ,an > 0 và n <= 100)
viết chương trình nhập dãy số
viết hàm tính số nhỏ nhất trong dãy số
Bài 2:
Cho S= a! + b! + c!
Viết chương trình tính S ( lưu ý: viết hàm tính giai thừa)
Bài 3:
Cho dãy số A=a1,a2,a3, ,an ( với a1,a2,a3, ,an > 0 và n <=100)
Viết chương trình nhập dãy số
Viết hàm kiểm tra xem có bao nhiêu số lẻ nằm trong đoạn [2,9]
Bài 4:
Viết chương trình nhập xâu A, tìm xem trong đoạn sâu A có bao nhiêu kí tự 'C' ở vị trí lẻ
Lưu ý: viết hàm để đếm có bao nhiêu kí tự 'C' ở vị trí lẻ
LỜI GIAỈ
Giải quyết câu 1:
PROGRAM Bai1;
UsesCRT;
Var A:Array[1 100] of Integer; { Khai báo 1 Mảng A với số phần tử tối đa là 100, nên nhớ là tối đa nha, có thể xài ít hơn cũng ko sao}
i,n:Integer; {Biến i là biến chạy từ phần tử đầu tiên đến phần tử cuối cùng, biến n để nhập số phần tử của dãy} Procedure NhapDaySo;
Begin
Write('Day so co bao nhieu phan tu: ');Readln(n);
For i:=1 to n Do
Begin
Write('A[',i,']= ');Readln(A[i]);
End;
End;
Procedure TimMin;
Var Min, Tam:Integer;{Biến Min để lấy giá trị nhỏ nhất trong dãy, biến Tam để hoán đổi giá trị của 2 phần tử} Begin
Min:=A[1];
For i:=2 to n Do
If Min > A[i] Then
Begin {Tiến hành hoán đổi giá trị }
Tam:=Min;
Min:=A[i];
A[i]:=Tam;
End;
Write('So nho nhat trong day la: ',Min);
End;
{Chương trình chính nè}
BEGIN
Clrscr;{lệnh lau màn hình, lệnh này muốn xài được phải khai báo thư viện CRT , mình đã khai báo CRT sau từ khoá Uses phía trên rùi đó, nếu không khai báo thì chương trình sẽ báo lỗi ở đây}
NhapDaySo;Gọi thủ tục nhập vào dãy số}
TimMax;{Gọi thủ tục tìm số nhỏ nhất trong dãy vừa nhập}
Readln;{Tạm dừng chương trình để bạn nhìn thấy kết quả }
END
Trang 2Giải quyết bài tập 2
PROGRAM Bai2;
Var S1,S2,S3 : Longint;{S1 lưu giá trị của a!, S2 lưu b!,S3 lưu c!}
a,b,c,i:Integer;{a,b,c nhập giá trị, i biến chạy}
BEGIN
Write('Nhap a= ');Readln(a);
Write('Nhap b= ');Readln(b);
Write('Nhap c= ');Readln(c);
For i:=1 to a Do S1:=S1*i; { Tính a!}
For i:=1 to b Do S2:=S2*i; {Tinhs b!}
For i:=1 to c Do S3:=S3*i; {Tính c!}
Write('Tong S can tim la S= ',S1 + S2 + S3);
Readln;
END
-Nếu viết hàm thì làm như sau:
PROGRAM Bai2;
Var a,b,c,i : Integer;
S1,S2,S3:Longint;
Function TinhTongS(a,b,c:Integer) : Longint;
Var S1,S2,S3,i:Integer;
Begin
For i:=1 to a Do S1:=S1*i; { Tính a!}
For i:=1 to b Do S2:=S2*i; {Tinhs b!}
For i:=1 to c Do S3:=S3*i; {Tính c!}
TinhTongS:=S1+S2+S3; { Đây chính là giá trị trả về của hàm}
End;
{chương trình chính }
BEGIN
Write('Nhap a= ');Readln(a);
Write('Nhap b= ');Readln(b);
Write('Nhap c= ');Readln(c);
Write('Tong can tim la S= ',TinhTongS(a,b,c));
Readln;
END
Giải quyết bài 3: Bài 3 thì tương tự như bài 1 mà thôi, vì thế mình chỉ viết thủ tục để đếm xem trong đoạn [2 9]
có bao nhiêu số lẻ !
Procedure Demsole;
Var dem,i:Byte;
BEGIN
dem:=0;{ban đầu chưa đếm nên có giá trị là 0}
For i:=2 to 9 do
If (i mod 2 <> 0) Then dem:=dem + 1;{ hàm mod là hàm lấy số dư của i chia cho 2, nếu chia hết cho 2 thì là số chẵn, ngược lại là số lẻ}
Write('Trong doan 2 9 co ', dem, ' so le');
End;
Giả quyết bài 4:
Function TimC( St:String):Byte;
Var dem,i:Integer;
Begin
dem:=0;
For i:=1 to length(St) Do
If (St[i] ="C") and (i mod 2 <> 0) Then dem:=dem +1;
TimC:=dem;
End;