Hàm random – sinh số ngẫu nhiên trong pascal

1. Hướng dẫn sinh số ngẫu nhiên trong pascal

Để sinh số ngẫu nhiên trong pascal đầu tiên bạn phải đặt câu lệnh ” randomize; ” ở đầu chương trình. câu lệnh này có chức năng sinh ra số khác với lần sinh trước đó. nếu không có nó bạn sẽ thường xuyên thấy nó giống với lần chạy trước đó.

sử dụng sử dụng random:

Random(N);  { kết quả sẽ trả về là 1 số nguyên trong đoạn từ [0..N-1] }.

Như vậy VD nếu bạn muốn sinh ra số ngẫu nhiên trong khoảng [0..25] chẳng hạn thì phải viết như sau:

và tùy theo bạn muốn ngẫu nhiên trong đoạn nào. thì bạn có thể dùng repeat until để chặn điều kiện hoặc có thể dùng phép cộng trừ 😀 các bạn cứ comment phía dưới. mình sẽ viết code cho.

2. Bài tập cơ bản minh họa về ứng dụng hàm random

BT cơ bản ứng dụng hàm random pascal

Đối với các bạn chuyên tin: thì Hàm random đôi lúc cũng giải quyết được các bài toán lớn. random kết hợp với xác xuất có thể giải quyết từ 70% -> 100% test. đôi lúc độ phức tạp thuật toán quá lớn bạn có thể áp dụng kỹ thuật này để xử lí.

57 thoughts on “Hàm random – sinh số ngẫu nhiên trong pascal

  1. Bạn ơi mình muốn random từ 1 đến 100 hay 1 đến n số nào đó thì sao bạn??
    bạn cho mình ví dụ cụ thể được không. thanks

    • bạn có thể viết
      begin
      randomize;
      writeln(random(10+1)+50+1);
      end.

      Random(10+1) sẽ cho bạn giá trị từ 0->10, bạn cộng 50 lên sẽ được 50->60
      Hoặc bạn cũng có thể dùng repeat until để cài nhé

      var z:longint;
      begin
      randomize;
      repeat
      z:=ranom(60+1);
      until (z>=50) and (z<=60); writeln(z); end.

    • Ví dụ các câu hỏi được đánh số từ 1->7 thì đơn giản là bạn gọi hàm random 5 lần thôi 😀 tuy nhiên là câu hỏi thì sẽ k trùng lại đúng ko? Nên bạn phải thêm mảng đánh dấu. Mình sẽ viết thử cho bạn
      Var i,x:longint:
      Dd:array[1..7] of boolean;
      Begin
      Fillchar(dd,sizeof(dd),false);
      For i:=1 to 5 do
      Begin
      Repeat
      X:=random(7)+1;
      Until dd[x]=false;
      Dd[x]:=true;
      Writeln(x);
      End;
      Readln;
      End.
      Với code này, các số sẽ dc chọn ko trùng nhau và chọn 5 lần. Các số được chọn sẽ ghi ra màn hình.
      Chúc bạn học tốt.

    • Var i,x:longint:
      Dd:array[0..99] of boolean;
      Begin
      Fillchar(dd,sizeof(dd),false);
      For i:=1 to 100 do
      Begin
      Repeat
      X:=random(100);
      Until dd[x]=false;
      Dd[x]:=true;
      Writeln(x);
      End;
      Readln;
      End.
      Dạng này ở trên mình có làm r á bạn :d

        • Chào bạn, fillchar thủ tục để bạn điền tất cả đối tượng trong mảng bằng 1 giá trị nhất định. sizeof là giới hạn của cái mảng, thông thường dùng fillchar thì phải dùng nó.

          Góp ý bạn 1 tí: sau này comment hỏi thì bạn vui lòng điền đúng địa chỉ email và có văn hóa một tí giúp mình nhé (dmddcm@gmail.com) cả các thông tin khác nữa. Nếu lần sau vẫn tiếp tục như thế mình có quyền không hỗ trợ.

          Thân mến

    • Như mình đã nói ở trên, random(a) với a là 1 biến sẽ cho miền giá trị từ 0 đến a-1.
      Như vậy, random(301) có giá trị từ 0 den 300.
      Giả sử phần đầu đạt min=0, và phần sau đạt max 300 thì a[i] là -300. Và phan dau max=300 va phan sau min=0. Như vậy a[i,j] nhận miền giá trị từ -300…300

    • Chào bạn, mảng 2 chiều, một chiều hay biến thì đều khai báo bình thường thôi. randomize có chức năng tạo số ngẫu nhiên khác với số ngẫu nhiên trước đó. bạn chỉ cần bỏ nó ở trước khi gọi hàm random là được. còn hàm random bạn gọi nó thì nó sẽ trả về giá trị, bạn muốn sinh giá trị ngẫu nhiên trên mảng 2 chiều thì duyệt 2 dòng for cho a[i,j]:=random(….. như vậy thôi bạn. nếu bạn không hiểu thì gửi đề bài mình xem giúp cho.

  2. ad giúp em bài này dc ko
    Tìm ra một dãy con gồm nhiều nhất các phần tử nằm liền kề nhau có giá trị tăng dần khi duyệt từ đầu đến cuối dãy ban đầu.

      • Tạo một dãy gồm n (3 < n < 20) số nguyên nhận các giá trị ngẫu nhiên từ 1 đến 99. Xuất dãy và xuất ra vị trí các số nguyên tố của dãy.
        Dữ liệu vào: Số nguyên n có giới hạn theo đề.
        Kết quả ra: Mảng a ngẫu nhiên và vị trí các số nguyên tố trong mảng.
        aad giúp vs ms nghĩ ra ý tưởng chứ chưa biết viết kiểu j

  3. ad ơi giúp vs ms nghỉ ra ý tưởng chưa biết viết sao Tạo một dãy gồm n (3 < n < 20) số nguyên nhận các giá trị ngẫu nhiên từ 1 đến 99. Xuất dãy và xuất ra vị trí các số nguyên tố của dãy.
    Dữ liệu vào: Số nguyên n có giới hạn theo đề.
    Kết quả ra: Mảng a ngẫu nhiên và vị trí các số nguyên tố trong mảng.

    • var n,i,s:longint;
      a:array[1..100] of longint;

      begin
      s:=0;
      randomize;
      readln(n);
      for i:=1 to n do
      a[i]:=random(1000)+1;
      for i:=1 to n do
      if a[i] mod 5 =0 then
      s:=s+1;
      writeln(s);
      end.

      đề của bạn chưa rõ ràng, “in ra màn hình tổng các số chia hết cho 5” là số lượng số? ở trên mình làm theo số lượng. nhưng câu b ghi là tổng. đề này chưa thật sự rõ ràng

        • dễ thôi

          // số chẳn
          var n,i,j,s:longint;
          a:array[1..100,1..100] of longint;
          begin
          s:=0;
          randomize;
          readln(m,n);
          for i:=1 to m do
          begin
          for j:=1 to n do
          begin
          repeat
          s:=random(100000);
          until s mod 2=0;
          write(s,’ ‘);
          end;
          writeln;
          end;
          end.

          // số chẳn
          var n,j,i,s:longint;
          a:array[1..100,1..100] of longint;
          begin
          s:=0;
          randomize;
          readln(m,n);
          for i:=1 to m do
          begin
          for j:=1 to n do
          begin
          repeat
          s:=random(100000);
          until s mod 2<>0;
          write(s,’ ‘);
          end;
          writeln;
          end;
          end.

    • chào bạn 😀
      Trong pascal không hỗ trợ random số thực nha bạn, nhưng nếu bạn giỏi thì có thể thừa sức viết được hàm random số thực bằng cách sinh 1 số nguyên thông thường, rồi chèn phẩy vô là thành số thực rồi 😀 Tuy nhiên bạn phải cố định số chữ số có nghĩa.
      Thân mến

  4. ad ơi giúp em với ạ
    viết chương trình phát sinh n phần tử số nguyên, n>=100 nhập từ bàn phím, thực hiện.
    a) in mảng
    b) Kiểm tra xem mảng có tăng dần hay ko, nếu ko thì sắp xếp tăng dần, in mảng vừa sắp xếp
    c) tạo mảng 1 chiều B có k phần tử chẵn có trong mảng A
    …mong ad giúp giùm ạ…

  5. ad ơi, giúp mình bài này liền được không ạ: tạo một dãy số nguyên bất kì từ hàm random gồm n số (n nhập vào từ bàn phím). tìm tất cả các số âm trong dãy trên và in kết quả ra màn hình. thanks

    • uses crt;
      var n,i:integer;
      a:array[1..100] of integer;
      begin clrscr;
      write(‘ Nhap so phan tu: ‘);readln(n);
      for i:=1 to n do a[i]:=(random(200)-50);
      write(‘ Day so nguyen ngau nhien: ‘);
      for i:=1 to n do write(a[i]:4);
      writeln;
      write(‘ Cac so am:’);
      for i:=1 to n do if a[i]<0 then write(a[i]:4);
      readln;
      end.

  6. mình có bài lập trình kiểu trả lời câu hỏi như kiểu ai là triệu phú ý,nhưng đơn giản chỉ cần chữ thôi chứ ko cần đồ họa.
    mình tạo 1 file câu hỏi rồi…nhưng ko biết cách lấy ngẫu nhiên câu hỏi ra và ngẫu nhiên sắp xếp đáp án
    ad giúp mình với ạ! thanks ad!!! <3

  7. làm cho mình bài này với
    Có 12 hòn bi giống hệt nhau về kích thước, hình dáng và khối lượng. Tuy nhiên trong chúng lại có đúng một hòn bi kém chất lượng: hoặc nhẹ hơn hoặc nặng hơn bình thường. Dùng một cân bàn hai bên, bạn hãy dùng 3 lần cân để tìm ra được viên bi đó. Cần chỉ rõ rằng viên bi đó là nặng hơn hay nhẹ hơn.
    Viết chương trình mô phỏng việc tổ chức cân các hòn bi trên. Dữ liệu về hòn bi kém chất lượng do người sử dụng chương trình nắm giữ. Yêu cầu trình bày chương trình đẹp và mỹ thuật.

  8. giúp mình với
    tạo một file văn bản có tên songuyen.txt trên ổ đĩa c
    dòng đầu ghi một số nguyên dương N(N<= 100) vào từ bàn phím
    dòng 2 trở đi ghi N số nguyên dương (có phạm vi 0 đến 49) hai số cách nhau 2 dấu cách
    (sử dụng hàm random(n) nhé)
    thank các bạn nhìu

Trả lời

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *