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:

begin
     randomize;
     writeln(random(26));
     readln;
end.

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í.

101 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é ([email protected]) 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

  9. Viết chương trình trò chơi “thử vận may” theo mô tả như sau:
    Đầu tiên máy tính sinh một số ngẫu nhiên n để biểu diễn số lượt chơi
    Ở mỗi lượt chơi, máy tính sẽ sinh một số ngẫu nhiên. Trước khi thông báo số này, người chơi sẽ đoán đó là số chẵn (bằng cách nhập số 0) hay lẻ (bằng cách nhập số 1).
    Kết thúc n lượt chơi, máy tính sẽ thông báo số lần đoán đúng và tỷ lệ đoán đúng của người chơi và thông báo về “sự may mắn” của người chơi, nếu tỷ lệ đoán đúng là:
    + Từ 80% trở lên thì thông báo “rất may mắn”
    + Từ 65% đến dưới 80% thì thông báo “may mắn”
    + Từ 50% đến dưới 65% thì thông báo “bình thường”
    + Dưới 50% thì thông báo “không may mắn”.

    • mk xin thay mặt ad trả lời câu hỏi này
      vd
      program random;
      uses crt;
      var a:integer; {mk k khai báo n vì đó là số bạn có thể thay vào}
      begin
      a:=2;
      while a = 2 do
      begin
      randomize;
      a:=random(n);
      end;
      a:=n
      end;

      giải thích: cho tới khi a = 2 mà sai thì sẽ k thực hiện gán a nữa tức là a phải khác 2 mới kết thúc

    • Bạn có thể sử dụng random ra số từ 0->3
      bạn quy ước 0 là +,1 là -, 2 là *, 3 là /, sau đó bạn có thể dùng lệnh if hoặc switch case để thực hiện ý đồ của mình.
      Chúc bạn thành công

  10. Bây giờ mình muốn viết 1 chương trình mở khóa bằng các phép tính ngẫu nhiên với các số ngẫu nhiên (số nguyên á bạn) như sau: nếu nhập kết quả đúng thì mở khóa,sai thì khóa lun đén khi tính đún thì thui ,bạn ưi bạn viết giúp mình vs mình dùng Free Pascal loại mới nhất nha bạn..trong chương trình phãi có câu lệnh lưu mật khẩu nha bạn

    • Bạn muốn làm kiểu như captcha phải không bạn?
      Hiện bây giờ mình không còn code pascal nữa, nhưng mình sẽ gợi ý bạn cách làm như sau:

      Mình sẽ làm dạng A+B = ???
      vậy đầu tiên bạn dùng Hàm random sinh ra 2 biến A B, như vậy nhiệm vụ còn lại là bạn random phép tính + – hay nhân thôi.
      Bạn có thể random từ số 0 đến số 2 và coi 0 là cộng, 1 là trừ, 2 là nhân, sau đó xử lí if else , vòng lặp, v.v… để giải quyết bài này nhé.
      Chúc bạn thành công.

  11. Nhập số nguyên N
    Tạo dãy A gồm N số nguyên ngẫu nhiên trong khoang [0..100]
    Tính tổng các số trong dãy
    Tìm số lớn nhất ,nhỏ nhất của dãy số
    Dưc ra màn hình các giá trí tìm được

  12. bạn ơi mình muốn viết chương trình random bốc ra 5 số ngẫu nhiên từ một mảng có n chữ số có thể giống, có thể khác nhau, rồi lấy chữ số lớn nhất trừ số nhỏ nhất trong 5 số ngẫu nhiên đó liên tục sao cho kết quả thu được là nhỏ nhất. Bạn giúp mình với được không?

Trả lời

Email 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 *