با سلام به دوستان مخصوصآ ممد خان عزیز که هوای ما رو خیلی داره
من این کد رو برای تولید اعداد راندوم بین 1 تا 8 که می خواستم پیدا و
دستکاری کردم ولی مشکی که هست اینه که نمی خواهم توش عدد
تکراری باشه
آیا کسی روشی سراغ داره ؟
کد:
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
srand((unsigned)time(0));
int random_integer;
int lowest=1, highest=8;
int range=(highest-lowest)+1;
for(int index=0; index<8; index++)
{
random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));
cout << random_integer << endl;
}
}
با تشکر
سلام
کد زیر چطوره !!؟؟
کد:
[align=right]#include <iostream>
#include <ctime>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
vector<int> nums(8);
int main()
{
srand((unsigned)time(0));
int random_integer;
int lowest=1, highest=8;
int range=(highest-lowest)+1;
int cnt=0;
while(cnt<8)
{
random_integer = lowest+(int)(range*rand()/(RAND_MAX + 1.0));
if (find( nums.begin(), nums.end(),random_integer) == nums.end())
{
cnt++;
nums.push_back(random_integer);
cout << random_integer << endl;
}
}
}[/align]
ممد جان دستت درد نکنه
یه مقدار ممکنه درمورد برنامه
و هدر های برنامه توضیح بدی !
سلام
برنامه پیچیده ای نیست !
(vector<int> nums(8 شی با نام nums از کلاس vector میسازه با ظرفیت 8 تا ! توضیح بدم که vector دقیقا مثل آرایه میمونه با این تفاوت که خیلی کارایی بیشتری نسبت به آرایه داره . مثلا میتونی خیلی راحت و سریع مرتبش کنی یا اندازه اش رو در زمان اجرا تغییر بدی و یا توش جستجو کنی یا خیلی چیزهای دیگه ...!
(find( nums.begin(), nums.end(),random_integer) == nums.end این تابع که از الگوریتم های STL هست ، میاد و سر و ته vector رو میگیره بعلاوه چیزی که باید جستجو کنه و اگر چیزی رو پیدا نکرد اندازه آخر vector رو بر میگردونه .
من اومدم و یه vector تعریف کردم . میام یه عدد تصادفی که تولید شد رو با خط بالا توی vector چک می کنم . اگه نبود با تابع push_back موجود در شی vector به انتهای vector اضافه اش می کنم و اگر قبلا وجود داشت حلقه رو آنقدر تکرار می کنم تا یک عضو پیدا بشه که توی vector نباشه یا ظرفیت 8 تایی من تکمیل بشه . تکمیل ظرفیت vector هم توی شرط خود حلقه چک می کنم با متغیر cnt . پس زمانی که 8 تا عدد تصادفی ایجاد شد حلقه خاتمه پیدا می کنه و برنامه تموم میشه !
اون دوتا هدر فایل ها هم هدر فایل های کتابخونه STL یا Standard Template Library هستن که کتابخونه استاندارد زبان ++C هست . چیزهایی مثل vector یا همون توابع find و sort و ..... توش تعریف شدن .
اولین بار زبان ++C در سال 1996 در انجمن ANSI استاندارد سازی شد و بعد از اون سال هم وظفیه استاندارد سازیش به عهده این انجمن هست . STL اولین کتابخونه استاندارد زبان و محصول ارائه شده از این انجمن هست و توسط کامپایلر ها باید ساپورت بشه !
توی کتاب ها بیشتر در رابطه توابع و کلاس های موجود توی این کتابخونه نوشته شده . کلاسها و الگوریتم های این کتابخونه خیلی گسترده و مفید هستش . همچنین در طراحی این کتابخونه از خاصیت Template کردن توابع و کلاس ها که یکی از امکاناته زبانه ، استفاده شده و برای همین Standard Template Library نام داره .
ممد جان ایول دمت گرم
خیلی چیز یاد گرفتم
ممد جان چند تا سوال برام پیش اومده که خوشحال می شم جواب بدی
1.این هدر ctime دقیقآ اینجا چه کار می کنه
2.
کد:
random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));
یه مقدار ممکنه توضیح بدی
3.این srand چیکار می کنه
4.
کد:
srand((unsigned)time(0));
چرا در این خط از نوع unsigned استفاده شده
متشکرم
srand در واقع همان Randomize است که در QB برای درست کردن seed برای تولید اعداد شبهه تصادفی استفاده میشود و توسط rand به کار می رود.
time یک عدد بر می گرداند برابر با تعداد ثانیه های گذشته از آغاز روز
برای استفاده درست از آن باید به unsigned قالب ریزی شود و این کار ها همه برای این است که در اجرا های مختلف برنامه تصادفی بودن اعداد تضمین شود.
در غیر این صورت rand اعداد یکسانی در اجرا های مختلف تولید میکند.