Bài tập mảng 1 chiều trong pascal có lời giải năm 2024

Bài tập về mảng 1 chiều trong Pascal. Cho 1 dãy số gồm n phần tử n<=15. Giá trị từng phần tử là số thực. Thực hiện các chương trình sau:a) Nhập từ bàn phím số phần tử và giá trị từng phần tử b) Tính tổng các phần tử âm của dãyc) Tính tổng và trung bình cộng của các phần tử chẵn của dãy d) Tìm phần tử có giá trị lớn nhất của dãye) Tìm phần tử có giá trị nhỏ nhất f) Sắp xếp dãy theo chiều giảm dần về giá trị của từng phần tửg) In các kết quả trên ra màn hình program vd1; var i,n :Byte; ta, tb, b, c, d :real;a: array[1.] of real ; beginwrite(' nhập số lượng phần tử n ='); readln(n); Writeln('Nhap mang a: ');for i:=1 to n do beginwrite('a[',i,']= '); end;readln(a[i]) ta:=0;for i:=1 to n do if a[i] <0 then ta= ta + a[i] ; { tính tổng âm} tc:= 0; t:=1;for i:=1 to n do if i mod 2 =0 then begin

tc= tc + a[i] ; {tính tổng phần tư chẵn}t= t+1 ; ttc = tc/t ; { trung bình phần tử chẵn}end; max:= a[1];for i=2 to n do if max < a[i] then max =a[i] ; { tìm phần tử lớn nhất} min:= a[1];for i=2 to n do if min > a[i] then min =a[i] ; { tìm phần tử nhỏ nhất} for i=2 to n dofor j=n down to i do

then beginif (a[j]> a[j-1]) b:= a[j-1] ;a[j-1]:=a[j];

end; a[j]:=b; {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]); end; writeln; {in ra theo chiều dọc mảng} end. hết nếu muốn in theo chiều ngangfor i=1 to n then begin write( 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ắm

Một số bài tập lập trình Pascal Created by NgoHung Vấn đề 3: Mảng 1 chiều

Bài toán số 3: 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 đề: - tác theo yêu cầu: 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 (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) - các giá trị A 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 i 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 o Khai báo và khởi tạo toång S là 0. o 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. - của hàm. 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 o 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. o Gọi hàm nhập mảng để nhập mảng A, với N phần tử. o Gọi hàm xuất mảng A, với N phần tử.

Write( 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; Begin S := 0; For i:=0 to N do S := S + A[i] ; TongMang1C:=S; End;

{ 5. Than chuong trinh chinh } BEGIN NhapMang1C( 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; Begin S:=0; For i:=0 to N do If(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ảng Function LaSoNT( Var N:Integer) :Integer; Var i:Integer; Begin For i:=2 to N-1do If(N mod i = 0) then return 0 Else return 1; End; Function TongSoNT(Var A : Mang20, Var N:Integer):Integer; Var S,i:Integer; Begin S:=0; For i:=0 to Ndo If ( LaSoNT( A[i] ) ) then

o Kết thúc, giá trị biến đếm là số lần xuất hiện cử X trong A.

  • 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; Begin Count := 0; For i:=0 to N do If ( A[i] = X ) then Count := 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; Begin For i:=0 to N do Writeln( A[i] ,' ===> ', DemPtuX( A, N, A[i] ) ); End;

Source code chương trình chính: BEGIN

Clrscr; 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] - đã in ra số lần xuất hiện của phần tử có giá trị bằng A[i] rồ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ì

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ảng A. Thay thế những giá trị A: Tìm kiếm và thay thế. Tìm kiếm vị trí xuất hiện của x trêni là x thành y.

Ví dụ: A: 1 5 6 7 4 1 5 5 1 1 X=5 Y= Kết quả: Vi tri xuat hien X la 1 Ket qua thay the: 1 15 6 7 4 1 15 15 1 1 Hướng dẫn: - từ 0 đến N-1 để kiểm tra tất cả các giá trị A 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ặp thoát vòng lặp mà không tìm thấy thì trả về là –1, nếu bằng x thì trả về vị trí i tìm thấy. Nếu - 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 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ựi là y.

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; Begin For i:=0 to N do If(A[i] = x) then { Tim thay x ==> thay the thanh y } A[i] := y; End;

Source code chương trình chính BEGIN NhapMang1C(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)) then Writeln( 'Tim thay tai vi tri trong mang A.', x, k ) Else Writeln( '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ử đó bằng tổng của chú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ần

Ví dụ: A: 1 19 62 7 8 32 12 Ket qua: 20 20 62 7 40 40 12 Procedure ThayTheBangTong(Var A:Mang20; N:Integer; X, Y:Integer); Var i,k:Integer; Begin For i:=0 to N do If( (A[i-1]+A[i]) mod 10 = 0) then Begin k := (A[i-1]+A[i]); A[i-1] := k; A[i] := k; End; End;

Bài toán số 3: 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?

If(A[i] <> A[N-i +1]) Then Flag :=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; Begin Flag := True; For i :=1 to N do If(A[i] < A[i-1]) Then Flag :=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; Begin For i :=1 to N do For j :=1 to N do If ( (i A[j]) ) then Begin k := 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: BEGIN Clrscr; NhapMang1C(A, N); { Ham nhap xuat khong nhac lai nua } XuatMang1C(A, N); { Su dung ket qua o truoc } If ( KtraDoiXung (A, N ) ) then Writeln( ' Mang A doi xung.') Else Writeln(' Mang A khong doi xung.'); If ( KtraMangTang (A, N ) ) then Writeln( 'Mang A la mang tang ') Else Begin Writeln( 'Mang A khong phai la mang tang. '); SxepMangTang( A, N ); Writeln( 'Ket qua sap sep:'); XuatMang1C(A, N); End; Readln; END.

Mở rộng:

KtraMangCapSoCong:=flag; {Ket qua kiem tra la mang cap so cong} End;

Bài toán số 3ử. Xoá phần tử ở vị trí h trong mảng A.: Viết thủ tục và chương trình chèn phần tử X vào vị trí k trong mảng A, N phần

Ví dụ: A : 12 2 3 6 5 17 X = 20 , k = 3 h = 2 Kết quả chèn: 12 2 3 20 6 5 17 Kết quả xoá: 12 2 20 6 5 17 Hướng dẫn:

  • Ý tưởng thuật toán: Viết thủ tục chèn một phần tử X vào vị trí k nào đó cho mảng A (có N phần tử).
  • Dịch chuyển các phần tử từ vị trí k đến N-1 lùi một vị trí, trở thành các phầntử từ vị trí k+1 đến N. Lưu ý, để tránh trường hợp các phần tử đè lên nhau, giải thuật phải tiến hành di dời các phần tử sau trước....đến các phần tử k sau.
  • Gán giá trị cho A[k] là x.
  • Tăng số lượng phần tử của A lên 1, như thế N phải được truyền theo dạngtham biến
  • thuật toán: Viết thủ tục xoá một phần tử ở vị trí k trên mảng A (có N phần tử). Ý tưởng
  • Dịch chuyển các phần tử từ vị trí k đến N-1 tiến về trước một vị trí, trở thànhcác phần tử từ vị trí k-1 đến N-2.
  • Giảm số lượng phần tử của A xuống 1, như thế N phải được truyền theodạng tham biến.

Nội dung các thủ tục chính xây dựng: { 1. Thu tuc chen phan tu } Procedure ChenPhanTu( A:Mang20;Var N : Integer; k, X:Integer); Var i :Integer;

Begin For i:=N downto k+ 1 do A[i] := A[i-1]; A[k] := X; N:=N+1; End; { 2. Thu tuc xoa phantu } Procedure XoaPhanTu( A:Mang20; Var N ,k:Integer); Var i :Integer; Begin For i:=k to N-1 do A[i] := A[i+1]; N:=N-1; End;

Source code chương trình chính: BEGIN NhapMang1C(A, N); { Ham nhap xuat khong lam lai nua } XuatMang1C(A, N); { Su du let qua o truoc } Write('Gia tri x:'); Readln(x); Write('Vi tri k,h:'); Readln(k,h); Writeln('Ket qua chen vao la:'); ChenPhanTu(A, N, k, x); XuatMang1C(A, N); Writeln('Ket qua xoa phan tu o vi tri la:', h);

Program Doi_Co_So; Uses crt; Var N:integer; { 1. Thu tuc chuyen so tu nhien n cho truoc sang ket qua tra ve he co so 2 } Function Dec2Bin ( n:integer ):integer; Var S,So,Du:integer; Begin S := 0; So := n ; While ( So > 0) do Begin Du := So mod 2 ; So := So div 2 ; S := S * 10 + Du; End; Dec2Bin:= S ; End;

{ 2. Than chuong trinh chinh dap ung yeu cau bai toan } BEGIN clrscr; write( 'Nhap so N =' ); readln(N ); writeln(' Dang nhi phan cua N la ', Dec2Bin(N) ); readln; END.

Bài toán số 2: Viết các hàm USCLN(a, b) và BSCNN(a, b). Hướng dẫn: Khai báo hàm USCLN có: Tên hàm: USCLN Kiểu dữ liệu trả về: integer Tham số: 2 tham trị là int a, int b Giá trị trả về: chính là giá trị ước số chung lớn nhất của a và b. Xử lý tìm USCLN, BSCNN: Dựa trên ví dụ đã có ở phần trước. Nội dung hàm: Function USCLN( a, b : Integer) : Integer; Var Sodu:integer; Begin While (b <> 0) do Begin Sodu:= a mod b; a := b; b := Sodu; End; USCLN := a; End; {Tuong tu ham BSCNN(a, b : Integer)} Function BSCNN( a, b : Integer) : Integer; Var k :integer; Begin For k := a to a*b do { Lap voi moi i co gia tri tu a den 1} If ((k mod a = 0) and ( k mod b = 0)) then { Kiem tra a, b cung chia het cho k? }