I. PHẦN LÝ THUYẾT
1. Các danh hiệu pascal nào dưới đây là hợp lệ ?
• Xray • X-Ray • Jeremiah • R2D2 • 3M
• PDQ123 • PS:175 • X • 4 • N/4
• SM • ZZZZZZ • night • ng • to day
2. Cho biết hằng nào dưới đây là nguyên, thực hoặc không phải 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 • ½
3. Các hằng chuỗi nào dưới đây 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 các đoạn biến để khai báo biến:
a. Item, Number và Job kiểu real.
b. ShoeSize kiểu integer.
c. Mileage kiểu real, Cost và Distance kiểu integer.
d. Alpha và Beta kiểu integer, Code kiểu char,
e. Root kiểu real, và RootExists kiểu boolean.
BÀI ÔN TẬP NGÔN NGỮ LẬP TRÌNH PASCAL. PHẦN CƠ SỞ. PHẦN LÝ THUYẾT Các danh hiệu pascal nào dưới đây là hợp lệ ? ¨ Xray ¨ X-Ray ¨ Jeremiah ¨ R2D2 ¨ 3M ¨ PDQ123 ¨ PS:175 ¨ X ¨ 4 ¨ N/4 ¨ SM ¨ ZZZZZZ ¨ night ¨ ng ¨ to day Cho biết hằng nào dưới đây là nguyên, thực hoặc không phải 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 hằng chuỗi nào dưới đây hợp lệ ? ¨ ‘X’ ¨ ‘123’ ¨ YS’ ¨ ‘tooyet’ ¨ ‘DO’’ESNT’ ¨ ‘isnt’ ‘t’ ¨ ‘constant’ ¨ ‘S1.98’ ¨ ‘DON’T’ ¨ ‘12+34’ ¨ ’’’twas’ ¨ ‘A’‘B’‘C’ Hãy viết các đoạn biến để khai báo biến: Item, Number và Job kiểu real. ShoeSize kiểu integer. Mileage kiểu real, Cost và Distance kiểu integer. Alpha và Beta kiểu integer, Code kiểu char, Root kiểu real, và RootExists kiểu boolean. Hãy viết các đoạn hằng đặt tên cho các hằng với tên tương ứng: 1.25 với tên Coefficient. 40.0 với tên RegHours và 1.5 với tên OvertimeFactor. 1776 với tên Year, ‘F’ với Female và ký tự trắng với Blank. True với tên Exists, 0 với Zero, * với Asterisk, dấu nháy đơn với Apostrophe và chuỗi CPSC151A với Course. Tìm trị các biểu thức sau và giải thích tại sao biểu thức không hợp lệ: 9-5-3 2 div 3+3/5 9 div 2/5 9/2 div 5 2.0/4 (2+3) mod 2 7 mod 5 mod 3 (7 mod 5) mod 3 7 mod (5 mod 3) (7 mod 5 mod 3) 25*1/2 25*1 div 2 25*(1 div 2) -3.0*5.0 5.0*-3.0 12/2*3 ((12+3) div 2)/(8-(5+1)) ((1`2+3) div 2)/(8-5+1) (12+3 div 2)/(8-5+1) sqrt(sqr(4)) sqrt(sqr(-4)) sqr(sqrt(4)) sqr(sqrt(-4)) trunc(8/5)+round(8/5) Nếu R1 và R2 kiểu Real, I1 I2 I3 kiểu integer và R1=2.0, R2=3.0, I1=4, I2=5, I3=8, tìm trị của: R1 + R2 + R2 I3 div 3 I3/3 (R1+R2) * I1 I3 div I2 * 5.1 Sqr(I1) / sqr(R1) Sqr(I2) / sqr(R1) Sqrt(R1 + R2 + I1) Viết biểu thức Pascal để tính: 10 + 5B - 4AC Ba lần của hiệu 4-n chia cho 2 lần m2+n2 Căn bậc hai của a+3b2 Căn bậc hai của trung bình cộng của m và n |A / (m+n)| ( |x| là trị tuyệt đối của x) Lượng thực Amount làm tròn đến phần trăm gần nhất. Giả định Number thuộc kiểu integer, xValue và yValue kiểu Real, Grade kiểu char, Found kiểu boolean. Hãy xác định mệnh đề gán Pascal nào dưới đây hợp lệ. Nếu không hợp lệ hãy giải thích tại sao. xValue := 2.71828 3 := Number Grade := ’B+’ Number := Number+1 xValue := 1 Greade := A Number+1 := Number Xvalue := ’1’ Found := Grade yValue := yValue xValue := A Grade := Grade+10 Found := ’True’ xValue := Number Number := yValue R1, R2, R3 và xCoord là các biến thực với R1 =0, R2 =3.0, R3 =4.0; I1, I2 và I3 là các biến nguyên với I1 =8, I2 =5; Numeral và Symbol là các biến ký tự với Numeral =’2’. Hãy cho biết trị gán cho các biến trong các trường hợp sau hoặc cho biết lý do mệnh đề không hợp lệ: xCoord := (R1+R2) * R2 xCoord := R2+R1/R3) * 2 xCoord := I1 / I2+5 I3 := I1 div I2 + 5 xCoord := sqr(I2) / sqr(I1) I3 := sqr(I2) / sqr(I1) Symbol := 4 Symbol := Numeral Symbol := ’4’ Symbol := R3 R1 := 2 R1 := ’2’ R1 := Numeral I1 := I1 + 2 I3 := 1 + Numeral I3 := round(sqr(I1 mod I2)/R3) Viết lệnh gán thay đổi trị của biến nguyên Number với các trường hợp sau: Tăng Number lên 77 Giảm Number bớt 3 Tăng Number lên gấp hai lần Cộng ký số cực phải của Number vào Number Giảm Number bớt một trị là phần nguyên của số thực x Viết mệnh đề gán Pascal cho các trường hợp sau để tính trị của biểu thức và gán trị cho biến tương ứng. Giả định tất cả các biến thuộc kiểu real, trừ trường hợp có ghi rõ. Distance bằng Rate lần Time X được tăng lên một lượng DeltaX Resistance bằng1/(1/R1 + 1/R2 + 1/R3) TArea là diện tích hình tam giác có cạnh đáy là b, chiều cao là h. Price bằng ba ký số cuối cùng của số nguyên StockNumber với dấu chấm thập phân ở trước hai ký số cuối (ví dụ nếu StockNumber là 1758316 thì Price được gán trị 3.16) Tax được làm tròn tới trị nguyên gần nhất. Với mỗi trường hợp dưới đây, hãy xác định trị của các biến nguyên a, b và c sao cho hai biểu thức có trị khác nhau: A * (b div c) và a * b div c a div b và a * (1/b) (a + b) div c và a div c + b div c Giả sử Alpha và Beta là biến thực có trị là -567.392 và 0.004, Rho là biến nguyên có trị 436. Hãy cho biết chính xác kết xuất trong các trường hợp sau và giải thích tại sao bị lỗi (nếu có): writeln(Rho); writeln(Rho+1); writeln(Rho+2); write(Rho); write(Rho+1); writeln(Rho+2); write(‘Alpha=’); write(Alpha:9:3); write(‘Beta=’:7); writeln(Beta:7:4); writeln(Rho:5, 2*Rho:5); writeln ;writeln(Beta:10:5); writeln(Alpha:8:1,Rho:5); writeln(‘Tolerance:’ Beta:8:5); writeln(‘Alpha=’,Alpha:12:5); writeln(‘Beta=’,Beta:6:2,’:4,’Rho=’,Rho:6); writeln(Alpha+4.0+Rho:15:3); write (‘Tolerance =’ :8 ) ; writeln (Beta : 5 : 3 ) ; writeln ; writeln; writeln (Rho : 2 , Alpha : 4 : 2) ; writeln ( 10 * Alpha : 8 : 1 , trunc (10 * Alpha) : 8 , round ( 10 * Alpha ) :8 ) ; writeln ( sqr ( Rho div 100 ) : 5 , sqrt ( Rho div 100 ) : 5 ) ; writeln ( ‘ Rho =’ : 7 , Rho : 8 : 2 ) ;writeln ( ‘ * * * * * ‘ ) ; write (Alpha : 10 ) ; write ; writeln ( Beta : 10 ); Giả sử I, J là biến nguyên với I = 15 , J = 8, C và D là biến ký tự với C = ‘C’ và D = ‘ – ‘ , X và Y là biến thực với X = 2559.50 và Y = 8.015 . Hãy cho biết chính xác kết xuất trong các trường hợp sau : writeln( ‘ Newbalance = ‘ : I , X : J : 2 ) ; writeln( C : I mod 10 , Y : J : J – 6 ) ; 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 7 ) Giả sử N1 và N2 là biến nguyên có giá trị là 39 và –5117, R1, R2 là biến thực có giá trị là 56 . 7173 và –0.00247 , C là biến ký tự có giá trị là ‘F’ . Hãy viết lệnh để được các kết xuất trong từng trường hợp sau : __ 56.7173 __ F __ 39 -5117PDQ-0.00247__ __56.717___-0.0025 * * * 39__F ___56.72___39-5117__________ ROOTS_ARE__56.717_AND_-0.00247 APPROXIMATE_ANGLES:__56.7_AND_______-0.0 MAGNITUDES_ARE_______39___AND______5117 Giả sử A, B, C là biến nguyên , X, Y, Z là biến thực. Hãy cho biết trị nào (nếu có ) gán cho biến nào và giải thích lí do sai (nếu có) khi thực hiện các lệnh sau với trị nhập tương ứng : a. readln (A, B, C, X, Y, Z ) ; nhập: 1 2 3 4 5.5 6.6 b. readln (A, B, C) ; nhập: 1 readln (X, Y, Z) ; 2 3 4 5 6 c. read (A, X) ; nhập: 1 2.2 read (B, Y) ; 3 4.4 read (C, Z) ; 5 6.6 d. read (A, B, C) ; nhập: 1 2.2 readln (X, Y, Z) ; 3 4.4 5 6.6 e. read (A); nhập: 1 2 3 readln (B, C); 4 5.5 6.6 read (X, Y) ; readln (Z); f. readln (A); nhập: 1 2 3 read (B, C) ; 4 5.5 6.6 readln (X, Y); read (Z); g. read (A, B); nhập: 1 2 3 readln ; 4 5.5 6.6 read (C); 7 8.8 9.9 readln(X); 10 11.11 12.12 readln ; 13 14.14 15.15 readln (Y); readln ; readln (Z); PHẦN THỰC HÀNH Gõ vào máy và thực hiện 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); writeln( ‘ Day la mot so thuc ( dang dong ) : ‘ ,123.45 ); writeln( ‘ Day la mot so thuc ( dang tinh ) : ‘ ,123.45:7:3); writeln ; write( ‘ xem xong bam Enter ; ) ; readln ; End. Hướng dẫn (Trong môi trường Windows) Kích hoạt chương trình Windows Explorer để tạo một folder sẽ dùng lưu trữ các file chương trình của Pascal (Ví dụ: C:\BT_PAS) Kích hoạt chương trình Borland Pascal (Thực hiện Run: \\BP\BIN\BP.EXE) Thông qua menu [Options] -> [Directories] xác lập giá trị C:\BT_PAS cho mục [EXE and TPU directories] -> [OK]. Thông qua menu [File]-> [Change Dir] chọn thư mục làm việc mới là C:\BT_PAS. Thông qua menu [Options] -> [SAVE BP.TP] để lưu lại các xác lập trên. Mở cửa sổ soạn thảo mới ([File]-> [New]). Gõ chương trình với nội dung trên 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). Nhấn phím F9 để biên dịch chương trình trên. Nếu có lỗi thì sửa lỗi (nhớ nhấn F2 để Save lại mỗi khi có thay đổi văn bản chương trình). Thực hiện cho đến khi nào việc biên dịch thành công. Nhấn Ctrl_F9 (giữ phím Ctrl và nhấn F9) để chạy chương trình. Gõ vào máy và thực hiện chương trình BT1_2.PAS sau: Program BT1_2; (* Date :dd/mm/yyyy Notes : Nhap so nguyen va chuoi roi xuat ra 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 và thực hịện chương trình BT1_3.PAS sau: Program: BT1_3; (* Date :dd/mm/yyyy Notes : Nhap 2 so thuc , cong, tru, nhan, chia 2 so roi hien thi ( so thu hai khac 0) *) 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 và thưc hiện chuơng trình BT1_4.pas sau Program:BT_4; (* Date:dd/mm/yyyy Notes:hien thi 3 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 khi biết chiều dài và chiều rộng, kết quả trên màn 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 Hướng dẫn. Nhập: Dai ,Rong Xuất : Dien tich Giải thuật Nhap Dai va Rong 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 và chu vi hình tròn khi biết bán kính, kết quả trên mà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: Nhập bán kính Tính chu vi =2*ban kinh*pi Dien tich ... at:5 Nhap so thu hai:16 Khoang cach giua 5 va 16 la 11 Hướng dẫn Nhập: Tri1,Tri 2 Xuất: khoangcach Giải thuật Giải thuật (*chuong trinh chinh*) 1. Nhập Tri 1, Tri 2 2. Khoangcach=Range(Tri 1,Tri 2) 3. 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 là F=9/5*C+32). Dùng C2F để viết chương trình nhập vào độ C và hiển thị độ F, kết quả có dạng: DOI DO C SANG F DO C: 5 DO F: 41 Hướng dẫn Nhập: DoC Xuất: DoF Giải thuật Giải thuật(*chuong trinh chinh*) 1. Nhập DoC 2. Tinh DoF=C2F(DoC) 3. Xuất DoF Giải thuật (*C2F (DoC:real):real *) C2F=9/5*DoC+32 Viết hàm IsAdigit có trị kiểu Boolean xác định một ký tự có là một kí số từ 0 đến 9 không. Dùng IsADigit để viết chương trinh nhập vào một ký tự và cho biết đó có phải là ký số không, kết quả 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 0 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ự là số Nếu không Thông báo ký tự không là số Cho đến khi KyTu = #27 (*mã ASCII của ESC *) Giải thuật (*IsADigit(KyTu:Char):boolean *) IsADigit = (‘0’ < = KyTu) AND (KyTu<= ‘9’) Số nguyên tố là số nguyên n>1 mà các ước số dương của nó chỉ là 1 và n. Hãy viết hàm có trị Boolean để xét một số n có phải là số nguyên tố không. Viết chương trình đọc vào các số và hiển thị thông báo “số nguyên tố” hoặc “không phải là số nguyên tố” tương ứng với số nhập vào. Kết quả 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 một 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 Xuất: Thông báo. 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 là số nguyên tố Nếu không Thông báo không là số nguyên tố Cho đến khi So=0 Giải thuật (*LaSoNTo(N:LongInt):boolean*) Đặt N=abs (N); M=trunc(sqrt(N)) Đặt I=2 Khi (N MOD I0) AND (I<=M) tăng I LaSoNTO:=(I>M) KIỂU DỮ LIỆU THỨ TỰ PHẦN LÍ THUYẾT Bài tập 1 (a) Viết định nghĩa kiểu liệt kê MonthAbbrev có trị là các tên tắt của các tháng trong năm gồm ba chữ đầu của tên tháng. Tương tự, định nghĩa kiểu miền con MonthNumber gồm các số nguyên từ 1 đến 12. (b) Viết hàm có tham đối là số của một tháng và có trị thuộc kiểu MonthAbbrev. Bài tập 2 (a) Viết định nghĩa kiểu miền con Numeral là các kí tự ‘0’, ’1’,, ’9’ và kiểu Number là miền con các số nguyên từ 0 đến 9. (b) Viết hàm có tham đối là biến kiểu Numeral và trị là trị số tương ứng. (Hướng dẫn: dùng hàm ord). (c) Viết hàm khác có tham đối là số nguyên trong phạm vi 0 đến 9, có trị tương ứng kiểu Numeral.( Hướng dẫn: dùng hàm ord và chr). Bài tập 3 Cho kiểu MonthAbbrev ở bài tập 1, tìm trị của các 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 4 Viết hàm hoặc thủ tục có các tham đối là số nguyên không âm n và tên tắt của tháng Abbrev như ở bài tập 1 và tìm hậu tử thứ n của Abbrev. Hậu tử thứ 0 của Abbrev chính là Abbrev; với n>0, hậu tử thứ n của Abbrev là thánh thứ n sau Abbrev. Ví dụ hậu tử thứ tư của Aug là Dec và thứ sáu của Aug là Feb. Bài tập 5 Như bài tập 4 nhưng với hàm hoặc thủ tục đệ qui. Bài tập 6 Viết hàm có các tham đối là một tháng kiểu MonthAbbrev (xem như bài tập 1) và năm trong khỏang từ 1538 đến 1999 có trị là số ngày của 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 là năm chia chẵn cho 4 trừ các năm chia chẵn cho 100 phải chia chẵn cho 400 mới là năm nhuần. (như vậy 1950 và 1900 không là năm nhuần,nhưng 1960và1600 là nhuần). PHẦN THỰC HÀNH Dùng các hàm ở bài tập 6 (phần lý thuyết) để viết chương trình đọc hai ngày có dạng dd mm yyyy (ví dụ 4 7 1776 và 1 1 1990) và tính số ngày giữa hai ngày. MẢNG MỘT CHIỀU PHẦN LÝ THUYẾT Cho các 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 mỗi trường hợp sau, cho biết trị nào sẽ gán (nếu có) cho các phần tử mảng hoặc giải thích tại sao bị lỗi : FOR i := 1 TO 10 DO Number[i] := i DIV 2; FOR i := 1 TO 6 DO Number[i] := i*i; FOR i := 1 TO 10 DO Number[i] := Number[i – 5]; i := 0; WHILE (i 10) DO BEGIN IF ( i MOD 3) = 0 THEN Number[i]:=0 ELSE Number[i] := i; i := i + 1; END; Number[i] := 1; i := 2; REPEAT Number[i] := 2 * Number[i – 1]; i := i + 1; UNTIL (i = 10); FOR Ch :=’A’ TO ‘F’ DO IF (Ch =’A’) THEN LetterCount[Ch] :=1 ELSE LetterCount[Ch] :=LetterCount[pred(Ch )] + 1; FOR Col := yellow TO white DO Price[Col] :=13.95; 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 các khai báo và mệnh đề thích hợp để tạo mảng : Mảng có chỉ mục là số nguyên đi từ 0 đến 5 và mỗi phần tử cũng giống như chỉ mục. Mảng có chỉ mục là số nguyên đi từ -5 đến 5 và mỗi phần tử cũng giống như chỉ mục nhưng theo thứ tự ngược lại. Mảng có chỉ mục là các chử HOA, và mỗi phần tử cũng giống như chỉ mục. 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ỗi phần tử là chữ đứng ngay trước chỉ mục tương ứng trừ phần tử tương ứng với chỉ mục ‘A’ là ‘Z’. Mảng có chỉ mục là những chữ HOA và mỗi phần tử là vị trí chỉ mục tương ứng trong dãy ‘A’ .. ‘Z’. Mảng có chỉ mục là các chữ thường, và mỗi phần tử là TRUE nếu chỉ mục là nguyên âm, và FALSE trong trường hợp ngược lại. PHẦN THỰC HÀNH Viết chương trình tạo n số ngẫu nhiên có trị từ 1 đến 100 và chứa vào mảng A, sau đó sắp thứ tự A theo trị tăng dần. Kết quả trên màn hình có dạng : Cho biết số phần tử mảng ( tối đa là 20): 7 Tạo mảng có trị ngẫu nhiên : 12, 23, 2, 53, 78, 91, 23 Mảng sắp 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 nhau có trị từ 1 đến n và chứa vào mảng A. Kết quả trên màn hình có dạng: Cho biết số phần tử mảng ( tối đa là 20) : 4 Tạo mảng gồm 4 trị ngẫu nhiên khác nhau : 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 là FALSE. Sau đó, khi lấy số ngẫu nhiên n cho A[i], nếu B[n] là FALSE thì gán n cho A[i] và TRUE cho B[n], nếu B[n] là TRUE thì 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ừ 1 đến 100 và chứa vào mảng A. Sau đó kiểm tra và cho biết A có được sắp theo thứ tự tăng không. Kết quả trên màn hình có dạng : Cho biết số phần tử mảng (tối đa là 20 ) : 7 Tạo mảng có trị ngẫu nhiên: 12,23,2,53,78,91,23 Mảng trên không theo thứ tự tăng. Hướng dẫn : Sau khi tạo mảng, đặt biến CoThuTu bằng TRUE. Sau đó kiểm tra liên tiếp các phần tử A[i] và A[i + 1] có đúng thứ tự không (tức là A[i] <= A[i + 1], nếu có một cặp nào đó không đúng thứ tự thì gán CoThuTu bằng FALSE và kết thúc việc kiểm tra . Viết chương trình tạo 2 mảng A và B có n phần tử là các số ngẫu nhiên từ 1 đến 100. Trộn A và B và đưa vào mảng C có 2n phần tử theo thứ tự luân phiên (một phần tử của A rồi một phần tử của B). Kết quả trên màn hình có dạng : Cho biết số phần tử mảng (tối đa là 20) : 4 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 Mảng C : 12, 21, 23, 32, 29, 92, 53, 35 CHUỔI KÝ TỰ PHẦN THỰC HÀNH Viết chương trình nhập vào 1 chuỗi và in ra theo thứ tự ngược lại. Kết quả trên màng hình có dạng : Hay nhap 1 chuoi : DAY LA MOT CHUOI Chuoi nguoc : IOUHC TOM AL YAD Viết chương trình nhập vào 1 chuỗi và in ra các kí tự của chuỗi theo cột dọc. Kết quả trên màn 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 một câu tiếng anh và in ra số nguyên âm A,E,I,O,U có trong câu. Kết quả trên màn hình có dạng: Hay nhap mot cau tieng anh : Forget Me Not So nguyen am(A,E,I,O,U) : 4 Đọc từ bàn phím một chuỗi ký tự, biến mỗi ký tự trong chuỗi thành ký tự tiếp theo trong bản mã ASCII. Kết quả trên màn 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 một chuỗi, sau đó biến đổi tất cả các chữ thường thành chữ HOA. Kết quả có dạng : Nhap vao mot chuoi : Tram Nam Co Don Doi thanh chu hoa : TRAM NAM CO DON Viết chương trình nhập vào một chuỗi. Sau đó biến đổi tất cả các chữ hoa thành chữ thường . Kết quả có dạng : Nhap vao mot chuoi : Tram Nam Co Don Doi thanh chu thuong : tram nam co don Viết chương trình nhập vào một chuỗi. Biến đổi chuỗi này thành chuỗi khác bằng cách chuyển kí tự đầu tiên ra phía sau và thêm chữ ‘A’. Kết quả có dạng : Nhap vao mot chuoi : Xuan Ha Chuoi bien thanh : uan HaXA Viết chương trình nhập vào một chuỗi và in ra chuỗi đó thành nhiều dòng, mỗi dòng bỏ bớt một ký tự ở bên trái. Kết quả có dạng : Nhap vao mot chuoi : Thu Dong Ket qua : Thu Dong hu Dong u Dong Dong Dong ong ng g Một xí nghiệp sản xuất xà bông chọn tên cho các sản phẩm của mình theo yêu cầu sau : Tên sản phẩm dài năm mẫu tự . Ký tự thứ 2 và 4 chọn một trong các chữ A, E, I, O, U. Ký tự thứ 1, thứ 3 và thứ 5 chọn một trong các ký tự còn lại (B đến Z). Hãy viết chương trình tạo ngẫu nhiên N tên xà bông theo yêu cầu trên. Viết chương trình đếm số ký tự kép trong một chuỗi nhập vào (ví dụ chuỗi ‘12AAB33CD‘ có 2 ký tự kép AA và 33, chuỗi ‘12345’ không có ký tự kép nào). Viết chương trình nhập vào một chuỗi. Biến đổi chuỗi này thành chuỗi khác (mã hóa) bằng cách thay thế mỗi ký tự thành một 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 bằng : 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 thanh : HQLEQS Một chuỗi được gọi là ‘xuôi ngược‘ nếu nó không đổi khi thứ tự các ký tự trong chuỗi bị đảo lại. Ví dụ MADAM, 463364 là các chuỗi xuôi ngược. Hãy viết chương trình nhập vào một chuỗi và cho biết nó có phải là một chuỗi xuôi ngược không. Viết lại bài tập trên dưới dạng một thủ tục đệ qui. MỤC LỤC
Tài liệu đính kèm: