Bài tập kiểu mảng 1 chiều trong Pascal

1. Mảng một chiều

a. 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ó cùng kiểu. Mảng được đặt tên và mỗi phần tử mang một chỉ số.

Với mảng một chiều ta quan tâm đến:

+ Tên kiểu mảng một chiều.

+ Số lượng phần tử trong mảng.

+ Kiểu dữ liệu của phần tử.

+ Cách khai báo biến mảng.

+ Cách tham chiếu đến phần tử.

b. Khai báo mảng một chiều:

+ Khai báo trực tiếp:

Var<tên biến mảng>: array[<kiểu chỉ số>]of <kiểu phần tử>;

+ Khai báo gián tiếp:

Type <tênkiểumảng>=array[<kiểu chỉ số>] of <kiểu phần tử>;

var <tên biến mảng>: <tên kiểu mảng>;

Trong đó :

Kiểu chỉ số thường là đoạn số nguyên liên tục có dạng n1..n2, với n1 là chỉ số đầu và n2 là chỉ số cuối [n1≤n2]. Nên đánh chỉ số từ 1;

+ Kiểu phần tử là kiểu dữ liệu của các phần tử mảng.

+ Tham chiếu đến phần tử mảng ta viết :

<tên biến mảng>[chỉ số]

VD:

Tham chiếu đến phần tử thứ 20 trong mảng A ta viết A[20].

2. Các thao tác với kiểu mảng một chiều.

a. Cách nhập mảng A:

write[‘Nhap so phan tu cua mang: ’]; readln[n];

write[‘Nhap gia tri cho tung phan tu: ’];

for i:=1 to n do

    begin   

        write[‘Phan tu thu ’ , i , ‘ la: ’]; {write[‘A[‘,I,’]=’];}

        readln[A[i]];

    end;

b. Cách in mảng A ra màn hình:

writeln[‘Mang vua nhap la: ’];

for i:=1 to n do write[A[i]:4];

3. Ví dụ về mảng một chiều

Bài 1: Nhập vào một dãy số nguyên, tìm số nhỏ nhất trong dãy?

Ý tưởng: Min:=A[1]; Duyệt từ đầu dãy đến cuối dãy, so sánh các phần tử với Min, nếu A[i]<min thì min:=A[i];

Giải quyết bài toán:

Var A:array[1..200] of integer;

          I, n: byte; min:integer;

Begin

write[‘Nhap so phan tu cua mang: ’]; readln[n];

write[‘Nhap gia tri cho tung phan tu: ’];

for i:=1 to n do

    begin   

        write[‘Phan tu thu ’ , i , ‘ la: ’]; {write[‘A[‘,I,’]=’];}

        readln[A[i]];

    end;

min:=A[1]; For i:=2 to n do

                   if A[i]<min then min:=A[i];

write[‘So nho nhat trong mang :’,min];

readln;

END.

Bài 1: Nhập vào một dãy số nguyên, sắp xếp dãy thành dãy không giảm [tăng dần] theo phương pháp nổi bọt [Bubble sort]

Ý tưởng: Để sắp dãy có n phần tử, thực hiện qua n-1 lượt. Ở mỗi lượt, duyệt từ đầu dãy đến cuối dãy [cần xét ở lượt đó], cứ so sánh 2 phần tử kề nhau, nếu phần tử đứng trước lớn hơn phần tử đứng sau thì đổi chỗ chúng.

Giải quyết bài toán.

Var A:array[1..200] of integer;

          J,I, n: byte; tg:integer;

Begin

write[‘Nhap so phan tu cua mang: ’]; readln[n];

write[‘Nhap gia tri cho tung phan tu: ’];

for i:=1 to n do

    begin   

        write[‘Phan tu thu ’ , i , ‘ la: ’]; {write[‘A[‘,I,’]=’];}

        readln[A[i]];

    end;

For i:=n downto 2 do

For j:=1 to  to i-1 do

                   if A[j]>Ạ[j+1] then

begin tg:=A[j];A[j]:=A[j+1];A[j+1]:=tg;end;

writeln[‘Mang sau khi sap xep la: ’];

for i:=1 to n do write[A[i],’ ‘];

readln;

END.

Dữ liệu kiểu mảng là một tập hợp hữu hạn các phần tử có thứ tự, mọi phần tử đều có chung một kiểu dữ liệu, gọi là kiểu của phần tử. Việc sắp xếp thứ tự được thực hiện bằng cách gán cho mỗi phần tử một chỉ số. Vậy hãy tham khảo bài tập mảng 1 chiều pascal cùng với onthihsg ngay bên dưới nhé.

Mảng trong Pascal là tập hợp các phần tử cố định có cùng 1 kiểu. Mảng được sử dụng để lưu trữ tập hợp dữ liệu, nhưng sẽ hữu ích hơn nếu lưu trữ tập hợp các biến cùng loại.

Thay vì khai báo từng biến một, chẳng hạn như number1, number2, … number100, bạn có thể khai báo biến mảng thành numbers và sử dụng số [1], số [2] và …, số [100] để biểu diễn từng biến. Mảng được truy cập bởi một chỉ mục.

Mảng trong Pascal bao gồm các phần tử mảng nằm liền kề trong bộ nhớ. Địa chỉ thấp nhất tương ứng với phần tử đầu tiên và địa chỉ cao nhất tương ứng phần tử cuối.

Lưu ý nếu muốn mảng kiểu C bắt đầu từ chỉ số 0, bạn chỉ cần nhập chỉ mục đầu tiên là 0, thay vì nhập là 1.

Để khai báo một mảng trong Pascal, lập trình viên có thể khai báo kiểu, sau đó tạo các biến của mảng đó hoặc khai báo trực tiếp biến mảng.

Cấu trúc chung của khai báo mảng một chiều trong Pascal có dạng:

type

array-identifier = array[index-type] of element-type;

Trong đó:

– array-identifier: chỉ ta tên của kiểu mảng.

– index-type: xác định subscript của mảng, nó có thể là kiểu dữ liệu tích vô hướng.

– element-type: chỉ định các loại giá trị sẽ được lưu trữ.

Ví dụ:

Trong đó velocity là biến mảng của vector, có thể chứa đến 25 số thực.

Nếu bắt đầu mảng từ chỉ mục 0, khai báo có dạng như dưới đây:

Trong Pascal một mảng subscript có thể là kiểu dữ liệu vô hướng của các kiểu interger [số nguyên], Boolean, enumerated [kiểu liệt kê] hoặc subrange [kiểu miền con], ngoại trừ real [kiểu thực]. Các mảng subscript có thể có các giá trị âm.

Ví dụ:

Dưới đây là mảng subscript của kiểu character [kiểu ký tự]:

Subscript của kiểu enumerated [kiểu liệt kê]:

Trong Pascal, các mảng được khởi tạo thông qua gán hoặc bằng cách chỉ định một subscript cụ thể hoặc sử dụng vòng lặp for-do.

Ví dụ:

Phần tử trong mảng Pascal được truy cập bằng cách lập chỉ mục tên mảng. Điều này được thực hiện bằng cách đặt chỉ mục của phần tử bên trong dấu ngoặc vuông sau tên của mảng.

Ví dụ:

a: integer;

a: = alphabet[‘A’];

Lệnh trên sẽ lấy phần tử đầu tiên từ mảng có tên là alphabet và gán giá trị cho biến a.

Dưới đây là ví khác, sử dụng cả khai báo, gán và truy cập mảng:

Khi đoạn mã trên được biên dịch và thực thi, nó sẽ trả về kết quả dưới đây:

Dưới đây là tổng hợp các dạng bài tập về mảng 1 chiều trong pascal mới nhất có lời giải hãy tham khảo nhé các bạn.

Hướng dẫn:

  • Dùng biến n để lưu lượng số cần nhập.
  • Dùng mảng để lưu các số vừa nhập.
  • Cho i chạy từ n về 1 để in các số vừa nhập.

Mã chương trình:

Program mang_1;

uses crt;

var n, i: integer;

M: array[1..100] of real;

Begin

write[‘Nhap so n: ‘];readln[n];

for i:=1 to n do

Begin

write[‘M[‘,i,’]=’]; readln[M[i]];

end;

for i:= n downto 1 do write[m[i],’ ,’];

readln

end.

Hướng dẫn:

Thực hiện cộng dồn các số lẻ bằng lệnh:

if M[i] mod 2 =1 then  tong:=tong+M[i]

Mã chương trình:

Program Mang_Tong_Le;

uses crt;

var i,n:byte;

M:array[1..100] of integer;

tong:longint;

begin

write[‘Nhap so phan tu cua day: ‘];readln[n];

for i:=1 to n do

begin

write[‘M[‘,i,’]’]; readln[M[i]];

end;

tong:=0;

for i:=1 to n do if M[i] mod 2 =1 then

tong:=tong+M[i];

write[‘Tong cac so le trong day la: ‘,tong];

readln

end.

Nhận xét: Với yêu cầu của bài toán thì không cần sử dụng biến mảng vẫn giải được. Hãy thử nhé.

n= 10 [Nhập 10 phần tử]

Ví dụ: Nhập 2, 3, 4, 5, 6, 8, 7, 6, 5, 4.

k= 8 [Xoá phần tử thứ 8].

In ra: 2, 3, 4, 5, 6, 8, 7,  5, 4.

Hướng dẫn:

Xoá phần tử k bằng cách ghi đè phần tử thứ k+1 lên nó.

Mã chương trình:

Program Xoa_mang;

uses crt;

var m:array[1..100] of integer;

n,i,k:byte;

begin

Write[‘So phan tu cua day: ‘];readln[n];

for i:=1 to n do

Begin

write[‘M[‘,i,’]=’];

readln[M[i]];

end;

write[‘Nhap phan tu can xoa: ‘];readln[k];

for i:=k to n-1 do m[i]:=m[i+1];

for i:=1 to n-1 do write[m[i],’, ‘];

readln

end.

⇒ Nhận xét: Với yêu cầu của bài tập trên chỉ cần kiểm tra chỉ số khi in [VD nếu i = 8 thì không in]. Tuy nhiên trong khi sử dụng mảng để lưu dữ liệu giải toán, nhiều khi ta có nhu cầu xóa bớt hoặc chèn thêm phần tử vào dãy.

Hướng dẫn:

– Dời các phần tử từ vị trí k về sau một bước.

– Nhập giá trị cần chèn vào vị trí k.

Mã chương trình:

Program Mang_chen;

uses crt;

var M: array[1..100] of integer;

i,n,k:integer;

begin

clrscr;

write[‘Nhap : ‘];readln[n];

for i:=1 to n do

begin

write[‘M[‘,i,’]=’]; readln[M[i]];

end;

write[‘Vi tri chen: ‘];readln[k];

for i:=n+1 downto k+1 do M[i]:=M[i-1];

write[‘Nhap so can chen: ‘]; readln[M[k]];

for i:=1 to n+1 do write[M[i],’, ‘];

readln

end.

Hướng dẫn:

  • Dùng biến n để lưu lượng số cần nhập.
  • Dùng mảng để lưu các số vừa nhập.
  • Cho Min = M[1], j = 1 [Xem phần tử đầu tiên là bé nhất]
  • So sánh Min với n-1 số còn lại. Trong quá trình so sánh nếu Min > M[i] thì gán Min = M[i], j=i và tiếp tục so sánh .

Mã chương trình:

Program TIM_NHO_NHAT;

uses crt;

var n,i,nhonhat:integer;

m: array[1..100] of real;

min:real;

begin

write[‘Nhap n: ‘]; readln[n];

for i:=1 to n do

begin

write[‘M[‘,i,’]=’]; readln[m[i]];

end;

min:=m[1];

nhonhat:=1;

for i:=2 to n do if m[i]  < min then

begin

min:=m[i]; nhonhat:=i;

end;

writeln[‘phan tu nho nhat la phan tu thu’,nhonhat];

readln

end.

Mã chương trình:

Program Sap_xep_mang;

Var M: array[1..10] of integer;

i,j,n: byte;

tam: integer;

Begin

Write[‘Nhap so phan tu n:’];Readln[n];

For i:=1 to n do

Begin Write[‘M[‘,i,’]=’]; Readln[M[i]]; End;

For i:=1 to n-1 do

For j:=i+1 to n do if M[j] <=M[i] then

Begin Tam:= M[i]; M[i]:=M[j]; M[j]:=tam; End;

Write[‘Sau khi sap xep: ‘];

For i:=1 to n do Write[M[i],’;’];

Readln;

End.

Hướng dẫn:

– Sử dụng mảng M để chứa dãy n số fibonacy. Tạo lập hai phần tử đầu tiên là 1, 1.

– Cho i chạy từ 3 đến n. M [i] = M[i-1]+M[i-2].

– In n phần tử đầu tiên của mảng.

Mã chương trình:

Program Fibonacy_mang;

uses crt;

var i,n: integer;

m:array[1..100] of longint;

begin

write[‘Nhap so phan tu can in:’]; readln[n];

m[1]:=1;

m[2]:=1;

for i:=3 to n do m[i]:=m[i-1]+m[i-2];

for i:=1 to n do write[m[i],’ ,’];

readln

end.

1      1

1      2      1

1      3      3      1

1      4      6      4      1

… Hàng thứ n được xác định từ hàng n-1:

– Phần tử đầu tiên và phần tử cuối cùng đều bằng 1.

– Phần tử thứ 2 là tổng của phần tử thứ nhất và thứ 2 của hàng n-1

– Phần tử thứ k của hàng thứ n là tổng của phần tử thứ k-1 và k của hàng thứ n-1.

Thuật toán:

Bước 1: Khởi tạo một mảng một chiều  n phần tử có giá trị 0.

Bước 2: Khởi tạo giá trị cho hàng thứ nhất M[1,1] = 1.

Bước 3: – Đối với hàng thứ i tính giá trị phần tử từ phần tử thứ i + 1 xuống phần tử thứ 2: M[j]:=M[j] + M[j-1]

– In ra hàng thứ i.

Chương trình:

Program Tam_giac_Pascal_mot_chieu;

Var n,i,j: integer;

M: array[1..10] of integer;

Begin

Write[‘Nhap n: ‘]; Readln[n];

For i:= 1 to n do M[i]:=0;

M[1]:=1;

For i:=1 to n do

Begin

For j:=i+ 1 downto 2 do M[j]:=M[j]+M[j-1];

For j:=1 to i+ 1 do Write[M[j]:3];

Writeln;

End;

Readln

End.

Video liên quan

Video liên quan

Chủ đề