ôn tập tin học pascal tham khảo

47 1.6K 3
ôn tập tin học pascal tham khảo

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

NHẮC LẠI KIẾN THỨC CƠ BẢN TRONG PASCAL I.Cấu trúc điều khiển 1.Cấu trúc rẽ nhánh if…then a.Dạng thiếu if <Điều kiện> then <Câu lệnh>; *Hoạt động: Kiểm tra điều kiện, nếu điều kiện đúng thì thực hiện Câu lệnh b.Dạng đủ If <Điều kiện> then <Câu lệnh 1> Else <Câu lệnh 2>; *Hoạt động: Kiểm tra điều kiện, nếu điều kiện đúng thì thực hiện Câu lệnh 1, điều kiện sai thì thực hiện Câu lệnh 2. 2.Câu lệnh rẽ nhánh Case…of *Cú pháp: Case <Biểu thức số nguyên hoặc kí tự> of <Danh sách 1>: Câu lệnh 1; <Danh sách 2>: Câu lệnh 2; ……. <Danh sách n>: Câu lệnh n [Else Câu lệnh n+1]; End; *Hoạt động: Khi gặp câu lệnh case…of máy tính tính giá trị biểu thức nếu trả về giá trị nào thì thực hiện câu lệnh tương ứng trong danh sách, nếu khác thì thực hiện câu lệnh n+1. *Ví dụ: Nhập vào 2 số nguyên là tháng và năm. Cho biết tháng đó có bao nhiêu ngày? Program vidu1; Uses crt; Var T,N,SN:integer; Begin Clrscr; Write(‘Nhap thang va nam’); readln(T,N); Case T of 4,6,9,11: SN:=30; 2: if (N mod 400=0) or ((N mod 100<>0) and (N mod 4=0)) then SN:=29 Else SN:=28; Else SN:=31; End; Writeln(‘Thang ’,T, ‘ nam ’,N,’ Co so ngay ’,SN); Readln 1 End. 3.Cấu trúc lặp For…do *Cú pháp: For <Biến đếm>:=<Giá trị đầu> to <Giá trị cuối> do <Câu lệnh>; For <Biến đếm>:=<Giá trị cuối> downto <Giá trị đầu> do <Câu lệnh>; 4.Cấu trúc While…do *Cú pháp: While <điều kiện> do <câu lệnh>; 5.Cấu trúc lặp Repeat…until *Cú pháp: Repeat <Dãy câu lệnh>; Until <Điều kiện>; *Ví dụ: Kiểm tra số nguyên dương N nhập vào từ bàn phím có thỏa mãn điều kiện (0<=N<=1000)? Repeat Write(‘Nhap so nguyen N=’); Readln(N); Until (n>=0) and(n<=1000); II.Kiểu dữ liệu có cấu trúc 1.Kiểu mảng một chiều *Khái niệm: Mảng một chiều là một dãy hữu hạn các phần tử cùng kiểu có một tên chung, các phần tử này được đánh số gọi là chỉ số của các phần tử. *Cú pháp khai báo: Var <Tên biến mảng>:array[n1 n2] of <Kiểu dl>; 2.Kiểu mảng 2 chiều *Khai báo: Var <Tên biển mảng>:array[m1 m2,n1 n2] of <Kiểu dl>; *Ví dụ: Chương trình sau tính và đưa ra màn hình bảng nhân Program bangnhan; Uses crt; Var A:array[1 9,1 10] of integer; i,j:integer; begin for i:=1 to 9 do for j:=1 to 10 do a[i,j]:=i*j; 2 for i:=1 to 9 do begin for j:=1 to 10 do write(a[i,j]:4); writeln; end; readln; end. *Bài tập về nhà: Bài 1:Cho mảng 2 chiều m hàng, n cột. Hãy điền các số nguyên dương từ 1 đến m*n vào mảng 2 chiều sao cho mảng được sắp thứ tự theo hình vẽ: (ví dụ m=3, n=4 thì mảng có dạng sau: 1 2 3 4 8 7 6 5 9 10 11 12 Bài 2: Nhập vào số nguyên dương N (2<N<10000) và một dãy a1, a2,….an các phần tử nguyên dương. Cho biết dãy trên có bao nhiêu phần tử khác nhau. Bài 3: Cho N gói kẹo (N<200) đánh số từ 1 đến N, gói kẹo thứ i có ai cái kẹo(ai<200). Hãy sắp các gói kẹo thành 2 phần sao cho độ chênh lệch nhau là ít nhất. *Chữa bài tập về nhà Bài 1: Gợi ý dùng vòng for để điền các số vào mảng Nếu chỉ số hàng lẻ thì ta điền theo chỉ số cột tăng Nếu chỉ số hàng chẵn thì ta điền theo chỉ số cột giảm Viết ra màn hình mảng vừa điền T:=1; For i:=1 to m do Begin If i mod 2<>0 then For j:=1 to n do Begin A[I,j]:=T; T:=T+1; End Else 3 For j:=N downto 1 do Begin A[I,j]:=T; T:=T+1; End program zizac; uses crt; const nmax=10; var A:array[1 nmax,1 nmax]of integer; m,n,i,j:integer; T:longint; begin clrscr; write('Nhap so hang so cot '); readln(m,n); T:=1; for i:=1 to m do begin if i mod 2 <> 0 then begin for j:=1 to n do begin a[i,j]:=T; inc(T); end; end else for j:=n downto 1 do begin a[i,j]:=T; inc(T); end; end; for i:=1 to m do begin for j:=1 to n do write(a[i,j]:4); writeln; end; readln end. 4 Bài 2: Để làm bài này ta dùng thuật toán “lùa bò vào chuồng”, Các phần tử bằng nhau sẽ nhốt chung một chuồng, có bao nhiêu chuồng thì có bấy nhiêu phần tử khác nhau trong dãy ban đầu. Ta đóng dãy chuồng C, đánh số chuồng lần lượt từ 1,2….32000 ( ai là các số nguyên dương, ai<32000), ban đầu các chuồng đều trống) Duyệt mảng A ban đầu, phần tử ai sẽ được “nhốt” vào chuồng có số ai (tăng C[a[i]] lên một đơn vị) Đếm số chuồng khác trống đó chính là số phần tử khác nhau của dãy ban đầu. …… Var C:array[0 32000] of integer; ………. Ban đầu khởi tạo chuồng C trống Fillchar(C,sizeof(C),0); For i:=1 to N do inc(C[a[i]]); D:=0; For j:=0 to 32000 do if C[j]<>0 then inc(D); Write(‘So phan tu khac nhau la’,D:4); program sophantukhacnhau; uses crt; var A:array[1 10000] of integer; C:array[0 maxint] of integer; i,j,n,D:integer; begin clrscr; randomize; write('Nhap so phan tu cua day '); readln(n); for i:=1 to n do a[i]:=random(maxint)-random(100); writeln('Day phan tu la '); for i:=1 to n do write(a[i]:8); fillchar(C,sizeof(C),0); for i:=1 to N do inc(C[a[i]]); 5 D:=0; for j:=0 to maxint do if c[j]<>0 then inc(D); writeln('So phan tu khac nhau cua day la ',D:4); readln end. Bài 3: Dùng một trục số với các điểm chia nguyên 0->40000 để đánh dấu tổng số kẹo có thể sinh ra khi xếp một số gói kẹo nào đó lại với nhau. Ta lần lượt xét từng gói kẹo từ a1->an G/s bây giờ xét đến gói ai, để tạo ra các tổng mới, ta cộng ai vào từng tổng đã có (Cộng từ tổng lớn nhất về tổng nhỏ nhất là 0). Mỗi khi sinh ra tổng mới, cần ghi nhớ số hiệu vừa gộp vào để có tổng mới này. … Từ điểm X là điểm đánh dấu nửa tổng tất cả số kẹo (Nếu có) hoặc điểm đánh dấu gần x nhất (Nếu X không được đánh dấu) biết được gói cuối cùng thêm vào, trừ đi số kẹo của gói đó ta đến tổng mới, lại biết số kẹo nào vừa thêm vào để tạo ra tổng mới này….Quá trình tiếp tục khi ta về điểm đánh dấu 0. Chương trình sau lay dl từ tệp chiakeo.int sau do ket qua ghi ở tệp chiakeo.out program chiakeo; uses crt; const fi='chiakeo.int'; fo='chikeo.out'; maxn=200; maxk=200; maxs=40000; type m1=array[0 maxs] of byte; m2=array[1 maxn] of byte; var a:m2; t:m1; sum:word; n:byte; { } procedure nhap; var f:text; i:byte; begin sum:=0; assign(f,fi); reset(f); readln(f,n); {so goi keo lan n} for i:=1 to n do 6 begin read(f,a[i]); sum:=sum+a[i]; {sum la tong so keo} end; close(f); end; { } procedure danhdau; var i:byte; max,j:word; begin fillchar(T, sizeof(T),0); T[0]:=1; { danh dau tong =0 da duoc sinh ra} Max:=0; for i:=1 to n do begin for j:=max downto 0 do {Soat lai cac tong da co tu max ve 0} if T[j]>0 then if T[j+a[i]]=0 then T[j+a[i]]:=i; {danh dau tong j+a[i] vua sinh ra goi i them vao} max:=max+a[i]; end; end; { } procedure timkq; var i,tong:integer; f:text; kq:m2; begin fillchar(kq,sizeof(kq),0); assign(f,fo); rewrite(f); tong:=sum div 2; while T[tong]=0 do dec(tong); writeln(f,sum-tong-tong); 7 repeat kq[t[tong]]:=1; tong:=tong-a[t[tong]] until tong=0; for i:=1 to n do if kq[i]=1 then write(f,'Cac goi thuoc phan 1 ',i,' '); writeln(f); for i:=1 to n do if kq[i]=0 then write(f,'Cac goi thuoc phan 2 ',i,' '); close(f); end; { } Begin clrscr; nhap; danhdau; timkq; end. 3.Kiểu xâu. *Khai báo Var <biến xâu>:string[độ dài]; * Một số hàm và thủ tục liên quan đến xâu -Length(S): Cho độ dài xâu S -Upcase(ch): Cho kí tự in hoa ứng với ch -Pos(s1,s2): Cho vị trí xuất hiện đầu tiên của S1 trong S2, nếu s1 không có trong s2 hàm cho giá trị 0. -Insert(s1,s2,vt): Chèn xâu s1 vào xâu s2 tại vị trí vt -Delete(s,vt,n): Xóa trong xâu s n kí tự từ vị trí vt -Copy(s,vt,n): Sao chép trong xâu S n kí tự từ vị trí vt -str(x,s): Biến đối số x thành 1 xâu kí tự biểu diễn số đó. -Val(s,x,loi): Đổi xâu s thành số chứa trong x, nếu đổi thành công loi nhận giá trị 0, ngược lại loi nhận giá trị là vị trí kí tự sai trong s. 8 -Concat(s1,s2,…,sn): Ghép các xâu thành một xâu.Nếu tổng độ dài các xâu lớn hơn 255 thì máy tính báo lỗi. …. Bài 1: Cho xâu S, kiểm tra xâu S có là xâu đối gương không? Bài 2: Cho xâu S chỉ gồm các chữ cái. Cho biết xâu S có bao nhiêu chữ cái khác nhau. Mỗi chữ cái xuất hiện bao nhiêu lần. Bài 3: Cho xâu S gồm các kí tự chữ số trong hệ thập phân biểu diễn 1 số nguyên dương có không quá 200 chữ số. Hãy tìm cách xóa đi k chữ số khỏi xâu S nói trên để xâu S thu được biểu diễn số có giá trị nhỏ nhất. 4.Kiểu dữ liệu tập hợp Khi xử lí dữ liệu gồm các phần tử mà không cần lưu tâm đến quan hệ thứ tự giữa chúng, người ta có thể khai báo dữ liệu theo kiểu tập hợp. *Khai báo: type <tên kiểu>=set of <kiểu cơ sở>; Var <tên biến>:<tên kiểu>; Hoặc var <tên biến>:set of <kiểu cơ sở>; *Ví dụ: Khai báo biến b là tập hợp chứa các kí tự Type ks=set of char; Var b:ks; *Người ta kí hiệu một tập hợp bằng cặp ngoặc vuông, bên trong chứa cá giá trị tập thuộc tập hợp đó: ví dụ A=[1,4,10] Một phần tử thuộc tập hợp đó kí hiệu là x in A *Một số phép toán trên tập hợp -Phép hợp: Kí hiệu A+B -Phép giao: Kí hiệu A*B -Phép hiệu: Kí hiệu A-B -Phép thuộc: Kí hiệu A<=B Bài tập áp dụng Bài 1: Hai từ gọi là bạn bè nếu chúng được tạo nên cùng một số kí tự giống nhau: Ví dụ S1=’aabbbccccb’ và xâu S2=’aabccccaaaaa’ là bạn bè. Viết chương trình nhập 2 xâu từ bàn phím, kiểm tra 2 xâu có là bạn bè không? Thuật toán: Ta đổi 2 xâu thành chữ in hoa, tạo 2 tập hợp t1, t2 rỗng. Duyệt xâu s1 kiểm tra từng kí tự nếu kí tự đang xét s1[i] chưa có trong tệp t1 thì thêm kí tự này vào tệp. Tương tự với xâu s2 và tập hợp t2. So sánh 2 tập hợp nếu chúng bằng nhau thì kết luận 2 xâu là bạn bè. 9 uses crt; type kt=set of char; var t1,t2:kt; s1,s2:string; i,n,m,j:byte; begin clrscr; writeln('Nhap xau 1='); readln(s1); writeln('Nhap xau 2='); readln(s2); for i:=1 to length(s1) do s1[i]:=upcase(s1[i]); for j:=1 to length(s2) do s2[j]:=upcase(s2[j]); t1:=[]; t2:=[]; for i:=1 to length(s1) do if not(s1[i] in t1) then t1:=t1+[s1[i]]; for j:=1 to length(s2) do if not(s2[j] in t2) then t2:=t2+[s2[j]]; if t1=t2 then writeln('Hai xau la ban be ') else writeln('Hai xa khong la ban be'); readln end. Bài 2: Như các bạn đã biết dãy số Fibonaci là dãy 1, 1, 2, 3, 5, 8, Dãy này cho bởi công thức đệ qui sau: F 1 = 1, F 2 =1, F n = F n-1 + F n-2 với n > 2 Tính số hạng thứ n của dạy Fibonaci. Chương trình nhập n từ bàn phím và viết ra màn hình số hạng thứ N của dãy Fibonaci. GV Hướng dẫn hs viết chương trình này Ta khai báo một mảng lưu lại các số fibonaci tính được, viết ra màn hình số hạng thứ n Var F:array[1 nmax] of longint; F[1]:=1; F[2]:=2; For i:=3 to n do F[i]:=F[i-1]+F[i-2]; Writeln(‘So hang thu n=’,F[n]); 1 [...]... nhất: ABBBBBDDDEE Yêu cầu: Viết chương trình nhập 1 chuỗi không quá 255 ký tự từ bàn phím là dạng thuần nhất hay dạng thu gọn, ghi chuổi vừa nhập vào tập tin INPUT.TXT ‒ Nếu là chuỗi thuần nhất thì hãy chuyển đổi nó về dạng thu gọn ‒ Nếu là chuỗi thuộc dạng thu gọn thì hãy chuyển đổi nó trở lại dạng thuần nhất tương ứng ‒ Kết quả lưu vào tập tin OUTPUT.TXT sao nó ko program Nen_giainen_chuoi; var s:string;... sieu nguyen to co',N,'chu so.'); Readln; END Bài 2: Tam giác Pascal là gì? Quy luật của Tam giác Pascal rất đơn giản : bắt đầu từ hàng thứ ba, mỗi số bên trong là tổng của hai số ngay phía trên nó Ví dụ : ở hàng 3, số 2 là tổng của 1 và 1 ; hàng 4, số 3 là tổng của 2 và 1 ; hàng 5, số 6 là tổng của 3 và 3 Căn cứ theo quy luật đó, Tam giác Pascal là kéo dài đến vô hạn Ví dụ: 1 232 34543 4567654 567898765...Bài 3:Nhập vào một số nguyên không âm, kiểm tra xem nó có phải là số nguyên tố hay không? Với bài này các em viết một hàm kiểm tra tính nguyên tố của một số dương n bất kỳ, hàm trả về giấ trị True nếu N nguyên tố, ngược lại hàm trả về giá trị False Function NT(n:longint):Boolean;... ',b[i], ' lan!'); close(f); end; BEGIN clrscr; docf; xuly; readln end Bài 4 Nhập dãy số thực a và số k Xét xem trong dãy có k số dương đứng cạnh nhau hay không? Dữ liệu nhập: DUNGCANH.INP: dãy a và số k Dữ liệu xuất: DUNGCANH.OUT có xuất 1 , không có xuất 0 uses crt; var a:array[1 100] of real; k,n,j,i,s:integer; f:text; Procedure ghif; begin assign(f,'C:\DUNGCANH.INP'); reset(f); read(f,n); writeln(n);... n:=n div 10; end; write('Giai thua cua ',t,'=',sum); readln end Bài 7: (Đề thi HSG tỉnh năm 2010-2011) Dãy số Fibinaci Cho số nguyên dương N (Nsqrt(n) then kq:=true Else kq:=false; NT:=kq; End 1 Bài 4 In ra các số nguyên tố nhỏ hơn hoặc bằng N (N là số nguyên không âm được nhập từ bàn phím) Với bài tập này các em sử dụng hàm ở trên để kiểm tra các số i 2 1 Chứng minh khẳng định sau: Mọi số tự nhiên N đều có thể biểu diễn duy nhất dưới dạng tổng của một số số trong dãy số Fibonaci N = akFk + . không quá 200 chữ số. Hãy tìm cách xóa đi k chữ số khỏi xâu S nói trên để xâu S thu được biểu diễn số có giá trị nhỏ nhất. 4.Kiểu dữ liệu tập hợp Khi xử lí dữ liệu gồm các phần tử mà không. F[i]:=F[i-1]+F[i-2]; Writeln(‘So hang thu n=’,F[n]); 1 Bài 3:Nhập vào một số nguyên không âm, kiểm t ra xem nó có phải là số nguyên tố hay không? Với bài này các em viết một hàm kiểm tra tính nguyên tố. Cho kí tự in hoa ứng với ch -Pos(s1,s2): Cho vị trí xuất hiện đầu tiên của S1 trong S2, nếu s1 không có trong s2 hàm cho giá trị 0. -Insert(s1,s2,vt): Chèn xâu s1 vào xâu s2 tại vị trí vt -Delete(s,vt,n):

Ngày đăng: 17/10/2014, 11:44

Từ khóa liên quan

Mục lục

  • BÀI 1: - Số siêu nguyên tố

Tài liệu cùng người dùng

Tài liệu liên quan