Thông tin tài liệu:
SINH DỮ LIỆU VÀO VÀ RAHầu hết các bài toán tin đều đòi hỏi dữ liệu vào và ra. Người ta thường dùng ba phương thức sinh và nạp dữ liệu sau đây: 1. Nạp dữ liệu trực tiếp từ bàn phím. Phương thức này được dùng khi dữ liệu không nhiều. 2. Sinh dữ liệu nhờ hàm random (xem chương 1). Phương thức này nhanh chóng và tiện lợi, nếu khéo tổ chức có thể sinh ngẫu nhiên được các dữ liệu đáp ứng được một số điều kiện định trước. ...
Nội dung trích xuất từ tài liệu:
Sáng tạo trong thuật toán và lập trình với ngôn ngữ Pascal và C# Tập 1 - Chương 2 26Sáng tạo trong Thuật toán và Lập trình Tập I CHƢƠNG 2 SINH DỮ LIỆU VÀO VÀ RA Hầu hết các bài toán tin đều đòi hỏi dữ liệu vào và ra. Người ta thường dùng baphương thức sinh và nạp dữ liệu sau đây: 1. Nạp dữ liệu trực tiếp từ bàn phím. Phương thức này được dùng khi dữ liệukhông nhiều. 2. Sinh dữ liệu nhờ hàm random (xem chương 1). Phương thức này nhanh chóng vàtiện lợi, nếu khéo tổ chức có thể sinh ngẫu nhiên được các dữ liệu đáp ứng được một sốđiều kiện định trước. 3. Đọc dữ liệu từ một tệp, thường là tệp văn bản . Phương thức này khá tiện lợi khiphải chuẩn bị trước những tệp dữ liệu phức tạp. Kết quả thực hiện chương trình cũng thường được thông báo trực tiếp trên mà nhình hoặc ghi vào một tệp văn bản.Bài 2.1. Sinh ngẫu nhiên theo khoảng Sinh ngẫu nhiên cho mảng nguyên a n phần tử trong khoảng -M..M; M > 0.Đặc tả Ta viết thủ tục tổng quát Gen(n,d,c) - sinh ngẫu nhiên n số nguyên trongkhoảng từ d đến c (d < c) (xem bài giải 1.4). Để giải bài 2.1 ta chỉ cần gọiGen(n,-M,M). Để ý rằng random(c–d+1) biến thiên trong khoảng từ 0 đến c-d do đód+random(c–d+1) sẽ biến thiên trong khoảng từ d đến d+c-d = c. (*----------------------------------------- sinh ngau nhien n so nguyen trong khoang d den c va ghi vao mang a ----------------------------------------- *) Procedure Gen(n,d,c: integer); var i,len: integer; begin randomize; len := c-d+1; for i:=1 to n do a[i]:= d+random(len); end; 27Sáng tạo trong Thuật toán và Lập trình Tập I(* Pascal *) (*------------------------------------------ Sinh ngau nhien cho mang nguyen a n phan tu trong khoang -M..M; M > 0. -------------------------------------------*) program RGen; uses crt; const MN = 1000; var a: array[1..MN] of integer; (*-------------------------------------------- sinh ngau nhien n so nguyen trong khoang d den c va ghi vao mang a ------------------------------------------ *) Procedure Gen(n,d,c: integer); tự viết procedure Xem(n: integer); Hiển thị mảng a, tự viết procedure Test; var n: integer; begin n := 20; { sinh ngau nhien 20 so trong khoang -8..8 } Gen(n,-8,8); Xem(n); readln; end; BEGIN Test; END.// C# using System; using System.Collections.Generic; using System.Text; namespace SangTao1 { /*-------------------------------------- * Sinh ngau nhien n so * trong khoang d..c * -----------------------------------*/ class RGen { static void Main(string[] args) { Print(Gen(20, -8, 8)); Console.ReadLine(); } static public int[] Gen(int n, int d, int c) { Random r = new Random(); int len = c-d+1; int [] a = new int[n]; for (int i = 0; i < n; ++i) a[i] = d + r.Next(len); 28Sáng tạo trong Thuật toán và Lập trình Tập I return a; } static public void Print(int [] a) { Console.WriteLine(); foreach (int x in a) Console.Write(x + ); Console.WriteLine(); } } // RGen } // SangTao1Bài 2.2. Sinh ngẫu nhiên tăng Sinh ngẫu nhiên n phần tử được sắp không giảm cho mảng nguyên a.Thuật toán 1. Sinh ngẫu nhiên phần tử đầu tiên: a[1] := random(n); 2. Từ phần tử thứ hai trở đi, trị được sinh bằng trị của phần tử sát trước nó cộngthêm một đại lượng ngẫu nhiên: (i = 2..n): a[i] := a[i - 1] + random(n), do đó a[i] >= a[i - 1].(* Pascal *) (*------------------------------------------- Sinh ngau nhien cho mang nguyen a n phan tu sap khong giam -------------------------------------------*) program IncGen; uses crt; const MN = 1000; var a: array [1..MN] of integer; (*---------------------------------------- ...