Đếm số phần tử chẵn phần tử có giá trị là x phần tử lớn nhất có trong mảng
Tag: đếm số lần xuất hiện phần tử trong mảng pascal 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ìnhsau: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ãyd) 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ấtf) 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ìnhprogram vd1;vari,n :Byte;ta, tb, b, c, d :real;a: array[1..15] of real ;beginwrite(' nhập số lượng phần tử n ='); readln(n);Writeln('Nhap mang a: ');for i:=1 to n dobeginwrite('a[',i,']= ');readln(a[i])end;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 begint= t+1 ;tc= tc + a[i] ; {tính tổng phần tư chẵn}end;ttc = tc/t ; { trung bình phần tử chẵn} ((iBegink := A[i];{ Tien hanh hoan doi gia tri A[i], A[j]}A[i] := A[j];{ thong qua bien tam k }A[j] := k;End;End;+ Kiểm tra mảng A là một chuỗi cấp số cộng có công sai k = 5?Ví dụ: 1 6 11 16 21 26 31Function KtraMangCapSoCong (A:Mang20; N:Integer; k:Integer):Boolean;Var flag :boolean;i :Integer;Beginfor i:=1 to N doif(A[i] < > A[i-1] + k) thenflag:=false;{ Cham dut, ket qua: khong phai}KtraMangCapSoCong:=flag; {Ket qua kiem tra la mang cap so cong}End;Bài toán số 3.5: 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ầntử. Xoá phần tử ở vị trí h trong mảng A.Ví dụ: A :12X = 20 ,2 36517k=3h=2Kết quả chèn: 122 3Kết quả xoá:2 20 61220 6551717Hướng dẫ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ử).Ý tưởng thuật toán:+ 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ảithuậ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ếnViết thủ tục xoá một phần tử ở vị trí k trên mảng A (có N phần tử). Ý tưởngthuật toán:+ 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;BeginFor i:=N downto k+ 1 doA[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;BeginFor i:=k to N-1 doA[i] := A[i+1];N:=N-1;End;Source code chương trình chính:BEGINNhapMang1C(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);XoaPhanTu(A, N, h);XuatMang1C(A, N);Readln;ENDMột số bài tập lập trình PascalCreated by NgoHungVấn đề 2: Chương trình con: Thủ tục và HàmBài toán số 2.1: Viết chương trình chuyển đổi số tự nhiên N cho trước sang hệ cơ số 2 bằngviệc xây dựng hàm chuyển đổi.Hướng dẫn:-Xây dựng hàm Dec2Bin( ) chuyển đổi từ số tự nhiên sang số nhị phân.oSử dụng biến S để lưu giá trị số nhị phân của N. Khởi gán bằng 0.oTiến hành lặp chuyển đổi cơ số: Lặp trong khi mà N > 0oSoDu = số dư của N chia cho 2.N = N chia cho 2.Bổ sung chữ số SoDu vào số S thành một chữ sốTrả về kết quả cuối cùng của 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ựchiện của hàm.Chương trình:oKhai báo biến N, MoThông báo nhập, nhập giá trị cho biến NoGán giá trị M bằng kết quả trả về của hàm Dec2Bin( N )oIn thông báo về kết quả số nhị phân chuyển đổi được (giá trị của M)oGọi hàm readln trước khi kết thúc chöông trìnhProgram 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;BeginS := 0; So := n ;While ( So > 0) doBeginDu := 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 }BEGINclrscr;write( 'Nhap so N =' ); readln(N );writeln(' Dang nhi phan cua N la ', Dec2Bin(N) );readln;END.Bài toán số 2.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: USCLNKiểu dữ liệu trả về: integerTham số: 2 tham trị là int a, int bGiá 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;BeginWhile (b <> 0) doBeginSodu:= 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;BeginFor 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? }Break;{ break de thoat, luu giu lai gia tri cua k.}BSCNN:= k;End;Bài toán số 2.3: Viết hàm kiểm tra số N có phải là số nguyên tố hay không?Hướng dẫn: Khai báo hàm kiểm tra số nguyên tố có:Tên hàm: KiemtraSNTDữ liệu trả về: int, ( 0 nếu không phải là số nguyên tố, là 1 nếu là số nguyên tố )Tham số: tham trị là int N, số cần kiểm tra.Xử lý kiểm tra: Dựa trên ví dụ đã có ở phần trước.Nội dung hàm:Function KiemtraSNT( N : Integer ) : Boolean;Var flag : Boolean;i : Integer;Beginflag := True;For i := 2 to N-1 doIf ( N mod i = 0 ) then{ Khoi gan gia tri dung cho ktrSNT}{ Lap voi moi i co gia tri tu 2 den N-1}{ Kiem tra xem N co’ chia het cho i haykhong}flag:=false;{ Neu dung thi khong con la so nguyen to nua}KiemtraSNT:=flag;End;Cải tiến, không sử dụng biến phụ:Function KiemtraSN( N : Integer ) : Integer;Var i :integer;BeginFor i := 2 to N-1 do{ Lap voi moi i co gia tri tu 2 den N-1}If ( N mod i = 0 ) then{ Kiem tra xem N co’ chia het cho i haykhong}Writeln('N khongla SNT'){ Neu dung thi khong con la so nguyen to nua}ElseWriteln('N la SNT');{ N la SNT}End;Bài toán số 2.4: Viết chương trình thực hiện lần lượt các công việc sau:- Lập thủ tục nhập ba số thực dương a , b , c từ bàn phím .- Lập thủ tục kiểm tra xem ba số trên có lập thành ba cạnh của tam giác hay không ?- Viết hàm tính diện tích của tam giác .-Viết hoàn thiện chương trình chính.Chương trìnhProgram Tam_Giac;Uses crt;Var a,b,c : Integer;{ 1. Thu tuc nhap}Procedure NhapABC (Var a, b, c : Integer);BeginWrite( 'Nhap a:' ); Readln( a );Write( 'Nhap b:' ); Readln( b );Write( 'Nhap c:' ); Readln( c );End;{ 2. Ham tinh dien tich}Function Dientich( a, b, c:Integer ) : Real;Var dt,p : Real;Beginp := (a+b+c)/2;dt := sqrt(p* (p-a)*(p-b)*(p-c));Dientich := dt;End;{ 3. Thu tuc kiem tra va In kqua tinh dien tich (neu la tam giac) }Procedure KiemTra_InDienTich ( a,b,c:Integer);BeginIf ((a+b>c) and (b+c>a) and (a+c>b)) thenWriteln(' Ba canh tren tao thanh tam giac.dien tich', Dientich(a,b,c) )ElseWriteln('Ba canh tren khongtao thanh tam giac');End;{ 3. Than chuong trinh chinh }BEGINNhapABC(a,b,c);KiemTra_InDienTich (a,b,c);END.Bài toán số 2.5: Viết chương trình hoàn chỉnh thực hiện phân tích ra N ra thành các thừa sốnguyên tố.Ví dụ: N = 1260 = 2 . 2 . 3 . 3 . 5 . 7Hướng dẫn:Viết hàm nhập số N. Lưu ý, hàm nhập cần truyền tham số N theo dạng thambiến để lưu lại giá trị đã nhập vào.Viết hàm phân tích số N ra các thừa số nguyên tố và in các thừa số đó ra mànhình với ý tưởng thuật toán:Chia N cho số nguyên tố u (nhỏ nhất là 2).ooTrong khi N còn chia hết cho u thì tiến hành phân tích N với u là thừa số.Giảm N đi u lần.oNếu N không chia hết cho u, thi tăng u lên 1.oQuá trình lặp lại vớiu từng bước tăng lên 1 nếu N không chia hết cho u.N từng bước giảm xuống u lần nếu N chia hết cho u.oQuá trình lặp lại đến một mức u tăng lên và N giảm xuống để N = u, khiđó giá trị mới của N sẽ là 1.Chương trình:Program Phan_Tich_Thua_So;Uses crt;Var N : integer;{ 1. Thu tuc nhap so N. }Procedure NhapSoN( var NN : Integer );BeginNN := 0; {Gan khoi dau bang 0 de vao vong lap, vong lap dung khi nhap khac 0}While ( N = 0 ) doBeginWrite( 'Nhap N=' ); Readln(NN );End;End;{ 2. Thu tuc phan tich N ra thanh cac thua so nguyen to }Procedure PhantichSoN ( Var N1 : Integer );Var u,dem:Integer;BeginIf ( N1 > 1 ) ThenBeginu := 2; dem := 0;While ( N1 > 1 ) doIf ( N1 mod u = 0 ) ThenBegindem:=dem+1;Writeln( u);N1 := N1 div u;EndElseu:=u+1;EndElseWriteln(' Khong the phan tich duoc' );End; Xem thêm các kết quả về đếm số lần xuất hiện phần tử trong mảng pascal Nguồn : text.123docz.net Nếu bài viết bị lỗi. Click vào đây để xem bài viết gốc. |