Mảng chỉ có chỉ mục là những số nguyên đi từ 1 đến 20 và mỗi phần tử có trị TRUE nếu chỉ mục tương ứng là chẵn và FALSE trong trường hợp ngược lại.. Mảng có chỉ mục là những chữ HOA và m[r]
(1)……… BÀI ÔN TẬP NGÔN NGỮ LẬP TRÌNH PASCAL PHẦN CƠ SỞ. I PHẦN LÝ THUYẾT
1 Các danh hiệu pascal hợp lệ ?
Xray X-Ray Jeremiah R2D2 3M
PDQ123 PS:175 X N/4
SM ZZZZZZ night ng to day
2 Cho biết nguyên, thực nguyên/thực:
12 12 12.0 ‘12’ 8+4
-3.7 3.7 -1.024 +1 $3.98
0.357E4 24E0 E3 five 3E.5
000001 1.2 x 10 -(-1) 0E0 ½ Các chuỗi hợp lệ ?
‘X’ ‘123’ YS’ ‘tooyet’ ‘DO’’ESNT’ ‘isnt’ ‘t’ ‘constant’ ‘S1.98’ ‘DON’T’ ‘12+34’ ’’’twas’ ‘A’‘B’‘C’
4 Hãy viết đoạn biến để khai báo biến: a Item, Number Job kiểu real b ShoeSize kiểu integer
c Mileage kiểu real, Cost Distance kiểu integer d Alpha Beta kiểu integer, Code kiểu char, e Root kiểu real, RootExists kiểu boolean
5 Hãy viết đoạn đặt tên cho với tên tương ứng: a.1.25 với tên Coefficient
b 40.0 với tên RegHours 1.5 với tên OvertimeFactor c.1776 với tên Year, ‘F’ với Female ký tự trắng với Blank
d True với tên Exists, với Zero, * với Asterisk, dấu nháy đơn với Apostrophe chuỗi CPSC151A với Course
6 Tìm trị biểu thức sau giải thích biểu thức không hợp lệ: a.9-5-3
b div 3+3/5 c.9 div 2/5 d 9/2 div e.2.0/4
(2)h (7 mod 5) mod i mod (5 mod 3) j (7 mod mod 3) k 25*1/2
l 25*1 div m 25*(1 div 2) n -3.0*5.0 o 5.0*-3.0 p 12/2*3
q ((12+3) div 2)/(8-(5+1)) r ((1`2+3) div 2)/(8-5+1) s.(12+3 div 2)/(8-5+1) t sqrt(sqr(4))
u sqrt(sqr(-4)) v sqr(sqrt(4)) w sqr(sqrt(-4))
x trunc(8/5)+round(8/5)
7 Nếu R1 R2 kiểu Real, I1 I2 I3 kiểu integer R1=2.0, R2=3.0, I1=4, I2=5, I3=8, tìm trị của:
a.R1 + R2 + R2 b I3 div c.I3/3
d (R1+R2) * I1 e.I3 div I2 * 5.1 f Sqr(I1) / sqr(R1) g Sqr(I2) / sqr(R1) h Sqrt(R1 + R2 + I1) Viết biểu thức Pascal để tính:
a.10 + 5B - 4AC
b Ba lần hiệu 4-n chia cho lần m2+n2 c.Căn bậc hai a+3b2
d Căn bậc hai trung bình cộng m n e.|A / (m+n)| ( |x| trị tuyệt đối x)
f Lượng thực Amount làm tròn đến phần trăm gần
9 Giả định Number thuộc kiểu integer, xValue yValue kiểu Real, Grade kiểu char, Found kiểu boolean Hãy xác định mệnh đề gán Pascal hợp lệ Nếu không hợp lệ giải thích
a.xValue := 2.71828 b := Number c.Grade := ’B+’
d Number := Number+1 e.xValue :=
f Greade := A
(3)h Xvalue := ’1’ i Found := Grade j yValue := yValue k xValue := A l Grade := Grade+10 m Found := ’True’ n xValue := Number o Number := yValue
10 R1, R2, R3 xCoord biến thực với R1 =0, R2 =3.0, R3 =4.0; I1, I2 I3 biến nguyên với I1 =8, I2 =5; Numeral Symbol biến ký tự với Numeral =’2’ Hãy cho biết trị gán cho biến trường hợp sau cho biết lý mệnh đề không hợp lệ:
a.xCoord := (R1+R2) * R2 b xCoord := R2+R1/R3) * c.xCoord := I1 / I2+5
d I3 := I1 div I2 + e.xCoord := sqr(I2) / sqr(I1) f I3 := sqr(I2) / sqr(I1) g Symbol :=
h Symbol := Numeral i Symbol := ’4’
j Symbol := R3 k R1 := l R1 := ’2’
m R1 := Numeral n I1 := I1 + o I3 := + Numeral
p I3 := round(sqr(I1 mod I2)/R3)
11 Viết lệnh gán thay đổi trị biến nguyên Number với trường hợp sau: a.Tăng Number lên 77
b Giảm Number bớt
c.Tăng Number lên gấp hai lần
d Cộng ký số cực phải Number vào Number e.Giảm Number bớt trị phần nguyên số thực x
12 Viết mệnh đề gán Pascal cho trường hợp sau để tính trị biểu thức gán trị cho biến tương ứng Giả định tất biến thuộc kiểu real, trừ trường hợp có ghi rõ
a.Distance Rate lần Time
b X tăng lên lượng DeltaX c.Resistance bằng1/(1/R1 + 1/R2 + 1/R3)
d TArea diện tích hình tam giác có cạnh đáy b, chiều cao h
(4)13 Với trường hợp đây, xác định trị biến nguyên a, b c cho hai biểu thức có trị khác nhau:
a.A * (b div c) a * b div c b a div b a * (1/b)
c.(a + b) div c a div c + b div c
14 Giả sử Alpha Beta biến thực có trị -567.392 0.004, Rho biến nguyên có trị 436 Hãy cho biết xác kết xuất trường hợp sau giải thích bị lỗi (nếu có):
a.writeln(Rho); writeln(Rho+1); writeln(Rho+2); b.write(Rho); write(Rho+1); writeln(Rho+2);
c.write(‘Alpha=’); write(Alpha:9:3); write(‘Beta=’:7); writeln(Beta:7:4); d.writeln(Rho:5, 2*Rho:5); writeln ;writeln(Beta:10:5);
e.writeln(Alpha:8:1,Rho:5); writeln(‘Tolerance:’ Beta:8:5);
f writeln(‘Alpha=’,Alpha:12:5); writeln(‘Beta=’,Beta:6:2,’:4,’Rho=’,Rho:6); writeln(Alpha+4.0+Rho:15:3);
g write (‘Tolerance =’ :8 ) ; writeln (Beta : : ) ; writeln ; writeln; writeln (Rho : , Alpha : : 2) ;
h writeln ( 10 * Alpha : : , trunc (10 * Alpha) : , round ( 10 * Alpha ) :8 ) ; writeln ( sqr ( Rho div 100 ) : , sqrt ( Rho div 100 ) : ) ;
i writeln ( ‘ Rho =’ : , Rho : : ) ;writeln ( ‘ * * * * * ‘ ) ; j write (Alpha : 10 ) ; write ; writeln ( Beta : 10 );
15 Giả sử I, J biến nguyên với I = 15 , J = 8, C D biến ký tự với C = ‘C’ D = ‘ – ‘ , X Y biến thực với X = 2559.50 Y = 8.015 Hãy cho biết xác kết xuất trường hợp sau :
a writeln( ‘ Newbalance = ‘ : I , X : J : ) ; writeln( C : I mod 10 , Y : J : J – ) ; b write( ‘ I = ‘ , I ) ; write( I : I ) ; writeln( ‘ J = ‘ : J , J : J ) ;writeln ; writeln( I : J , J :
I ) ; writeln( trunc ( X / J ) : J , J – Y : I : J , D : J div )
16 Giả sử N1 N2 biến nguyên có giá trị 39 –5117, R1, R2 biến thực có giá trị 56 7173 –0.00247 , C biến ký tự có giá trị ‘F’ Hãy viết lệnh để kết xuất trường hợp sau :
a. 56.7173 F 39 -5117PDQ-0.00247
b. 56.717 _-0.0025 * * * 39 F _56.72 _39-5117 c.ROOTS_ARE 56.717_AND_-0.00247
d.APPROXIMATE_ANGLES: 56.7_AND _-0.0 MAGNITUDES_ARE _39 _AND 5117
(5)a readln (A, B, C, X, Y, Z ) ; nhập:
4 5.5 6.6
b readln (A, B, C) ; nhập:
readln (X, Y, Z) ;
3
c read (A, X) ; nhập: 2.2
read (B, Y) ; 4.4
read (C, Z) ; 6.6
d read (A, B, C) ; nhập: 2.2
readln (X, Y, Z) ; 4.4
5 6.6
e read (A); nhập:
readln (B, C); 5.5 6.6
read (X, Y) ; readln (Z);
f readln (A); nhập:
read (B, C) ; 5.5 6.6
readln (X, Y); read (Z);
g read (A, B); nhập:
readln ; 5.5 6.6
read (C); 8.8 9.9
readln(X); 10 11.11 12.12
readln ; 13 14.14 15.15
readln (Y); readln ; readln (Z);
II PHẦN THỰC HÀNH
Gõ vào máy thực chương trình BT1_1 PAS sau: { = = = = = = = = = = = = = = = = = = = = = = = = = = = }
{ Program : BT1_1 PAS }
{ Date : dd/mm/yyyy }
{ Notes : hien thi hang chuoi , nguyen va thuc } { = = = = = = = = = = = = = = = = = = = = = = = = = = = } Begin
writeln( ‘ Day la chuong trinh dau tien cua toi ‘) ; writeln ;
writeln( ‘ Day la mot chuoi ‘ );
writeln( ‘ Day la mot so nguyen : ‘ , 12345);
(6)writeln ;
write( ‘ xem xong bam Enter ; ) ; readln ; End
Hướng dẫn (Trong môi trường Windows)
1 Kích hoạt chương trình Windows Explorer để tạo folder dùng lưu trữ file chương trình Pascal (Ví dụ: C:\BT_PAS)
2 Kích hoạt chương trình Borland Pascal (Thực Run: \\BP\BIN\BP.EXE)
3 Thông qua menu [Options] -> [Directories] xác lập giá trị C:\BT_PAS cho mục [EXE and TPU directories] -> [OK]
4 Thông qua menu [File]-> [Change Dir] chọn thư mục làm việc C:\BT_PAS Thông qua menu [Options] -> [SAVE BP.TP] để lưu lại xác lập
6 Mở cửa sổ soạn thảo ([File]-> [New])
7 Gõ chương trình với nội dung vào cửa sổ soạn thảo Gõ xong nhấn F2 (để lưu lên đĩa với tên BT1_1.PAS)
8 Nhấn phím F9 để biên dịch chương trình Nếu có lỗi sửa lỗi (nhớ nhấn F2 để Save lại có thay đổi văn chương trình) Thực việc biên dịch thành công
9 Nhấn Ctrl_F9 (giữ phím Ctrl nhấn F9) để chạy chương trình
Gõ vào máy thực chương trình BT1_2.PAS sau: Program BT1_2;
(*
Date :dd/mm/yyyy
Notes : Nhap so nguyen va chuoi roi xuat man hinh *)
Uses crt; (* Thu vien CRT chua thu tuc CLRSCR xoa man hinh *) Var I: integer;
S: string[20]; (* khai bao chuoi s co chieu dai 20 *) Begin
Clrscr;
Write(‘Hay go vao mot so nguyen’); Readln(i); Writeln(‘so cua ban la’,i);
Write(;’Hay go vao mot chuoi:’); Readln(s); Write(‘chuoi cua ban la’,s); Writeln;
Write(‘xem xong bam Enter’):readln; End
Gõ vào máy thực hịện chương trình BT1_3.PAS sau: Program: BT1_3;
(*
Date :dd/mm/yyyy
(7)Uses crt;
Var so1, so2, cong, tru, nhan , chia:real; Begin
Clrscr;
Write(‘cho so thu nhat :’); readln(so1); Write(‘cho so thu hai :’); readln(so2);
Cong:=so1+so2; Tru:=so1-so2; Nhan:=so1*so2; Chia:=so1/so2; Writeln;
Writeln(‘so1+so2=’,cong); Writeln(‘so1-so2=’,tru); Writeln(‘so1*so2=’,nhan); Writeln(‘so1/so2=’,chia); Writeln;
Writeln(‘so1+so2=’,cong:10:3); Writeln(‘so1-so2=’,tru:10:3); Writeln(‘so*so2=’,nhan:10:3); Writeln(‘so1/so2=’,chia:10:3); Writeln;
Write(‘Nhan xet va xem xong bam Enter’); readln; End
Gõ vào máy thưc chuơng trình BT1_4.pas sau Program:BT_4;
(*
Date:dd/mm/yyyy
Notes:hien thi hinh tam giac *)
uses crt; Begin clrscr;
write(‘ * * * * * * * * * ’); write(‘ * * * * * * * * * * * ‘ ); write(‘ * * * * * * * * * * * * * ‘); write(‘ * * * * * * * * * * * * * * *’); write(‘xem xong bam enter’);readln;
End
Viết chương trình BT_5 PAS tính diện tích hình chữ nhật biết chiều dài chiều rộng, kết hình có dạng:
= = = = = = = = = = = = = = = = == = = TINH DIEN TICH HINH CHU NHAT = = = = = = == = == = = = = = = = = = Xin cho biet chieu dai : xxxx Xin cho biet chieu rong : xxxx Dien tich la : xxxxxxxx
(8)Nhập: Dai ,Rong Xuất : Dien tich
Giải thuật
1 Nhap Dai va Rong
2 Tính Dien tich = Dai * Rong Xuất Dien Tich
Viết chương trình BT_6.PAS tính diện tích chu vi hình trịn biết bán kính, kết trên hình có dạng.
= = = = = = = = = = = = = = = = = = = = = = = TINH DIEN TICH & CHU VI HINH TRON = = = = = = = = = = = = = = = = = = = = = = = Xin cho biet ban kinh:xxx.x
Chu vi :xxxxxx.x Dien tich :xxxxxx.x
Hướng dẫn:
Nhập:Ban kinh
Xuất: Chu vi Dien tich
Giải thuật:
1 Nhập bán kính
2 Tính chu vi =2*ban kinh*pi
3 Dien tich =ban kinh*chu vi*pi (pi trị định nghĩa sẳn Unit CRT) Xuất Chu vi,Dien tich
Viết chương trình BT1_7.PAS tính tổng, hiệu, tích, thương dư hai số nguyên, kết quả hình có dạng:
= = = = = = = = = = = = = == = == = = = == = = = = = = = = = = = = TINH TONG, HIEU, TICH, THUONG, DU CUA HAI SO NGUYEN = = = = = == = = = = = = = = = = = = = = = = = = = = = = = = = = = = Cho biet so thu nhat: xx
Cho biet so thu hai: xx
Tong = XXXX
Hieu = XXXX
Tich = XXXX
Thuong = XXXX
Du = XXXX
Hướng dẫn
Nhập:So1, So2
Xuất: Tong, Hieu, Tich, Thuong,Du
Giải thuật:
1 Nhập: So1, So2
(9)(10)LỆNH RẺ NHÁNH I PHẦN LÝ THUYẾT
1 Giả sử a,b,c biến Bool, dùng bảng thật (chân trị) để tính trị biểu thức Bool sau với trị a,b,c
a a or not b b not (a and b)
c not a or not b d a and True or (1+2 = 4) e a and (b or c) f (a and b) or (a and c) 18 Viết biểu thức Bool biểu thị điều kiện sau:
a x lớn b y c R âm Z dương
d Alpha Beta dương
e Alpha Beta dấu (dương âm) f -5 < x <
g a nhỏ hay lớn h p = q = r
i Chỉ hai trường hợp: x nhỏ y nhỏ 19 Cho biến Bool a, b c, viết biểu thức Bool để
a Đúng a b đúng, c sai
b Đúng a v b hay c c Đúng nếu a b
20 Viết lệnh đọc ba số thực gán trị True false cho biến Bool sau:
a Triangle: True ba số thực biểu thị chiều dài cạnh tam giác false không (Tổng hai số phải lớn số thứ ba )
b Equilateral: True Triangle True tam giác (ba cạnh )
c Isoceles : True Triangle True tam giác cân (ít có hai cạnh ) d Scalene: True Triangle True tam giác lệch ( khơng có hai cạnh ) 21 Viết mệnh đề Pascal cho trường hợp sau:
a.Nếu TaxCode ‘T’ tăng Price cách cộng TaxRate vào b Nếu Code 1, đọc trị vào x y , tính in tổng x y c.Nếu A ,cho B 1/ A2 , không cho B A2
d Gán trị True cho biến Bool LeapYear biến nguyên Year có trị năm nhuần (Năm nhuần bội số , bội số 100 phải bội số 400 ) e.Gán trị cho Cost tương ứng với trị Distance theo bảng sau :
Distance Cost đến 100
Lớn 100 không lớn 500 Lớn 500 nhỏ 1000 1000
(11)f Hiển thị số ngày tương ứng với trị tháng Month (1,2,…,12) Dùng phần (d) để xác định số ngày trị số Month 2, giả định Year có trị
22 Hãy cho biết kết xuất đoạn chương trình sau: Number : = 4;
Alpha : = -1.0;
If Number > 0 then
If Alpha > 0 then Writeln(‘First writeln’)
Else Writeln(‘Second writeln’); Writeln(‘Third writeln’);
23 Một sinh viên dùng lệnh if sau chương trình: If Honors = True then
If Awards = True then
GoodStudent:=False
Else if Honors = false then
GoodStudent:=False;
a Hãy viết mệnh đề if tương đương với lệnh b Viết mệnh đề gán tương đương với mệnh đề if 24 Viết mệnh đề case trường hợp sau:
a Nếu trị biến ký tự TransCode ‘D’, tăng.Balance lên trị Amount ,nếu TransCode ‘W’ giảm bớt Balance trị Amount; Nếu TransCode ‘P’, hiển thị trị Balance
b Hiển thị tên tháng thông báo sai tương ứng với trị tháng biến Month c Hiển thị số ngày tương ứng số Month
II PHẦN THỰC HÀNH
Gõ vào máy thực chương trình BT2_ 1.pas sau: Progam BT2_1;
(*
Date: dd/mm/yyyy
Notes: Nhap hai so nguyen va cho biet so nao nho hon *)
Uses crt;
Var num1,num2:real; C:char; Begin
Clrscr;
{ - Nhap hai so -}
Write(‘Cho biet so thu nhat:’); readln(num1); Write(‘Cho so thu hai:’)readln; readln(num2); Writeln;
{ - Kiem tra - } If (num1<num2) then
(12){ - Ket thuc -}
Gotoxy(28,25); { đưa điểm nháy hình đến vị trí cột 28, dòng 25} Write(‘ xem xong nhấn nút bất kỳ”);
C:=readkey; {hàm readkey chờ nhấn phím có trị kí tự nhấn} End
Gõ vào máy thực chương trình BT2_2.PAS sau: Program BT2_2;
(*
Date:dd/mm/yyyy
Notes:Nhap hai so nguyen va cho biet so nao nho hon Tuong tu nhu BT2_1 nhung co cai tien
*)
Uses Crt;
Var num1,num2:real; c:char; begin
clrscr;
{Nhap hai so}
write(‘cho so thu nhat:’); readln(num1); write(‘cho so thu hai:’); readln(num2); writeln;
{kiem tra}
if (num1<num2) then
Writeln(‘So thu nhat nho hon o thu hai’) Else
Writeln(‘So thu nhat lon hon so thu hai hay bang so thu hai’); {ket thuc}
gotoxy(28,25); {dưa diểm nháy hình đến vị trí cột 28,dịng 25} write(‘Xem xong nhan nut bat ky.’);
c:=readkey; {hàm readkey chờ phím có trị ký tự nhấn } end
Gõ vào máy thực chương trìnhBT2_3.PAS sau: Program:BT2_3;
(*
Date:dd/mm/yyyy
Notes:nhap hai so nguyen va cho biet so nao nho hon Tuong tu nhu BT2_2 nhung co cai tien
*)
Uses CRT;
Var Num1,Num2: real; C :char;
Begin Clrscr;
(13)Write(‘Cho so thu nhat:’); readln(Num1); Write(‘Cho so thu hai:’); readln(Num2); Writeln;
(*_ _ _Kiem tra_ _ _ *) If (Num1<Num2) then
Writeln(‘So thu nhat nho hon so thu hai’) Else
If (Num1> Num2) then
Writeln(‘So thu nhat lon hon so thu hai’) Else
Writeln(‘So thu nhat bang so thu hai’); (* _ _ _Ket thuc_ _ _ *)
Gotoxy(28,25); (* đưa điểm nháy hình đến vị trí cột 28, dong 25 *) Write(‘xem xong nhan nut bat ky’);
C :=readkey;
(* hàm readkey chờ nhấn phím có trị kí tự nhấn *) End
Viết chương trinh BT2_4.PAS nhập vào số nguyên cho biết chẵn hay lẻ Kết hình có dạng:
= = = = = = = = = = = = = = = = = = = = = = KIEM TRA MOT SO LA CHAN HAY LE = = = = = = = = = = = = = = = = = = = = = = Cho mot so nguyen: 1234
Do la so chan
Hướng dẫn
Nhập:So
Xuất: Thông báo
Giải thuật:
1 Nhập so
2 Nếu so MOD =
3 Hiển thi thơng báo ” Đó số chẳn”
4 Nếu khơng hiển thị thơng báo ”Đó số lẻ”
Viết chương trìng BT2_5.PAS nhập vào họ tên tuổi học viên, so sánh biết lớn tuổi (hoặc ) Kết hình có dạng:
= = = = = = = = = = = = = = = = = SO SANH TUOI HAI HOC VIEN = = = = = = = = = = = = = = = = =
Hoc vien 1-> Ho ten : XXXXXXXX Tuoi : XX Hoc vien 2-> Ho ten: YYYYYYYY Tuoi : YY Hoc vien XXXXXXXX lon tuoi hon YYYYYYY
Hướng dẫn
(14)Giải thuật:
1 Nhập HoTen1, Tuoi1, HoTen2, Tuoi2
2 Nếu Tuoi1>Tuoi2 hiển thị thông báo “Hoc vien”, HoTen1, “lon tuoi hon”, HoTen2
3 Nếu không
4 Nếu Tuoi2>Tuoi1 hiển thị thông báo “Hoc vien”, HoTen2, “lon tuoi hon” HoTen1
5 Nếu không
6 Hiển thị thông báo “Hoc vien” , HoTen1 “bang tuoi”, HoTen2 Viết chương trình BT2_6.PAS nhập vào số cho biết số lớn nhỏ bao nhiêu Kết hình có dạng:
= = = = = = = = = = = = = = = = = = = = = = = = = = = = TIM SO LON NHAT & NHO NHAT TRONG BA SO = = = = = = = = = = = = = = = = = = = = = = = = = = = = Cho so thứ nhất:1234
Cho số thứ hai :56 Cho số thứ ba :78
Số lớn 1234 nhỏ 56
Hướng dẫn
Nhập:số(là số)
Xuất: SoMax (số lớn nhất), SoMin (số nhỏ nhất)
Giải thuật:
Gán 1.7E+38 cho số -1.7E+38 cho số max Nhập So (thứ nhất)
Nếu So > SoMax gán So cho SoMax Nếu So < SoMin gán So cho SoMin Nhập Số (thứ hai)
Nếu So > SoMax gán So cho SoMax Nếu So < SoMin gán So cho SoMin
Nhập số (thứ ba)
Nếu So > SoMax gán So cho SoMax Nếu So < SoMin gán So cho SoMin Hiển thị SoMax SoMin
Viết chương trình BT2_7.PAS nhập vào số cho biết cạnh tam giác khơng? Kết hình có dạng:
= = = = = = = = = = = = = = = = = = XAC DINH CANH TAM GIAC = = = = = = = = = = = = = = = = = = Cho số thu nhat: xx
Cho số thứ hai : xx Cho số thứ ba: xx
Ba số cạnh tam giac
(15)Nhập: so1,so2,so3 Xuất: Thông báo
Giải thuật:
1 Nhập so1, so2, so3
2 Nếu so1+so2>so3 so2+so3>so1 so3+so1>so2 Hiển thị “Đó tam giác”
4 Nếu không
5 Hiển thị” Đó khơng phải tam giác”
Viết chương trình BT2_8.PAS nhập vào trị năm dương lịch cho biết có phải năm nhuần hay khơng Kết in hinh có dạng:
= = = = = = = = = = = = = = = = = XAC DINH NAM LA NHUAN = = = = = = = = = = = = = = = = =
Cho biet nam duong lich (4 so): XXXX XXXX la nam nhuan
Hướng dẫn
Nhập:Year Xuất: thông báo
Giải thuật:
1 Nhập year
2 Nếu (year MOD 4= 0) ((year MOD100<> 0) (year MOD 400=0))
Hiển thị” yyyy năm nhuần” Nếu không
Hiển thị” yyyy năm thường”
Viết chương trình BT2_9.PAS đọc mã số nhân viên, làm việc, mức lương tính lương Nếu làm việc 40 tính mức lương 1.5 mức bình thường Kết màn hình có dạng:
= = = = = = = = = = = = = = = = = = = CHUONG TRINH TINH LUONG = = = = = = = = = = = = = = = = = = =
Cho biet ma nhan vien : 1234 So gio lam viec: 42 Muc luong gio: 10
Tienluong = 440
Hướng dẫn
Nhập : MaNV, GioLV, MLGio Xuất : TienLuong
Giải thuật :
1 Nhập MaNV, GioLV, MLGio Nếu GioLV<=40
(16)Nếu không
Tienluong=(MLGio x 40)+1.5 x MLGio x (GoiLV – 40) Hiển thị TienLuong
Viết chưong trình BT2_10.PAS tính lương tậpBT2_9.PAS sửa đổi lại sau: Nếu mã nhân viên lớn hay 1000 chương trình đọc lương năm tính lương tuần cách chia lương năm cho 52 Nếu mã nhỏ 1000 tính lương theo tập Kết hình có dạng:
CHUONG TRINH TINH LUONG
Cho biet ma nhan vien : 1234 Nhap luong nam : 52000
Luong tuan = 1000 Cho biet ma nhan vien : 999
So gio lam viec : 42 Muc luong gio : 10 Luong tuan = 440
Hướng dẫn
Nhap:MaNV,GioLV,MLGio,LuongNam xuất: TienLuong
Giải thuật :
1 Nhập MaNV Nếu MaNV>=1000
Nhập LuongNam
Tính TienLuong=Luongnam/52 Nếu không
Nhập MLGio, GioLV a Nếu GioLv<=DMGio
TienLuong=GioLV x MLGio b Nếu không
TienLuong=(MLGio x 40) + 1.5 x MLGio x (GioLV -40) Hiển thị TienLuong
Gõ chương trình BT2_11.PAS sau vào máy thi hành:
{= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =} { program : BT2_11.PAS } { Date :20/11/98 } { Notes :Go mot phim va hien thi thong bao cho biet la phim chu, so hai dau } {= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =} uses CRT;
var KyTu : char ; begin
clrscr ;
(* - - - Go mot phim- - - *)
write (‘Hay nhan mot phim bat ky :’) ; KyTu:=readkey;
(17)writeln;
Case KyTu of
‘A’ ’Z’,’a’ ’z’ :writeln(‘Ban vua nhan mot chu!’); ‘0’ ’9’ :writeln(‘Ban vua nhan mot sô!’); else :writeln(‘ Ban vua nhan mot dau!’);
end;
(* - kết thúc - *)
Gotoxy(28,25); (* đưa điểm nháy hình đén vị trí cột 28, dòng 25 *) Write(‘Xem xong nhan nut bat ky’);
C:= readkey; (*hàm readkey chờ nhấn phím có trị kí tự nhấn*) End
Viết chương trình BT2_12.PAS nhập tháng, năm in số ngày tháng Kết trên hình có dạng:
Xin cho biết tháng: Xin cho biết năm: 1960 Tháng năm 1960 co 29 ngày
Hướng dẫn
Nhập: Thang, Nam Xuất: SoNgay
Giải thuật:
a Nhập: Thang, Nam b Tính
NamNhuan=(Nam MOD =0) OR ((Nam MOD 100<>0) AND (Nam MOD 400 =0)) c Trường hợp tháng là:
1,3,5,7,8,10,12 : SoNgay = 31 4,6,9,11: SoNgay = 30
2: Nếu NamNhuan SoNgay = 29 Nếu không
SoNgay = 28
(18)VÒNG LẶP I PHẦN LÝ THUYẾT
1 Giả sử I, J K biến nguyên, cho biết kết xuất đoạn chương trình sau: a K := 5;
I := 2;
While (I<=K) Begin I := I+2; K := K-1; Writeln(I+K:2) End; (* while *) b Number:=4;
While (Number>=0) Begin
Number := Number – 1; Writeln(Number:1); Writeln;
End;
Writeln(‘* * * * *’); Viết mệnh đề Pascal
a In trị x giảm x bớt 0.5 chừng x dương
b Đọc trị a,b c in tổng chúng, lặp lại khơng có a,b c âm c In bình phương 100 số nguyên dương theo thứ tự tăng
d In lập phương 50 số nguyên dương theo thứ tự giảm e In bật hai 25 số nguyên dương lẻ
f Tính in bình phưong số nguyên dương liên tiếp hiệu bình phương với số bình phương trước lớn 50
g In danh sách điểm (x,y) đồ thị y = x3-3x+1 với x biến thiên từ -2 đến +2 bước nhảy 0.1
3 Hãy cho biết kết xuất đoạn chương trình sau: Number:=4;
While (Number>0) Number:=number-1; Writeln(number:1); Writeln; Writeln(‘* * * * *’);
4 Cho biết kết xuất thực đoạn chương trình sau:
a For I:= -2 to do Writeln(I:1,’Binh phuong = ‘,sqr(I):1); b For I:=1 to do
Begin Writeln(I:1);
(19)c K:=5;
For I:=-2 to do
Begin
Writeln(I+K:2); K:=1;
End; d I:=0;
Repeat
K:=I*I*I-3*I+1; Writeln(I:3,K:3);
Until (I>2); e I:=0;
Repeat
J:=I*I*I; Write(I:3); Repeat
K:=I+2*J; Write(J:3,K:3); J:=J+2;
Until (K>10); Writeln; I:=I+1;
Until J>5;
II PHẦN THỰC HÀNH
Gõõ chương trình BT3_1.PAS sau vào máy thi hành: Program BT3_1;
(*
Date : dd/mm/yyyy
Note : Hien thi 10 so ngau nhien co vi tri tu den 100 *)
Uses CRT; Var I :integer; Begin
Clrscr;
Randomize; (* Phat sinh hat giong ngau nhien*) Writeln(‘ -‘);
Writeln(’10 so ngau nhien -100’); Writeln(‘ -‘); Writeln;
For I:=1 to 10 writeln(‘So thu ’,I:2,’ la ’,1+random(100):3); Gotoxy(28,25); write(‘Xem xong nhan phim bat ky!’);
(20)Gõ chương trình BT3_2.PAS sau vào máy thi haønh: Program BT_2;
(*
Date : dd/mm/yyyy
Note : hien thi 10 so nguyen co tri tu den *)
Uses CRT; Var I :integer; Begin
Clrscr;
Writeln(‘ -‘); Writeln(’10 so nguyen tu den 0’); Writeln(‘ -‘); Writeln;
For I :=9 downto Writeln(‘So thu’,10-I:2,’la’,I:3); Gotoxy(28,25); write(‘Xem xong nhan phim bat ky!’); Repeat Until Keypressed;
End
Viết chương trình BT3_3.PAS tính tổng số ngun từ đến n nhập từ bàn phím Kết hình có dạng:
Tinh tong cac so nguyen tu den n -Xin cho biet n:
Tong tu den la 15
Hướng dẫn
Nhập : N Xuất : Tong
Giải thuaät:
1 Nhaäp N Cho Tong=0
3 Cho I chạy từ đến N: Tính Tong=Tong+I Hiển thị Tong
Viết chương trình BT3_4.PAS in dòng dấu * có dạng: * * * * * *
* * * * * * * * *
* * * * * *
Giải thuật:
(21)2 Cho I chạy từ đến
a Nhảy đến vị trí Cot, Dong + I
b Cho J chạy từ đến –I : Hiển thị dấu’*’
Viết chương trình BT3-5.PAS in thành tam giác cân với chiều cao (1 đến 24) nhập từ bàn phím Kết hình có dạng:
* Cho chiều cao tam giác (1-24):5 * * *
* * * * * * * * * * * *
Giải thuật: * * * * * * * * * Đặt Cot = 40,Dong =
2 Nhập Cao
3 Cho I chạy từ đến Cao
a Nhảy đến vị trí (Cot –I,Dong + I)
b Cho J chạy từ đến 2I-1: Hiển thị dấu ‘*’
Viết chương trình BT3_6.PAS Nhập từ bàn phím N số Xác định số lớn nhỏ trong số nhập.Kết hình có dạng:
Tìm số lớn nhỏ N số Cho biet N:
Nhap so thu : 25 Nhap so thu : 37 Nhap so thu : Nhap so thu : 12
So lon nhat la 37 va nho nhat la
Hướng dẫn:
Nhập N số X Xuất SoLon, SoNho
Giải thuật:
1 Nhập N
2 Đặt SoLon=-1E38, SoNho=1E38 Cho I chạy từ đến N
a Nhập X
b Nếu X>SoLon đưa X vào SoLon c Nếu X <SoNho đưa X vào SoNho Xuất SoNho, SoLon
Viết chương trình BT3_7 tương tự BT3_6 N số lấy ngẫu nhiên có trị nhỏ hay 100 Kết hình có dạng:
Tim so lon nhat va nho nhat N so ngau nhien Cho biet N:
Cac so ngau nhien: 12 67 56 76 32 So lon nhat la 76 va nho nhat la 12
(22)Nhập : N
Xuat : SoLon,SoNho
Giải thuật:
1 Nhập N
2 Đặt SoLon= -MAXINT, SoNho=MAXINT Cho I chạy từ 1đến N
a Lấy ngẫu nhiên X xuất
b Nếu X > SoLon đưa X vào SoLon c Nếu X < SoNho đưa X vào SoNho Xuất SoNho,SoLon
Viết chương trình BT3_8 hiển thị bảng sau hinh: BANG CONG / TRU
+ 10
0 10
1 10 11
2 10 11 12
3 10 11 12 13
4 10 11 12 13 14
5 10 11 12 13 14 15
6 10 11 12 13 14 15 16
7 10 11 12 13 14 15 16 17
8 10 11 12 13 14 15 16 17 18
9 10 11 12 13 14 15 16 17 18 19
10 10 11 12 13 14 15 16 17 18 19 20
Giải thuật:
Cho I chạy từ đến 10 a Xuất I
b Cho J chạy từ đến 10 : xuất I+J
Viết chương trình đọc tập hợp số { x , x , , x }1 n Đếm số phần tử, tính hiển thị
trung bình cộng, phương sai độ lệch chuẩn tập hợp số theo công thức : TrungBinh =
1 n i i
x
n , PhuongSai =
2
2
1
1 n n
i i
i i
x x
n n
Độ lệch chuẩn bậc hai phương sai
Hướng dẫn :
Nhập: n số x
Xuất : Trungbinh ,Psai, DLChuan
Giải thuật:
1 Nhập N
(23)3 (* Tính S T *)
Cho I chạy từ đến n a Nhập x
b Tính S = S+x;T = T+x*x
4 Tính Tbinh = S/n; Psai=(T/n) – (Tbinh*Tbinh)/(n*n); DLChuan=SQRT(Psai) Xuất Tbinh ,Psai,DLChuan
Dãy số Fibonaccci dãy số
1, 1, 2, 3, 5, 8, 13, 21, …
trong số hạng tổng hai số hạng trước Hãy viết chương trình tính số Fibonacci nhỏ hay N Kết hình có dạng :
Tim cac so Fibonacci <=N Cho biet N: 25
Cac so Fibonaccci: 1 13 23
Hướng dẫn:
Nhâp : N
Xuất : Các số Fibonacci F
Giải thuật:
1 Nhập N
2 Đặt F1=0; F2=0; F=1 Khi F<=N
a Xuất F
b Cho F1=F2; F2=F c Tính F=F1+F2
Viết chương trình nhập vào số nguyên dương tìm thừa số ngun tố tức biểu thị số nguyên tích số nguyên tố số ngun tố Kết hình có dạng:
Tim cac thua so nguyen to cua N Cho biet N: 180
N = (2^2)(3^2)(5^1)
Hướng dẫn:
Nhập : N
Xuất : Các thừa số nguyên tố kèm theo số mũ
Giải thuật:
1 Nhập N
2 Đặt ThuaSo = Lặp
(* Xác định SoMu *) 3.1 Đặt SoMu =
3.2 Lập lại (N MOD Thuaso = 0) AND (N < > 0) 3.2.1 Tăng SoMu
3.2.2 N = N DIV ThuaSo (*Xuất ThuaSo kèm SoMu *)
(24)3.4 Tăng ThuaSo Cho đến (n = 1)
Viết chương trình tìm số nguyên dương N nhỏ cho 1+2+3+……+N>Max với Max là trị nhập vào Kết hình có dạng:
Tim N de 1+2+…+N > Max -Nhap tri Max:15
So N =
Hướng dẫn:
Nhaäp : Max Xuất : N
Giải thuật:
1 Nhập Max Đặt N = Đặt Tong =
4 Khi (Tong < = Max) 4.1 Taêng N lên 4.2 Cộng N vào Tong Xuất N
Với số nguyên dương n, n giai thừa (ký hiệu n!) tích số nguyên từ đến n với qui ước 0! = Viết chương trình đọc vào số ngun khơng âm n dùng vịng lặp For để tính n!
Kết hình có dạng: Tính N!
-Nhaäp N:
5! =120
Hướng dẫn:
Nhập :N Xuất : Gthua
Giải thuật:
1.Nhập N Đặt Gthua=1
3 Cho I chạy từ đến N Tính Gthua=Gthua x I Xuất Gthua
(25)THỦ TỤC VÀ HÀM I PHẦN LÝ THUYẾT
1 Xét đoạn chương trình sau :
ProgramDemo;
Const
Pi = 3.14159; two = ;
Var
Day, Month, Year, p, q: integer; Hours, Rate, Amount, u, v: real; Code, class: char;
Procedure Calculate(a :real;var b: real; m:integer; var k,n: integer ; var c :char); Hãy cho biết phát biểu đưới viết chương trình Nếu khơng, giải thích :
(a) Calculate (u, v, two, p , q, Code); (b) Calculate (pi, u, two, p, v, class);
(c) Calculate (Hours, pi, tow, Day, Year, class);
(d) While (u > 0) Calculate (Rate, u, Day+2, p, q, ’M’); (e) Calculate(0, Hours , (p+1)/2 , Day, Year, Code);
(f) While (Amount>0) Calculate (two, Amount, Day, p+q, Day ,class);
2 Viết thủ tục CalculalteWages tính trả tiền lương với số làm việc mức lương nhận Số vượt q 40 tính gấp rưỡi mức bình thường
3 Viết thủ tục DisplayMonth hiển thị tên tháng với số tháng nhận
4 Viết thủ tục Switch để hốn chuyển trị hai biến Ví dụ a có trị b có trị Switch(a, b) làm cho a có trị b có trị
5 Xét mẫu chương trình sau:
Program Demo;
Const
pi =3 14159; two = ;
Var
Day, Month, Year, p, q :interger; Hours, Rate, Amount, u, v :real; Code, Class:char;
Function F(x, y : real; d : integer ) : real ; ………
Procedure Calculate(a: real ; var b: real; m: integer ; var k, n: integer ; var c:char); ………
Hãy xem phát biểu viết chương trình Nếu khơng, giải thích
(26)(b) Rate:= F(Hours, Day, two); (c) Writeln (F(0, 0, 0));
(d) F(Hours, Rate ,Month);
(e) Calculate(u, v, p, two, Day, Code);
(f) Hours := two* F( pi, Amount) / (2.71828+Day) / Rate,two); (h) If (Month = two) then Year:= F(Hours, F(Rate, pi, two), Day); (i) If (u > 0) then Amount := Calculate(u, v, two, p, q, Code); (j) If Calculate(0 ,u, 1, p, Year, Class) > then writeln(‘Okay’); (k) While F(Amount, 0, 0) < pi Amount := F(Amount, pi, 1); (l) Repeat
Amount:=F(Amount, 0, Code ); Until (Amount > 0);
(m) Calculate(F(u, v, Day), Rate, ,p ,q, Code); (n) Amount := F (a, b, Day);
6 Viết hàm Range tính khoảng cách hai số nguyên (ie: Trị tuyệt đối hiệu hai số đó) Viết hàm đổi độ C sang F.(công thức đổi F = 9/5*C+32)
8 Viết hàm IsAdigit để xác định kí tự có phải chữ số (từ đến không!) Viết hàm Binary đổi trị Bool thành số nhị phân tương đương(False0,True1)
10 Viết hàm RoundOff nhận trị thực Amount trị nguyên Numplaces, trị trả Amount làm tròn đến Numplaces vị trí.Ví dụ: RoundOff(10.536,0), RoundOff(10.536,1), Roundoff(10.536,2) có trị 11.0,10.5 10.54
11 Viết hàm GPA nhận mẫu tự (A,B,C,D,F) trả trị số tương ứng (A = 4.0, B = 3.0, C = 2.0, D = 1.0, F = 0.0)
12 Xét mẫu chương trình sau:
Program ScopeRules;
Var
a,b:integer;
{ -}
FunctionF(x: real): real;
Varb, c:integer;
Begin (* F *) ………
End; (* F *)
{ -}
Procedure P1(d: real);
Vare, f: integer;
{ -}
Procedure P2(a: real);
Vare, g:integer;
Begin (* P2 *) ………
End; (* P2 *)
(27)Begin (* P1 *) ………
End (* P1 *);
{ - MAIN -}
Begin (* ScopeRules *) ………
End (* ScopeRules *)
Hãy cho biết kết luận sau sai:
a Biến a khai báo chương trình biến tồn cục
b Biến a khai báo chương trình truy cập hàm F c Biến a khai báo chương trình truy cập thủ tục P2 d Hàm F truy cập thủ tục P2
e g truy cập thủ tục P2
f Phát biểu b:=c phần thân F gán trị c cho biến tồn cục b g Phát biểu Writeln(F(F)) viết phần thân P1
h Mệnh đề P2(3) viết phần thân P1 i F truy cập P2
j Phát biểu P2(b) viết phần thân chương trình k Phát biểu P1(F(a)) viết phần thân chương trình 13 Hãy mơ tả kết xuất chương trình sau giải thích có lỗi sai:
Program Exercise2;
Function Product(x: integer): integer;
Begin (* Product *) Product:=3*x; End; (* Product *)
Function Sum(x: integer): integer;
Function Product(a: integer): integer;
Begin (* Product *) Product:=4*a; End; (* Product *) Begin (* Sum *)
Sum:=5+Product(a); End; ( * Sum *) Begin (* Exercise2 *)
Writeln(Product(2): 5, Sum(2):5);
Writeln(Sum(Product(3)):5, Product(Sum(3)):5); End (* Exercise2 *)
14 Viết thủ tục không đệ qui tương đương với thủ tục Reverse đệ qui sau:
Procedure Reverse(Number: integer);
Var LeftDigits: integer ; (* cac ky so cuc trai *) Begin
(28)writeln (*ket thuc*) else
Reverse(LeftDigits) End;
15 Viết hàm/thủ tục đệ qui để tính USCLN Vẽ sơ đồ mô tả tham chiếu phát sinh tham chiếu ban đầu USCLN(1260,198)
16 Dãy số Fibonacci 1, 1, 2, 3, 5, 8, 13, 21 Có định nghĩa đệ qui sau:
f1 = 1,f2 = (neo)
fn = fn-1 + fn-2, với n>2, (bước quy nạp ) Trong fk số fibonacci thứ k
(a) Viết hàm đệ qui fib tính số Fibonacci thứ k (b) Vẽ sơ đồ tham chiếu phát sinh từ fib(5) (c) Viết hàm khơng đệ qui tính số Fibonacci thứ k (d) Hai trình (a) (c), trình tốt hơn?
17 Số ngược xi số có giá trị đọc từ trái sang phải từ phải sang trái Ví dụ 121, 356653 số ngược xuôi Viết hàm thủ tục xác định số có phải số ngược xuôi không?
II PHẦN THỰC HÀNH
Viết thủ tục tính lương trả tiền lương với số làm việc mức lương nhận Số vượt 40 tính gấp rưỡi mức bình thường Dùng thủ tục tính lương để tính tiền lương nhân viên Kết hình có dạng :
Chuong trinh tinh luong - Ma nhan vien :1234 So gio lam viec :42 Muc luong gio :10
Tien luong =430
Hướng dẫn
Nhập:manv, sogiolv,mluong Xuất: tien luong
Giải thuật
Giải thuật (*chương trình *) Nhập manv,sogiolv,mluong
Gọi tinhluong((sogiolv,mluong,tienluong) Xuất tienluong
Giải thuật (*tinhluong(sogiolv,mluong,tienluong)*) Nếu sogiolv<=40
Tienluong=sogiolv*mluong Nếu không
(29)Viết thủ tục switch để hốn chuyển trị hai biến, ví dụ a có trị b có trị switch(a,b) làm cho a có trị b có trị Dùng switch để viết chương trình nhập vào hai biến hốn chuyển trị hai biến đó, kết có dạng:
HỐN CHUYỂN TRỊ HAI BIẾN Nhập trị :5
Nhập trị hai :6
Sau hoán chuyển trị , trị hai
Hướng dẫn
Nhập : tri1 , tri2 Xuất : tri1 , tri2
Giải thuật
Giải thuật (* chương trình *) Nhập tri1 , tri2
Gọi Switch ( tri1 , tri2) Xuất tri1, tri2
Giải thuật (* Switch( tri1, tri2) * ) Lưu tri1 vào x
Gán tri2 vào tri1 Gán x vào tri2
Ước số chung lớn hai số nguyên a b, kí hiệu USCLN (a , b), với hai không đồng thời 0, số nguyên dương lớn chia hết a b Giải thuật Euclide tìm USCLN a b sau : chia a cho b, phần thuơng q dư r , tức a = bq + r (nếu a=0 USCLN ( a, b ) = USCLN ( b, r) Thay a = b b = r lập lại quy trình Vì số dư giảm dần nên đến lúc Số dư khác cuối USCLN ( a, b) Ví dụ:
1260 = 198 * +72 nên USCLN (1260, 198 ) = USCLN (198, 72 ) 198 = 72 * + 54 nên = USCLN (72, 54 )
72 = 54 * + 18 nên = USCLN (54, 18 )
54 = 18 * + nên = USCLN(18, 0) = 18
Ghi : Nếu a, b âm thay trị tuyệt đối chúng.
Bội số chung nhỏ a b, kí hiệu BSCNN (a, b) số nguyên không âm nhỏ bội số a b Có thể tình theo cơng thức : BSCNN ( a, b) = ABS (a,b ) / USCLN (a, b) Viết chương trình đọc vào hai số nguyện, gọi thủ tục tính trả USCLN, BSCNN hiển thị hai trị Kết có dạng :
TÌM ƯỚC SỐ CHUNG LỜN NHẤT VẢ BỘI SỐ CHUNG NHỎ NHẤT Nhập số thứ : 1260
Nhập số thứ hai :198
USCLN =18 , BSCNN = 13860
Hướng dẫn
Nhập : So1 , So2
Xuất : USCLN , BSCNN
Giải thuật
Giải thuật ( * chương trình *) Nhập số1, so2
(30)Gọi BSCNN(So1,So2 , BSCNN) Xuất USCLN , BSCNN
Giải thuật (*USCLN(So1, So2)*) Đặt So1=|So1| ; so2= |So2|
Nếu So1<So2 hốn chuyển trị So1, So2 Cịn lặp lại So2 <>
Tính thuơng = So1 DIV So2 Tính dư = So1 MOD So2 Đặt So1= So2; So2= dư
USCLN= So1
Giải thuật ( *BSCNN(So1, So2)* )
BSCNN = |So1 * So2| DIV USCLN(So1,So2)
Viết hàm Range tính khoảng cách hai số nguyên, tức số nguyên lớn trừ số nguyên nhỏ Dùng Range để viết chuơng trình nhập váo hai số hiển thị khoảng cách hai số đó, kết có dạng :
KHOANG CACH GIUA SO NGUYEN Nhap so thu nhat:5
Nhap so thu hai:16
Khoang cach giua va 16 la 11
Hướng dẫn
Nhập: Tri1,Tri Xuất: khoangcach
Giải thuật
Giải thuật (*chuong trinh chinh*) Nhập Tri 1, Tri
Khoangcach=Range(Tri 1,Tri 2) Xuất Khoangcach
Giải thuật (*Range(Tri 1,Tri 2:integer*) Range:=|Tri 1-Tri 2|
Viết hàm C2F đổi từ thang độ Celcius sang Farenheit (công thức đổi F=9/5*C+32) Dùng C2F để viết chương trình nhập vào độ C hiển thị độ F, kết có dạng:
DOI DO C SANG F DO C:
DO F: 41
Hướng dẫn
Nhập: DoC Xuất: DoF
Giải thuật
Giải thuật(*chuong trinh chinh*) Nhập DoC
Tinh DoF=C2F(DoC) Xuất DoF
(31)Viết hàm IsAdigit có trị kiểu Boolean xác định ký tự có kí số từ đến không Dùng IsADigit để viết chương trinh nhập vào ký tự cho biết có phải ký số khơng, kết có dạng:
XAC DINH MOT KY TU LA KY SO 0-9 Nhap mot ky tu bat ky (hoac ESC): B Ky tu da nhap khong phai la ky so Nhap mot ky tu bat ky(hoac ESC):0 Ky tu da nhap la so
Nhap mot ky tu bat ky(hoac ESC): Cham dut
Hướng dẫn
Nhập: KyTu Xuất: Thông báo
Giải thuật
Giải thuật (*chương trình chính*) Lặp
a Nhap ky tu (KyTu:=ReadKey) b Nếu IsADigit (KyTu)
Thông báo ký tự số Nếu không
Thông báo ký tự không số
Cho đến KyTu = #27 (*mã ASCII ESC *) Giải thuật (*IsADigit(KyTu:Char):boolean *)
IsADigit = (‘0’ < = KyTu) AND (KyTu<= ‘9’)
Số nguyên tố số nguyên n>1 mà ước số dương n Hãy viết hàm có trị Boolean để xét số n có phải số ngun tố khơng Viết chương trình đọc vào số hiển thị thông báo “số nguyên tố” “không phải số nguyên tố” tương ứng với số nhập vào Kết có dạng:
XAC DINH MOT SO NGUYEN TO
-Nhap mot so nguyen (lon hon hoac bang 0):105 So 105 khong phai la so nguyen to
Nhap so nguyen (lon hon hoac bang 0):13 So 13 la so nguyen to
Nhap mot so nguyen (lon hon hoac bang 0):0
Hướng dẫn
Nhập :So
(32)Giải thuật
Giải thuật (*chuong trinh chinh*) Lặp
a Nhập So b Nếu So>0
Nếu LaSoNTo(So)
Thông báo số nguyên tố Nếu không
Thông báo không số nguyên tố Cho đến So=0
Giải thuật (*LaSoNTo(N:LongInt):boolean*) Đặt N=abs (N); M=trunc(sqrt(N))
Đặt I=2
(33)KIỂU DỮ LIỆU THỨ TỰ I PHẦN LÍ THUYẾT
Bài tập
(a) Viết định nghĩa kiểu liệt kê MonthAbbrev có trị tên tắt tháng năm gồm ba chữ đầu tên tháng Tương tự, định nghĩa kiểu miền MonthNumber gồm số nguyên từ đến 12
(b) Viết hàm có tham đối số tháng có trị thuộc kiểu MonthAbbrev Bài tập
(a) Viết định nghĩa kiểu miền Numeral kí tự ‘0’, ’1’,……, ’9’ kiểu Number miền số nguyên từ đến
(b) Viết hàm có tham đối biến kiểu Numeral trị trị số tương ứng (Hướng dẫn: dùng hàm ord)
(c) Viết hàm khác có tham đối số nguyên phạm vi đến 9, có trị tương ứng kiểu Numeral.( Hướng dẫn: dùng hàm ord chr)
Bài tập
Cho kiểu MonthAbbrev tập 1, tìm trị biểu thức sau:
(a) Jan<Aug (b) Sep<=Sep
(c) succ(Sep) (d) pred(apr)
(e) succ(succ(Aug)) (f) pred(pred(Aug))
(g) succ(pred(Mar)) (h) succ(pred(Jan))
(i) ord(Jun) (j) ord(Sep)-ord(Jan)
(k) ord(succ(May))-ord(May) (l) chr(ord(Sep)+ord(‘0’)) Bài tập
Viết hàm thủ tục có tham đối số ngun khơng âm n tên tắt tháng Abbrev tập tìm hậu tử thứ n Abbrev Hậu tử thứ Abbrev Abbrev; với n>0, hậu tử thứ n Abbrev thánh thứ n sau Abbrev Ví dụ hậu tử thứ tư Aug Dec thứ sáu Aug Feb
Bài tập
Như tập với hàm thủ tục đệ qui Bài tập
Viết hàm có tham đối tháng kiểu MonthAbbrev (xem tập 1) năm khỏang từ 1538 đến 1999 có trị số ngày tháng.Nhắc lại tháng February có 28 ngày,trừ năm nhuần có 29 ngày.Năm nhuần năm chia chẵn cho trừ năm chia chẵn cho 100 phải chia chẵn cho 400 năm nhuần (như 1950 1900 không năm nhuần,nhưng 1960và1600 nhuần)
II PHẦN THỰC HÀNH
(34)MẢNG MỘT CHIỀU I PHẦN LÝ THUYẾT
Cho khai báo sau: TYPE
Color = (red, yellow, blue, green, white, black); ColorArray = ARRAY[Color] OF real;
LittleArray = ARRAY[1 10] OF integer;
CharCountArray = ARRAY[‘A’ ’F’] OF integer; VAR
Price : ColorArray; Number : LittleArray; LetterCount : CharCountArray;
i : integer; Ch : char; Col : color;
Trong trường hợp sau, cho biết trị gán (nếu có) cho phần tử mảng giải thích bị lỗi :
1) FOR i := TO 10 DO Number[i] := i DIV 2; 2) FOR i := TO DO Number[i] := i*i;
3) FOR i := TO 10 DO Number[i] := Number[i – 5]; 4) i := 0;
WHILE (i <> 10) DO BEGIN
IF ( i MOD 3) = THEN Number[i]:=0 ELSE Number[i] := i; i := i + 1;
END; Number[i] := 1; i := 2;
REPEAT
Number[i] := * Number[i – 1]; i := i + 1; UNTIL (i = 10);
5) FOR Ch :=’A’ TO ‘F’ DO
IF (Ch =’A’) THEN LetterCount[Ch] :=1
ELSE LetterCount[Ch] :=LetterCount[pred(Ch )] + 1; 6) FOR Col := yellow TO white DO Price[Col] :=13.95;
7) FOR Col := red TO black DO CASE Col OF
red,blue : Price[Col] := 19.95; yellow : Price[Col] :=12.75; green,black : Price[Col] := 14.50;
white :
END;
Trong bảy trường hợp sau, viết khai báo mệnh đề thích hợp để tạo mảng :
1 Mảng có mục số nguyên từ đến phần tử giống mục Mảng có mục số nguyên từ -5 đến phần tử giống mục
nhưng theo thứ tự ngược lại
(35)4 Mảng có mục số nguyên từ đến 20 phần tử có trị TRUE mục tương ứng chẵn FALSE trường hợp ngược lại
5 Mảng có mục chữ HOA phần tử chữ đứng trước mục tương ứng trừ phần tử tương ứng với mục ‘A’ ‘Z’
6 Mảng có mục chữ HOA phần tử vị trí mục tương ứng dãy ‘A’ ‘Z’
7 Mảng có mục chữ thường, phần tử TRUE mục nguyên âm, FALSE trường hợp ngược lại
II PHẦN THỰC HÀNH
Viết chương trình tạo n số ngẫu nhiên có trị từ đến 100 chứa vào mảng A, sau thứ tự A theo trị tăng dần Kết hình có dạng :
Cho biết số phần tử mảng ( tối đa 20):
Tạo mảng có trị ngẫu nhiên : 12, 23, 2, 53, 78, 91, 23 Mảng theo thứ tự : 2, 12,23, 53, 78, 91
Viết chương trình tạo n số ngẫu nhiên khác có trị từ đến n chứa vào mảng A Kết hình có dạng:
Cho biết số phần tử mảng ( tối đa 20) :
Tạo mảng gồm trị ngẫu nhiên khác : 53, 78, 91, 23
Hướng dẫn:
Dùng kỹ thuật đánh dấu: Tạo mảng B gồm n phần tử có trị ban đầu FALSE Sau đó, lấy số ngẫu nhiên n cho A[i], B[n] FALSE gán n cho A[i] TRUE cho B[n], B[n] TRUE lấy trị ngẫu nhiên khác
Viết chương trình tạo n số ngẫu nhiên có trị từ đến 100 chứa vào mảng A Sau kiểm tra cho biết A có theo thứ tự tăng khơng Kết hình có dạng :
Cho biết số phần tử mảng (tối đa 20 ) : Tạo mảng có trị ngẫu nhiên: 12,23,2,53,78,91,23 Mảng không theo thứ tự tăng
Hướng dẫn :
Sau tạo mảng, đặt biến CoThuTu TRUE Sau kiểm tra liên tiếp phần tử A[i] A[i + 1] có thứ tự khơng (tức A[i] <= A[i + 1], có cặp khơng thứ tự gán CoThuTu FALSE kết thúc việc kiểm tra
Viết chương trình tạo mảng A B có n phần tử số ngẫu nhiên từ đến 100 Trộn A B đưa vào mảng C có 2n phần tử theo thứ tự luân phiên (một phần tử A phần tử B) Kết hình có dạng :
Cho biết số phần tử mảng (tối đa 20) : Mảng A có trị ngẫu nhiên : 12, 23, 29, 53 Mảng B có trị ngẫu nhiên : 21, 32, 92, 35
(36)CHUỔI KÝ TỰ I PHẦN THỰC HÀNH
Viết chương trình nhập vào chuỗi in theo thứ tự ngược lại Kết màng hình có dạng :
Hay nhap chuoi : DAY LA MOT CHUOI Chuoi nguoc : IOUHC TOM AL YAD
Viết chương trình nhập vào chuỗi in kí tự chuỗi theo cột dọc Kết hình có dạng :
Hay nhap mot chuoi : XUAN Cac ky tu cua chuoi :
X U A N
Nhập từ bàn phím câu tiếng anh in số nguyên âm A,E,I,O,U có câu Kết hình có dạng:
Hay nhap mot cau tieng anh : Forget Me Not So nguyen am(A,E,I,O,U) :
Đọc từ bàn phím chuỗi ký tự, biến ký tự chuỗi thành ký tự mã ASCII Kết hình có dạng :
Hay nhap mot chuoi : XUAN Chuoi da bien doi : YVBO
Viết chương trình nhập vào chuỗi, sau biến đổi tất chữ thường thành chữ HOA Kết có dạng :
Nhap vao mot chuoi : Tram Nam Co Don Doi chu hoa : TRAM NAM CO DON
Viết chương trình nhập vào chuỗi Sau biến đổi tất chữ hoa thành chữ thường Kết có dạng :
Nhap vao mot chuoi : Tram Nam Co Don Doi chu thuong : tram nam co don
Viết chương trình nhập vào chuỗi Biến đổi chuỗi thành chuỗi khác cách chuyển kí tự phía sau thêm chữ ‘A’ Kết có dạng :
Nhap vao mot chuoi : Xuan Ha Chuoi bien : uan HaXA
Viết chương trình nhập vào chuỗi in chuỗi thành nhiều dòng, dòng bỏ bớt ký tự bên trái Kết có dạng :
(37)Ket qua :
Thu Dong hu Dong u Dong Dong Dong ong ng g
Một xí nghiệp sản xuất xà chọn tên cho sản phẩm theo yêu cầu sau : Tên sản phẩm dài năm mẫu tự
Ký tự thứ chọn chữ A, E, I, O, U
Ký tự thứ 1, thứ thứ chọn ký tự lại (B đến Z) Hãy viết chương trình tạo ngẫu nhiên N tên xà theo yêu cầu
Viết chương trình đếm số ký tự kép chuỗi nhập vào (ví dụ chuỗi ‘12AAB33CD‘ có ký tự kép AA 33, chuỗi ‘12345’ khơng có ký tự kép nào)
Viết chương trình nhập vào chuỗi Biến đổi chuỗi thành chuỗi khác (mã hóa) cách thay ký tự thành ký tự khác định trước Ví dụ :
Ký tự : A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Thay : Q W E R T Y U I O P A S D F G H J K L Z X C V B N M
Chuoi nhap : PASCAL Ma hoa : HQLEQS
Một chuỗi gọi ‘xi ngược‘ khơng đổi thứ tự ký tự chuỗi bị đảo lại Ví dụ MADAM, 463364 chuỗi xi ngược Hãy viết chương trình nhập vào chuỗi cho biết có phải chuỗi xi ngược khơng
(38)MỤC LỤC
PHẦN CƠ SỞ
I PHẦN LÝ THUYẾT
II PHẦN THỰC HÀNH
LỆNH RẺ NHÁNH 10
I PHẦN LÝ THUYẾT 10
II PHẦN THỰC HÀNH 11
VÒNG LẶP 18
I PHẦN LÝ THUYẾT 18
II PHẦN THỰC HÀNH 19
THỦ TỤC VÀ HÀM 25
I PHẦN LÝ THUYẾT 25
II PHẦN THỰC HÀNH 28
KIỂU DỮ LIỆU THỨ TỰ 33
I PHẦN LÍ THUYẾT 33
II PHẦN THỰC HÀNH 33
MẢNG MỘT CHIỀU 34
I PHẦN LÝ THUYẾT 34
II PHẦN THỰC HÀNH 35
CHUỔI KÝ TỰ 36