Viết phương trình nhập mảng 1 chiều n số nguyên tính tổng các số chẵn trong mảng

Program Vidu;Uses crt;

Type Mang1C = array[1..10] of Integer; {khai báo tên mảng – cách 2}


Var A:Mang1C; {Đặt tên mảng là A}i:integer;Begin        clrscr;        Writeln('Nhap gia tri cho mang A');        For i:=1 to 10 do         Begin                Write('A[‘,i,’] = ');

                Readln(A[i]); { đọc vào giá trị cho A thứ i}

        End;        Write('Danh sach cac phan tu trong mang A: ');        For i:=1 to 10 do                Write(A[i]:5);        Readln;

End.

Lưu ý: khi nhập và xuất kết quả ra màn hình các bạn cần bắt đầu với chỉ số i từ đầu danh sách mà bạn khai báo nếu như bạn khai báo Array[1..10] mà For i:=0 to N-1 do sẽ bị lỗi ngay lập tức. Mặc dù chương trình vẫn chạy nhưng kết quả xuất ra là sai nhé.

Một số bài tập về mảng 1 chiều

Trong phần này chúng ta cùng làm một số bài tập mẫu về mảng 1 chiều. Và mình cũng viết chương trình để đáp ứng lại yêu cầu bài tập từ bạn Trương Minh Trung với bài toán: viết chương trình nhập vào mảng 1 chiều gồm n phần tử kiểu nguyên sau đó làm các thủ tục sau:

1.in ra màn hình danh sách các số chẵn

2.in ra màn hình danh sách các số lẽ

3.in ra màn hình danh sách các số 1->10

Để giải quyết bài toán chúng ta cần nhập và xuất ra mảng 1 chiều chứa n phần tử kiểu số nguyên. Sau đó gọi lần lượt các thủ tục để kiểm tra phần tử A[i] có trong mảng tùy thuộc vào yêu cầu của đề. Sử dụng mod chia lấy dư để xác định số chẵn hoặc lẽ và so sánh <= 10 để có danh sách các số từ 1 -> 10.

Đây là chương trình của bạn

Program BTMang1C;Uses crt;Const Max = 100;

Type Arr100=array[1..Max] of integer; {Khai báo mảng Arr100, có tối đa 100 phần tử}

Var N:integer;    A:Arr100;

{//Thu tuc nhap mang 1c}


Procedure NhapMang1C(Var A:Arr100;Var N:integer);Var i:integer;Begin     Write('Nhap chieu dai cua mang: ');     Readln(N);     For i:=1 to N do     Begin          Write('Nhap gt phan tu thu a[‘,i,’]=');          Readln(A[i]);

     End;

End;
{//Thu tuc xuat mang 1C}
Procedure XuatMang1C(Var A:Arr100; Var N:integer);Var i:integer;Begin     For i:= 1 to N do         Write(A[i]:5);     Writeln;End;

{//Thu tuc tim so chan}


Procedure SoChan(A:Arr100;N:integer);Var i: integer;Begin     For i:= 1 to N do        begin              If(A[i] mod 2 = 0) then                 Write(A[i]:5);        end;End;

{//Thu tuc tim so le}


Procedure SoLe(A:Arr100;N:integer);Var i:integer;Begin     For i:=1 to N do      begin         If(A[i] mod 2 = 1)   then                 Write(A[i]:5);      end;End;

{//Thu tuc in ra so nho <=10} 


Procedure NhoHon10(A:Arr100;N:integer);Var i:integer;Begin     For i:=1 to N do     begin         If (1 <= A[i]) and (A[i] <= 10)  then                 Write(A[i]:5);     end;End;

{//Phan than chuong trinh}


Begin

     Clrscr;     NhapMang1C(A,N);     XuatMang1C(A,N);     Write('Danh sach so Chan: ');     SoChan(A,N);     Writeln;     Write('Danh sach so Le: ');     SoLe(A,N);     Writeln;     Write('Danh sach cac so tu 1 -> 10: ');     NhoHon10(A,N);     Readln;

End.

Một số bài tập thêm:

1. Bài toán:

a/Đếm số lần xuất hiện của giá trị X trong mảng A.

b/ Đếm số lần xuất hiện của các phần tử trong mảng.

Ví dụ cho mảng A có các phần tử là: 10 8 8 6 1 3 1 2 1. Giá trị X:=1

a/ số lần xuất hiện của X => 3 lần

b/ 10 => 1 lần

8 => 2 lần

6 => 1 lần

1 => 3 lần

3 => 1 lần

2 => 1 lần

Như vậy đầu tiên chúng ta cần xây dựng hàm đếm số lần X xuất hiện và trả về giá trị, nếu như không có X trong mảng thì trả về giá trị = 0. Đối với câu B ta sử dụng thêm thủ tục gọi lại hàm đếm phần tử xuất hiện và in ra màn hình là xong. Như vậy chúng ta xây dựng thủ tục DemPTX và SoLanXH như sau:

Function DemPTX(Var A:Arr100; N, X:integer):Integer;Var i,dem:integer;Begin     dem:= 0;     For i:=1 to N do         if(A[i] = X) then                 dem:=dem+1;     DemPTX:=dem;End;

Procedure SolanXH(A:Arr100; N:integer);

Var i :integer;Begin     For i:=1 to N do         Writeln(A[i],’==> ‘,DemPTX(A,N,A[i]));

End;

Đồng thời bổ sung vào thân chương trình

    Write('Nhap vao so X can dem lan xuat hien');    Readln(X);    Writeln('So lan xua hien',DemPTX(A,N,X));    Writeln('So lan xuat hien cua cac phan tu');

    SolanXH(A,N);

Mặc dù chúng ta đã xây dựng thành công và có thể chạy chúng nhưng khi in tất cả các phần tử nó sẽ bị lặp lại kết quả. Để khắc phục trường hợp này bạn cần làm thêm 1 bước đó là kiểm tra xem A[i] đã được in ra trước đó hay chưa. Nếu như đã in ra rồi thì không in nữa. Cái này nâng cao để các bạn suy nghĩ thêm nhé.

2/ Tính tổng các số trong mảng A

Khá đơn giản, các bạn chỉ cần tạo hàm tính tổng sau đó dùng vòng lặp từ phần tử đầu tiên đến phần tử cuối cùng và cộng dồn chúng vào là ok.

Function TinhTong(A:Arr100; N:integer):integer;Var i,S: integer;Begin     S:=0;     For i:=1 to N do         S:=S+A[i];     TinhTong:=S;

End;

1.Pascal Nhập xuất và tính tổng các phần tử trong mảng

Nhập xuất và tính tổng các phần tử trong mảng.

Ví dụ: A: 1 5 6 7 4

Kết quả: Tong S = 23

Hướ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 thao tá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 ra cá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 A

+ Khai báo và khởi tạo toång S là 0.

+Sử 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ện của hàm.

+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ủa A.

+Gọi hàm nhập mảng để nhập mảng A, với N phần tử.

+Gọi hàm xuất mảng A, với N phần tử.

+In 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ủa việc tính tổng cho Writeln[……]

+Gọi hàm Readln[ ] trước khi kết thúc để dừng lại xem kết quả.

Chương trình:

2. Một số bài tập tính tổng với mảng 1 chiều

Bài toán 1:Nhập vào mảng 1 chiều từ bàn phím chỉ chứa được 100 phần tử có giá trị kiểu nguyên. Tính tổng các giá trị là số chẵn sau đó in ra màn hình.

Bài tập này mình cũng đã hướng dẫn trong mảng 1 chiều về cách tìm số chẵn. Cách làm như sau, xây dựng Function TongChan[Var A:Arr100;Var N:Integer]:Integer; Trong đó A:Arr100 là mảng 1 chiều có kích thước 100 phần tử và N là số phần tử của mảng mà bạn đưa vào.

1. Tạo biến S:=0 để lưu tổng chẵn ban đầu bằng 0.

2. Duyệt từ phần tử A[i] đầu tiên đến A[N] kiểm tra nếu chia dư cho 2 bằng 0 => chẵn thì S:=S+A[i].

Đơn giản chỉ có vậy thôi và dưới đây là Function của bài tập này.

Nếu như bạn muốn tính tổng các số lẻ có trong mảng 1 chiều chỉ cần sửa đoạnIf[A[i] mod 2 =0] then thànhIf[A[i] mod 2 =1] thenlà sẽ thành hàm tính tổng các số lẻ.

Bài toán 2:Cho người dùng nhập mảng 1 chiều biết mảng chỉ chứa được 100 phần tử số nguyên dương. Hãy tính tổng của mảng đều chia hết cho 4 và in kết quả ra màn hình.

Bài tập tương tự như bài ở trên các bạn chỉ cần thay đoạnIf[A[i] mod2= 0] thenthànhIf[A[i] mod4= 0] thenlà đã có thể sử dụng lại chương trình.

Nếu như có các bài toán tương tự bắt chúng ta tính tổng của các số chia hết cho 3, cho 5, cho 6 cho 7,… thì chúng ta làm sao đây? không thể ngồi viết hàng loạt các chương trình con để tính cho từng bài tập được mà các bạn chỉ cần tạo ra một chương trình con duy nhất có thể sử dụng cho tất cả các trường hợp như sau.

Chương trình đây đủ cho các bạn

  • Tải app VietJack. Xem lời giải nhanh hơn!

Câu 1: Phát biểu nào dưới đây về kiểu mảng một chiều là phù hợp?

A. Là một tập hợp các số nguyên

B. Độ dài tối đa của mảng là 255

C. Là một dãy hữu hạn các phần tử cùng kiểu

D. Mảng không thể chứa kí tự

Hiển thị đáp án

Trả lời: Mảng một chiều là một dãy hữu hạn các phần tử cùng kiểu. Mảng được đặt tên và mỗi phần tử của nó có một chỉ số. Để mô tả ta cần xác định kiểu của các phần tử và cách đánh số các phần tử của nó.

Đáp án: C

Câu 2: Để khai báo số phần tử của mảng trong PASCAL, người lập trình cần:

A. khai báo một hằng số là số phần tử của mảng

B. khai báo chỉ số bắt đầu và kết thúc của mảng

C. khai báo chỉ số kết thúc của mảng

D. không cần khai báo gì, hệ thống sẽ tự xác định

Hiển thị đáp án

Trả lời: Để khai báo số phần tử của mảng trong PASCAL [ kiểu chỉ số], người lập trình cần khai báo chỉ số bắt đầu và kết thúc của mảng. Kiểu chỉ số thường là một đoạn số nguyên liên tục có dạng n1..n2 với n1, n2 là các hằng hoặc biểu thức nguyên xác định chỉ số đầu và cuối [n1 ≤ n2].

Đáp án:  B 

Câu 3: Phát biểu nào dưới đây về chỉ số của mảng là phù hợp nhất?

A. Dùng để truy cập đến một phần tử bất kì trong mảng

B. Dùng để quản lí kích thước của mảng

C. Dùng trong vòng lặp với mảng

D. Dùng trong vòng lặp với mảng để quản lí kích thước của mảng

Hiển thị đáp án

Trả lời: Chỉ số của mảng dùng để tham chiếu [truy cập] đến một phần tử bất kì trong mảng. Cú pháp: <Tên mảng>[chỉ số];

Đáp án: A

Câu 4: Phát biểu nào sau đây về mảng là không chính xác?

A. Chỉ số của mảng không nhất thiết bắt đầu từ 1

B. Có thể xây dựng mảng nhiều chiều

C. Xâu kí tự cũng có thể xem như là một loại mảng

D. Độ dài tối đa của mảng là 255

Hiển thị đáp án

Trả lời: Chỉ số của mảng không nhất thiết bắt đầu từ 1 tùy theo người lập trình. Xâu kí tự cũng có thể xem như mảng một chiều, mỗi phần tử là một kí tự. Trong lập trình có thể xây dựng mảng nhiều chiều. Và không có giới hạn cụ thể về độ dài của mảng.

Đáp án: D

Câu 5: Thế nào là khai báo biến mảng gián tiếp?

A. Khai báo mảng của các bản ghi

B. Khai báo mảng xâu kí tự

C. Khai báo mảng hai chiều

D. Khai báo thông qua kiểu mảng đã có

Hiển thị đáp án

Trả lời: Khai báo biến mảng gián tiếp là khai báo thông qua kiểu mảng đã có. Cấu trúc khai báo mảng gián tiếp:

Type < tên kiểu mả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>;

Đáp án:D

Câu 6: Phương án nào dưới đây là khai báo mảng hợp lệ?

A. Var mang : ARRAY[0..10] OF INTEGER; 

B. Var mang : ARRAY[0..10] : INTEGER;

C. Var mang : INTEGER OF ARRAY[0..10];

D. Var mang : ARRAY[0..10] : INTEGER;

Hiển thị đáp án

Trả lời:

Cấu trúc khai báo mảng trực tiếp:

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

Trong đó:

+  Kiểu chỉ số thường là một đoạn số nguyên liên tục có dạng n1..n2 với n1, n2 là các hằng hoặc biểu thức nguyên xác định chỉ số đầu và cuối [n1 ≤ n2].

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

Đáp án: A

Câu 7: Cho khai báo mảng và đoạn chương trình như sau:

Var a : array[0..50] of real ;

k := 0 ;

for i := 1 to 50 do

if a[i] > a[k] then k := i ;

Đoạn chương trình trên thực hiện công việc gì dưới đây?

A. Tìm phần tử nhỏ nhất trong mảng;

B. Tìm phần tử lớn nhất trong mảng;

C. Tìm chỉ số của phần tử lớn nhất trong mảng

D. Tìm chỉ số của phần tử nhỏ nhất trong mảng

Hiển thị đáp án

Trả lời: ý nghĩa của câu lệnh

Var a : array[0..50] of real ; {khai báo mảng a}

k := 0 ; {gán chỉ số 0 cho k}

for i := 1 to 50 do { vòng lặp chạy từ 1 đến 50}

if a[i] > a[k] then k := i ; { kiểm tra từ phần tử thứ 2 đến phần tử 50 so sánh với phần tử đầu và đưa ra chỉ số lớn nhât}

Đáp án:C

Câu 8: Cho khai báo mảng như sau: Var a : array[0..10] of integer ;

Phương án nào dưới đây chỉ phần tử thứ 10 của mảng?

A. a[10];

B. a[10];

C. a[9];

D. a[9];

Hiển thị đáp án

Trả lời: Tham chiếu [truy cập] đến một phần tử bất kì trong mảng.

Cú pháp: Tên mảng[chỉ số];

Đáp án: A

Câu 9: Khai báo mảng hai chiều nào sau đây là sai?

A. var m : array[1..10] of array[0..9] of  integer;

B. var m : array[1..20,1..40] of real;

C. var m : array[1..9;1..9] of  integer;

D. var m : array[0..10,0..10] of char;

Hiển thị đáp án

Trả lời: Khai báo mảng hai chiều:

+ Cách 1: trực tiếp

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

+ Cách 2: gián tiếp

Type <tên kiểu mảng> : array [kiểu chỉ số hàng, kiểu chỉ số cột] of < kiểu phần tử>;

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

Đáp án: B

Câu 10: Mảng là kiểu dữ liệu biểu diễn một dãy các phần tử thuận tiện cho:

A. chèn thêm phần tử

B. truy cập đến phần tử bất kì

C. xóa một phần tử

D. chèn thêm phần tử và xóa phần tử

Hiển thị đáp án

Trả lời: Mảng là kiểu dữ liệu biểu diễn một dãy các phần tử thuận tiện cho truy cập đến phần tử bất kì. Theo cú pháp Tên mảng[chỉ số];

Đáp án: B

Xem thêm các bài Câu hỏi trắc nghiệm Tin học 11 chọn lọc, có đáp án khác:

Giới thiệu kênh Youtube VietJack

  • Hỏi bài tập trên ứng dụng, thầy cô VietJack trả lời miễn phí!

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Nhóm học tập facebook miễn phí cho teen 2k5: fb.com/groups/hoctap2k5/

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Nếu thấy hay, hãy động viên và chia sẻ nhé! Các bình luận không phù hợp với nội quy bình luận trang web sẽ bị cấm bình luận vĩnh viễn.