1. Trang chủ
  2. » Giáo án - Bài giảng

bai tap mang 1 chieu

20 733 4

Đ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

Uses Crt ; Var a, b, c, x1, x2: real; (*================================*) Procedure Nhapabc(var aa,bb,cc: real); Begin Write('a='); Readln(aa); Write('b='); Readln(bb); Write('c='); Readln(cc); End; (*=================================*) Procedure GPTB2; Var Delta: real; Begin Delta:=sqr(b)-4*a*c; If Delta ==> ==> ==> ==> 1 ==> …… Hướng dẫn: + Viết hàm đếm số lần xuất củat giá trị X nhập vào, xem X nhà tham số cho việc đếm số lần xuất A + Viết hàm in số lần xuất hiên tất phần tử mảng, sử dụng lại hàm xây dựng trước + Xây dựng chương trình giải toán gồm: - Khai báo mảng A, N phần tử Nhập / Xuất mảng A với N phần tử (lưu ý, phải có định nghĩa hàm nhập /xuất mảng) Hai hàm sử dụng kết toán 3.1 - Nhập giá trị X cần đếm số xuất - In số lần xuất X A Ý tưởng: o Khởi tạo biến đếm ban đầu o Sử dụng vòng lặp i, lặp từ đến N o Đối với phần tử A[i], A[i] = X tăng biến đếm lên o Kết thúc, giá trị biến đếm số lần xuất cử X A - In số lần xuất phần tử A Các hàm xây dựng: { Dem so phan tu A[i] mang bang gia tri X } Function DemPtuX(Var A : Mang20; N, X : Integer) : Integer; Var i , Count : Integer; Begin Count := 0; For i:=0 to N If ( A[i] = X ) then Count := Count + 1; DemPtuX := Count; End; { Dem so lan xuat hien cua tat ca cac phan tu mang } Procedure InSoLanXHcuaPTu( A:Mang20; N: Integer); Var i :Integer; Begin For i:=0 to N Writeln( A[i] ,' ===> ', DemPtuX( A, N, A[i] ) ); End; Source code chương trình chính: BEGIN Clrscr; NhapMang1C( A, N ); XuatMang1C( A, N ); Write( 'Gia tri X:' ); Readln( X ); Writeln( 'So lan xuat hien A la:', DemPtuX(A, N, X) ); InSoLanXHcuaPTu ( A, N ); Readln; END Cải tiến: Không in phần tử lặp lại Hướng dẫn: Đối với phần tử, trước in, kiểm tra xem xuất trước hay không Nếu A[i] chưa xuất trước nó, in số lần xuất A[i] Nếu A[i] có xuất trước nó, không in số lần xuất A[i] nữa, in số lần xuất phần tử có giá trị A[i] Mở rộng: In phần tử xuất nhiều mảng Bài toán số 3.3: Tìm kiếm thay Tìm kiếm vị trí xuất x mảng A Thay giá trị Ai x thành y Ví dụ: A: 5 1 X=5 Y=15 Kết quả: Vi tri xuat hien X la Ket qua thay the: 15 15 15 1 Hướng dẫn: Xây dựng hàm tìm kiếm giá trị X mảng A, N phần tử Sử dụng vòng lặp từ đến N-1 để kiểm tra tất giá trị Ai, x trả vị trí i tìm thấy Nếu thoát vòng lặp mà không tìm thấy trả –1 Xây dựng hàm thay giá trị x y vị trí tìm thấy Tương tự tìm kiếm, tìm thấy tiến hành gán giá trị cho Ai y Xây dựng hàm thay tất giá trị x y vị trí tìm thấy Sử dụng vòng lặp duyệt qua tất giá trị Ai, Ai x tiến hành gán thành y Các hàm xây dựng: { Ham tim kiem gia tri X mang A voi N phan tu } Function TimKiem X:Integer ):Boolean; ( A:Mang20; N:Integer; Var Flag : Boolean; i:Integer; Begin Flag:=False; For i:=0 to N Begin If (A[i] = x) then Begin Flag:=True; Break; {Tim thay ==> Tra ve vi tri tim thay } End; End; TimKiem:=Flag; End; { Thay the phan tu X dau tien tim thay mang bang gia tri Y } Function ThayThe(Var A:Mang20;Var N, x, y:Integer):Integer; Var i:Integer; Begin For i:=0 to N If (A[i] = x) then Begin A[i] := y; { Tim thay x ==> thay the y } Break; { Cham dut qua trinh thay the} End; ThayThe := i; End; { Thay the tat ca cac phan tu co gia tri X tim thay bang gia tri Y } Procedure ThayTheTatCa (Var A:Mang20; Var N, x,y:Integer); Var i:Integer; Begin For i:=0 to N If(A[i] = x) then { Tim thay x ==> thay the y } A[i] := y; End; Source code chương trình BEGIN NhapMang1C(A, N); lai nua } { Ham nhap xuat khong lam XuatMang1C(A, N); { Su du let qua o truoc } Write('Gia tri x:'); Readln(x); If (TimKiem(A,N,x)) then Writeln( 'Tim thay tai vi tri mang A.', x, k ) Else Writeln( 'Khong tim thay mang A', x ); Write('gia tri y:'); Readln(y); ThayThe(A, N, x, y); Writeln('Ket qua thay the ',x, y); XuatMang1C(A, N); ThayTheTatCa(A, N, x, y); Writeln('Ket qua thay the tat ca la:',x, y); XuatMang1C(A, N); Readln; END Mở rộng: + Tìm kiếm cặp phần tử gần có tổng chia hết cho 10 Thay phần tử tổng chúng Ví dụ: A: 19 62 32 12 Ket qua: 20 20 62 40 40 12 Procedure ThayTheBangTong(Var A:Mang20; N:Integer; X, Y:Integer); Var i,k:Integer; Begin For i:=0 to N If( (A[i-1]+A[i]) mod 10 = 0) then Begin k := (A[i-1]+A[i]); A[i-1] := k; A[i] := k; End; End; Bài toán số 3.4: Kiểm tra mảng có đối xứng hay không? Kiểm tra mảng có tăng dần hay không? Mảng đối xứng mảng có phần tử Ai = AN-i-1 Nếu mảng mảng tăng dần, xếp thành mảng tăng dần Ví dụ: Mảng A: 15 7 15 Kết quả: Mang A doi xung, Mang A khong phai la mang tang Mảng A: 14 17 26 26 31 dan Kết quả: mang tang dan Mang A khong doi xung, Mang A khong phai la Hướng dẫn: + Xây dựng hàm int KtraDoiXung( A, N ) để kiểm tra tính đối xứng mảng Ý tưởng: Giả sử mảng A mảng đối xứng, sử dụng vòng lặp để tìm kiểm cặp đối xứng lại có giá trị không nhau, trả mảng không đối xứng Ngược lại không tìm thấy nên mảng mảng đối xứng + Xây dựng hàm int KtraMangTang( A, N ) để kiểm tra xem mảng A có phải mảng tăng hay không Mảng tăng mảng có phần tử đứng sau không nhỏ phần tử đứng trước Ý tưởng: Giả sử mảng A mảng tăng, sử dụng vòng lặp để kiểm tra có tồn phần tử nhỏ phần tử đứng trước hay không, có trả mảng không mảng tăng (return 0) Ngược lại không tìm thấy nên mảng mảng tăng (return 1) + Xây dựng hàm Function SxepMangTang( A, N ) để xếp mảng A thành mảng tăng dần Ý tưởng: Sử dụng vòng lặp lồng để kiểm tra hai phần tử vị trí i, j i < j mà A[i] > A[j] hoán đổi giá trị chúng + Xây dựng chương trình để thể kết đánh giá Các hàm xây dựng: { Ham kiem tra mang doi xung } Function KtraDoiXung (A:Mang20; N:Integer ) : Boolean; Var Flag:Boolean; i :Integer; Begin Flag:=True; For i :=1 to N If(A[i] A[N-i +1]) Then Flag :=False; trinh : khong doi xung } { Cham dut kiem tra, ket qua qua KtraDoiXung :=Flag; End; { Ham kiem tra mang tang } Function KtraMangTang ( A:Mang20; N :Integer) : Boolean; Var Flag : Boolean; i :Integer; Begin Flag := True; For i :=1 to N If(A[i] < A[i-1]) Then Flag :=False; trinh : khong tang } { Cham dut kiem tra, ket qua qua KtraMangTang :=Flag; End; { Thu tuc sap xep mang tang } Function SxepMangTang (A:Mang20; N:Integer ):Integer; Var i ,j,k :Integer; Begin For i :=1 to N For j :=1 to N If ( (i A[j]) ) then Begin k := A[i]; { Tien hanh hoan doi gia tri A[i] := A[j]; { cho thong qua bien A[i], A[j] } tam k } A[j] := k; End; End; Source code chương trình chính: BEGIN Clrscr; NhapMang1C(A, N); lai nua } XuatMang1C(A, N); { Ham nhap xuat khong nhac { Su dung ket qua o truoc } If ( KtraDoiXung (A, N ) ) then Writeln( ' Mang A doi xung.') Else Writeln(' Mang A khong doi xung.'); If ( KtraMangTang (A, N ) ) then Writeln( 'Mang A la mang tang ') Else Begin Writeln( 'Mang A khong phai la mang tang '); SxepMangTang( A, N ); Writeln( 'Ket qua sap sep:'); XuatMang1C(A, N); End; Readln; END Mở rộng: + Kiểm tra mảng A chứa toàn số nguyên tố? + Kiểm tra mảng giảm dần, Sắp xếp mảng giảm dần + Sắp xếp mảng A có số dương tăng dần, số âm giảm dần Function SxepDuongTangAmGiam N:Integer ); ( A[]:Mang20, Var i ,j ,k:Integer; Begin For i:=1 to N For j:=1 to N If ( ( (i A[j]) and (A[i]>0) and (A[j]>0)) or ((i

Ngày đăng: 09/05/2017, 20:39

Xem thêm: bai tap mang 1 chieu

TỪ KHÓA LIÊN QUAN

w