Bài Tập Về Mảng 1 Chiều Trong Pascal - Tài Liệu Text - 123doc

Tải bản đầy đủ (.doc) (46 trang)
  1. Trang chủ
  2. >>
  3. Công Nghệ Thông Tin
  4. >>
  5. Kỹ thuật lập trình
Bài tập về mảng 1 chiều trong Pascal

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (232.39 KB, 46 trang )

Bài tập về mảng 1 chiều trong Pascal.Cho 1 dãy số gồm n phần tử n a[j-1])then beginb:= a[j-1] ;a[j-1]:=a[j];a[j]:=b;end;{sắp xếp các phần tử giảm dần về giá trị}for i=1 to n then beginwrite( a[i]);writeln;end;{in ra theo chiều dọc mảng}end.hếtnếu muốn in theo chiều ngangfor i=1 to n then beginwrite( a[i]);write(' '); { dấu cách giữa 2 giấu ' }end;có gì sai sót thì bạn sửa nhe như khai báo các biến ấy có thể thiếu. cái này học hồi 11nên không nhớ rõ lắmMột số bài tập lập trình PascalCreated by NgoHungVấn đề 3: Mảng 1 chiềuBài toán số 3.1: Nhập xuất và tính tổng các phần tử trong mảng.Ví dụ: A:1 5 6 7 4Kết quả:Tong S = 23Hướng dẫn: Để giải quyết bài toán cần phải đảm bảo các vấn đề:Nhập mảng, có thể xây dựng thành hàm để đóng gói và sử dụng lại. Các thaotác theo yêu cầu:(1) Nhập số N.(2) Tiến hành lặp (từ 0 đến N-1) và nhập cho các giá trị Ai trong mảng.Lưu ý: N phải được vào truyền theo dạng tham biến (tức là &N)Xuất mảng. Công việc đơn giản là sử dụng voøng lặp từ 0 đến N-1 để in racác giá trị Ai cho mảng. Sau đó, Writeln xuống dòng.-Hàm tính tổng các phần tử cho một mảng AoKhai báo và khởi tạo toång S là 0.oSử dụng một vòng lặp (từ 0 đến N-1 để duyệt qua tất cả các giá trị Ai) đểtính cộng dồn giá trị của Ai vào tổng S.Viết thân chöông trình chính với nội dung dùng để kiểm tra kết quả thực hiệncủa hàm.oA.Khai báo mảng A có tối đa 20 phần tử và biến N chỉ số lượng phần tử củaoGọi hàm nhập mảng để nhập mảng A, với N phần tử.oGọi hàm xuất mảng A, với N phần tử.oIn giá trị của tổng các phần tử bằng cách truyền trực tiếp giá trị trả về củaviệc tính tổng cho Writeln(……)oGọi hàm Readln( ) trước khi kết thúc để dừng lại xem kết quả.Chương trình:{ 1. Cac khai bao cho chuong trinh}Program Mang1C;Uses crt;TypeMang20 = array[1..20] of Integer;VarN:Integer;A:Mang20;{ 2. Thu tuc nhap mang A voi N la so phan tu }Procedure NhapMang1C(Var A : Mang20 ;Var N:Integer);Var i: Integer;BeginWrite( 'So luong phan tu:' );Readln( N);For i:=0 to N doBeginWrite( 'Nhap phan tu thu ', i,'' );Readln( A[i] );End;End;{ 3. Thu tuc xuat mang A voi N la so phan tu }Procedure XuatMang1C( Var A : Mang20;Var N :Integer );Var i:Integer;BeginFor i :=0 to N doWrite( A[i]:2 );Writeln;End;{ 4. Chuong trinh con tinh tong cac phan tu trong mang }Function TongMang1C( A : Mang20; N:Integer):longint;Var i :Integer;S :longint;BeginS := 0;For i:=0 to N doS := S + A[i] ;TongMang1C:=S;End;{ 5. Than chuong trinh chinh }BEGINNhapMang1C( A, N );XuatMang1C( A, N );Writeln(' Tong cac phan tu trong mang ', TongMang1C(A, N) );Readln;END.Bài toán tương tự:(1) Tính tổng các số nguyên dương chia hết cho 5.Function TongSoChiaHet5( A:Mang20, N:Integer):Integer;Var S,i :Integer;BeginS:=0;For i:=0 to N doIf(A[i] mod 5=0)S := S+A[i];TongSoChiaHet5:= S;End;(2) Tính tổng các số nguyên tố trong mảngFunction LaSoNT( Var N:Integer) :Integer;Var i:Integer;BeginFor i:=2 to N-1doIf(N mod i = 0) thenreturn 0Elsereturn 1;End;Function TongSoNT(Var A : Mang20, Var N:Integer):Integer;Var S,i:Integer;BeginS:=0;For i:=0 to NdoIf ( LaSoNT( A[i] ) ) thenS :=S+ A[i];TongSoNT :=S;End;Bài toán số 3.2: Đếm số lần xuất hiện của giá trị X trong mảng A. Đếm số lần xuất hiện của cácphần tử trong mảng.Ví dụ: A:1 5 6 7 4 1 5 5 1 1X:6Kết quả:So lan xuat hien X la 1So lan xuat hien cua cac phan tu:1 ==> 45 ==> 36 ==> 17 ==> 14 ==> 11 ==> 4…….Hướng dẫn:+ Viết hàm đếm số lần xuất hiện củat một giá trị X nào đó được nhập vào, và xem nhưX nhà là tham số cho việc đếm số lần xuất hiện của nó trong A+ Viết hàm in ra số lần xuất hiên của tất cả các phần tử trong 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 quyết bài toán trê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àmnhập /xuất mảng).Hai hàm này được sử dụng kết quả của bài toán 3.1-Nhập giá trị X cần đếm số là xuất hiện.-In số lần xuất hiện của X trong A. Ý tưởng:oKhởi tạo biến đếm ban đầu là 0.oSử dụng vòng lặp i, lặp từ 1 đến N.oĐối với mỗi phần tử A[i], nếu A[i] = X thì tăng biến đếm lên 1Kết thúc, giá trị biến đếm là số lần xuất hiện cử X trong A.o-In số lần xuất hiện của các phần tử trong A.Các hàm xây dựng:{ 1. Dem so phan tu A[i] trong mang bang gia tri X}Function DemPtuX(Var A : Mang20; N, X : Integer) : Integer;Var i , Count : Integer;BeginCount := 0;For i:=0 to N doIf ( A[i] = X ) thenCount := Count + 1;DemPtuX := Count;End;{ 2. Dem so lan xuat hien cua tat ca cac phan tu trong mang }Procedure InSoLanXHcuaPTu( A:Mang20; N: Integer);Var i :Integer;BeginFor i:=0 to N doWriteln( A[i] ,' ===> ', DemPtuX( A, N, A[i] ) );End;Source code chương trình chính:BEGINClrscr;NhapMang1C( A, N );XuatMang1C( A, N );Write( 'Gia tri X:' );Readln( X );Writeln( 'So lan xuat hien trong A la:', DemPtuX(A, N, X) );InSoLanXHcuaPTu ( A, N );Readln;END .Cải tiến: Không in ra các phần tử được lặp lại.Hướng dẫn: Đối với mỗi phần tử, trước khi in, kiểm tra xem nó xuất hiện trước nó hay không.-Nếu A[i] chưa xuất hiện trước nó, thì in ra số lần xuất hiện của A[i]Nếu A[i] có xuất hiện trước nó, thì không in ra số lần xuất hiện của A[i] nữa, vìđã in ra số lần xuất hiện của phần tử có giá trị bằng A[i] rồi.Mở rộng: In ra phần tử xuất hiện ít nhất và nhiều nhất trong mảng.Bài toán số 3.3: Tìm kiếm và thay thế. Tìm kiếm vị trí xuất hiện của x trênmảng A. Thay thế những giá trị Ai là x thành y.Ví dụ: A:1 5 6 7 4 1 5 5 1 1X=5Y=15Kết quả:Vi tri xuat hien X la 1Ket qua thay the: 1 15 6 7 4 1 15 15 1 1Hướng dẫn:Xây dựng hàm tìm kiếm giá trị X trong mảng A, N phần tử. Sử dụng vòng lặptừ 0 đến N-1 để kiểm tra tất cả các giá trị A i, nếu bằng x thì trả về vị trí i tìm thấy. Nếuthoát vòng lặp mà không tìm thấy thì trả về là –1.Xây dựng hàm thay thế giá trị x bằng y tại vị trí tìm thấy đầu tiên. Tương tựnhư tìm kiếm, nhưng khi tìm thấy thì tiến hành gán giá trị mới cho A i là y.Xây dựng hàm thay thế tất cả các giá trị x bằng y tại mỗi vị trí tìm thấy. Sửdụng vòng lặp duyệt qua tất cả các giá trị của A i, nếu Ai bằng x thì tiến hành gánthành y.Các hàm xây dựng:{ 1. Ham tim kiem gia tri X trong mang A voi N phan tu}Function TimKiem ( A:Mang20; N:Integer; X:Integer ):Boolean;Var Flag : Boolean;i:Integer;BeginFlag:=False;For i:=0 to N doBeginIf (A[i] = x) thenBeginFlag:=True;Break;{Tim thay ==> Tra ve vi tri tim thay }End;End;TimKiem:=Flag;End;{ 2. Thay the phan tu X dau tien tim thay trong mang bang gia tri YFunction ThayThe(Var A:Mang20;Var N, x, y:Integer):Integer;Var i:Integer;BeginFor i:=0 to N doIf (A[i] = x) thenBegin}A[i] := y;{ Tim thay x ==> thay the thanh y }Break;{ Cham dut qua trinh thay the}End;ThayThe := i;End;{ 3. 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;BeginFor i:=0 to N doIf(A[i] = x) then{ Tim thay x ==> thay the thanh y }A[i] := y;End;Source code chương trình chínhBEGINNhapMang1C(A, N);{ Ham nhap xuat khong lam lai nua }XuatMang1C(A, N);{ Su du let qua o truoc }Write('Gia tri x:'); Readln(x);If (TimKiem(A,N,x)) thenWriteln( 'Tim thay tai vi tri trong mang A.', x, k )ElseWriteln( 'Khong tim thay trong 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ác cặp 2 phần tử gần nhau có tổng chia hết cho 10. Thay thế các phầntử đó bằng tổng của chúng.Ví dụ: A: 1 19 62 78 32 12Ket qua: 20 20 62 740 40 12Procedure ThayTheBangTong(Var A:Mang20; N:Integer; X, Y:Integer);Var i,k:Integer;BeginFor i:=0 to N doIf( (A[i-1]+A[i]) mod 10 = 0) thenBegink := (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 là mảng có phần tử Ai = AN-i-1Nếu mảng không phải là mảng tăng dần, hãy sắp xếp nó thành mảng tăng dần.Ví dụ: Mảng A:1 15 6 7 4 7 6 15 1Kết quả:Mang A doi xung, Mang A khong phai la mang tang danMảng A:2 5 6 7 14 17 26 26 31Kết quả:Mang A khong doi xung, Mang A khong phai la mang tang danHướng dẫn:+ Xây dựng hàm int KtraDoiXung( A, N ) để kiểm tra tính đối xứng của mảng. Ý tưởng:Giả sử mảng A là mảng đối xứng, sử dụng vòng lặp để tìm kiểm một cặp đối xứng bất kỳ nhưnglại có giá trị không bằng nhau, khi đó trả về là mảng không đối xứng . Ngược lại là không tìm thấynên mảng là 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 là mảngtăng hay không. Mảng tăng là mảng có các phần tử đứng sau không nhỏ hơn phần tử đứngtrước nó. Ý tưởng: Giả sử mảng A là mảng tăng, sử dụng vòng lặp để kiểm tra có tồn tại phần tửnào nhỏ hơn phần tử đứng trước nó hay không, nếu có thì trả về là mảng không không phải làmảng tăng (return 0). Ngược lại là không tìm thấy nên mảng là mảng tăng (return 1).+ Xây dựng hàm Function SxepMangTang( A, N ) để sắp xếp mảng A thành mảng tăngdần. Ý tưởng: Sử dụng 2 vòng lặp lồng nhau để kiểm tra hai phần tử tại vị trí i, j nếu i < jmà A[i] > A[j] thì hoán đổi giá trị của chúng.+ Xây dựng chương trình để thể hiện kết quả đánh giá trên.Các hàm xây dựng:{ 1. Ham kiem tra mang doi xung }Function KtraDoiXung (A:Mang20; N:Integer ) : Boolean;Var Flag:Boolean;i :Integer;BeginFlag:=True;For i :=1 to N doIf(A[i] A[N-i +1]) ThenFlag :=False;{ Cham dut kiem tra, ket qua qua trinh : khong doi xung }KtraDoiXung :=Flag;End;{ 2. Ham kiem tra mang tang }Function KtraMangTang ( A:Mang20; N :Integer) : Boolean;Var Flag : Boolean;i :Integer;BeginFlag := True;For i :=1 to N doIf(A[i] < A[i-1]) ThenFlag :=False;{ Cham dut kiem tra, ket qua qua trinh : khong tang }KtraMangTang :=Flag;End;{ 3. Thu tuc sap xep mang tang }Function SxepMangTang (A:Mang20; N:Integer ):Integer;Var i ,j,k :Integer;BeginFor i :=1 to N doFor j :=1 to N doIf ( (i<j) and (A[i] > A[j]) ) thenBegink := A[i];{ Tien hanh hoan doi gia tri A[i], A[j] }A[i] := A[j];{ cho nhau thong qua bien tam k }A[j] := k;End;End;Source code chương trình chính:BEGINClrscr;NhapMang1C(A, N);{ Ham nhap xuat khong nhac lai nua }XuatMang1C(A, N);{ Su dung ket qua o truoc }If ( KtraDoiXung (A, N ) ) thenWriteln( ' Mang A doi xung.')ElseWriteln(' Mang A khong doi xung.');If ( KtraMangTang (A, N ) ) thenWriteln( 'Mang A la mang tang ')ElseBeginWriteln( '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ỉ chứa toàn những 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ó các số dương tăng dần, các số âm giảm dần.Function SxepDuongTangAmGiam ( A[]:Mang20, N:Integer );Var i ,j ,k:Integer;BeginFor i:=1 to N doFor j:=1 to N doIf ( ( (i<j)and (A[i] > A[j]) and (A[i]>0) and (A[j]>0)) or((ic) and (b+c>a) and (a+c>b)) thenWriteln(' Ba canh tren tao thanh tam giac.dien tich', Dientich(a,b,c) )ElseWriteln('Ba canh tren khongtao thanh tam giac');End;{ 3. Than chuong trinh chinh }BEGINNhapABC(a,b,c);KiemTra_InDienTich (a,b,c);END.Bài toán số 2.5: Viết chương trình hoàn chỉnh thực hiện phân tích ra N ra thành các thừa sốnguyên tố.Ví dụ: N = 1260 = 2 . 2 . 3 . 3 . 5 . 7Hướng dẫn:Viết hàm nhập số N. Lưu ý, hàm nhập cần truyền tham số N theo dạng thambiến để lưu lại giá trị đã nhập vào.Viết hàm phân tích số N ra các thừa số nguyên tố và in các thừa số đó ra mànhình với ý tưởng thuật toán:Chia N cho số nguyên tố u (nhỏ nhất là 2).ooTrong khi N còn chia hết cho u thì tiến hành phân tích N với u là thừa số.Giảm N đi u lần.oNếu N không chia hết cho u, thi tăng u lên 1.oQuá trình lặp lại vớiu từng bước tăng lên 1 nếu N không chia hết cho u.N từng bước giảm xuống u lần nếu N chia hết cho u.oQuá trình lặp lại đến một mức u tăng lên và N giảm xuống để N = u, khiđó giá trị mới của N sẽ là 1.Chương trình:Program Phan_Tich_Thua_So;Uses crt;Var N : integer;{ 1. Thu tuc nhap so N. }Procedure NhapSoN( var NN : Integer );BeginNN := 0; {Gan khoi dau bang 0 de vao vong lap, vong lap dung khi nhap khac 0}While ( N = 0 ) doBeginWrite( 'Nhap N=' ); Readln(NN );End;End;{ 2. Thu tuc phan tich N ra thanh cac thua so nguyen to }Procedure PhantichSoN ( Var N1 : Integer );Var u,dem:Integer;BeginIf ( N1 > 1 ) ThenBeginu := 2; dem := 0;While ( N1 > 1 ) doIf ( N1 mod u = 0 ) ThenBegindem:=dem+1;Writeln( u);N1 := N1 div u;EndElseu:=u+1;EndElseWriteln(' Khong the phan tich duoc' );End;

Tài liệu liên quan

  • thuat toan ve mang 1 chieu thuat toan ve mang 1 chieu
    • 39
    • 1
    • 16
  • BÀI TẬP VỀ MẢNG MỘT CHIỀU BÀI TẬP VỀ MẢNG MỘT CHIỀU
    • 7
    • 21
    • 529
  • BÀI TẬP VỀ MẢNG 1 CHIỀU(TT) BÀI TẬP VỀ MẢNG 1 CHIỀU(TT)
    • 17
    • 4
    • 54
  • Gián án Các bài tập hay về mảng 1 chiều Gián án Các bài tập hay về mảng 1 chiều
    • 9
    • 6
    • 239
  • Bài tập về mạng vinaren pdf Bài tập về mạng vinaren pdf
    • 26
    • 1
    • 3
  • BAI GIANG HAY VE MANG 1 CHIEU pptx BAI GIANG HAY VE MANG 1 CHIEU pptx
    • 47
    • 950
    • 3
  • bài tập về mạng máy tính bài tập về mạng máy tính
    • 10
    • 987
    • 0
  • BÀI 11: KIỂU MẢNG 1 CHIỀU BÀI 11: KIỂU MẢNG 1 CHIỀU
    • 17
    • 743
    • 1
  • 110 bai tap ve phep to do trong mat phang tSy 110 bai tap ve phep to do trong mat phang tSy
    • 44
    • 659
    • 4
  • bài tập dòng điện xoay chiều trong đề thi đại học bài tập dòng điện xoay chiều trong đề thi đại học
    • 15
    • 1
    • 0

Tài liệu bạn tìm kiếm đã sẵn sàng tải về

(215.5 KB - 46 trang) - Bài tập về mảng 1 chiều trong Pascal Tải bản đầy đủ ngay ×

Từ khóa » Gán Giá Trị Cho Mảng Trong Pascal