Khác

Mảng Mac C ++ và số ngẫu nhiên

iBookG4user

Áp phích gốc
Ngày 27 tháng 6 năm 2006
Seattle, WA
  • Ngày 20 tháng 9 năm 2009
Họ đã đưa những người dạy kèm về C ++ vào những thời điểm bất tiện nhất ở trường đại học của tôi ... Tuy nhiên, người hướng dẫn đã đăng những chỉ dẫn sau:

'Viết một hàm sẽ điền vào một mảng với 25 số ngẫu nhiên từ 1 đến 10. Sau đó viết một hàm sẽ in ra mảng. Viết một số mã trong main để kiểm tra các chức năng của bạn. Đôi khi mã kiểm tra này được gọi là trình điều khiển *

Không sử dụng các biến toàn cục ở đây. Truyền mảng cho hàm thông qua danh sách tham số '

Mã hiện tại của tôi không dẫn đến bất kỳ lỗi nào trong trình gỡ lỗi, nhưng nó không xuất ra mảng. Và tôi không biết ý của anh ta bằng cách viết trình điều khiển, tôi phải kiểm tra những gì? Tất cả các bạn đã chứng tỏ là cực kỳ hữu ích trong quá khứ và tôi chắc chắn lần này bạn sẽ giúp tôi đi đúng hướng

Mã: #include #include using namespace std; double print(double array); double produce(); int main() { double produce(); double print(); } double produce() { srand(time(0)); double array[25]; for(int i=0; i<25; i++) { array[i] = (rand()%10)+1; cout << array[i] << endl; } return *array; } double print (int array) { cout << array << endl; }

lee1210

Ngày 10 tháng 1 năm 2005


Dallas, TX
  • Ngày 20 tháng 9 năm 2009
Một vài điều: Mảng của bạn phải là kiểu int [], không phải double []. Bạn cần chấp nhận một mảng int để sản xuất và in. Bạn cần khai báo một int [] trong main, chuyển nó vào để sản xuất, điền vào đó, sau đó chuyển nó để in. Các<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

Ngoài ra, và tôi chắc chắn đó là một sai lầm trung thực, tôi chắc chắn rằng giáo sư của bạn có ý giả ngẫu nhiên.

Ngoài ra, trong main, bạn đang khai báo double () s mới, không gọi sản xuất và in. Lấy double đi ở đó và chuyển vào một đối số như đã thảo luận ở trên, và thay đổi kiểu trả về của cả hai thành void.

-Đọc

gnasher729

Cấm
Ngày 25 tháng 11 năm 2005
  • Ngày 20 tháng 9 năm 2009
Bạn sẽ viết một nguyên mẫu hàm cho hàm 'production' như thế nào?
Và bạn sẽ viết lời gọi hàm 'production' như thế nào?

Và bên trong hàm 'chính' của bạn, bạn đã viết hàm nào trong hai hàm, một nguyên mẫu hàm hay một lệnh gọi hàm?

iBookG4user

Áp phích gốc
Ngày 27 tháng 6 năm 2006
Seattle, WA
  • Ngày 20 tháng 9 năm 2009
lee1210 đã nói: Một vài điều: Mảng của bạn nên có kiểu int [], không phải double []. Bạn cần chấp nhận một mảng int để sản xuất và in. Bạn cần khai báo một int [] trong main, chuyển nó vào để sản xuất, điền vào đó, sau đó chuyển nó để in. Các<< operator of ofstream does not deal with arrays as you'd hope, so you'll need to loop to display in print.

Ngoài ra, và tôi chắc chắn đó là một sai lầm trung thực, tôi chắc chắn rằng giáo sư của bạn có ý giả ngẫu nhiên.

Ngoài ra, trong main, bạn đang khai báo double () s mới, không gọi sản xuất và in. Lấy double đi ở đó và chuyển vào một đối số như đã thảo luận ở trên, và thay đổi kiểu trả về của cả hai thành void.

-Đọc

Được rồi, tôi đã thực hiện các thay đổi mà bạn đề xuất và mã trông hợp lý hơn. Mặc dù bây giờ tôi đang gặp ba lỗi trong vòng lặp for.

Mã: #include #include using namespace std; double print(int array); double produce(int array); int main() { int array[25]; produce(*array); } double produce(int array) { srand(time(0)); for(int i=0; i<25; i++) { array[i] = (rand()%10)+1; cout << array[i] << endl; } print(array); } double print (int array) { for(int i=0; i<25; i++) { cout << array[i] << endl; } return array; }

Tập tin đính kèm

  • Ảnh chụp màn hình 2009-09-20 lúc 5.42.31 PM.png Ảnh chụp màn hình 2009-09-20 lúc 5.42.31 PM.png'file-meta '> 178,1 KB · Lượt xem: 1,941

lee1210

Ngày 10 tháng 1 năm 2005
Dallas, TX
  • Ngày 20 tháng 9 năm 2009
Thay đổi kiểu đối số của sản xuất thành int [] hoặc int *. Ngay bây giờ nó chỉ là int, vì vậy bạn không thể sử dụng [], v.v. Tương tự với print. Ngoài ra, bạn không cần phải trả lại bất cứ thứ gì từ sản xuất hoặc in ấn. Thay đổi kiểu trả về của họ thành void.

Tôi nghĩ mục đích là để bạn gọi print trở lại trong main, điều này sẽ ổn thôi.

Ngoài ra, khi bạn truyền mảng để sản xuất, chỉ cần sử dụng mảng chứ không phải mảng *.

-Đọc

iBookG4user

Áp phích gốc
Ngày 27 tháng 6 năm 2006
Seattle, WA
  • Ngày 20 tháng 9 năm 2009
lee1210 đã nói: Thay đổi kiểu đối số của sản xuất thành int [] hoặc int *. Ngay bây giờ nó chỉ là int, vì vậy bạn không thể sử dụng [], v.v. Tương tự với print. Ngoài ra, bạn không cần phải trả lại bất cứ thứ gì từ sản xuất hoặc in ấn. Thay đổi kiểu trả về của họ thành void.

Tôi nghĩ mục đích là để bạn gọi print trở lại trong main, điều này sẽ ổn thôi.

Ngoài ra, khi bạn truyền mảng để sản xuất, chỉ cần sử dụng mảng chứ không phải mảng *.

-Đọc

Nó đã làm việc
Bây giờ, bạn có biết ý của anh ấy khi viết mã để kiểm tra các chức năng không? nó có ý nghĩa gì với anh ấy? Và cảm ơn rất nhiều vì sự giúp đỡ của bạn cho đến nay!

Mã: #include #include using namespace std; double print(int *array); double produce(int *array); int main() { int array[25]; produce(array); print(array); } double produce(int *array) { srand(time(0)); for(int i=0; i<25; i++) { array[i] = (rand()%10)+1; cout << array[i] << endl; } return *array; } double print (int *array) { for(int i=0; i<25; i++) { cout << array[i] << endl; } return *array; }

chown33

Người điều hành
Thành viên đội ngũ nhân viên
Ngày 9 tháng 8 năm 2009
Mặt phẳng Abysmal
  • Ngày 20 tháng 9 năm 2009
iBookG4user đã nói: Bây giờ, bạn có biết ý của anh ấy khi viết mã để kiểm tra các chức năng không? nó có ý nghĩa gì với anh ấy?

Đặc tả cho biết các số trong mảng phải nằm trong khoảng từ 1 đến 10. Bạn có thể viết một bài kiểm tra xác nhận điều đó.

Nó cũng cho biết các con số phải là ngẫu nhiên. Mặc dù tính ngẫu nhiên có thể khó kiểm tra hơn tưởng tượng, nhưng tính không ngẫu nhiên đơn giản có thể dễ dàng kiểm tra. Đơn giản nhất là xác nhận rằng tất cả các số không có cùng giá trị. Các thử nghiệm phức tạp hơn về tính ngẫu nhiên sử dụng các phân tích thống kê.

Một thử nghiệm khác mà bạn có thể viết là xác nhận hàm sản xuất () trả về các giá trị khác nhau mỗi khi nó được gọi. Đây là một dạng phân tích thống kê đơn giản, tức là đảm bảo rằng các lệnh gọi liên tiếp có kết quả độc lập.

Bạn cũng nên xem xét việc khởi tạo mảng với các giá trị không hợp lệ đã biết, chẳng hạn như -1 hoặc 0, trước khi gọi sản xuất (). Nếu không, một mảng cục bộ chưa được khởi tạo có thể đã chứa các giá trị không thể đoán trước, mà một bài kiểm tra có thể diễn giải là ngẫu nhiên ngay cả khi production () không làm gì cả.

Như một đặc điểm kỹ thuật, tuyên bố về công việc là hơi mơ hồ. Đối với một điều, nó không chỉ định những bài kiểm tra nó phải vượt qua. Tin tôi đi, nếu bạn phó mặc cho hầu hết các lập trình viên lựa chọn các bài kiểm tra trình độ thì đó là một sai lầm lớn. Mã chỉ có thể hoạt động trong một trường hợp, đó là trường hợp mà lập trình viên đã sử dụng để phát triển mã. Nếu điều đó có vẻ điên rồ, tôi có thể đảm bảo với bạn rằng nó đã xảy ra.

iBookG4user

Áp phích gốc
Ngày 27 tháng 6 năm 2006
Seattle, WA
  • Ngày 20 tháng 9 năm 2009
Đó là đủ đơn giản, cảm ơn!
Điều này có tác dụng:
Mã: if (print(array) 10) // driver { cout << 'Numbers are not between 1 and 10!' << endl; } NS

Sander

đến
Ngày 24 tháng 4 năm 2008
  • Ngày 21 tháng 9 năm 2009
iBookG4user cho biết: Điều đó đủ đơn giản, cảm ơn!
Điều này có tác dụng:

Hãy thử đặt một số 'không hợp lệ' vào mảng của bạn (giả sử, 11) và xem liệu hàm này có phát hiện ra điều đó không.

iBookG4user

Áp phích gốc
Ngày 27 tháng 6 năm 2006
Seattle, WA
  • Ngày 21 tháng 9 năm 2009
Sander cho biết: Hãy thử đặt một số 'không hợp lệ' vào mảng của bạn (giả sử, 11) và xem liệu hàm này có phát hiện ra điều đó không.

Tôi tạm thời đặt mảng để cho phép các số lớn hơn 10 và nó đã phát hiện ra nó, cảm ơn NS

Sander

đến
Ngày 24 tháng 4 năm 2008
  • Ngày 22 tháng 9 năm 2009
iBookG4user cho biết: Tôi tạm thời đặt mảng để cho phép các số lớn hơn 10 và nó đã phát hiện ra, cảm ơn

Ngay cả khi nó không phải là phần tử đầu tiên trong mảng ..?

Lý do tôi hỏi là vì hàm print () của bạn (ít nhất là phiên bản cuối cùng được hiển thị trong luồng này) chỉ trả về phần tử đầu tiên của mảng (được chuyển đổi thành một đôi).