Your browser is no longer supported. Update it to get the best YouTube experience and our latest features. Learn more
Bài 9 Tin học lớp 8: Làm việc với dãy số. Giải câu 1, 2, 3, 4, 5, 6, 7 trang 78 . Hãy nêu các lợi ích của việc sử dụng biến mảng trong chương trình.dụng biến mảng trong chương trình…
Câu 1: Hãy nêu các lợi ích của việc sử dụng biến mảng trong chương trình.dụng biến mảng trong chương trình
Lợi ích chính của việc sử dụng biến mảng là rút gọn việc viết chương trình, có thể sử dụng câu lệnh lặp để thay nhiều câu lệnh, giúp tiết kiệm rất nhiều thời gian và công sức viết chương trình.
Ngoài ra chúng ta còn có thể lưu trữ và xử lí nhiều dữ liệu có nội dung liên quan đến nhau một cách hiệu quả.
Câu 2: Các khai báo biến mảng sau đây trong Pascal đúng hay sai:
a) var X: Array[10,13] Of Integer;
b) var X: Array[5..10.5] Of Real;
c) var X: Array[3.4..4.8] Of Integer;
d) var X: Array[10..1] Of Integer;
e) var X: Array[4..10] Of Real;
a) Sai. Phải thay dấu phẩy bằng hai dấu chấm;
b) Sai, vì chỉ số đầu và chỉ số cuối mảng phải là số nguyên;
c) Sai, vì chỉ số đầu và chỉ số cuối mảng phải là số nguyên;
d) Sai, vì giá trị đầu của chỉ số mảng phải nhỏ hơn hoặc bằng chỉ số cuối;
e) Đúng.
Câu 3: Phát biểu : “Có thể xem biến mảng là một biến được tạo từ nhiều biến có cùng kiểu, nhưng chỉ dưới một tên duy nhất. “
Phát biểu đó đúng hay sai?
Đúng. vì thực chất của mảng là nhóm những phần tử có cùng một kiểu thành một biến duy nhất có các chỉ số từ 1 cho đến n với n là độ dài của mảng
Câu 4: Câu lệnh khai báo biến mảng sau đây máy tính có thực hiện được không?
var N: integer;
A: array[1..N] of real;
Không. Giá trị nhỏ nhất và lớn nhất của chỉ số mảng phải được xác định trong phần khai báo chương trình.
Câu 5: Viết chương trình sử dụng biến mảng để nhập từ bàn phím các phần tử của 1 dãy số.Độ dài của dãy cũng được nhập từ bàn phím
uses crt;
var n,i:integer;
a:array[1..100] of integer;
begin
clrscr;
write(‘nhap so phan tu cua day:’);readln(n);
for i:=1 to n do
begin
write(‘a[‘,i,’]=’);readln(a[i]);
end;
writeln(‘day so da nhap:’);
for i:=1 to n do write(a[i]:2);
readln;
end.
Câu 6: Viết chương trình sử dụng biến mảng để giải quyết bài toán nêu ở ví dụ 1.
uses crt;
var x:array[1..100] of real;
n,i:byte;
dlc,xtb:real;
BEGIN
clrscr;
write(‘Nhap so ho gia dinh= ‘);readln(n);
xtb:=0;
for i:=1 to n do
begin
write(‘Muc thu nhap cua ho gia dinh thu ‘,i,’= ‘);
readln(x[i]);
xtb:=xtb+x[i];
end;
xtb:=xtb/n;
writeln(‘——————————————————-‘);
writeln(‘=> Thu nhap trung binh cua cac ho: ‘);
writeln(xtb:16:2);
writeln(‘——————————————————-‘);
Câu 7: Độ lệch chuẩn là một khái niệm rất quan trọng trong đánh giá dữ liệu thống kê.
Giả sử ta có bộ dữ liệu thống kê gồm n phần tử có giá trị tương ứng là x1, x2, …, xn. Kí hiệu xTB là giá trị trung bình của x1, x2, …, xn. Khi đó độ lệch chuẩn của bộ dữ liệu trên được tính theo công thức
\(\sqrt {{{\sum\nolimits_{i = 1}^n {{{\left( {{x_i} – {x_{tb}}} \right)}^2}} } \over n}}\)
(căn bậc hai của tổng các bình phương độ lệch từng phần tử so với giá trị trung bình chia cho số phần tử).
Hãy viết chương trình tính độ lệch chuẩn của dữ liêu thống kê về mức thu nhập của các hộ gia đình nêu ở Ví dụ 1(SGK tin học 8, trang73).
Lưu ý: Giá trị độ lệch chuẩn phản ánh mức độ thu nhập của các hộ gia đình trong 1 địa phương nêu ở ví dụ 1, nếu giá trị độ lệch chuẩn lớn thì mức độ phân hóa giàu nghèo của địa phương càng rõ rệt (độ chênh lệch về mức thu nhập của người giàu và người nghèo lớn).
BEGIN
xtb:=xtb/n;
writeln(‘——————————————————-‘);
writeln(‘=> Thu nhap trung binh cua cac ho: ‘);
writeln(xtb:16:2);
writeln(‘——————————————————-‘);
writeln(‘=> Do lech tung ho so voi thu nhap trung binh: ‘);
for i:=1 to n do
writeln(‘Ho ‘,i,’: ‘,x[i]-xtb:10:2);
dlc:=0;
for i:=1 to n do
dlc:=dlc+sqr(x[i]-xtb);
dlc:=sqrt(dlc/n);
writeln(‘——————————————————-‘);
writeln(‘=> Do lech chuan ve muc thu nhap cuatung ho gia dinh: ‘);
writeln(dlc:16:2);
writeln(‘——————————————————-‘);
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. |