tìm số lập (lập trình pascal)

Liên hệ QC

mhoa1806

Thành viên mới
Tham gia
22/1/21
Bài viết
1
Được thích
2
tìm số lặp
viết chương trình nhập vào từ bàn phím N số tự nhiên (với 10<=N<=40).Xuất ra màn hình số có số lần xuất hiện nhiều nhất và số lần xuất hiện tương ứng.
lưu ý: trong trường hợp có nhiều kết quả đúng theo yêu cầu thì in ra kết quả cửa sổ có giá trị lớn nhất
GIÚP MÌNH VỚI CÁC THÀNH VIÊN!!!:(
 
tìm số lặp
viết chương trình nhập vào từ bàn phím N số tự nhiên (với 10<=N<=40).Xuất ra màn hình số có số lần xuất hiện nhiều nhất và số lần xuất hiện tương ứng.
lưu ý: trong trường hợp có nhiều kết quả đúng theo yêu cầu thì in ra kết quả cửa sổ có giá trị lớn nhất
GIÚP MÌNH VỚI CÁC THÀNH VIÊN!!!:(
Ngày trước mình cũng từ Pascal mà thích vẽ vời viết hàm rồi viết code. Cơ mà lâu quá không đụng, quên hết cấu trúc câu lệnh rồi.
 
tìm số lặp
viết chương trình nhập vào từ bàn phím N số tự nhiên (với 10<=N<=40).Xuất ra màn hình số có số lần xuất hiện nhiều nhất và số lần xuất hiện tương ứng.
Bạn tham khảo nhé: (nguồn: Google)
Mã:
program no_1;
uses crt;
var a,d,b,c:array[1..100] of integer;
var i,n,j,t,s,k,tg,th,id:integer;
kt:boolean;
begin
clrscr;
kt:=true;
write('Nhap n la:');readln(n);
for i:=1 to n do
    begin
    write('a[',i,']=');
    readln(a[i]);
    end;
for i:=1 to n do
d[i]:=1;
for i:=1 to n-1 do
begin
j:=i+1;
while j<=n do
if a[i]=a[j] then begin
             for k:=j to n do
             a[k]:=a[k+1];
             n:=n-1;
             d[i]:=d[i]+1;
             end else j:=j+1;
if d[i]>1 then b[i]:=d[i];
end;
for i:=1 to n-1 do
for j:=i+1 to n do
if b[i]<b[j] then
   begin
   tg:=b[i];
   b[i]:=b[j];
   b[j]:=tg;
   th:=a[i];
   a[i]:=a[j];
   a[j]:=th;
   end;
k:=0;
if n=1 then writeln('Phan tu xuat hien nhieu nhat la: ',a[1]) else
if b[1]=b[n] then
writeln('Cac phan tu xuat hien bang nhau va xuat hien ',b[n],' lan') else
  begin
  for i:=1 to n do
  if b[1]=b[i] then k:=k+1;
  Writeln('Co ',k,' phan tu xuat hien nhieu nhat va xuat hien ',k,' lan');
  writeln('Phan tu xuat hien nhieu nhat la:');
  for i:=1 to n do
  if b[1]=b[i] then  write(a[i]:4);
  end;
readln
end.

Bạn test thử. Mình không có môi trường Pascal để test. Bạn làm mình nhớ lại 3 năm mình học chuyên Pascal quá. Giờ không nhớ và không biết gì luôn, hihi.
Nếu bạn thấy đúng ý thì bạn tự điều chỉnh lại các biến, tham số,... cho đúng với yêu cầu đề bài của bạn nhé. Vì nó giống tới 96%. :)
 
tìm số lặp
viết chương trình nhập vào từ bàn phím N số tự nhiên (với 10<=N<=40).Xuất ra màn hình số có số lần xuất hiện nhiều nhất và số lần xuất hiện tương ứng.
lưu ý: trong trường hợp có nhiều kết quả đúng theo yêu cầu thì in ra kết quả cửa sổ có giá trị lớn nhất
GIÚP MÌNH VỚI CÁC THÀNH VIÊN!!!:(
Viết cụ thể ra code thì mình mình thua, lâu quá quên hết cú pháp rồi. Cơ mà ý tưởng giải sẽ như này:
- Tạo function Max(array) để tìm phần tử lớn nhất của một mảng.
- Khai báo mảng 2 chiều arr[1..2,1..40],i,j,socantim kiểu dữ liệu integer
- Nhập N số vào arr[1,1..N]
- Gán arr[2,1..N]=1
- socantim=-(10^10)
- For i= 1 to N-1
For j=i+1 to N
If arr[1,j]=arr[1,i] then
arr[2,i]=arr[2,i]+1
- For i=1 to N
if arr[2,i]=max(arr[2,1..N]) and arr[1,i]>socantim then socantim=arr[1,i]
- Khi đó số xuất hiện nhiều nhất là socantim với số lần xuất hiện là max(arr[2,1..N])
 
Học sinh lười biếng làm bài tập đây mà.
(Xin lỗi nếu tôi làm diễn đàn mất số lượng bài mới nhé. Nhưng dung dưỡng chính sách câu bài mới kiểu này là không được hay lắm)

Tôi chỉnh giải thuật cho bài #3:
Bạn tham khảo nhé: (nguồn: Google)
...
Bạn test thử. Mình không có môi trường Pascal để test. Bạn làm mình nhớ lại 3 năm mình học chuyên Pascal quá. Giờ không nhớ và không biết gì luôn, hihi.
Nếu bạn thấy đúng ý thì bạn tự điều chỉnh lại các biến, tham số,... cho đúng với yêu cầu đề bài của bạn nhé. Vì nó giống tới 96%. :)
Thuật toán của bài trên là dùng mọt vòng lặp để nhập số, và vòng lặp khác để duyệt số.
Theo nguyên tắc lập trình, người ta chỉ làm vậy khi có sẵn một hàm nhập số. Chỉ việc nối (link) vào, không cần viết lại code.
Nếu phải viết code từ a đến z thì thuật toán là vừa nhập vừa tính luôn.

Pseudo-Pascal (cốt để hiểu, không hẳn đúng ngữ pháp):

(* a là mảng chứa số nhập vào, d là mảng chứa số lần lặp lại của mỗi số
curEndA là số lượng phần tử có trị của a, curMax là số đếm lớn nhất *)
for i:= 1 to N do begin
nhập số x;
curEl := 1
while curEl <= curEndA do begin (* duyệt mảng đang có *)
if x = a(curEl) then begin
d(curEl) := d(curEl) + 1; (* tăng số đếm *)
break;
end;
curEl := curEl + 1;
end; (* while duyệt mảng *)
if curEl > curEndA then begin (* số mới, chưa có trong mảng *)
curEndA := curEl;
a(curEndA) := x;
d(curEndA) := 1;
if curEndA = 1 then curMax := 1;
end;
(* làm thống kê ở đây; bài này chỉ cần số lặp lại lớn nhất *)
if d(curEl) > d(curMax) then curMax := i2;
end; (* for *)
 
Web KT
Back
Top Bottom