Cách Khai Báo Mảng Trong Pascal

23/01/2014 kakashipro Kiến thức Pascal 0

Nội dung chính Show
  • DỮ LIỆU KIỂU MẢNG (ARRAY)
  • I. KHAI BÁO MẢNG
  • II. XUẤT NHẬP TRÊN DỮ LIỆU KIỂU MẢNG
  • BÀI TẬP MẪU
  • BÀI TẬP TỰ GIẢI
  • Có thể bạn quan tâm:
  • Leave a Reply Cancel reply
  • Video liên quan

DỮ LIỆU KIỂU MẢNG (ARRAY)

I. KHAI BÁO MẢNG

Cú pháp:TYPE = ARRAY [chỉ số] OF ;VAR :;hoặc khai báo trực tiếp:VAR : ARRAY [chỉ số] OF ;Ví dụ:TYPE Mangnguyen = Array[1..100] of Integer;Matrix = Array[1..10,1..10] of Integer;MangKytu = Array[Byte] of Char;VAR A: Mangnguyen;M: Matrix;C: MangKytu;hoặc:VAR A: Array[1..100] of Integer;C: Array[Byte] of Char;

II. XUẤT NHẬP TRÊN DỮ LIỆU KIỂU MẢNG

- Để truy cập đến phần tử thứ k trong mảng một chiều A, ta sử dụng cú pháp: A[k].

- Để truy cập đến phần tử (i,j) trong mảng hai chiều M, ta sử dụng cú pháp: M[i,j].

- Có thể sử dụng các thủ tục READ(LN)/WRITE(LN) đối với các phần tử của biến kiểu mảng.

BÀI TẬP MẪU

Bài tập 5.1: Viết chương trình tìm giá trị lớn nhất của một mảng chứa các số nguyên gồm N phần tử.

Ý tưởng:- Cho số lớn nhất là số đầu tiên: Max:=a[1].- Duyệt qua các phần tử a[i], với i chạy từ 2 tới N: Nếu a[i]>Max thì thay Max:=a[i];

Uses Crt; Type Mang = ARRAY[1..50] Of Integer; Var A:Mang; N,i,Max:Integer; Begin {Nhập mảng} Write(Nhap N=); Readln(N); For i:=1 To N Do Begin Write(A[,i,]=); Readln(A[i]); End; {Tìm phần tử lớn nhất} Max:=A[1]; For i:=2 To N Do If Max<A[i] Then Max:=A[i]; {In kết quả ra màn hình} Writeln(Phan tu lon nhat cua mang: , Max); Readln; End.

Bài tập 5.2: Viết chương trình tính tổng bình phương của các số âm trong một mảng gồm N phần tử.Ý tưởng:Duyệt qua tất cả các phần tử A[i] trong mảng: Nếu A[i]A[j] thì đổi chổ A[i], A[j].

Uses Crt; Type Mang = ARRAY[1..50] Of Integer; Var A:Mang; N,i,j,Tam:Integer; Begin {Nhập mảng} Write(Nhap N=); Readln(N); For i:=1 To N Do Begin Write(A[,i,]=); Readln(A[i]); End; {Sắp xếp} For i:=1 To N-1 Do For j:=i+1 To N Do If A[i]>A[j] Then Begin Tam:=A[i]; A[i]:=A[j]; A[j]:=Tam; End; {In kết quả ra màn hình} Writeln(Ket qua sau khi sap xep:); For i:=1 To N Do Write(A[i]:5); Readln; End.

Bài tập 5.4: Viết chương trình nhập vào một mảng A gồm N số nguyên và nhập thêm vào một số nguyên X. Hãy kiểm tra xem phần tử X có trong mảng A hay không?Ý tưởng:Dùng thuật toán tìm kiếm tuần tự. So sánh x với từng phần tử của mảng A. Thuật toán dừng lại khi x=A[i] hoặc i>N.Nếu x=A[i] thì vị trí cần tìm là i, ngược lại thì kết quả tìm là 0 (không tìm thấy).

Uses Crt; Type Mang = ARRAY[1..50] Of Integer; Var A:Mang; N,i,x:Integer; Function TimKiem(x, N: Integer; A:Mang):Integer; Var i:Integer; Begin I:=1; While (I <= N) and (X<>A[I]) do I:=I+1; If I <= N Then Timkiem:=I Else Timkiem:=0; End; Begin {Nhập mảng} Write(Nhap N=); Readln(N); For i:=1 To N Do Begin Write(A[,i,]=); Readln(A[i]); End; Write(Nhap X=); Readln(x); {Kết quả tìm kiếm} If TimKiem(X,N,A)<>0 Then Writeln(Vi tri cua X trong mang la:, TimKiem(X,N,A)) Else Writeln(X khong co trong mang.); Readln; End.

Bài tập 5.5: Giả sử mảng A đã được sắp xếp theo thứ tự tăng dần. Viết hàm để kiểm tra xem phần tử X có trong mảng A hay không?Ý tưởng:So sánh x với phần tử ở giữa mảng A[giua]. Nếu x=A[giua] thì dừng (vị trí cần tìm là chỉ số của phần tử giữa của mảng). Ngược lại, nếu x>A[giua] thì tìm ở đoạn sau của mảng [giua+1,cuoi], ngược lại thì tìm ở đoạn đầu của mảng [dau,giua-1].Sau đây là hàm cài đặt cho thuật toán này:

Function TimKiemNhiPhan(X, N: Integer; A: Mang):Integer; Var dau,cuoi,giua:Integer; Found:Boolean; Begin dau:=1; {điểm mút trái của khoảng tìm kiếm} cuoi:=N; {điểm mút phải của khoảng tìm kiếm} Found:=False; {chưa tìm thấy} While (dau <=cuoi) and (Not Found) Do Begin giua:=(dau + cuoi) Div 2; If X = A[giua] Then Found:=True {đã tìm thấy} Else If X > A[giua] Then dau:=giua+1 Else cuoi:=giua-1; End; If Found Then TimKiemNhiPhan:= giua Else TimKiemNhiPhan:=0; End;

Bài tập 5.6: Viết chương trình tìm ma trận chuyển vị của ma trận A.Ý tưởng:Dùng mảng 2 chiều để lưu trữ ma trận. Gọi B là ma trận chuyển vị của ma trận A, ta có: Bij = Aji.

Uses Crt; Type Mang = ARRAY[1..10,1..10] Of Integer; Var A,B:Mang; m,n,i,j:Integer; Begin {Nhập ma trận} Write(Nhap số dòng m=); Readln(m); Write(Nhap số cột n=); Readln(n); For i:=1 To m Do For j:=1 To n Do Begin Write(A[,i,j,]=); Readln(A[i,j]); End; {Tìm ma trận chuyển vị} For i:=1 To m Do For j:=1 To n Do B[i,j]:=A[j,i]; {In ma trận chuyển vị ra màn hình} For i:=1 To m Do Begin For j:=1 To n Do Write(B[i,j]:5); Writeln; End; Readln; End.

Bài tập 5.7: Cho một mảng 2 chiều A cấp mxn gồm các số nguyên và một số nguyên x. Viết chương trình thực hiện các công việc sau:a/ Đếm số lần xuất hiện của x trong A và vị trí của chúng.b/ Tính tổng các phần tử lớn nhất của mỗi dòng.

Uses Crt; Type Mang = ARRAY[1..10,1..10] Of Integer; Var A:Mang; m,n,i,j,x,dem,S,max:Integer; Begin {Nhập ma trận} Write(Nhap số dòng m=); Readln(m); Write(Nhap số cột n=); Readln(n); For i:=1 To m Do For j:=1 To n Do Begin Write(A[,i,j,]=); Readln(A[i,j]); End; {Nhập x} Write(Nhap x=); Readln(x); {Đếm số lãn xuất hiện của x và vị trí của x} dem:=0; Writeln(Vi tri cua x trong mang A: ); For i:=1 To m Do For j:=1 To n Do If x=A[i,j] Then Begin Write(i,j, ; ); dem:=dem+1; End; Writeln(So lan xuat hien cua x trong mang A la: ,dem); {Tính tổng các phần tử lớn nhất của mỗi dòng} S:=0; For i:=1 To m Do {duyệt qua từng dòng} Begin {Tìm phần tử lớn nhất của dòng thứ i} Max:=A[i,1]; For j:=2 To n Do {duyệt từng phần tử của dòng thứ i} If max<A[i,j] Then max:=A[i,j]; {Cộng max vào biến S} S:=S+max; End; Writeln(Tong cac phan tu lon nhat cua moi dong la: ,S); Readln; End.

Bài tập 5.8: Giải phương trình bằng phương pháp chia nhị phân.Ý tưởng:Giả sử cần tìm nghiệm của phương trình f(x)=0 trên đoạn [a,b] với y=f(x) đồng biến và đơn trị trên đoạn [a,b]. Ta giải như sau:

Gọi m là trung điểm của đoạn [a,b]. Nếu f(m)*f(a)

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